Newsgroups: alt.sources
Path: qiclab!psgrain!charnel!rat!usc!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!darwin.sura.net!Sirius.dfn.de!dct.zrz.tu-berlin.de!news.netmbx.de!Germany.EU.net!isaak.isa.de!omega!av
From: av@omega.ssw.de (Andreas Vogel)
Subject: u386mon for SVR4
Message-ID: <1992Oct2.181204.3952@omega.ssw.de>
Date: Fri, 2 Oct 1992 18:12:04 GMT
Organization: Omega Softlab
Lines: 3045

Submitted-by: av@ssw.de
Archive-name: av386mon/part02

#!/bin/sh
# this is av386mon.shar.02 (part 2 of av386mon)
# do not concatenate these parts, unpack them in order with /bin/sh
# file Make.isc2.gcc continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 2; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
	echo 'x - still skipping Make.isc2.gcc'
else
echo 'x - continuing file Make.isc2.gcc'
sed 's/^X//' << 'SHAR_EOF' >> 'Make.isc2.gcc' &&
X
u386mon: $(U386MON_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(U386MON_OBJ) $(LIB)
X
/unix.nlsym: nlsym /unix
X	$(BINDIR)/nlsym
X	chmod 644 /unix.nlsym
X
#not delivered
src.fls: $(SRC) Makefile
X	ls $(SRC) > src.fls
lint_args: src.fls
X	echo ' ' > lint_args.h
X	csh zgcc src.fls lint_args.h $(CFLAGS)
X
clean:
X	rm -f $(U386MON_OBJ) $(NLSYM_OBJ) \
X		core u386mon.lint Makefile.bak src.fls mkdep.* cscope.out tags a.out
X
clobber: clean
X	rm -f nlsym u386mon
X
lint:
X	lint -ux *.c > u386mon.lint
X
#for shar 3.27 or later
shar:
X	shar -a -n u386mon.$(VERSION) -l 55 -o u386m-$(VERSION) $(SHARFLS)
X
# MAKE DEPEND: regenerate .c:.h, .ol:.c, .ol:.asm dependencies automatically
#
depend:
X		rm -f mkdep.rule.tmp
X		if test '$(SRC)' ;\
X		then (grep '^#include' $(SRC) \
X		| sed	-e 's?:[^<]*<\([^>]*\)>.*?: /usr/include/\1?'\
X			-e 's?:[^"]*"\([^"]*\)".*?: \1?'\
X			-e 's?\(.*\)\.c?\1.o?'\
X		 >> mkdep.rule.tmp) ;\
X		fi
X
X		echo 1 >mkdep.ex.tmp
X		echo '/^# DO NOT DELETE THIS LINE' >>mkdep.ex.tmp
X		echo '.+1,$$d' >>mkdep.ex.tmp
X		echo 'r mkdep.rule.tmp' >> mkdep.ex.tmp
X		echo 'w' >> mkdep.ex.tmp
X		cp Makefile.sco Makefile.new
X		ex Makefile.new < mkdep.ex.tmp
X		rm mkdep.ex.tmp mkdep.rule.tmp
X		echo '#	DEPENDENCIES MUST END AT END OF	FILE' >>Makefile.new
X		echo '#	IF YOU PUT STUFF HERE IT WILL GO AWAY'>>Makefile.new
X		echo '#	see make depend	above'>>Makefile.new
X		mv Makefile.sco Makefile.bak
X		mv Makefile.new Makefile.sco
X
# DO NOT DELETE THIS LINE
u386mon.o: config.h
u386mon.o: /usr/include/curses.h
u386mon.o: libpanel.h
u386mon.o: /usr/include/signal.h
u386mon.o: /usr/include/string.h
u386mon.o: /usr/include/fcntl.h
u386mon.o: /usr/include/nlist.h
u386mon.o: /usr/include/errno.h
u386mon.o: /usr/include/time.h
u386mon.o: /usr/include/sys/types.h
u386mon.o: /usr/include/sys/lock.h
u386mon.o: /usr/include/sys/utsname.h
u386mon.o: /usr/include/sys/stat.h
u386mon.o: /usr/include/sys/param.h
u386mon.o: /usr/include/sys/tuneable.h
u386mon.o: /usr/include/sys/sysinfo.h
u386mon.o: /usr/include/sys/sysmacros.h
u386mon.o: /usr/include/sys/immu.h
u386mon.o: /usr/include/sys/region.h
u386mon.o: /usr/include/sys/proc.h
u386mon.o: /usr/include/sys/var.h
u386mon.o: /usr/include/sys/swap.h
u386mon.o: /usr/include/sys/trap.h
u386mon.o: nlsym.h
u386mon.o: libkmem.h
u386mon.o: libmem.h
u386mon.o: libswap.h
u386mon.o: libnlsym.h
u386mon.o: u386mon.h
bootinfo.o: config.h
bootinfo.o: /usr/include/curses.h
bootinfo.o: /usr/include/sys/types.h
bootinfo.o: /usr/include/sys/bootinfo.h
bootinfo.o: u386mon.h
detail.o: config.h
detail.o: /usr/include/curses.h
detail.o: /usr/include/signal.h
detail.o: /usr/include/string.h
detail.o: /usr/include/fcntl.h
detail.o: /usr/include/nlist.h
detail.o: /usr/include/errno.h
detail.o: /usr/include/time.h
detail.o: /usr/include/pwd.h
detail.o: /usr/include/sys/types.h
detail.o: /usr/include/utmp.h
detail.o: /usr/include/sys/utsname.h
detail.o: /usr/include/sys/stat.h
detail.o: /usr/include/sys/param.h
detail.o: /usr/include/sys/tuneable.h
detail.o: /usr/include/sys/sysinfo.h
detail.o: /usr/include/sys/sysmacros.h
detail.o: /usr/include/sys/immu.h
detail.o: /usr/include/sys/region.h
detail.o: /usr/include/sys/proc.h
detail.o: /usr/include/sys/var.h
detail.o: nlsym.h
detail.o: libkmem.h
detail.o: libnlsym.h
detail.o: u386mon.h
det_proc.o: config.h
det_proc.o: /usr/include/curses.h
det_proc.o: /usr/include/signal.h
det_proc.o: /usr/include/string.h
det_proc.o: /usr/include/fcntl.h
det_proc.o: /usr/include/nlist.h
det_proc.o: /usr/include/errno.h
det_proc.o: /usr/include/time.h
det_proc.o: /usr/include/pwd.h
det_proc.o: /usr/include/sys/types.h
det_proc.o: /usr/include/utmp.h
det_proc.o: /usr/include/sys/stat.h
det_proc.o: /usr/include/sys/param.h
det_proc.o: /usr/include/sys/tuneable.h
det_proc.o: /usr/include/sys/sysinfo.h
det_proc.o: /usr/include/sys/sysmacros.h
det_proc.o: /usr/include/sys/immu.h
det_proc.o: /usr/include/sys/region.h
det_proc.o: /usr/include/sys/proc.h
det_proc.o: /usr/include/sys/fs/s5dir.h
det_proc.o: /usr/include/sys/user.h
det_proc.o: /usr/include/sys/var.h
det_proc.o: nlsym.h
det_proc.o: libkmem.h
det_proc.o: libmem.h
det_proc.o: libswap.h
det_proc.o: libnlsym.h
det_proc.o: u386mon.h
det_sio.o: config.h
det_sio.o: /usr/include/curses.h
det_sio.o: /usr/include/string.h
det_sio.o: /usr/include/nlist.h
det_sio.o: /usr/include/sys/types.h
det_sio.o: /usr/include/sys/stat.h
det_sio.o: /usr/include/sys/ascii.h
det_sio.o: /usr/include/sys/param.h
det_sio.o: /usr/include/sys/tty.h
det_sio.o: nlsym.h
det_sio.o: libkmem.h
det_sio.o: libmem.h
det_sio.o: libswap.h
det_sio.o: libnlsym.h
det_sio.o: u386mon.h
disputil.o: config.h
disputil.o: /usr/include/curses.h
disputil.o: /usr/include/sys/types.h
disputil.o: u386mon.h
kludge.o: /usr/include/curses.h
libkmem.o: /usr/include/sys/types.h
libkmem.o: /usr/include/fcntl.h
libkmem.o: libkmem.h
libmem.o: /usr/include/sys/types.h
libmem.o: /usr/include/fcntl.h
libmem.o: libmem.h
libpanel.o: config.h
libpanel.o: /usr/include/curses.h
libpanel.o: u386mon.h
libswap.o: /usr/include/sys/types.h
libswap.o: /usr/include/fcntl.h
libswap.o: libswap.h
libnlsym.o: config.h
libnlsym.o: /usr/include/stdio.h
libnlsym.o: /usr/include/sys/types.h
libnlsym.o: /usr/include/sys/stat.h
libnlsym.o: /usr/include/fcntl.h
libnlsym.o: /usr/include/nlist.h
libnlsym.o: nlsym.h
libnlsym.o: libnlsym.h
nlsym.o: config.h
nlsym.o: /usr/include/stdio.h
nlsym.o: /usr/include/sys/types.h
nlsym.o: /usr/include/sys/stat.h
nlsym.o: /usr/include/fcntl.h
nlsym.o: /usr/include/nlist.h
nlsym.o: nlsym.h
proc.o: config.h
proc.o: /usr/include/curses.h
proc.o: /usr/include/sys/types.h
proc.o: /usr/include/sys/param.h
proc.o: /usr/include/sys/immu.h
proc.o: /usr/include/sys/region.h
proc.o: /usr/include/sys/proc.h
proc.o: /usr/include/sys/var.h
proc.o: /usr/include/nlist.h
proc.o: nlsym.h
proc.o: libkmem.h
proc.o: libnlsym.h
proc.o: u386mon.h
tune.o: config.h
tune.o: /usr/include/curses.h
tune.o: /usr/include/sys/types.h
tune.o: /usr/include/sys/tuneable.h
tune.o: u386mon.h
var.o: config.h
var.o: /usr/include/curses.h
var.o: /usr/include/sys/types.h
var.o: /usr/include/sys/var.h
var.o: u386mon.h
#	DEPENDENCIES MUST END AT END OF	FILE
#	IF YOU PUT STUFF HERE IT WILL GO AWAY
#	see make depend	above
SHAR_EOF
echo 'File Make.isc2.gcc is complete' &&
chmod 0644 Make.isc2.gcc ||
echo 'restore of Make.isc2.gcc failed'
Wc_c="`wc -c < 'Make.isc2.gcc'`"
test 10389 -eq "$Wc_c" ||
	echo 'Make.isc2.gcc: original size 10389, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= Make.s2 ==============
if test -f 'Make.s2' -a X"$1" != X"-c"; then
	echo 'x - skipping Make.s2 (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting Make.s2 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'Make.s2' &&
#+-------------------------------------------------------------------
#  Makefile for s2mon (u386mon) for Tandem Integrity S2 NonStop-UX
#  ...!{gatech,emory}!n4hgf!wht
#  The Tandem compiler gives good diagnostic!!!!! also, auto defines
#  'mips' pre-processor symbol.
#--------------------------------------------------------------------
#+:EDITS:*/
#:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point
#:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2
#:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates
#:08-02-1990-15:35-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations
#:08-01-1990-21:39-wht@n4hgf-add Dell make file
#:08-01-1990-12:26-wht@n4hgf-2.11-try to support ISC 1.x.x
#:07-28-1990-18:07-wht@n4hgf-2.10 release
#:07-28-1990-14:51-wht@n4hgf-creation
X
#------------> CFLAGS 
CFLAGS = -c -O -DSVR31
X
#------------> LIB
LIB = -lcurses -lmalloc -lmld
X
#------------> KMEMGRP
KMEMGRP = sys
X
#------------> BINDIR
BINDIR = /usr/local/bin
X
LDFLAGS = -s
X
VERSION = 2.40
X
#handle Sys V make "feature" of using SHELL
SHELL = /bin/sh
X
#FCRC = fcrc -u $*.c ;
.c.o:;	$(FCRC) $(CC) $(CFLAGS) $*.c 
X
SRC = \
X	u386mon.c\
X	detail.c\
X	det_proc.c\
X	disputil.c\
X	kludge.c\
X	libkmem.c\
X	libmem.c\
X	libpanel.c\
X	libswap.c\
X	libnlsym.c\
X	nlsym.c\
X	proc.c\
X	tune.c\
X	var.c
X
HDR = \
X	config.h\
X	libkmem.h\
X	libmem.h\
X	libpanel.h\
X	libswap.h\
X	libnlsym.h\
X	lint_args.h\
X	nlsym.h\
X	u386mon.h
X
NLSYM_OBJ =\
X	nlsym.o
X
U386MON_OBJ =\
X	u386mon.o\
X	detail.o\
X	det_proc.o\
X	proc.o\
X	tune.o\
X	var.o\
X	kludge.o\
X	disputil.o\
X	libkmem.o\
X	libmem.o\
X	libswap.o\
X	libnlsym.o\
X	libpanel.o
X
SHARFLS = \
X	README\
X	CHANGES\
X	Make.*\
X	EXPLAIN\
X	$(SRC)\
X	$(HDR)\
X	renice/Makefile\
X	renice/renice.c\
X	panel/README\
X	panel/panel.3\
X	panel/ptest.c\
X	panel/Makefile
X
all: nlsym s2mon
X
#must run as root
install: all
X	-mv $(BINDIR)/nlsym $(BINDIR)/nlsym.old
X	cp nlsym $(BINDIR)
X	chown bin $(BINDIR)/nlsym
X	chgrp bin $(BINDIR)/nlsym
X	chmod 711 $(BINDIR)/nlsym
X	-mv $(BINDIR)/s2mon $(BINDIR)/s2mon.old
X	cp s2mon $(BINDIR)
X	chown bin $(BINDIR)/s2mon
X	chgrp $(KMEMGRP) $(BINDIR)/s2mon
X	chmod 2711 $(BINDIR)/s2mon
X	chmod g+r /dev/swap
X	$(BINDIR)/nlsym
X	@echo ' ';echo 'csh users rehash before executing'
X
nlsym: $(NLSYM_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(NLSYM_OBJ) $(LIB)
X
s2mon: $(U386MON_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(U386MON_OBJ) $(LIB)
X
/unix.nlsym: nlsym /unix
X	$(BINDIR)/nlsym
X	chmod 644 /unix.nlsym
X
#not delivered
src.fls: $(SRC) Makefile
X	ls $(SRC) > src.fls
lint_args: src.fls
X	echo ' ' > lint_args.h
X	csh zgcc src.fls lint_args.h $(CFLAGS)
X
clean:
X	rm -f $(U386MON_OBJ) $(NLSYM_OBJ) \
X		core u386mon.lint Makefile.bak src.fls mkdep.* cscope.out tags a.out
X
clobber: clean
X	rm -f nlsym s2mon
X
lint:
X	lint -ux *.c > u386mon.lint
X
#for shar 3.27 or later
shar:
X	shar -a -n u386mon.$(VERSION) -l 55 -o u386m-$(VERSION) $(SHARFLS)
X
# MAKE DEPEND: regenerate .c:.h, .ol:.c, .ol:.asm dependencies automatically
#
depend:
X		rm -f mkdep.rule.tmp
X		if test '$(SRC)' ;\
X		then (grep '^#include' $(SRC) \
X		| sed	-e 's?:[^<]*<\([^>]*\)>.*?: /usr/include/\1?'\
X			-e 's?:[^"]*"\([^"]*\)".*?: \1?'\
X			-e 's?\(.*\)\.c?\1.o?'\
X		 >> mkdep.rule.tmp) ;\
X		fi
X
X		echo 1 >mkdep.ex.tmp
X		echo '/^# DO NOT DELETE THIS LINE' >>mkdep.ex.tmp
X		echo '.+1,$$d' >>mkdep.ex.tmp
X		echo 'r mkdep.rule.tmp' >> mkdep.ex.tmp
X		echo 'w' >> mkdep.ex.tmp
X		cp Makefile.sVr31 Makefile.new
X		ex Makefile.new < mkdep.ex.tmp
X		rm mkdep.ex.tmp mkdep.rule.tmp
X		echo '#	DEPENDENCIES MUST END AT END OF	FILE' >>Makefile.new
X		echo '#	IF YOU PUT STUFF HERE IT WILL GO AWAY'>>Makefile.new
X		echo '#	see make depend	above'>>Makefile.new
X		mv Makefile.sVr31 Makefile.bak
X		mv Makefile.new Makefile.sVr31
X
# DO NOT DELETE THIS LINE
u386mon.o: config.h
u386mon.o: /usr/include/curses.h
u386mon.o: libpanel.h
u386mon.o: /usr/include/signal.h
u386mon.o: /usr/include/string.h
u386mon.o: /usr/include/fcntl.h
u386mon.o: /usr/include/nlist.h
u386mon.o: /usr/include/errno.h
u386mon.o: /usr/include/time.h
u386mon.o: /usr/include/sys/types.h
u386mon.o: /usr/include/sys/lock.h
u386mon.o: /usr/include/sys/utsname.h
u386mon.o: /usr/include/sys/stat.h
u386mon.o: /usr/include/sys/param.h
u386mon.o: /usr/include/sys/tuneable.h
u386mon.o: /usr/include/sys/sysinfo.h
u386mon.o: /usr/include/sys/sysmacros.h
u386mon.o: /usr/include/sys/immu.h
u386mon.o: /usr/include/sys/region.h
u386mon.o: /usr/include/sys/proc.h
u386mon.o: /usr/include/sys/var.h
u386mon.o: /usr/include/sys/swap.h
u386mon.o: nlsym.h
u386mon.o: libkmem.h
u386mon.o: libmem.h
u386mon.o: libswap.h
u386mon.o: libnlsym.h
u386mon.o: u386mon.h
detail.o: config.h
detail.o: /usr/include/curses.h
detail.o: /usr/include/signal.h
detail.o: /usr/include/string.h
detail.o: /usr/include/fcntl.h
detail.o: /usr/include/nlist.h
detail.o: /usr/include/errno.h
detail.o: /usr/include/time.h
detail.o: /usr/include/pwd.h
detail.o: /usr/include/sys/types.h
detail.o: /usr/include/utmp.h
detail.o: /usr/include/sys/utsname.h
detail.o: /usr/include/sys/stat.h
detail.o: /usr/include/sys/param.h
detail.o: /usr/include/sys/tuneable.h
detail.o: /usr/include/sys/sysinfo.h
detail.o: /usr/include/sys/sysmacros.h
detail.o: /usr/include/sys/immu.h
detail.o: /usr/include/sys/region.h
detail.o: /usr/include/sys/proc.h
detail.o: /usr/include/sys/var.h
detail.o: nlsym.h
detail.o: libkmem.h
detail.o: libnlsym.h
detail.o: u386mon.h
det_proc.o: config.h
det_proc.o: /usr/include/curses.h
det_proc.o: /usr/include/signal.h
det_proc.o: /usr/include/string.h
det_proc.o: /usr/include/fcntl.h
det_proc.o: /usr/include/nlist.h
det_proc.o: /usr/include/errno.h
det_proc.o: /usr/include/time.h
det_proc.o: /usr/include/pwd.h
det_proc.o: /usr/include/sys/types.h
det_proc.o: /usr/include/utmp.h
det_proc.o: /usr/include/sys/stat.h
det_proc.o: /usr/include/sys/param.h
det_proc.o: /usr/include/sys/tuneable.h
det_proc.o: /usr/include/sys/sysinfo.h
det_proc.o: /usr/include/sys/sysmacros.h
det_proc.o: /usr/include/sys/immu.h
det_proc.o: /usr/include/sys/region.h
det_proc.o: /usr/include/sys/proc.h
det_proc.o: /usr/include/sys/fs/s5dir.h
det_proc.o: /usr/include/sys/user.h
det_proc.o: /usr/include/sys/var.h
det_proc.o: nlsym.h
det_proc.o: libkmem.h
det_proc.o: libmem.h
det_proc.o: libswap.h
det_proc.o: libnlsym.h
det_proc.o: u386mon.h
disputil.o: config.h
disputil.o: /usr/include/curses.h
disputil.o: /usr/include/sys/types.h
disputil.o: u386mon.h
kludge.o: /usr/include/curses.h
libkmem.o: /usr/include/sys/types.h
libkmem.o: /usr/include/fcntl.h
libkmem.o: libkmem.h
libmem.o: /usr/include/sys/types.h
libmem.o: /usr/include/fcntl.h
libmem.o: libmem.h
libpanel.o: config.h
libpanel.o: /usr/include/curses.h
libpanel.o: u386mon.h
libswap.o: /usr/include/sys/types.h
libswap.o: /usr/include/fcntl.h
libswap.o: libswap.h
libnlsym.o: config.h
libnlsym.o: /usr/include/stdio.h
libnlsym.o: /usr/include/sys/types.h
libnlsym.o: /usr/include/sys/stat.h
libnlsym.o: /usr/include/fcntl.h
libnlsym.o: /usr/include/nlist.h
libnlsym.o: nlsym.h
libnlsym.o: libnlsym.h
nlsym.o: config.h
nlsym.o: /usr/include/stdio.h
nlsym.o: /usr/include/sys/types.h
nlsym.o: /usr/include/sys/stat.h
nlsym.o: /usr/include/fcntl.h
nlsym.o: /usr/include/nlist.h
nlsym.o: nlsym.h
proc.o: config.h
proc.o: /usr/include/curses.h
proc.o: /usr/include/sys/types.h
proc.o: /usr/include/sys/param.h
proc.o: /usr/include/sys/immu.h
proc.o: /usr/include/sys/region.h
proc.o: /usr/include/sys/proc.h
proc.o: /usr/include/sys/var.h
proc.o: /usr/include/nlist.h
proc.o: nlsym.h
proc.o: libkmem.h
proc.o: libnlsym.h
proc.o: u386mon.h
tune.o: config.h
tune.o: /usr/include/curses.h
tune.o: /usr/include/sys/types.h
tune.o: /usr/include/sys/tuneable.h
tune.o: u386mon.h
var.o: config.h
var.o: /usr/include/curses.h
var.o: /usr/include/sys/types.h
var.o: /usr/include/sys/var.h
var.o: u386mon.h
#	DEPENDENCIES MUST END AT END OF	FILE
#	IF YOU PUT STUFF HERE IT WILL GO AWAY
#	see make depend	above
SHAR_EOF
chmod 0644 Make.s2 ||
echo 'restore of Make.s2 failed'
Wc_c="`wc -c < 'Make.s2'`"
test 7840 -eq "$Wc_c" ||
	echo 'Make.s2: original size 7840, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= Make.sVr31 ==============
if test -f 'Make.sVr31' -a X"$1" != X"-c"; then
	echo 'x - skipping Make.sVr31 (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting Make.sVr31 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'Make.sVr31' &&
#+-------------------------------------------------------------------
#  Makefile for u386mon for System V Release 3.1
#  ...!{gatech,emory}!n4hgf!wht
#  works on some S5R3.1 systems, anyway
#--------------------------------------------------------------------
#+:EDITS:*/
#:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point
#:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2
#:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates
#:08-02-1990-15:35-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations
#:08-01-1990-21:39-wht@n4hgf-add Dell make file
#:08-01-1990-12:26-wht@n4hgf-2.11-try to support ISC 1.x.x
#:07-28-1990-18:07-wht@n4hgf-2.10 release
#:07-28-1990-14:51-wht@n4hgf-creation
X
#------------> CFLAGS 
CFLAGS = -c -O -DSVR31
X
#------------> LIB
LIB = -lcurses -lmalloc -lc_s
X
#------------> KMEMGRP
KMEMGRP = sys
X
#------------> BINDIR
BINDIR = /usr/local/bin
X
LDFLAGS = -s
X
VERSION = 2.40
X
#handle Sys V make "feature" of using SHELL
SHELL = /bin/sh
X
#FCRC = fcrc -u $*.c ;
.c.o:;	$(FCRC) $(CC) $(CFLAGS) $*.c 
X
SRC = \
X	u386mon.c\
X	detail.c\
X	det_proc.c\
X	disputil.c\
X	kludge.c\
X	libkmem.c\
X	libmem.c\
X	libpanel.c\
X	libswap.c\
X	libnlsym.c\
X	nlsym.c\
X	proc.c\
X	tune.c\
X	var.c
X
HDR = \
X	config.h\
X	libkmem.h\
X	libmem.h\
X	libpanel.h\
X	libswap.h\
X	libnlsym.h\
X	lint_args.h\
X	nlsym.h\
X	u386mon.h
X
NLSYM_OBJ =\
X	nlsym.o
X
U386MON_OBJ =\
X	u386mon.o\
X	detail.o\
X	det_proc.o\
X	proc.o\
X	tune.o\
X	var.o\
X	kludge.o\
X	disputil.o\
X	libkmem.o\
X	libmem.o\
X	libswap.o\
X	libnlsym.o\
X	libpanel.o
X
SHARFLS = \
X	README\
X	CHANGES\
X	Make.*\
X	EXPLAIN\
X	$(SRC)\
X	$(HDR)\
X	renice/Makefile\
X	renice/renice.c\
X	panel/README\
X	panel/panel.3\
X	panel/ptest.c\
X	panel/Makefile
X
all: nlsym u386mon
X
#must run as root
install: all
X	-mv $(BINDIR)/nlsym $(BINDIR)/nlsym.old
X	cp nlsym $(BINDIR)
X	chown bin $(BINDIR)/nlsym
X	chgrp bin $(BINDIR)/nlsym
X	chmod 711 $(BINDIR)/nlsym
X	-mv $(BINDIR)/u386mon $(BINDIR)/u386mon.old
X	cp u386mon $(BINDIR)
X	chown bin $(BINDIR)/u386mon
X	chgrp $(KMEMGRP) $(BINDIR)/u386mon
X	chmod 2711 $(BINDIR)/u386mon
X	chmod g+r /dev/swap
X	$(BINDIR)/nlsym
X	@echo ' ';echo 'csh users rehash before executing'
X
nlsym: $(NLSYM_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(NLSYM_OBJ) $(LIB)
X
u386mon: $(U386MON_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(U386MON_OBJ) $(LIB)
X
/unix.nlsym: nlsym /unix
X	$(BINDIR)/nlsym
X	chmod 644 /unix.nlsym
X
#not delivered
src.fls: $(SRC) Makefile
X	ls $(SRC) > src.fls
lint_args: src.fls
X	echo ' ' > lint_args.h
X	csh zgcc src.fls lint_args.h $(CFLAGS)
X
clean:
X	rm -f $(U386MON_OBJ) $(NLSYM_OBJ) \
X		core u386mon.lint Makefile.bak src.fls mkdep.* cscope.out tags a.out
X
clobber: clean
X	rm -f nlsym u386mon
X
lint:
X	lint -ux *.c > u386mon.lint
X
#for shar 3.27 or later
shar:
X	shar -a -n u386mon.$(VERSION) -l 55 -o u386m-$(VERSION) $(SHARFLS)
X
# MAKE DEPEND: regenerate .c:.h, .ol:.c, .ol:.asm dependencies automatically
#
depend:
X		rm -f mkdep.rule.tmp
X		if test '$(SRC)' ;\
X		then (grep '^#include' $(SRC) \
X		| sed	-e 's?:[^<]*<\([^>]*\)>.*?: /usr/include/\1?'\
X			-e 's?:[^"]*"\([^"]*\)".*?: \1?'\
X			-e 's?\(.*\)\.c?\1.o?'\
X		 >> mkdep.rule.tmp) ;\
X		fi
X
X		echo 1 >mkdep.ex.tmp
X		echo '/^# DO NOT DELETE THIS LINE' >>mkdep.ex.tmp
X		echo '.+1,$$d' >>mkdep.ex.tmp
X		echo 'r mkdep.rule.tmp' >> mkdep.ex.tmp
X		echo 'w' >> mkdep.ex.tmp
X		cp Makefile.sVr31 Makefile.new
X		ex Makefile.new < mkdep.ex.tmp
X		rm mkdep.ex.tmp mkdep.rule.tmp
X		echo '#	DEPENDENCIES MUST END AT END OF	FILE' >>Makefile.new
X		echo '#	IF YOU PUT STUFF HERE IT WILL GO AWAY'>>Makefile.new
X		echo '#	see make depend	above'>>Makefile.new
X		mv Makefile.sVr31 Makefile.bak
X		mv Makefile.new Makefile.sVr31
X
# DO NOT DELETE THIS LINE
u386mon.o: config.h
u386mon.o: /usr/include/curses.h
u386mon.o: libpanel.h
u386mon.o: /usr/include/signal.h
u386mon.o: /usr/include/string.h
u386mon.o: /usr/include/fcntl.h
u386mon.o: /usr/include/nlist.h
u386mon.o: /usr/include/errno.h
u386mon.o: /usr/include/time.h
u386mon.o: /usr/include/sys/types.h
u386mon.o: /usr/include/sys/lock.h
u386mon.o: /usr/include/sys/utsname.h
u386mon.o: /usr/include/sys/stat.h
u386mon.o: /usr/include/sys/param.h
u386mon.o: /usr/include/sys/tuneable.h
u386mon.o: /usr/include/sys/sysinfo.h
u386mon.o: /usr/include/sys/sysmacros.h
u386mon.o: /usr/include/sys/immu.h
u386mon.o: /usr/include/sys/region.h
u386mon.o: /usr/include/sys/proc.h
u386mon.o: /usr/include/sys/var.h
u386mon.o: /usr/include/sys/swap.h
u386mon.o: /usr/include/sys/trap.h
u386mon.o: nlsym.h
u386mon.o: libkmem.h
u386mon.o: libmem.h
u386mon.o: libswap.h
u386mon.o: libnlsym.h
u386mon.o: u386mon.h
detail.o: config.h
detail.o: /usr/include/curses.h
detail.o: /usr/include/signal.h
detail.o: /usr/include/string.h
detail.o: /usr/include/fcntl.h
detail.o: /usr/include/nlist.h
detail.o: /usr/include/errno.h
detail.o: /usr/include/time.h
detail.o: /usr/include/pwd.h
detail.o: /usr/include/sys/types.h
detail.o: /usr/include/utmp.h
detail.o: /usr/include/sys/utsname.h
detail.o: /usr/include/sys/stat.h
detail.o: /usr/include/sys/param.h
detail.o: /usr/include/sys/tuneable.h
detail.o: /usr/include/sys/sysinfo.h
detail.o: /usr/include/sys/sysmacros.h
detail.o: /usr/include/sys/immu.h
detail.o: /usr/include/sys/region.h
detail.o: /usr/include/sys/proc.h
detail.o: /usr/include/sys/var.h
detail.o: nlsym.h
detail.o: libkmem.h
detail.o: libnlsym.h
detail.o: u386mon.h
det_proc.o: config.h
det_proc.o: /usr/include/curses.h
det_proc.o: /usr/include/signal.h
det_proc.o: /usr/include/string.h
det_proc.o: /usr/include/fcntl.h
det_proc.o: /usr/include/nlist.h
det_proc.o: /usr/include/errno.h
det_proc.o: /usr/include/time.h
det_proc.o: /usr/include/pwd.h
det_proc.o: /usr/include/sys/types.h
det_proc.o: /usr/include/utmp.h
det_proc.o: /usr/include/sys/stat.h
det_proc.o: /usr/include/sys/param.h
det_proc.o: /usr/include/sys/tuneable.h
det_proc.o: /usr/include/sys/sysinfo.h
det_proc.o: /usr/include/sys/sysmacros.h
det_proc.o: /usr/include/sys/immu.h
det_proc.o: /usr/include/sys/region.h
det_proc.o: /usr/include/sys/proc.h
det_proc.o: /usr/include/sys/fs/s5dir.h
det_proc.o: /usr/include/sys/user.h
det_proc.o: /usr/include/sys/var.h
det_proc.o: nlsym.h
det_proc.o: libkmem.h
det_proc.o: libmem.h
det_proc.o: libswap.h
det_proc.o: libnlsym.h
det_proc.o: u386mon.h
disputil.o: config.h
disputil.o: /usr/include/curses.h
disputil.o: /usr/include/sys/types.h
disputil.o: u386mon.h
kludge.o: /usr/include/curses.h
libkmem.o: /usr/include/sys/types.h
libkmem.o: /usr/include/fcntl.h
libkmem.o: libkmem.h
libmem.o: /usr/include/sys/types.h
libmem.o: /usr/include/fcntl.h
libmem.o: libmem.h
libpanel.o: config.h
libpanel.o: /usr/include/curses.h
libpanel.o: u386mon.h
libswap.o: /usr/include/sys/types.h
libswap.o: /usr/include/fcntl.h
libswap.o: libswap.h
libnlsym.o: config.h
libnlsym.o: /usr/include/stdio.h
libnlsym.o: /usr/include/sys/types.h
libnlsym.o: /usr/include/sys/stat.h
libnlsym.o: /usr/include/fcntl.h
libnlsym.o: /usr/include/nlist.h
libnlsym.o: nlsym.h
libnlsym.o: libnlsym.h
nlsym.o: config.h
nlsym.o: /usr/include/stdio.h
nlsym.o: /usr/include/sys/types.h
nlsym.o: /usr/include/sys/stat.h
nlsym.o: /usr/include/fcntl.h
nlsym.o: /usr/include/nlist.h
nlsym.o: nlsym.h
proc.o: config.h
proc.o: /usr/include/curses.h
proc.o: /usr/include/sys/types.h
proc.o: /usr/include/sys/param.h
proc.o: /usr/include/sys/immu.h
proc.o: /usr/include/sys/region.h
proc.o: /usr/include/sys/proc.h
proc.o: /usr/include/sys/var.h
proc.o: /usr/include/nlist.h
proc.o: nlsym.h
proc.o: libkmem.h
proc.o: libnlsym.h
proc.o: u386mon.h
tune.o: config.h
tune.o: /usr/include/curses.h
tune.o: /usr/include/sys/types.h
tune.o: /usr/include/sys/tuneable.h
tune.o: u386mon.h
var.o: config.h
var.o: /usr/include/curses.h
var.o: /usr/include/sys/types.h
var.o: /usr/include/sys/var.h
var.o: u386mon.h
#	DEPENDENCIES MUST END AT END OF	FILE
#	IF YOU PUT STUFF HERE IT WILL GO AWAY
#	see make depend	above
SHAR_EOF
chmod 0644 Make.sVr31 ||
echo 'restore of Make.sVr31 failed'
Wc_c="`wc -c < 'Make.sVr31'`"
test 7814 -eq "$Wc_c" ||
	echo 'Make.sVr31: original size 7814, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= Make.sco ==============
if test -f 'Make.sco' -a X"$1" != X"-c"; then
	echo 'x - skipping Make.sco (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting Make.sco (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'Make.sco' &&
#+-------------------------------------------------------------------
#  Makefile for u386mon for SCO UNIX V/386
#  ...!{gatech,emory}!n4hgf!wht
#--------------------------------------------------------------------
#+:EDITS:*/
#:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point
#:05-09-1991-03:51-wht@n4hgf-gcc support
#:04-16-1991-02:24-martin@hppcmart-additions for SCO 3.2.2
#:04-15-1991-16:05-martin@hppcmart-add table/wd/streams for SCO
#:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2
#:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates
#:08-02-1990-15:35-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations
#:08-01-1990-21:39-wht@n4hgf-add Dell make file
#:08-01-1990-12:26-wht@n4hgf-2.11-try to support ISC 1.x.x
#:07-28-1990-18:07-wht@n4hgf-2.10 release
#:07-26-1990-02:55-wht@n4hgf-add -nointl -- smaller + we don't use it
#:07-24-1990-18:53-wht@n4hgf-add USIZE_FIXED reminder
#:07-21-1990-16:03-wht@n4hgf-add libpanel + remake depend
#:06-30-1990-19:06-wht@n4hgf-run nlsym using full pathname
#:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers
#:06-25-1990-04:14-wht@n4hgf-1.03-better error handling
#:06-21-1990-14:27-r@n4hgf-version x0.12 seems bug free
#:06-19-1990-21:37-wht@n4hgf-get ready for 0.08 release
X
#------------> CFLAGS_LOCAL
# Use -DVPIX         if you have kernel support for VP/ix
#                    whether installed or not
# Use -DMERGE386
#                    if you have kernel support for Merge/386 (ODT-DOS)
#                    whether installed or not
#
# Use -DUSIZE_FIXED  if you get erroneous process sizes (leave off for 3.2.0;
#                    you do want this for any UNIX after 3.2.0 or any ODT)
#
# Use -DSCO322       if you are using SCO version 3.2.2 (UNIX 3.2r2 or ODT 1.1)
#                    or later
#
CFLAGS_LOCAL = -DSCO322 -DMERGE386 -DUSIZE_FIXED
X
#------------> compiler choice (CC, CFLAGS, LDFLAGS)
#--> cc (native MSC 5.x)
CC = cc
CFLAGS = -c $(CFLAGS_LOCAL) -nointl -Octl -CSON -DLINT_ARGS
LDFLAGS = -s -nointl
X
#--> gcc (some people make their gcc predefine 'i386' but others do not)
#        You'll get bad explosions with -pedantic -ansi' unless you've
#        hacked your header files to remove #idents plus some other changes.
#        You probably want to substitute -traditional (I like GccAbuse).
#CC = gcc
#CFLAGS = -c $(CFLAGS_LOCAL)\
#	-pedantic -ansi -O\
#	-fstrength-reduce -fpcc-struct-return -fwritable-strings\
#	-finline-functions -fforce-mem -fforce-addr\
#	-fcombine-regs\
#	-Wunused -Wpointer-arith -Wcast-qual\
#	-DM_UNIX -DM_XENIX -DM_SYSV -DM_SYS5 -DM_I386\
#	-Di386
#LDFLAGS = -s
X
#------------> LIB
LIB = -lpanel -ltinfo -lx -lmalloc -lc_s
X
#------------> KMEMGRP
KMEMGRP = mem
X
#------------> BINDIR
BINDIR = /usr/local/bin
X
VERSION = 2.40
X
#handle Sys V make "feature" of using SHELL
SHELL = /bin/sh
X
#FCRC = fcrc -u $*.c ;
.c.o:
X	@echo ignore redefinition warnings for box and newterm;
X	$(FCRC) $(CC) $(CFLAGS) $*.c 
X
SRC = \
X	u386mon.c\
X	bootinfo.c\
X	detail.c\
X	det_proc.c\
X	det_sio.c\
X	det_stream.c\
X	det_table.c\
X	det_wd.c\
X	disputil.c\
X	kludge.c\
X	libkmem.c\
X	libmem.c\
X	libpanel.c\
X	libswap.c\
X	libnlsym.c\
X	nlsym.c\
X	proc.c\
X	tune.c\
X	var.c
X
HDR = \
X	config.h\
X	libkmem.h\
X	libmem.h\
X	libpanel.h\
X	libswap.h\
X	libnlsym.h\
X	lint_args.h\
X	nlsym.h\
X	u386mon.h
X
NLSYM_OBJ =\
X	nlsym.o
X
U386MON_OBJ =\
X	u386mon.o\
X	detail.o\
X	det_proc.o\
X	det_sio.o\
X	det_stream.o\
X	det_table.o\
X	det_wd.o\
X	bootinfo.o\
X	kludge.o\
X	proc.o\
X	tune.o\
X	var.o\
X	disputil.o\
X	libkmem.o\
X	libmem.o\
X	libswap.o\
X	libnlsym.o
X
SHARFLS = \
X	README\
X	CHANGES\
X	Make.*\
X	EXPLAIN\
X	$(SRC)\
X	$(HDR)\
X	renice/Makefile\
X	renice/renice.c\
X	panel/README\
X	panel/panel.3\
X	panel/ptest.c\
X	panel/Makefile
X
all: nlsym u386mon
X
#must run as root
install: all
X	strip nlsym
X	mcs -d nlsym
X	cp nlsym $(BINDIR)
X	chown bin $(BINDIR)/nlsym
X	chgrp bin $(BINDIR)/nlsym
X	chmod 711 $(BINDIR)/nlsym
X	strip u386mon
X	mcs -d u386mon
X	mv u386mon $(BINDIR)
X	chown bin $(BINDIR)/u386mon
X	chgrp $(KMEMGRP) $(BINDIR)/u386mon
X	chmod 2711 $(BINDIR)/u386mon
X	$(BINDIR)/nlsym
X	@echo ' ';echo 'csh users rehash before executing'
X
nlsym: $(NLSYM_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(NLSYM_OBJ) $(LIB)
X
u386mon: $(U386MON_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(U386MON_OBJ) $(LIB)
X
/unix.nlsym: nlsym /unix
X	$(BINDIR)/nlsym
X	chmod 644 /unix.nlsym
X
#not delivered
src.fls: $(SRC) Makefile
X	ls $(SRC) > src.fls
lint_args: src.fls
X	echo ' ' > lint_args.h
X	csh zgcc src.fls lint_args.h $(CFLAGS)
X
clean:
X	rm -f $(U386MON_OBJ) $(NLSYM_OBJ) \
X		core u386mon.lint Makefile.bak src.fls mkdep.* cscope.out tags a.out
X
clobber: clean
X	rm -f nlsym u386mon
X
lint:
X	lint -ux *.c > u386mon.lint
X
#for shar 3.27 or later
shar:
X	shar -a -n u386mon.$(VERSION) -l 55 -o u386m-$(VERSION) $(SHARFLS)
X
# MAKE DEPEND: regenerate .c:.h, .ol:.c, .ol:.asm dependencies automatically
#
depend:
X		rm -f mkdep.rule.tmp
X		if test '$(SRC)' ;\
X		then (grep '^#include' $(SRC) \
X		| sed	-e 's?:[^<]*<\([^>]*\)>.*?: /usr/include/\1?'\
X			-e 's?:[^"]*"\([^"]*\)".*?: \1?'\
X			-e 's?\(.*\)\.c?\1.o?'\
X		 >> mkdep.rule.tmp) ;\
X		fi
X
X		echo 1 >mkdep.ex.tmp
X		echo '/^# DO NOT DELETE THIS LINE' >>mkdep.ex.tmp
X		echo '.+1,$$d' >>mkdep.ex.tmp
X		echo 'r mkdep.rule.tmp' >> mkdep.ex.tmp
X		echo 'w' >> mkdep.ex.tmp
X		cp Makefile.sco Makefile.new
X		ex Makefile.new < mkdep.ex.tmp
X		rm mkdep.ex.tmp mkdep.rule.tmp
X		echo '#	DEPENDENCIES MUST END AT END OF	FILE' >>Makefile.new
X		echo '#	IF YOU PUT STUFF HERE IT WILL GO AWAY'>>Makefile.new
X		echo '#	see make depend	above'>>Makefile.new
X		mv Makefile.sco Makefile.bak
X		mv Makefile.new Makefile.sco
X
# DO NOT DELETE THIS LINE
u386mon.o: config.h
u386mon.o: /usr/include/curses.h
u386mon.o: libpanel.h
u386mon.o: /usr/include/signal.h
u386mon.o: /usr/include/string.h
u386mon.o: /usr/include/fcntl.h
u386mon.o: /usr/include/nlist.h
u386mon.o: /usr/include/errno.h
u386mon.o: /usr/include/time.h
u386mon.o: /usr/include/sys/types.h
u386mon.o: /usr/include/sys/lock.h
u386mon.o: /usr/include/sys/utsname.h
u386mon.o: /usr/include/sys/stat.h
u386mon.o: /usr/include/sys/param.h
u386mon.o: /usr/include/sys/tuneable.h
u386mon.o: /usr/include/sys/sysinfo.h
u386mon.o: /usr/include/sys/sysmacros.h
u386mon.o: /usr/include/sys/immu.h
u386mon.o: /usr/include/sys/region.h
u386mon.o: /usr/include/sys/proc.h
u386mon.o: /usr/include/sys/var.h
u386mon.o: /usr/include/sys/swap.h
u386mon.o: /usr/include/sys/trap.h
u386mon.o: nlsym.h
u386mon.o: libkmem.h
u386mon.o: libmem.h
u386mon.o: libswap.h
u386mon.o: libnlsym.h
u386mon.o: u386mon.h
bootinfo.o: config.h
bootinfo.o: /usr/include/curses.h
bootinfo.o: /usr/include/sys/types.h
bootinfo.o: /usr/include/sys/bootinfo.h
bootinfo.o: u386mon.h
detail.o: config.h
detail.o: /usr/include/curses.h
detail.o: /usr/include/signal.h
detail.o: /usr/include/string.h
detail.o: /usr/include/fcntl.h
detail.o: /usr/include/nlist.h
detail.o: /usr/include/errno.h
detail.o: /usr/include/time.h
detail.o: /usr/include/pwd.h
detail.o: /usr/include/sys/types.h
detail.o: /usr/include/utmp.h
detail.o: /usr/include/sys/utsname.h
detail.o: /usr/include/sys/stat.h
detail.o: /usr/include/sys/param.h
detail.o: /usr/include/sys/tuneable.h
detail.o: /usr/include/sys/sysinfo.h
detail.o: /usr/include/sys/sysmacros.h
detail.o: /usr/include/sys/immu.h
detail.o: /usr/include/sys/region.h
detail.o: /usr/include/sys/proc.h
detail.o: /usr/include/sys/var.h
detail.o: nlsym.h
detail.o: libkmem.h
detail.o: libnlsym.h
detail.o: u386mon.h
det_proc.o: config.h
det_proc.o: /usr/include/curses.h
det_proc.o: /usr/include/signal.h
det_proc.o: /usr/include/string.h
det_proc.o: /usr/include/fcntl.h
det_proc.o: /usr/include/nlist.h
det_proc.o: /usr/include/errno.h
det_proc.o: /usr/include/time.h
det_proc.o: /usr/include/pwd.h
det_proc.o: /usr/include/sys/types.h
det_proc.o: /usr/include/utmp.h
det_proc.o: /usr/include/sys/stat.h
det_proc.o: /usr/include/sys/param.h
det_proc.o: /usr/include/sys/tuneable.h
det_proc.o: /usr/include/sys/sysinfo.h
det_proc.o: /usr/include/sys/sysmacros.h
det_proc.o: /usr/include/sys/immu.h
det_proc.o: /usr/include/sys/region.h
det_proc.o: /usr/include/sys/proc.h
det_proc.o: /usr/include/sys/fs/s5dir.h
det_proc.o: /usr/include/sys/user.h
det_proc.o: /usr/include/sys/var.h
det_proc.o: nlsym.h
det_proc.o: libkmem.h
det_proc.o: libmem.h
det_proc.o: libswap.h
det_proc.o: libnlsym.h
det_proc.o: u386mon.h
det_sio.o: config.h
det_sio.o: /usr/include/curses.h
det_sio.o: /usr/include/string.h
det_sio.o: /usr/include/nlist.h
det_sio.o: /usr/include/sys/types.h
det_sio.o: /usr/include/sys/stat.h
det_sio.o: /usr/include/sys/ascii.h
det_sio.o: /usr/include/sys/param.h
det_sio.o: /usr/include/sys/tty.h
det_sio.o: nlsym.h
det_sio.o: libkmem.h
det_sio.o: libmem.h
det_sio.o: libswap.h
det_sio.o: libnlsym.h
det_sio.o: u386mon.h
disputil.o: config.h
disputil.o: /usr/include/curses.h
disputil.o: /usr/include/sys/types.h
disputil.o: u386mon.h
kludge.o: /usr/include/curses.h
libkmem.o: /usr/include/sys/types.h
libkmem.o: /usr/include/fcntl.h
libkmem.o: libkmem.h
libmem.o: /usr/include/sys/types.h
libmem.o: /usr/include/fcntl.h
libmem.o: libmem.h
libpanel.o: config.h
libpanel.o: /usr/include/curses.h
libpanel.o: u386mon.h
libswap.o: /usr/include/sys/types.h
libswap.o: /usr/include/fcntl.h
libswap.o: libswap.h
libnlsym.o: config.h
libnlsym.o: /usr/include/stdio.h
libnlsym.o: /usr/include/sys/types.h
libnlsym.o: /usr/include/sys/stat.h
libnlsym.o: /usr/include/fcntl.h
libnlsym.o: /usr/include/nlist.h
libnlsym.o: nlsym.h
libnlsym.o: libnlsym.h
nlsym.o: config.h
nlsym.o: /usr/include/stdio.h
nlsym.o: /usr/include/sys/types.h
nlsym.o: /usr/include/sys/stat.h
nlsym.o: /usr/include/fcntl.h
nlsym.o: /usr/include/nlist.h
nlsym.o: nlsym.h
proc.o: config.h
proc.o: /usr/include/curses.h
proc.o: /usr/include/sys/types.h
proc.o: /usr/include/sys/param.h
proc.o: /usr/include/sys/immu.h
proc.o: /usr/include/sys/region.h
proc.o: /usr/include/sys/proc.h
proc.o: /usr/include/sys/var.h
proc.o: /usr/include/nlist.h
proc.o: nlsym.h
proc.o: libkmem.h
proc.o: libnlsym.h
proc.o: u386mon.h
tune.o: config.h
tune.o: /usr/include/curses.h
tune.o: /usr/include/sys/types.h
tune.o: /usr/include/sys/tuneable.h
tune.o: u386mon.h
var.o: config.h
var.o: /usr/include/curses.h
var.o: /usr/include/sys/types.h
var.o: /usr/include/sys/var.h
var.o: u386mon.h
#	DEPENDENCIES MUST END AT END OF	FILE
#	IF YOU PUT STUFF HERE IT WILL GO AWAY
#	see make depend	above
SHAR_EOF
chmod 0644 Make.sco ||
echo 'restore of Make.sco failed'
Wc_c="`wc -c < 'Make.sco'`"
test 10372 -eq "$Wc_c" ||
	echo 'Make.sco: original size 10372, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= Make.sco.gcc ==============
if test -f 'Make.sco.gcc' -a X"$1" != X"-c"; then
	echo 'x - skipping Make.sco.gcc (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting Make.sco.gcc (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'Make.sco.gcc' &&
#+-------------------------------------------------------------------
#  Makefile for u386mon for SCO UNIX V/386 with gcc
#  ...!{gatech,emory}!n4hgf!wht
#--------------------------------------------------------------------
#+:EDITS:*/
#:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point
#:05-09-1991-03:51-wht@n4hgf-gcc support
#:04-16-1991-02:24-martin@hppcmart-additions for SCO 3.2.2
#:04-15-1991-16:05-martin@hppcmart-add table/wd/streams for SCO
#:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2
#:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates
#:08-02-1990-15:35-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations
#:08-01-1990-21:39-wht@n4hgf-add Dell make file
#:08-01-1990-12:26-wht@n4hgf-2.11-try to support ISC 1.x.x
#:07-28-1990-18:07-wht@n4hgf-2.10 release
#:07-26-1990-02:55-wht@n4hgf-add -nointl -- smaller + we don't use it
#:07-24-1990-18:53-wht@n4hgf-add USIZE_FIXED reminder
#:07-21-1990-16:03-wht@n4hgf-add libpanel + remake depend
#:06-30-1990-19:06-wht@n4hgf-run nlsym using full pathname
#:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers
#:06-25-1990-04:14-wht@n4hgf-1.03-better error handling
#:06-21-1990-14:27-r@n4hgf-version x0.12 seems bug free
#:06-19-1990-21:37-wht@n4hgf-get ready for 0.08 release
X
#------------> CFLAGS_LOCAL
# Use -DVPIX         if you have kernel support for VP/ix
#                    whether installed or not
# Use -DMERGE386
#                    if you have kernel support for Merge/386 (ODT-DOS)
#                    whether installed or not
#
# Use -DUSIZE_FIXED  if you get erroneous process sizes (leave off for 3.2.0;
#                    you do want this for any UNIX after 3.2.0 or any ODT)
#
# Use -DSCO322       if you are using SCO version 3.2.2 (UNIX 3.2r2 or ODT 1.1)
#                    or later
#
CFLAGS_LOCAL = -DSCO322 -DMERGE386 -DUSIZE_FIXED
X
#------------> compiler choice (CC, CFLAGS, LDFLAGS)
#--> cc (native MSC 5.x)
#CC = cc
#CFLAGS = -c $(CFLAGS_LOCAL) -nointl -Octl -CSON -DLINT_ARGS
#LDFLAGS = -s -nointl
X
#--> gcc (some people make their gcc predefine 'i386' but others do not)
#        You'll get bad explosions with -pedantic -ansi' unless you've
#        hacked your header files to remove #idents plus some other changes.
#        You probably want to substitute -traditional (I like GccAbuse).
CC = gcc
CFLAGS = -c $(CFLAGS_LOCAL)\
X	-pedantic -ansi -O\
X	-fstrength-reduce -fpcc-struct-return -fwritable-strings\
X	-finline-functions -fforce-mem -fforce-addr\
X	-fcombine-regs\
X	-fcall-used-ax -fcall-used-bx -fcall-used-cx -fcall-used-dx\
X	-Wunused -Wpointer-arith -Wcast-qual\
X	-DM_UNIX -DM_XENIX -DM_SYSV -DM_SYS5 -DM_I386\
X	-Di386
LDFLAGS = -s
X
#------------> LIB
LIB = -lpanel -ltinfo -lx -lmalloc -lc_s
X
#------------> KMEMGRP
KMEMGRP = mem
X
#------------> BINDIR
BINDIR = /usr/local/bin
X
VERSION = 2.40
X
#handle Sys V make "feature" of using SHELL
SHELL = /bin/sh
X
#FCRC = fcrc -u $*.c ;
.c.o:
X	@echo ignore redefinition warnings for box and newterm;
X	$(FCRC) $(CC) $(CFLAGS) $*.c 
X
SRC = \
X	u386mon.c\
X	bootinfo.c\
X	detail.c\
X	det_proc.c\
X	det_sio.c\
X	det_stream.c\
X	det_table.c\
X	det_wd.c\
X	disputil.c\
X	kludge.c\
X	libkmem.c\
X	libmem.c\
X	libpanel.c\
X	libswap.c\
X	libnlsym.c\
X	nlsym.c\
X	proc.c\
X	tune.c\
X	var.c
X
HDR = \
X	config.h\
X	libkmem.h\
X	libmem.h\
X	libpanel.h\
X	libswap.h\
X	libnlsym.h\
X	lint_args.h\
X	nlsym.h\
X	u386mon.h
X
NLSYM_OBJ =\
X	nlsym.o
X
U386MON_OBJ =\
X	u386mon.o\
X	detail.o\
X	det_proc.o\
X	det_sio.o\
X	det_stream.o\
X	det_table.o\
X	det_wd.o\
X	bootinfo.o\
X	kludge.o\
X	proc.o\
X	tune.o\
X	var.o\
X	disputil.o\
X	libkmem.o\
X	libmem.o\
X	libswap.o\
X	libnlsym.o
X
SHARFLS = \
X	README\
X	CHANGES\
X	Make.*\
X	EXPLAIN\
X	$(SRC)\
X	$(HDR)\
X	renice/Makefile\
X	renice/renice.c\
X	panel/README\
X	panel/panel.3\
X	panel/ptest.c\
X	panel/Makefile
X
all: nlsym u386mon
X
#must run as root
install: all
X	strip nlsym
X	mcs -d nlsym
X	cp nlsym $(BINDIR)
X	chown bin $(BINDIR)/nlsym
X	chgrp bin $(BINDIR)/nlsym
X	chmod 711 $(BINDIR)/nlsym
X	strip u386mon
X	mcs -d u386mon
X	mv u386mon $(BINDIR)
X	chown bin $(BINDIR)/u386mon
X	chgrp $(KMEMGRP) $(BINDIR)/u386mon
X	chmod 2711 $(BINDIR)/u386mon
X	$(BINDIR)/nlsym
X	@echo ' ';echo 'csh users rehash before executing'
X
nlsym: $(NLSYM_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(NLSYM_OBJ) $(LIB)
X
u386mon: $(U386MON_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(U386MON_OBJ) $(LIB)
X
/unix.nlsym: nlsym /unix
X	$(BINDIR)/nlsym
X	chmod 644 /unix.nlsym
X
#not delivered
src.fls: $(SRC) Makefile
X	ls $(SRC) > src.fls
lint_args: src.fls
X	echo ' ' > lint_args.h
X	csh zgcc src.fls lint_args.h $(CFLAGS)
X
clean:
X	rm -f $(U386MON_OBJ) $(NLSYM_OBJ) \
X		core u386mon.lint Makefile.bak src.fls mkdep.* cscope.out tags a.out
X
clobber: clean
X	rm -f nlsym u386mon
X
lint:
X	lint -ux *.c > u386mon.lint
X
#for shar 3.27 or later
shar:
X	shar -a -n u386mon.$(VERSION) -l 55 -o u386m-$(VERSION) $(SHARFLS)
X
# MAKE DEPEND: regenerate .c:.h, .ol:.c, .ol:.asm dependencies automatically
#
depend:
X		rm -f mkdep.rule.tmp
X		if test '$(SRC)' ;\
X		then (grep '^#include' $(SRC) \
X		| sed	-e 's?:[^<]*<\([^>]*\)>.*?: /usr/include/\1?'\
X			-e 's?:[^"]*"\([^"]*\)".*?: \1?'\
X			-e 's?\(.*\)\.c?\1.o?'\
X		 >> mkdep.rule.tmp) ;\
X		fi
X
X		echo 1 >mkdep.ex.tmp
X		echo '/^# DO NOT DELETE THIS LINE' >>mkdep.ex.tmp
X		echo '.+1,$$d' >>mkdep.ex.tmp
X		echo 'r mkdep.rule.tmp' >> mkdep.ex.tmp
X		echo 'w' >> mkdep.ex.tmp
X		cp Makefile.sco Makefile.new
X		ex Makefile.new < mkdep.ex.tmp
X		rm mkdep.ex.tmp mkdep.rule.tmp
X		echo '#	DEPENDENCIES MUST END AT END OF	FILE' >>Makefile.new
X		echo '#	IF YOU PUT STUFF HERE IT WILL GO AWAY'>>Makefile.new
X		echo '#	see make depend	above'>>Makefile.new
X		mv Makefile.sco Makefile.bak
X		mv Makefile.new Makefile.sco
X
# DO NOT DELETE THIS LINE
u386mon.o: config.h
u386mon.o: /usr/include/curses.h
u386mon.o: libpanel.h
u386mon.o: /usr/include/signal.h
u386mon.o: /usr/include/string.h
u386mon.o: /usr/include/fcntl.h
u386mon.o: /usr/include/nlist.h
u386mon.o: /usr/include/errno.h
u386mon.o: /usr/include/time.h
u386mon.o: /usr/include/sys/types.h
u386mon.o: /usr/include/sys/lock.h
u386mon.o: /usr/include/sys/utsname.h
u386mon.o: /usr/include/sys/stat.h
u386mon.o: /usr/include/sys/param.h
u386mon.o: /usr/include/sys/tuneable.h
u386mon.o: /usr/include/sys/sysinfo.h
u386mon.o: /usr/include/sys/sysmacros.h
u386mon.o: /usr/include/sys/immu.h
u386mon.o: /usr/include/sys/region.h
u386mon.o: /usr/include/sys/proc.h
u386mon.o: /usr/include/sys/var.h
u386mon.o: /usr/include/sys/swap.h
u386mon.o: /usr/include/sys/trap.h
u386mon.o: nlsym.h
u386mon.o: libkmem.h
u386mon.o: libmem.h
u386mon.o: libswap.h
u386mon.o: libnlsym.h
u386mon.o: u386mon.h
bootinfo.o: config.h
bootinfo.o: /usr/include/curses.h
bootinfo.o: /usr/include/sys/types.h
bootinfo.o: /usr/include/sys/bootinfo.h
bootinfo.o: u386mon.h
detail.o: config.h
detail.o: /usr/include/curses.h
detail.o: /usr/include/signal.h
detail.o: /usr/include/string.h
detail.o: /usr/include/fcntl.h
detail.o: /usr/include/nlist.h
detail.o: /usr/include/errno.h
detail.o: /usr/include/time.h
detail.o: /usr/include/pwd.h
detail.o: /usr/include/sys/types.h
detail.o: /usr/include/utmp.h
detail.o: /usr/include/sys/utsname.h
detail.o: /usr/include/sys/stat.h
detail.o: /usr/include/sys/param.h
detail.o: /usr/include/sys/tuneable.h
detail.o: /usr/include/sys/sysinfo.h
detail.o: /usr/include/sys/sysmacros.h
detail.o: /usr/include/sys/immu.h
detail.o: /usr/include/sys/region.h
detail.o: /usr/include/sys/proc.h
detail.o: /usr/include/sys/var.h
detail.o: nlsym.h
detail.o: libkmem.h
detail.o: libnlsym.h
detail.o: u386mon.h
det_proc.o: config.h
det_proc.o: /usr/include/curses.h
det_proc.o: /usr/include/signal.h
det_proc.o: /usr/include/string.h
det_proc.o: /usr/include/fcntl.h
det_proc.o: /usr/include/nlist.h
det_proc.o: /usr/include/errno.h
det_proc.o: /usr/include/time.h
det_proc.o: /usr/include/pwd.h
det_proc.o: /usr/include/sys/types.h
det_proc.o: /usr/include/utmp.h
det_proc.o: /usr/include/sys/stat.h
det_proc.o: /usr/include/sys/param.h
det_proc.o: /usr/include/sys/tuneable.h
det_proc.o: /usr/include/sys/sysinfo.h
det_proc.o: /usr/include/sys/sysmacros.h
det_proc.o: /usr/include/sys/immu.h
det_proc.o: /usr/include/sys/region.h
det_proc.o: /usr/include/sys/proc.h
det_proc.o: /usr/include/sys/fs/s5dir.h
det_proc.o: /usr/include/sys/user.h
det_proc.o: /usr/include/sys/var.h
det_proc.o: nlsym.h
det_proc.o: libkmem.h
det_proc.o: libmem.h
det_proc.o: libswap.h
det_proc.o: libnlsym.h
det_proc.o: u386mon.h
det_sio.o: config.h
det_sio.o: /usr/include/curses.h
det_sio.o: /usr/include/string.h
det_sio.o: /usr/include/nlist.h
det_sio.o: /usr/include/sys/types.h
det_sio.o: /usr/include/sys/stat.h
det_sio.o: /usr/include/sys/ascii.h
det_sio.o: /usr/include/sys/param.h
det_sio.o: /usr/include/sys/tty.h
det_sio.o: nlsym.h
det_sio.o: libkmem.h
det_sio.o: libmem.h
det_sio.o: libswap.h
det_sio.o: libnlsym.h
det_sio.o: u386mon.h
disputil.o: config.h
disputil.o: /usr/include/curses.h
disputil.o: /usr/include/sys/types.h
disputil.o: u386mon.h
kludge.o: /usr/include/curses.h
libkmem.o: /usr/include/sys/types.h
libkmem.o: /usr/include/fcntl.h
libkmem.o: libkmem.h
libmem.o: /usr/include/sys/types.h
libmem.o: /usr/include/fcntl.h
libmem.o: libmem.h
libpanel.o: config.h
libpanel.o: /usr/include/curses.h
libpanel.o: u386mon.h
libswap.o: /usr/include/sys/types.h
libswap.o: /usr/include/fcntl.h
libswap.o: libswap.h
libnlsym.o: config.h
libnlsym.o: /usr/include/stdio.h
libnlsym.o: /usr/include/sys/types.h
libnlsym.o: /usr/include/sys/stat.h
libnlsym.o: /usr/include/fcntl.h
libnlsym.o: /usr/include/nlist.h
libnlsym.o: nlsym.h
libnlsym.o: libnlsym.h
nlsym.o: config.h
nlsym.o: /usr/include/stdio.h
nlsym.o: /usr/include/sys/types.h
nlsym.o: /usr/include/sys/stat.h
nlsym.o: /usr/include/fcntl.h
nlsym.o: /usr/include/nlist.h
nlsym.o: nlsym.h
proc.o: config.h
proc.o: /usr/include/curses.h
proc.o: /usr/include/sys/types.h
proc.o: /usr/include/sys/param.h
proc.o: /usr/include/sys/immu.h
proc.o: /usr/include/sys/region.h
proc.o: /usr/include/sys/proc.h
proc.o: /usr/include/sys/var.h
proc.o: /usr/include/nlist.h
proc.o: nlsym.h
proc.o: libkmem.h
proc.o: libnlsym.h
proc.o: u386mon.h
tune.o: config.h
tune.o: /usr/include/curses.h
tune.o: /usr/include/sys/types.h
tune.o: /usr/include/sys/tuneable.h
tune.o: u386mon.h
var.o: config.h
var.o: /usr/include/curses.h
var.o: /usr/include/sys/types.h
var.o: /usr/include/sys/var.h
var.o: u386mon.h
#	DEPENDENCIES MUST END AT END OF	FILE
#	IF YOU PUT STUFF HERE IT WILL GO AWAY
#	see make depend	above
SHAR_EOF
chmod 0644 Make.sco.gcc ||
echo 'restore of Make.sco.gcc failed'
Wc_c="`wc -c < 'Make.sco.gcc'`"
test 10436 -eq "$Wc_c" ||
	echo 'Make.sco.gcc: original size 10436, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= EXPLAIN ==============
if test -f 'EXPLAIN' -a X"$1" != X"-c"; then
	echo 'x - skipping EXPLAIN (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting EXPLAIN (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'EXPLAIN' &&
This is a very cursor description of some of the fields as I understand
them.  Corrections/additions appreciated.
X
---- Sysinfo/Minfo --- (last 1 second activity) --------------------------------
bread			actual buffers (disk or tape blocks) read
bwrite			actual buffers (disk or tape blocks) written
lread			logical buffers (disk or tape blocks) read
lwrite			logical buffers (disk or tape blocks) written 
swapin			logical blocks swapped in
swapout			logical blocks swapped out
bswapin			actual blocks swapped in
bswapout		actual blocks swapped in
iget			get inode
namei			lookup inode for pathname
dirblk			directory blocks read
readch			chars read by read() system call
writch			chars written by write() system call
rawch			raw tty character read
canch			raw tty character put onto canonical queue
outch			tty characters written
msg				message operations (msgsnd())
sema			semaphore operations (semop())
pswitch			process context switches
syscall			system calls
sysread			read() calls
syswrit			write() calls
sysfork			fork() calls
sysexec			exec[,l,le,etc.]() calls
runque			number of processes placed on run queue
runocc			number of processes -now- on queue
swpque			number of processes placed on swap queue
swpocc			number of processes -now- on queue
vfault			
demand			
pfault			
steal			number of pages stolen
frdpgs			pages freed
vfpg			
sfpg			
vspg			
sspg			
pnpfault		
wrtfault		
SHAR_EOF
chmod 0644 EXPLAIN ||
echo 'restore of EXPLAIN failed'
Wc_c="`wc -c < 'EXPLAIN'`"
test 1393 -eq "$Wc_c" ||
	echo 'EXPLAIN: original size 1393, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= u386mon.c ==============
if test -f 'u386mon.c' -a X"$1" != X"-c"; then
	echo 'x - skipping u386mon.c (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting u386mon.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'u386mon.c' &&
char *revision = "3.4";
/*+-------------------------------------------------------------------------
X	u386mon.c - UNIX 386 (and other) system monitor
X	wht@n4hgf.Mt-Park.GA.US and many others
X
X  Defined functions:
X	adb_trap()
X	calc_cpu_avg(per_state)
X	calc_wait_avg(per_state)
X	caught_signal(sig)
X	draw_cpuscale_literals(win,y,x)
X	draw_per_sec_literals(win,y,x)
X	draw_waitscale_literals(win,y,x)
X	extra_info_stuff()
X	extra_static_stuff()
X	get_cpu_avg(cpu_ticks,period)
X	get_elapsed_time(elapsed_seconds)
X	get_wait_avg(wait_ticks,period)
X	leave(exit_code)
X	leave_text(text,exit_code)
X	leaving(exit_code)
X	main(argc,argv,envp)
X	update_cpuscale(win,y,x,width,per_state)
X	update_waitscale(win,y,x,width,per_state,total_ticks)
X
00000000001111111111222222222233333333334444444444555555555566666666667777777777
01234567890123456789012345678901234567890123456789012345678901234567890123456789
X u386mon xxx.xxx                       PLOCK     INVALID      hh:mm:ss wht@n4hgf
X
---- CPU --- tot usr ker brk ---------------------------------------------------
X Instant %   ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X 5 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
10 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
---- Wait -- tot  io pio swp ---------------------------------------------------
X Instant %   ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X 5 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
10 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X
--------------------------------------------------------------------------*/
/*+:EDITS:*/
/*:08-14-1991-13:04-wht@n4hgf-STREAMS and table works for ISC 2.2 */
/*:08-11-1991-14:05-root@n4hgf-use PATCHLEVEL */
/*:08-01-1991-23:35-wht@n4hgf-release 2.40 source control point */
/*:05-15-1991-17:22-wht@n4hgf-2.3 patches for SVR31 from nba@sysware.dk */
/*:05-14-1991-06:11-root@n4hgf-evidently a fast cpu gets 0 cpu sometimes :-) */
/*:05-09-1991-03:57-wht@n4hgf-fix HZ problem reported by ir@crosfield.co.uk */
/*:05-09-1991-03:35-wht@n4hgf-gcc gives good warning */
/*:05-09-1991-02:24-wht@n4hgf-HZ environment variable might be non-zero */
/*:04-16-1991-02:25-martin@hppcmart additions for SCO 3.2.2 */
/*:03-16-1991-14:22-wht@n4hgf-widen sysinfo column 4 */
/*:08-14-1990-19:08-root@n4hgf-fix **argv bug */
/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates */
/*:08-02-1990-15:36-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations */
/*:08-01-1990-19:24-jdc@dell.com-add DELL config */
/*:08-01-1990-17:25-wht@n4hgf-fix sysi86 swap calculations */
/*:07-28-1990-18:06-wht@n4hgf-2.10 release */
/*:07-28-1990-15:05-wht@n4hgf-make CYCLEmsec variable */
/*:07-11-1990-03:45-root@n4hgf-faster proc table manipulation */
/*:07-10-1990-19:06-root@n4hgf-redesign attributes/color pairs */
/*:07-10-1990-18:33-root@n4hgf-move pio wait to medium alert */
/*:07-10-1990-18:01-root@n4hgf-"improvement" didnt do much, but leave for now */
/*:07-10-1990-13:54-root@n4hgf-improve nap heuristics and catch signals */
/*:07-08-1990-20:31-root@n4hgf-make room for phread/phwrite */
/*:07-03-1990-02:48-root@n4hgf-more accurate timing using ftime calculations */
/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
/*:06-27-1990-01:07-wht@n4hgf-add ^R and ^L refresh */
/*:06-25-1990-17:34-wht@n4hgf-add detail extra for 25 line tubes */
/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
/*:06-15-1990-18:32-wht@n4hgf-creation */
X
#include "config.h"
#include "patchlevel.h"
#define M_TERMINFO
#include <curses.h>
#undef timeout /* conflict in curses.h and bootinfo.h per trb@ima.ima.isc.com */
#undef reg     /* per nba@sysware.dk */
#include "libpanel.h"
#include <signal.h>
#include <string.h>
#include <fcntl.h>
#include <nlist.h>
#include <errno.h>
#include <time.h>
#include <sys/types.h>
#if defined(HAS_TIMEB)
# include <sys/timeb.h>
#endif
#include <sys/lock.h>
#include <sys/utsname.h>
#include <sys/stat.h>
#if defined(HAS_ASCII)
# include <sys/ascii.h>
#else
#define A_ESC	'\033'
#endif
#undef NGROUPS_MAX
#undef NULL
#include <sys/param.h>
#if defined(HAS_BOOTINFO)
# include <sys/bootinfo.h>
#endif
#include <sys/tuneable.h>
#include <sys/sysinfo.h>
#include <sys/sysmacros.h>
#include <sys/immu.h>
#include <sys/region.h>
#if defined(mips)
#include <sys/sbd.h>
#endif
#include <sys/proc.h>
#include <sys/var.h>
#if defined(i386) || defined(i486)
# include <sys/sysi86.h>
#endif
#if defined(mips)
# include <sys/sysmips.h>
#endif
#include <sys/swap.h>
#if !defined(mips)
# include <sys/trap.h>
#endif
X
#ifdef SVR4
#include <vm/anon.h>
#include <sys/vm.h>
#endif
X
#include "nlsym.h"
#include "libkmem.h"
#include "libmem.h"
#include "libswap.h"
#include "libnlsym.h"
#include "u386mon.h"
X
long nap();
PANEL *mkpanel();
X
#if defined(HAS_TIMEB)
#define delta_msec(t,t0) ((( t.time * 1000L) +  t.millitm) - \
X                          ((t0.time * 1000L) + t0.millitm))
#endif
X
#define INEXACT_STATE	2
#define INVALID_STATE	5
X
#if defined(mips)
#define CYCLEmsecDef 5000L
#define CYCLEmsecMax 9000L
#else
#define CYCLEmsecDef 2000L
#define CYCLEmsecMax 4000L
#endif
X
long CYCLEmsec = CYCLEmsecDef;
X
struct sysinfo sysinfo;
struct sysinfo sysinfo_last;
#define sysidelta(x) (sysinfo.x - sysinfo_last.x)
X
struct minfo minfo;
struct minfo minfo_last;
#define midelta(x) (minfo.x - minfo_last.x)
X
#if defined(HAS_BOOTINFO)
struct bootinfo bootinfo;
#endif
X
swpt_t swaptab [MSFILES];
swpi_t swapint = {SI_LIST, (char *)swaptab};
struct tune tune;
struct utsname utsname;
struct var v;
X
#if defined(HAS_TIMEB)
struct timeb timeb_cycle_start;
struct timeb timeb_cycle_end;
struct timeb timeb_info_read;
struct timeb timeb_last_info_read;
#endif
X
X
#ifdef SVR4
unsigned long freeswap;
unsigned long usedmem;
unsigned long nswap;
unsigned long x_maxmem;
unsigned long x_freemem;
#else
int nswap;	/* seems to be in units of NBPSCTR bytes */
int maxmem;
int freemem;
#endif
X
int hz;
daddr_t myreadlen = 0L;
int myreadcnt = 0;
int stat_period_msec_y = -1;
int stat_period_msec_x = -1;
int color_avail = 0;
int invalidity = 0;
X
PANEL *pscr;
WINDOW *wscr;
extern WINDOW *wdet;
X
#define CPU_AVG_MAX		10
int cpu_avg_init = 0;
time_t *cpu_avg[CPU_AVG_MAX];
time_t cpu_ticks[5];
X
#define WAIT_AVG_MAX	10
int wait_avg_init = 0;
time_t *wait_avg[WAIT_AVG_MAX];
time_t wait_ticks[5];
X
/*+-------------------------------------------------------------------------
X	basename(fullname) - strip directory name from filename
X
returns address of static string
--------------------------------------------------------------------------*/
char *
basename(fullname)
char *fullname;
{
register char *start;
static char outstr[256];
char *strrchr();
X
X	start = strrchr(fullname,'/'); /* find last slash */
X	if(!start)
X		return(fullname);
X	start++;
X	strcpy(outstr,start);
X	return(outstr);
}	/* end of basename */
X
/*+-------------------------------------------------------------------------
X	leaving() - perform leave() basic processing and return
--------------------------------------------------------------------------*/
void
leaving()
{
X	wmove(wscr,CMD_TLY,0);
X	use_cp(wscr,cpLIT);
X	wclrtoeol(wscr);
X	pflush();
X	endwin();
}	/* end of leaving */
X
/*+-------------------------------------------------------------------------
X	leave(exit_code) - leave program with exit code
--------------------------------------------------------------------------*/
void
leave(exit_code)
int exit_code;
{
X	leaving();
X	exit(exit_code);
}	/* end of leave */
X
/*+-------------------------------------------------------------------------
X	leave_text(text,exit_code) - leave program with message and exit code
If exit_code == 255, do wperror
--------------------------------------------------------------------------*/
void
leave_text(text,exit_code)
char *text;
int exit_code;
{
X	if(exit_code == 255)
X	{
X	int y;
X	register x;
X	extern int errno;
X	extern int sys_nerr;
X	extern char *sys_errlist[];
X
X		top_panel(pscr);
X		wmove(wscr,MSG_TLY - 2,0);
X		use_cp(wscr,cpHIGH);
X		x = 0;
X		while(x++ < COLS)
X			waddch(wscr,(chtype)' ');
X		wmove(wscr,MSG_TLY - 1,0);
X		wprintw(wscr,"errno %d",errno);
X		if(errno < sys_nerr)
X			wprintw(wscr,": %s",sys_errlist[errno]);
X		getyx(wscr,y,x);
X		while(x++ < COLS)
X			waddch(wscr,(chtype)' ');
X	}
X	if (text && *text) disp_msg(cpHIGH,text);
X	leave(exit_code);
}	/* end of leave_text */
X
/*+-------------------------------------------------------------------------
X	adb_trap() - convenient trap for catching abort
X
X  Get a look at stack before abort() botches it
--------------------------------------------------------------------------*/
#if defined(ADB_DEBUG)
void
adb_trap()
{
X	printf("too bad .... goodbye\n");
}	/* end of adb_trap */
#endif
X
/*+-------------------------------------------------------------------------
X	caught_signal(sig) - SIGHUP thru SIGSYS: leave with possible abort
--------------------------------------------------------------------------*/
void
caught_signal(sig)
int sig;
{
X	leaving();
X	switch(sig)
X	{
X		case SIGQUIT:
X		case SIGILL:
X		case SIGTRAP:
X		case SIGIOT:
X		case SIGEMT:
X		case SIGFPE:
X		case SIGBUS:
X		case SIGSEGV:
X		case SIGSYS:
#if defined(ADB_DEBUG)
X			adb_trap();	/* if debugging, stop at convenient breakpoint */
#endif
X			abort();
X	}
X	exit(200);
}	/* end of caught_signal */
X
/*+-----------------------------------------------------------------------
X	char *get_elapsed_time(elapsed_seconds) - "ddd+hh:mm:ss" returned
X  static string address is returned
------------------------------------------------------------------------*/
char *
get_elapsed_time(elapsed_seconds)
time_t elapsed_seconds;
{
static char elapsed_time_str[32];
time_t dd,hh,mm,ss;
X
X	dd = 0;
X	hh = elapsed_seconds / 3600;
X	if(hh > 24)
X	{
X		dd = hh / 24;
X		elapsed_seconds -= dd * 3600 * 24;
X		hh %= 24;
X	}
X	elapsed_seconds -= hh * 3600;
X	mm = elapsed_seconds / 60L;
X	elapsed_seconds -= mm * 60L;
X	ss = elapsed_seconds;
X
X	if(dd)
X		(void)sprintf(elapsed_time_str,"%3ld+%02ld:%02ld:%02ld",dd,hh,mm,ss);
X	else
X		(void)sprintf(elapsed_time_str,"    %2ld:%02ld:%02ld",hh,mm,ss);
X	return(elapsed_time_str);
}	/* end of get_elapsed_time */
X
/*+-------------------------------------------------------------------------
X	draw_cpuscale_literals(win)
--------------------------------------------------------------------------*/
void
draw_cpuscale_literals(win,y,x)
WINDOW *win;
int y;
int x;
{
int x2 = x;
X
X	wmove(win,y,x);
X	use_cp(wscr,cpBANNER);
X	waddstr(win,"---- CPU --- tot usr ker brk ");
X	getyx(win,y,x2);
X	while(x2 < COLS)
X		waddch(win,(chtype)'-'),x2++;
X	use_cp(wscr,cpLIT);
X	wmove(win,y + 1,x);
X	if(CYCLEmsec == 1000L)
X		waddstr(win," Instant %  ");
X	else
X		wprintw(win,"%2d Sec Avg %%",(int)(CYCLEmsec / 1000L));
X	wmove(win,y + 2,x);
X  	wprintw(win,"%2d Sec Avg %%",(int)(CYCLEmsec * 5 / 1000L));
X	wmove(win,y + 3,x);
X  	wprintw(win,"%2d Sec Avg %%",(int)(CYCLEmsec * 10 / 1000L));
X
}	/* end of draw_cpuscale_literals */
X
/*+-------------------------------------------------------------------------
X	update_cpuscale(win,y,width,per_state)
X
000000000011111111112222222222333333333344444444445555555555666666
012345678901234567890123456789012345678901234567890123456789012345
tot usr ker misc 
### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--------------------------------------------------------------------------*/
#define _CPUSCALE_TX	0
#define _CPUSCALE_UX	4
#define _CPUSCALE_KX	8
#define _CPUSCALE_BX	12
#define _CPUSCALE_SX	16
X
time_t
update_cpuscale(win,y,x,width,per_state)
WINDOW *win;
int y;
int x;
register width;
time_t *per_state;
{
register itmp;
int accum = 0;
time_t idle = per_state[CPU_IDLE] + per_state[CPU_WAIT];
time_t cpu_ticks_total = idle + per_state[CPU_SXBRK] + 
X                         per_state[CPU_KERNEL] + per_state[CPU_USER];
time_t percent_user    = 0;
time_t percent_kernel  = 0;
time_t percent_break   = 0;
time_t percent_busy    = 0;
X
X	if(cpu_ticks_total)
X	{
X		percent_user    = (per_state[CPU_USER]   * 100) / cpu_ticks_total;
X		percent_kernel  = (per_state[CPU_KERNEL] * 100) / cpu_ticks_total;
X		percent_break   = (per_state[CPU_SXBRK]  * 100) / cpu_ticks_total;
X		percent_busy    = percent_user + percent_kernel + percent_break;
X	}
X
X	if(!idle)			/* take care of integer div truncation */
X		percent_busy = 100;
X
X	wmove(win,y, x + _CPUSCALE_TX);
X	if(percent_busy < 70)
X		use_cp(wscr,cpLOW);
X	else if(percent_busy < 90)
X		use_cp(wscr,cpMED);
X	else
X		use_cp(wscr,cpHIGH);
X	wprintw(win,"%3ld",percent_busy);
X
X	wmove(win,y, x + _CPUSCALE_UX);
X	use_cp(wscr,cpINFO);
X	wprintw(win,"%3ld",percent_user);
X	
X	wmove(win,y, x + _CPUSCALE_KX);
X	wprintw(win,"%3ld",percent_kernel);
X	
X	wmove(win,y, x + _CPUSCALE_BX);
X	wprintw(win,"%3ld",percent_break);
X	
X	wmove(win,y, x + _CPUSCALE_SX);
X	use_cp(wscr,cpLOW);
X	itmp = (width * percent_user) / 100;
X	accum += itmp;
X	while(itmp--)
X		waddch(win,(chtype)'u');
X
X	use_cp(wscr,cpMED);
X	itmp = (width * percent_kernel) / 100;
X	accum += itmp;
X	while(itmp--)
X		waddch(win,(chtype)'k');
X
X	use_cp(wscr,cpHIGH);
X	itmp = (width * percent_break) / 100;
X	accum += itmp;
X	while(itmp--)
X		waddch(win,(chtype)'b');
X
X	if((percent_busy > 98) && ((width - accum) > 0))
X	{
X		waddch(win,(chtype)'*');
X		accum++;
X	}
X
X	if((itmp = (width - accum)) > 0)
X	{
X		use_cp(wscr,cpLIT);
X		while(itmp--)
X			waddch(win,(chtype)' ');
X	}
X	return(cpu_ticks_total);
}	/* end of update_cpuscale */
X
/*+-------------------------------------------------------------------------
X	calc_cpu_avg(per_state) - add per_state array to avg array
--------------------------------------------------------------------------*/
void
calc_cpu_avg(per_state)
time_t per_state[];
{
register itmp;
X
X	if(!cpu_avg_init)
X	{
X		for(itmp = 0; itmp < CPU_AVG_MAX; itmp++)
X			(void)memcpy(cpu_avg[itmp],per_state,sizeof(time_t) * 5);
X		cpu_avg_init = 1;
X	}
X	else
X	{
X		for(itmp = 0; itmp < CPU_AVG_MAX - 1; itmp++)
X			(void)memcpy(cpu_avg[itmp],cpu_avg[itmp + 1],sizeof(time_t) * 5);
X		(void)memcpy(cpu_avg[itmp],per_state,sizeof(time_t) * 5);
X	}
X
}	/* end of calc_cpu_avg */
X
/*+-------------------------------------------------------------------------
X	get_cpu_avg(cpu_ticks,period)
--------------------------------------------------------------------------*/
get_cpu_avg(cpu_ticks,period)
time_t cpu_ticks[];
int period;
{
register iperiod = CPU_AVG_MAX;
register istate;
register count = period;
X
X	for(istate = 0; istate < 5; istate++)
X		cpu_ticks[istate] = 0;
X
X	while(count--)
X	{
X		iperiod--;
X		for(istate = 0; istate < 5; istate++)
X		{
X			cpu_ticks[istate] += (cpu_avg[iperiod])[istate];
X		}
X	}
X
X	for(istate = 0; istate < 5; istate++)
X		cpu_ticks[istate] /= period;
X
}	/* end of get_cpu_avg */
X
/*+-------------------------------------------------------------------------
X	draw_waitscale_literals(win)
--------------------------------------------------------------------------*/
void
draw_waitscale_literals(win,y,x)
WINDOW *win;
int y;
int x;
{
int x2 = x;
X
X	wmove(win,y,x);
X	use_cp(wscr,cpBANNER);
X	waddstr(win,"---- Wait -- tot  io pio swp -- (% of real time) ");
X	getyx(win,y,x2);
X	while(x2 < COLS)
X		waddch(win,(chtype)'-'),x2++;
X	use_cp(wscr,cpLIT);
X	wmove(win,y + 1,x);
X	if(CYCLEmsec == 1000L)
X		waddstr(win," Instant %  ");
X	else
X		wprintw(win,"%2d Sec Avg %%",(int)(CYCLEmsec / 1000L));
X	wmove(win,y + 2,x);
X  	wprintw(win,"%2d Sec Avg %%",(int)(CYCLEmsec * 5 / 1000L));
X	wmove(win,y + 3,x);
X  	wprintw(win,"%2d Sec Avg %%",(int)(CYCLEmsec * 10 / 1000L));
X
}	/* end of draw_waitscale_literals */
X
/*+-------------------------------------------------------------------------
X	draw_per_sec_literals(win)
--------------------------------------------------------------------------*/
void
draw_per_sec_literals(win,y,x)
WINDOW *win;
int y;
int x;
{
X
X	wmove(win,y,x);
X	use_cp(wscr,cpBANNER);
X	waddstr(win,"---- Sysinfo/Minfo --- (last ");
X	getyx(win,stat_period_msec_y,stat_period_msec_x);
X 	wprintw(win," %4ld msec activity) ",CYCLEmsec);
X	getyx(win,y,x);
X	while(x < getmaxx(win))
X		waddch(win,(chtype)'-'),x++;
X
}	/* end of draw_per_sec_literals */
X
/*+-------------------------------------------------------------------------
X	update_waitscale(win,y,width,per_state)
X
000000000011111111112222222222333333333344444444445555555555666666
012345678901234567890123456789012345678901234567890123456789012345
tot  io pio swp  
### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--------------------------------------------------------------------------*/
#define _WAITSCALE_TX	0
#define _WAITSCALE_IX	4
#define _WAITSCALE_PX	8
#define _WAITSCALE_WX	12
#define _WAITSCALE_SX	16
X
time_t
update_waitscale(win,y,x,width,per_state,total_ticks)
WINDOW *win;
int y;
int x;
register width;
time_t *per_state;
time_t total_ticks;
{
register itmp;
int accum = 0;
time_t percent_io = 0L;
time_t percent_swap = 0L;
time_t percent_pio = 0L;
time_t percent_total_wait;
time_t total_wait;
X
/* crock: because of latency, total_ticks < all wait ticks sometimes */
X	total_wait = per_state[W_IO] + per_state[W_SWAP] + per_state[W_PIO];
X	if(total_ticks < total_wait)
X		total_ticks = total_wait;
X
X	if(total_ticks)
X	{
X		percent_io    = (per_state[W_IO]   * 100) / total_ticks;
X		percent_pio   = (per_state[W_PIO]  * 100) / total_ticks;
X		percent_swap  = (per_state[W_SWAP] * 100) / total_ticks;
X	}
X
X	wmove(win,y, x + _WAITSCALE_TX);
X	percent_total_wait = percent_io + percent_swap + percent_pio;
X	if(percent_total_wait < 30)
X		use_cp(wscr,cpLOW);
X	else if(percent_total_wait < 50)
X		use_cp(wscr,cpMED);
X	else
X		use_cp(wscr,cpHIGH);
X	wprintw(win,"%3ld",percent_total_wait);
X
X	use_cp(wscr,cpINFO);
X	wmove(win,y, x + _WAITSCALE_IX);
X	wprintw(win,"%3ld",percent_io);
X	
X	wmove(win,y, x + _WAITSCALE_PX);
X	wprintw(win,"%3ld",percent_pio);
X	
X	wmove(win,y, x + _WAITSCALE_WX);
X	wprintw(win,"%3ld",percent_swap);
X	
X	wmove(win,y, x + _WAITSCALE_SX);
X	use_cp(wscr,cpLOW);
X	itmp = (width * percent_io) / 100;
X	accum += itmp;
X	while(itmp--)
X		waddch(win,(chtype)'i');
X
X	use_cp(wscr,cpMED);
X	itmp = (width * percent_pio) / 100;
X	accum += itmp;
X	while(itmp--)
X		waddch(win,(chtype)'p');
X
X	use_cp(wscr,cpHIGH);
X	itmp = (width * percent_swap) / 100;
X	accum += itmp;
X	while(itmp--)
X		waddch(win,(chtype)'s');
X
X	if((itmp = (width - accum)) > 0)
X	{
X		use_cp(wscr,cpLIT);
X		while(itmp--)
X			waddch(win,(chtype)' ');
X	}
X
}	/* end of update_waitscale */
X
/*+-------------------------------------------------------------------------
X	calc_wait_avg(per_state) - add per_state array to avg array
--------------------------------------------------------------------------*/
void
calc_wait_avg(per_state)
time_t per_state[];
{
register itmp;
X
X	if(!wait_avg_init)
X	{
X		for(itmp = 0; itmp < WAIT_AVG_MAX; itmp++)
X			(void)memcpy(wait_avg[itmp],per_state,sizeof(time_t) * 3);
X		wait_avg_init = 1;
X	}
X	else
X	{
X		for(itmp = 0; itmp < WAIT_AVG_MAX - 1; itmp++)
X			(void)memcpy(wait_avg[itmp],wait_avg[itmp + 1],sizeof(time_t) * 3);
X		(void)memcpy(wait_avg[itmp],per_state,sizeof(time_t) * 3);
X	}
X
}	/* end of calc_wait_avg */
X
/*+-------------------------------------------------------------------------
X	get_wait_avg(wait_ticks,period)
--------------------------------------------------------------------------*/
get_wait_avg(wait_ticks,period)
time_t wait_ticks[];
int period;
{
register iperiod = WAIT_AVG_MAX;
register istate;
register count = period;
X
X	for(istate = 0; istate < 3; istate++)
X		wait_ticks[istate] = 0;
X
X	while(count--)
X	{
X		iperiod--;
X		for(istate = 0; istate < 3; istate++)
X		{
X			wait_ticks[istate] += (wait_avg[iperiod])[istate];
X		}
X	}
X
X	for(istate = 0; istate < 3; istate++)
X		wait_ticks[istate] /= period;
X
}	/* end of get_wait_avg */
X
/*+-------------------------------------------------------------------------
X	extra_static_stuff()/extra_info_stuff() - for 43 line display
--------------------------------------------------------------------------*/
void
extra_static_stuff()
{
X	display_var(wscr,EXTRA_TLY,EXTRA1_TLX);
#if defined(HAS_BOOTINFO)
X	display_bootinfo(wscr,EXTRA_TLY,EXTRA2_TLX);
#endif
X	display_tune(wscr,EXTRA_TLY,EXTRA3_TLX);
}	/* end of extra_static_stuff */
X
void
extra_info_stuff()
{
X	display_proc(wscr,EXTRA_TLY,EXTRA4_TLX);
}	/* end of extra_info_stuff */
X
/*+-------------------------------------------------------------------------
X	read_sysinfo_and_minfo()
--------------------------------------------------------------------------*/
void
read_sysinfo_and_minfo()
{
#if defined(HAS_TIMEB)
X	timeb_last_info_read = timeb_info_read;
X	(void)ftime(&timeb_info_read);
#endif
X	kread((caddr_t)&sysinfo,sysinfoaddr,sizeof(sysinfo));
X	kread((caddr_t)&minfo,minfoaddr,sizeof(minfo));
}	/* end of read_sysinfo_and_minfo */
X
/*+-------------------------------------------------------------------------
X	main(argc,argv,envp)
--------------------------------------------------------------------------*/
/*ARGSUSED*/
main(argc,argv,envp)
int argc;
char **argv;
char **envp;
{
register itmp;
register char *cptr;
register chtype cmd;
register chtype initial_cmd = 0;
int errflg = 0;
int plock_indicator = 0;
time_t total_ticks;
long stat_period_msec;
long nap_msec;
int y,x;
int banner_free_x;
long ltmp, now;
#if !defined(HAS_TIMEB)
long then;
#endif /* HAS_TIMEB */
struct tm *lt;
static char stdoutbuf[2048];
char s80[80];
extern int optind;
X
/*
X * curses works better if standard output is fully buffered
X */
X	(void)setvbuf(stdout,stdoutbuf,_IOFBF,sizeof(stdoutbuf));
X
/*
X * check out command line
X */
X	while((itmp = getopt(argc,argv,"lPnpstw")) != -1)
X	{
X		switch(itmp)
X		{
X			case 'P':
X			case 'p':
#if defined(M_UNIX) || defined(SVR31) || defined(ISC22)
X			case 'n':
X			case 't':
#endif
#if defined(M_UNIX)
X			case 's':
#if defined(SCO322)
X			case 'w':
#endif
#endif
X				initial_cmd = (chtype) itmp;
X				break;
X			case 'l':
X				plock_indicator = 1;
X				break;
X			case '?':
X				errflg++;
X		}
X	}
X	if(errflg || (optind != argc))
X	{
X		static char *usage_str[]=
X		{
X			"-l lock process into memory (if root)",
X			"-p begin with short ps display",
X			"-P begin with long ps display (if 43 line screen)",
X			(char *)0
X		};
X		char **cpptr = usage_str;
X		fprintf(stderr,"usage: %s [-l] [-p | -P]\n",basename(*argv));
X		while(*cpptr)
X			(void)fprintf(stderr,"%s\n",*(cpptr++));
X		exit(1);
X	}
X
/*
X * if man wants to plock() try it; fail silently if non-root
X */
X	if(plock_indicator && plock(PROCLOCK))
X	{
X		nice(-5);
X		plock_indicator = 0;
X	}
X
/*
X * Real(tm) performance monitor users will have done a kernel link
X * and won't need to rely on /etc/systemid
X */
#ifdef SVR4
X	if(uname(&utsname) == -1)
#else
X	if(uname(&utsname))
#endif
X	{
X		leave_text("uname failed",255);
X		exit(1);
X	}
X
/*
X * allocate memory for cpu time array averaging buckets
X */
X	for(itmp = 0; itmp < CPU_AVG_MAX; itmp++)
X	{
X		if(!(cpu_avg[itmp] = (time_t *)malloc(sizeof(time_t) * 5)))
X			leave_text("cannot alloc memory for cpu avg arrays",1);
X	}
X
/*
X * allocate memory for wait time array averaging buckets
X */
X	for(itmp = 0; itmp < WAIT_AVG_MAX; itmp++)
X	{
X		if(!(wait_avg[itmp] = (time_t *)malloc(sizeof(time_t) * 3)))
X			leave_text("cannot alloc memory for wait avg arrays",1);
X	}
X
/*
X * initialize curses environment
X */
X	if(!initscr())
X	{
X		(void)printf("curses init failed\n");
X		exit(1);
X	}
#if defined(COLOR_PAIR)
X	has_colors_kludge();
#endif
X	clear();
X	refresh();
X
X	if((LINES < 24) || (COLS < 80))
X	{
X		waddstr(stdscr,"\n\n\nNeed at least 80x24 screen\n\n");
X		refresh();
X		endwin();
X		exit(1);
X	}
X
X	noecho();
X	keypad(stdscr,TRUE);
X	typeahead(-1);
#if !defined(HAS_RDCHK)
X	cbreak ();
#endif
X
/*
X * see u386mon.h cXXX definitons for A_BOLD requirements for bright colors
X */
#if defined(COLOR_PAIR)
X	if(color_avail)
X	{
X		start_color();
X		init_pair(cpLIT,cBLU,cBLK);
X		init_pair(cpINFO,cGRN,cBLK);
X		init_pair(cpLOW,cLTG,cBLK);
X		init_pair(cpMED,cYEL,cBLK);
X		init_pair(cpHIGH,cRED,cBLK);
X		init_pair(cpBANNER,cBLK,cWHT);
X		init_pair(cpREVERSE,cRED,cWHT);
X		init_pair(cpBANWARN,cBLU,cWHT);
X	}
#endif
X
#if (defined(i386) || defined(i486)) && defined(HI_BIT_CAN_BE_SET)
X	/* a hack for now -- assuming AT char set */
X	/* This does NOT work with SCO ... rumours are it does work somewhere */
X	acs_map['l'] = A_ALTCHARSET | sTL;	
X	acs_map['m'] = A_ALTCHARSET | sTR;	
X	acs_map['j'] = A_ALTCHARSET | sBL;	
X	acs_map['k'] = A_ALTCHARSET | sBR;	
X	acs_map['x'] = A_ALTCHARSET | sVR;		/* vertical rule */
X	acs_map['q'] = A_ALTCHARSET | sHR;		/* horizontal rule */
X	acs_map['t'] = A_ALTCHARSET | sLT;		/* left hand T */
X	acs_map['u'] = A_ALTCHARSET | sRT;		/* right hand T */
#endif
X
X	if(!(pscr = mkpanel(LINES,COLS,0,0,"main")))
X	{
X		addstr("cannot make screen panel");
X		refresh();
X		endwin();
X		exit(1);
X	}
X	wscr = panel_window(pscr);
X	top_panel(pscr);
#if !defined(HAS_RDCHK)
X	nodelay (wscr, TRUE);
#endif
X
/*
X * catch signals that can leave our tty in disarray
X */
X	for(itmp = SIGHUP; itmp < SIGSYS; itmp++)
X		signal(itmp,caught_signal);
X
/*
X * read nlist symbols, open /dev/kmem, /dev/mem, /dev/swap,
X * initialize detail environment
X * (all of these must occur after curses init)
X * drop euid and egid (after opening privileged mem/devices)
X * initialize process status uid->name hasher
X */
X	nlsym_read();
X	kinit(0);	/* /dev/kmem, read access only */
X	minit(0);	/* /dev/mem,  read access only */
X	sinit();	/* /dev/swap, only read access available */
X	(void)setuid(getuid());	/* some people run us setuid, so clen that up */
X	(void)setgid(getgid());	/* now that we have the fds open, drop egid */
X	kread((caddr_t)&v,vaddr,sizeof(v));
X	detail_init();
X
/*
X * start fireworks
X */
X	wmove(wscr,0,0);
X	use_cp(wscr,cpBANNER);
X	waddch(wscr,(chtype)' ');
X	waddstr(wscr,basename(*argv));
X	waddch(wscr,(chtype)' ');
X	waddstr(wscr,revision);
X	wprintw(wscr,"%d",PATCHLEVEL);	/* good for nine patches */
X
#if defined(mips)
X	waddstr(wscr,"/Tandem");
#else
#if defined(M_UNIX)
X	waddstr(wscr,"/SCO");
#else
#if defined(ISC)
#if defined(DELL)
X	waddstr(wscr,"/Dell");
#else
X	waddstr(wscr,"/ISC");
#endif
#endif
#endif
#endif
X	
#if defined(DELL)
X	wprintw(wscr," Rel %s Ver %s - Node %s ",
X		utsname.release,utsname.version,utsname.nodename);
#else
#if defined(m68k)
X	wprintw(wscr," %s %s - %s ",
X		utsname.release,utsname.version,utsname.nodename);
#else
X	/* utsname.release and utsname.version are practcally redundant here */
X	wprintw(wscr," %s - %s ",utsname.release,utsname.nodename);
#endif
#endif
X	getyx(wscr,y,x);
X	banner_free_x = x+2;
X	while(x < getmaxx(wscr))
X		waddch(wscr,(chtype)' '),x++;
X	wmove(wscr,0,COLS - 9);
X	waddstr(wscr,"av@ssw.de");
X	if(plock_indicator)
X	{
X		wmove(wscr,0,banner_free_x);
X		use_cp(wscr,cpMED);
X		waddstr(wscr," PLOCK ");
X		use_cp(wscr,cpBANNER);
X	}
X	wmove(wscr,3,0);
X	use_cp(wscr,cpMED);
X	waddstr(wscr,"WAIT");
X	pflush();
X
X	wmove(wscr,CMD_TLY,0);
X	use_cp(wscr,cpBANNER);
X	if(LINES >= 43)
X		waddstr(wscr,"ESC=quit P,p=ps m=main ");
X	else
X		waddstr(wscr,"ESC=quit p=ps e=extra m=main ");
#if defined(M_UNIX)
X	waddstr(wscr,"s=sio ");
#endif
#if defined(M_UNIX) || defined(SVR31) || defined(ISC22)
X	waddstr(wscr,"n=net t=table ");
#endif
#if defined(SCO322)
X	waddstr(wscr,"w=disk ");
#endif
X
X	if(getuid() == 0)	/* root can launch fireworks very predictably */
X		waddstr(wscr,"l/u=lock ");
X	waddstr(wscr,"+/-=rate");
X	getyx(wscr,y,x);
X	while(x < getmaxx(wscr))
X		waddch(wscr,(chtype)' '),x++;
X	use_cp(wscr,cpLIT);
X
/*
X * make initial kmem readings
X */
X	hz = (cptr = getenv("HZ")) ? atoi(cptr) : HZ;
X	if(!hz)		/* avoid problem reported by Ian Reid <ir@crosfield.co.uk> */
X		hz = HZ;
#ifndef SVR4
X	kread((caddr_t)&maxmem,maxmemaddr,sizeof(maxmem));
#endif
X	kread((caddr_t)&tune,tuneaddr,sizeof(tune));
X	kread((caddr_t)&v,vaddr,sizeof(v));
X
#ifndef SVR4
X	kread((caddr_t)&nswap,nswapaddr,sizeof(nswap));
X	itmp = -1;
#if defined(S3BSWPI)	/* 68000 handled here, not AT&T 3B */
X	itmp = _sysm68k (S3BSWPI,&swapint);	/* per nba@sysware.dk */
#endif
#if defined(SI86SWPI)
X	itmp = sysi86(SI86SWPI,&swapint);
#endif
#if defined(SMIPSSWPI)
X	itmp = sysmips(SMIPSSWPI,&swapint);
#endif
X	if(!itmp)
X	{
X		nswap = 0;
X		for (itmp = 0; itmp < MSFILES; itmp++)
X			nswap += swaptab[itmp].st_npgs * NBPP / NBPSCTR;
X	}
#endif
X
#if defined(HAS_BOOTINFO)
X	kread((caddr_t)&bootinfo,bootinfoaddr,sizeof(bootinfo));
#endif
X
X	read_sysinfo_and_minfo();
X	sysinfo_last = sysinfo;
X	minfo_last = minfo;
X
#if defined(HAS_TIMEB)
X	timeb_last_info_read = timeb_info_read;
#else
X	(void)time (&now);
#endif
X
/*
X * initialize static display (literals)
X */
X	draw_cpuscale_literals(wscr,CPUSCALE_TLY,0);
X	draw_waitscale_literals(wscr,WAITSCALE_TLY,0);
X	draw_per_sec_literals(wscr,PER_SEC_TLY,0);
X
X	if(LINES >= 43)
X		extra_static_stuff();
X
/*
X * while(user_not_bored) entertain_and_inform_user();
X */
#ifdef HAS_NAP
X	nap(CYCLEmsec);
#else
X	napms(CYCLEmsec);
#endif
X	while(1)
X	{
X
#if defined(HAS_TIMEB)
X		ftime(&timeb_cycle_start);
X		stat_period_msec = delta_msec(timeb_info_read,timeb_last_info_read);
X		(void)time(&now);
#else
X		then = now;
X		(void)time(&now);
X		stat_period_msec = (now - then) * 1000L;
#endif
X
X		lt = localtime(&now);
X		wmove(wscr,0,COLS - 18);
X		use_cp(wscr,cpBANNER);
X		wprintw(wscr,"%02d:%02d:%02d",lt->tm_hour,lt->tm_min,lt->tm_sec);
X
#ifdef SVR4
X		{
X		    static struct vmtotal   total;
X		    static struct anoninfo  anoninfo;
X
X		    kread ((caddr_t) &total, totaladdr, sizeof (total));
X		    kread ((caddr_t) &anoninfo, anoninfoaddr, sizeof (anoninfo));
X
#define LOG1024             10
#define pagetok(size)       (ctob (size) >> LOG1024)
X
X		    x_maxmem   = pagetok (total.t_rm);
X		    x_freemem  = pagetok (total.t_free);
X		    nswap    = pagetok (anoninfo.ani_max);
X		    freeswap = pagetok (anoninfo.ani_max - anoninfo.ani_resv);
X		}
#else
X		kread((caddr_t)&freemem,freememaddr,sizeof(freemem));
#endif
X		read_sysinfo_and_minfo();
X
X		/* heuristic validity determination */
X		wmove(wscr,0,banner_free_x + 8);
X		if((itmp = stat_period_msec > (CYCLEmsec + 3000L)) ||
X			(invalidity > INVALID_STATE))
X		{
X			use_cp(wscr,cpHIGH);
X			waddstr(wscr," INVALID ");
X			if(itmp)
X			{	/* gack - a hack */
X				itmp = (stat_period_msec - CYCLEmsec) / 1000;
X				if(itmp > 4)
X					itmp = 4;
X				invalidity += INVALID_STATE + itmp;
X			}
X		}
X		else if((itmp = (stat_period_msec > (CYCLEmsec + 1500L))) ||
X				(invalidity > INEXACT_STATE))
X		{
X			use_cp(wscr,cpMED);
X			waddstr(wscr," INEXACT ");
X			if(itmp)
X				invalidity += INEXACT_STATE;
X		}
X		if(invalidity && !(--invalidity))
X		{
X			use_cp(wscr,cpBANNER);
X			waddstr(wscr,"         ");
X		}
X		if(stat_period_msec > (CYCLEmsec + 1000L))
X			use_cp(wscr,cpREVERSE);
X		else if(stat_period_msec > (CYCLEmsec + 500L))
X			use_cp(wscr,cpBANWARN);
X		else
X			use_cp(wscr,cpBANNER);
X		wmove(wscr,stat_period_msec_y,stat_period_msec_x);
X		wprintw(wscr,"%5ld",stat_period_msec);
X
X
#if defined(FIRST_TRY)
X		/* going this way seems to get cpu+wait ticks > real time */
X		for (itmp = 0; itmp < 5; itmp++)
X			cpu_ticks[itmp] = sysidelta(cpu[itmp]);
X		for (itmp = 0; itmp < 3; itmp++)
X			wait_ticks[itmp] = sysidelta(wait[itmp]);
#else
X		for (itmp = 0; itmp < 5; itmp++)
X		{
X			if(itmp != CPU_WAIT)
X				cpu_ticks[itmp] = sysidelta(cpu[itmp]);
X		}
X		cpu_ticks[CPU_WAIT] = 0;
X		for (itmp = 0; itmp < 3; itmp++)
X			cpu_ticks[CPU_WAIT] += (wait_ticks[itmp] = sysidelta(wait[itmp]));
#endif
X
X		total_ticks = update_cpuscale(wscr,CPUSCALE_TLY + 1,CPUSCALE_SX,
X			CPUSCALE_WIDTH,cpu_ticks);
X
X		update_waitscale(wscr,WAITSCALE_TLY + 1,WAITSCALE_SX,
X			WAITSCALE_WIDTH,wait_ticks,total_ticks);
X
X		calc_cpu_avg(cpu_ticks);
X		calc_wait_avg(wait_ticks);
X
X		get_cpu_avg(cpu_ticks,5);
X		total_ticks = update_cpuscale(wscr,CPUSCALE_TLY + 2,CPUSCALE_SX,
X			CPUSCALE_WIDTH,cpu_ticks);
X
X		get_wait_avg(wait_ticks,5);
X		update_waitscale(wscr,WAITSCALE_TLY + 2,WAITSCALE_SX,
X			WAITSCALE_WIDTH,wait_ticks,total_ticks);
X
X		get_cpu_avg(cpu_ticks,10);
X		total_ticks = update_cpuscale(wscr,CPUSCALE_TLY + 3,CPUSCALE_SX,
X			CPUSCALE_WIDTH,cpu_ticks);
X
X		get_wait_avg(wait_ticks,10);
X		update_waitscale(wscr,WAITSCALE_TLY + 3,WAITSCALE_SX,
X			WAITSCALE_WIDTH,wait_ticks,total_ticks);
X
X		use_cp(wscr,cpINFO);
X		y = PER_SEC_TLY + 1;
X		wmove(wscr,y++,PER_SEC1_TLX);
X		disp_info_long(wscr,"bread    ","%7ld",sysidelta(bread));
X		wmove(wscr,y++,PER_SEC1_TLX);
X		disp_info_long(wscr,"bwrite   ","%7ld",sysidelta(bwrite));
X		wmove(wscr,y++,PER_SEC1_TLX);
X		if((ltmp = sysidelta(lread) - myreadcnt) < 0)
SHAR_EOF
true || echo 'restore of u386mon.c failed'
fi
echo 'End of av386mon part 2'
echo 'File u386mon.c is continued in part 3'
echo 3 > _shar_seq_.tmp
exit 0
-- 
Andreas Vogel                   Bahnhofstr. 13 / D-7300 Esslingen / Germany
				Voice:  +49-711/357613
				E-Mail: av@ssw.de
