[comp.sources.misc] v13i103: u386mon 1.12 part 01.04

wht@gatech.edu@n4hgf.UUCP (Warren Tucker) (07/03/90)

Posting-number: Volume 13, Issue 103
Submitted-by: wht@gatech.edu@n4hgf.UUCP (Warren Tucker)
Archive-name: u386mon-1.12/part01

[DRAT!  I had *two* versions in the queue and didn't even notice.  Sigh. ++bsa]

This is u386mon, a "performance" monitor for SCO UNIX V/386.  Thanks to
peter@radig.de (Peter Radig), dug@kd4nc (Doug Drye) and jdc@uudell.dell.com
(Jeremy Chatfield), it also works with ISC 386/ix.  It may work with other
UNIX systems with a little work.  It requires terminfo style curses and will
use color if you have it.  It works best with a 43 line (or greater) screen,
but will work with a 25 line screen with some limitations.  It has been tested
with 25 and 43 line screens on the multiscreen console and on a Wyse 60 (under
SCO, using terminfo wy60, yielding interesting "color" mappings).

#!/bin/sh
# This is u386mon.1.12, a shell archive (shar 3.30)
# made 06/29/1990 03:57 UTC by root@n4hgf
# Source directory /u1/src/u386mon
#
# existing files WILL be overwritten
#
# This shar contains:
# length  mode       name
# ------ ---------- ------------------------------------------
#  13194 -rw-r--r-- README
#   7573 -rw-r--r-- Makefile.sco
#   7846 -rw-r--r-- Makefile.isc
#   5216 -rw-r--r-- bootinfo.c
#   7070 -rw-r--r-- detail.c
#  17149 -rw-r--r-- det_proc.c
#  12630 -rw-r--r-- det_sio.c
#   4936 -rw-r--r-- disputil.c
#   2780 -rw-r--r-- libkmem.c
#   2778 -rw-r--r-- libmem.c
#   1964 -rw-r--r-- libswap.c
#   2706 -rw-r--r-- libnlsym.c
#   2933 -rw-r--r-- nlsym.c
#   3411 -rw-r--r-- proc.c
#   1941 -rw-r--r-- tune.c
#  28976 -rw-r--r-- u386mon.c
#   2079 -rw-r--r-- var.c
#    859 -rw-r--r-- libkmem.h
#    855 -rw-r--r-- libmem.h
#    780 -rw-r--r-- libswap.h
#    826 -rw-r--r-- libnlsym.h
#   6985 -rw-r--r-- lint_args.h
#   5457 -rw-r--r-- nlsym.h
#   3211 -rw-r--r-- u386mon.h
#   1186 -rw-r--r-- renice/Makefile
#   4189 -rw-r--r-- renice/renice.c
#
if touch 2>&1 | fgrep 'mmdd' > /dev/null
 then TOUCH=touch
 else TOUCH=true
fi
# ============= README ==============
echo "x - extracting README (Text)"
sed 's/^X//' << 'SHAR_EOF' > README &&
Xu386mon README - last updated Tue Jun 26 16:29:46 EDT 1990
X
XThis is u386mon, a "performance" monitor for SCO UNIX V/386.  Thanks to
Xpeter@radig.de (Peter Radig), dug@kd4nc (Doug Drye) and jdc@uudell.dell.com
X(Jeremy Chatfield), it also works with ISC 386/ix.  It may work with other
XUNIX systems with a little work.  It requires terminfo style curses and will
Xuse color if you have it.  It works best with a 43 line (or greater) screen,
Xbut will work with a 25 line screen with some limitations.  It has been tested
Xwith 25 and 43 line screens on the multiscreen console and on a Wyse 60 (under
XSCO, using terminfo wy60, yielding interesting "color" mappings).
X
XThis little light show has already helped me diagnose the traditional
X"stop-the-world-and-beat-disk-continually-for-15-seconds" problem as
Xmemory exhaustion.  It has also been a good learning experience.
X
XRead through this and you will finally reach "How to get going" below.
X
XSample output
X=============
X(with 43-line screen; a 25 line screen will be missing Var/Bootinfo/Tune/Proc
Xon the 'main' display)
X
X u386mon 1.05  n4hgf - i386 3.2                               18:24:15 wht@n4hgf
X---- CPU --- tot usr ker brk ---------------------------------------------------
X Instant %    24  12  12   0 uuuuuukkkkkk                                       
X 5 Sec Avg %  27  13  14   0 uuuuuukkkkkkk                                      
X10 Sec Avg %  22  12  10   0 uuuuuukkkkk                                        
X---- Wait -- tot  io swp pio -- (% of real time) -------------------------------
X Instant %     0   0   0   0                                                    
X 5 Sec Avg %   0   0   0   0                                                    
X10 Sec Avg %   0   0   0   0                                                    
X---- Sysinfo/Minfo --- (last 1 second activity) --------------------------------
Xbread         0  rawch      1     pswitch    6    vfault    0    unmodsw   0    
Xbwrite        0  canch      0     syscall  167    demand    0    unmodfl   0    
Xlread        23  outch   1822     sysread   85    pfault    0    psoutok   0    
Xlwrite        0                   syswrit    6    cw        0    psinfai   0    
Xswapin        0  msg        0     sysfork    0    steal     0    psinok    0    
Xswapout       0  sema       0     sysexec    0    frdpgs    0    rsout     0    
Xbswapin       0                                   vfpg      0    rsin      0    
Xbswapout      0  maxmem    5716k  runque     0    sfpg      0                   
Xiget          2  frmem     2260k  runocc     0    vspg      0    pages on       
Xnamei         1  mem used    61%  swpque     0    sspg      0    swap      0    
Xdirblk        2  nswap    10000k  swpocc     0    pnpfault  0    cache     0    
Xreadch    34944  frswp     9912k                  wrtfault  0    file      0    
Xwritch     2078  swp used     1%                                                
X                                                                                
X                                                                                
X                                                                                
X-- Var ---------  -- Bootinfo ----------  -- Tune ---------  -- Proc ---        
Xv_autoup      10  basemem      640k       t_ageintvl      9  sleep    24        
Xv_buf        600  extmem      6144k       t_bdflushr      1  run       0        
Xv_clist      200  bflags   00000000       t_gpgshi       40  zombie    3        
Xv_file       200  memory available        t_gpgslo       25  stop      0        
Xv_hbuf        64  00000000 000a0000       t_gpgsmsk   0x420  idle      0        
Xv_inode      200  00100000 00600000       t_maxfc         1  onproc    1        
Xv_maxpmem      0  00f40000 00060000 NODM  t_maxsc         1  xbrk      0        
Xv_maxup       60  memory used             t_maxumem    2560  total    28        
Xv_mount        5  00000000 00004000 RSVD  t_minarmem     25  in mem   28        
Xv_pbuf        20  006b9000 00038000 KBSS  t_minasmem     25                     
Xv_proc       100  006f1000 0000f000 KDTA                                        
Xv_region     210  00fa5000 0005b000 KTXT                                        
Xv_vhndfrac    16                                                                
X                                                                                
XThe main display
X================
X
XA brief description of reported information:
X
X1.  The CPU utilization is shown with smoothing of 1 ("instant"),
X    5 and 10 seconds.  Total CPU usage is shown, with user, kernel
X    and "break" subdivided.  Most performance utilities (vmstat)
X    lump kernel (CPU_KERNEL) and wait (CPU_WAIT) times together
X    as kernel time.  u386mon considers CPU_WAIT time as idle (the
X    CPU could have been doing something if an otherwise ready process
X    wasn't waited).
X
X    On a color display, total cpu utilization is displayed in
X    green if the cpu utilization is below 70%, yellow if utilization
X    is between 70% and 89% and red if 90% or above.
X
X2.  The Wait display shows the 1 ("instant"), 5 and 10 second smoothed
X    percentages of real time no process could be run because otherwise
X    ready to run processes were waiting on logical, swap or physical I/O.
X
X    On a color display, total wait time is displayed in green if it is
X    below 30%, yellow if utilization is between 30% and 49% and red if
X    50% or above.
X
X3.  Sysinfo/Minfo display shows, generally, the number of events for a
X    measured value since the last display update.  For example, runque
X    shows the number of times a process was placed on the run queue.
X    An exception is the memory and swap space fields:  These numbers
X    reflect absolute current utilization.
X
X4.  If you run u386mon on a 43 line display, extra information is displayed
X    on the bottom of the screen (from the struct var v, bootinfo
X    and proc kernel databases).
X
X5.  On a color display, static numeric values, such as maxmem appear
X    in blue (the same color as screen literals/labels).  Dynamic
X    numeric values are displayed in green, with the exception of
X    total cpu and wait percentages, which appear in light green,
X    red or yellow.
X
X6.  An "INEXACT" indication on the top line means that u386mon was
X    not scheduled quickly enough to capture accurate 1 second
X    values.  Continued INEXACT indication suggests the 5 and 10
X    second smoothed values are also wrong.
X
X    An "INVALID" indication means u386mon was not scheduled for 4
X    seconds or more; all dynamic values are suspect.
X    IN GENERAL, if you see any red characters on the display,
X    immediately take grain of salt. If you have no color screen
X    and still see red, add tequila to salt.
X
X7.  If you are running as root, you may use the -l switch or the
X    'l' command to lock u386mon into memory.  If you do this, PLOCK
X    will appear at the top of the screen to remind you of this hoggy
X    behavior.  The u386mon process will not be listed in a process
X    status display since SSYS (locked, resident) processes are not
X    shown.
X
X8.  The ISC bootinfo field will have different information due to
X    different porting by ISC and SCO.
X
X9.  The 'e' command accesses the Var/Bootinfo/Tune/Proc display,
X    overlaying the Sysinfo/Minfo display.
X
XProcess Status Display
X======================
X
X1.  Pressing 'p' causes a process status display of sorts to be
X    shown, overlaying Sysinfo/Minfo on a 25 line screen or
X    Var/Bootinfo/Tune/Proc on a 43 line screen.  On a 43 line screen, 'P'
X    causes a larger ps display to be shown, overlaying Sysinfo/Minfo and
X    Var/Bootinfo/Tune/Proc.
X
X    Sample output:
X
XS     USER   PID  CPU PRI NI  UCPU   SCPU  SIZE TTY CMD
Xs     root    148   0  26 20   0:00   0:05  108  ?? /etc/cron
Xs      wht  14946   2  39 20   0:02   0:11  224  05 TMR 01000a12
Xs      wht  14947   2  39 20   0:02   0:11  220  05 TMR 01011101
Xs      wht  14950   0  27 20   0:00   0:02  228  05 IP 01000a12
Xs      wht  14951   1  27 20   0:00   0:02  224  05 IP 01011101
Xs      wht  14952   0  27 20   0:01   0:02  228  05 TP4 01000a12
Xs      wht  14953   1  27 20   0:01   0:03  224  05 TP4 01011101
Xs      wht  14957   0  27 20   0:00   0:04  200  05 smpad.x
Xs      wht  14960   1  27 20   0:00   0:04  204  05 mmpad.x
Xs     root  15044   0  28 20   0:01   0:01  296  12 vi README
Xs     uucp  15053   0  30 26   0:00   0:00  696  ?? /usr/lib/uucp/uusched
Xs     uucp  15055   0  30 26   0:00   0:00  748  ?? UUCICO -r1 -sgatech
Xs     uucp  15060   0  28 26   0:00   0:00  768  ?? dialTBIT tty2E 2222222UC 192
X
X    NOTES
X    a.   S - two character status
X            1st character - process status
X               s - sleeping
X               R - ready to run (might be running if u386mon were not)
X               z - zombie
X               d - stopped by debugger
X               i - idle (in creation?)
X               p - running on processor (on single CPU systems, only u386mon
X                   will show this)
X               x - XBREAK - process growing or shrinking
X            2nd character - process swap status
X               S - process is swapped
X               blank - process is in memory
X
X    b.  If the process is running with setuid, a '#' appears to
X        the right of the username.
X
X    c.  On color systems, processes ready to run are shown in yellow
X        unless they are ready, but swapped out, in which case they
X        are shown in red.
X
X3.  Since a limited space is available for displaying process
X    status, particularly on a 25-line screen, a selective elimination
X    algorithm is used to whittle the list when insufficient room
X    is available.  init (pid 1) and system/resident (SSYS)
X    processes are never displayed.  When a display cycle is to begin
X    and there is not room for all of the processes to be shown,
X    processes are eliminated in the following order:
X
X    a. 'getty', 'uugetty', 'sh', 'csh', and 'ksh'
X    b. swapped and zombie processes
X    c. sleeping processes
X
X    If there is still insufficient room, an indication to the effect
X    is displayed (tough cookies).
X
X
XA $0.0002 tour: why nlsym and /unix.nlsym?
X==========================================
X
XAccess to kernel (/dev/kmem) and physical (/dev/mem) memory and
Xswap (/dev/swap) is required for u386mon to do its thing.
XTo find kmem addresses of interest, an nlist(S) call must be made
Xagainst /unix.  This can be quite expensive.
X
XThe 'nlist' procedure is performed by a separate program (nlsym)
Xand the resulting nlist structure array is stored in /unix.nlsym.
Xu386mon thus may obtain nlist information rapidly without nlist(S) each
Xtime it is executed.  Also stored in /unix.nlsym is a stat structure of
X/unix at the time of nlsym execution.  A unique word is stored at the
Xend of the file in case /unix.nlsym's nlist structure is expanded for
Xother applications.  The u386mon program reads /unix.nlsym by means
Xof facilities in libnlsym.c.  If the stat structure in /unix.nlsym
Xdoes not match a dynamic stat of /unix or if the unique word does
Xnot match, the nlist information is not trusted and u386mon prompts
Xthe user to run (or have run) the nlsym program to update /unix.nlsym.
X
XMany symbols are nlist'ed by nlsym which are not used by u386mon.
XYou may find other uses for libnlsym/libkmem which make use of them.
X
XHow to get going
X================
X
X1.  Copy Makefile.sco or Makefile.isc to Makefile, depending on
X    your system.
X
X2.  Edit Makefile to change BINDIR to match your local requirements.
X    If you have a kernel that knows about MERGE386 as with SCO ODT,
X    add -DMERGE386 to CFLAGS. Likewise, if you have VPIX, add -DVPIX.
X
X3.  make all.
X
X4.  you must run make install as root since u386mon must be setuid to
X    'mem' ('sys' for ISC) and nlsym must produce /unix.nlsym.
X
X5.  Sources are in 4-spaced tab format (please don't flame :-)).
X
X6.  Under SCO, you may have to chgrp mem /dev/swap; I did.  For some reason,
X    I found the group name for /dev/swap on my system to be 'network'.
X    I guess something may have been broken by my changing the group,
X    but it hasn't bit me yet.
X
X    The ISC Makefile unconditionally sets g+r on /dev/swap, since this
X    necessary permission is not ordinarily present.
X
X7.  usage: u386mon [-l] [-p | -P]
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
X8.  If you are getting 4 as the size of most or all processes,
X    try adding -DUTIME_FIXED.  SCO 3.2.0 had this info in the
X    struct user fields u_tsize, u_dsize, u_ssize wrong, IMHO,
X    and fixed it in ODT/3.2.1. See det_proc.c for more detail.
X    Your port may/WILL vary.
X
X9.  The renice program by Ford Ditto, from which the kmem routines
X    came, with this release.
X
X    usage: renice -# pid     decrease nice by #
X           renice +# pid     increase nice by #
X           renice =# pid     set nice to #
X
X    The traditional privileges for root and non-root are supported.
X
XComments are appreciated, especially bug fixes and information
Xhelping to port the program to another 386 S5R3.2 system.
X
XWarren Tucker N4HGF
Xemory!n4hgf!wht -or- wht%n4hgf.uucp@emory.mathcs.emory.edu
SHAR_EOF
$TOUCH -am 0626163190 README &&
chmod 0644 README ||
echo "restore of README failed"
set `wc -c README`;Wc_c=$1
if test "$Wc_c" != "13194"; then
	echo original size 13194, current size $Wc_c
fi
# ============= Makefile.sco ==============
echo "x - extracting Makefile.sco (Text)"
sed 's/^X//' << 'SHAR_EOF' > Makefile.sco &&
X#+-------------------------------------------------------------------
X#  Makefile for u386mon for SCO UNIX V/386
X#  ...!emory!n4hgf!wht
X#--------------------------------------------------------------------
X#+:EDITS:*/
X#:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers
X#:06-25-1990-04:14-wht@n4hgf-1.03-better error handling
X#:06-21-1990-14:27-r@n4hgf-version x0.12 seems bug free
X#:06-19-1990-21:37-wht@n4hgf-get ready for 0.08 release
X
X#------------> CFLAGS 
XCFLAGS = -c -Octl -DLINT_ARGS
X#CFLAGS = -c -O
X
X#------------> LIB
XLIB = -lpanel -ltinfo -lx
X#LIB = -lpanel -lcurses -lx
X
X#------------> KMEMGRP
XKMEMGRP = mem
X#KMEMGRP = sys
X
X#------------> BINDIR
XBINDIR = /usr/local/bin
X
XLDFLAGS = -s
X
XVERSION = 1.12
X
X#handle Sys V make "feature" of using SHELL
XSHELL = /bin/sh
X
X#FCRC = fcrc -u $*.c ;
X.c.o:;	$(FCRC) $(CC) $(CFLAGS) $*.c 
X
XSRC = \
X	bootinfo.c\
X	detail.c\
X	det_proc.c\
X	det_sio.c\
X	disputil.c\
X	libkmem.c\
X	libmem.c\
X	libswap.c\
X	libnlsym.c\
X	nlsym.c\
X	proc.c\
X	tune.c\
X	u386mon.c\
X	var.c
X
XHDR = \
X	libkmem.h\
X	libmem.h\
X	libswap.h\
X	libnlsym.h\
X	lint_args.h\
X	nlsym.h\
X	u386mon.h
X
XNLSYM_OBJ =\
X	nlsym.o
X
XU386MON_OBJ =\
X	u386mon.o\
X	detail.o\
X	det_proc.o\
X	det_sio.o\
X	bootinfo.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
XSHARFLS = \
X	README\
X	Makefile.sco\
X	Makefile.isc\
X	$(SRC)\
X	$(HDR)\
X	renice/Makefile\
X	renice/renice.c
X
Xall: nlsym u386mon
X
X#must run as root
Xinstall: all
X	cp nlsym $(BINDIR)
X	chown bin $(BINDIR)/nlsym
X	chgrp bin $(BINDIR)/nlsym
X	chmod 711 $(BINDIR)/nlsym
X	mv u386mon $(BINDIR)
X	chown bin $(BINDIR)/u386mon
X	chgrp $(KMEMGRP) $(BINDIR)/u386mon
X	chmod 2711 $(BINDIR)/u386mon
X	nlsym
X	@echo ' ';echo 'csh users rehash before executing'
X
Xnlsym: $(NLSYM_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(NLSYM_OBJ) $(LIB)
X
Xu386mon: $(U386MON_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(U386MON_OBJ) $(LIB)
X
X/unix.nlsym: nlsym /unix
X	nlsym
X	chmod 644 /unix.nlsym
X
X#not delivered
Xsrc.fls: $(SRC) Makefile
X	ls $(SRC) > src.fls
Xlint_args: src.fls
X	echo ' ' > lint_args.h
X	csh zgcc src.fls lint_args.h $(CFLAGS)
X
Xclean:
X	rm -f $(U386MON_OBJ) $(NLSYM_OBJ) \
X		core u386mon.lint Makefile.bak src.fls mkdep.*
X
Xclobber: clean
X	rm -f nlsym u386mon
X
Xlint:
X	lint -ux *.c > u386mon.lint
X
X#for shar 3.27 or later
Xshar:
X	shar -a -n u386mon.$(VERSION) -l 55 -o $(VERSION).sh $(SHARFLS)
X
X# MAKE DEPEND: regenerate .c:.h, .ol:.c, .ol:.asm dependencies automatically
X#
Xdepend:
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 '/^# 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 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 Makefile.bak
X		mv Makefile.new Makefile
X
X# DO NOT DELETE THIS LINE
Xbootinfo.o: /usr/include/curses.h
Xbootinfo.o: /usr/include/panel.h
Xbootinfo.o: /usr/include/sys/types.h
Xbootinfo.o: /usr/include/sys/bootinfo.h
Xbootinfo.o: u386mon.h
Xdetail.o: /usr/include/curses.h
Xdetail.o: /usr/include/panel.h
Xdetail.o: /usr/include/signal.h
Xdetail.o: /usr/include/string.h
Xdetail.o: /usr/include/fcntl.h
Xdetail.o: /usr/include/nlist.h
Xdetail.o: /usr/include/errno.h
Xdetail.o: /usr/include/time.h
Xdetail.o: /usr/include/pwd.h
Xdetail.o: /usr/include/sys/types.h
Xdetail.o: /usr/include/utmp.h
Xdetail.o: /usr/include/sys/utsname.h
Xdetail.o: /usr/include/sys/stat.h
Xdetail.o: /usr/include/sys/ascii.h
Xdetail.o: /usr/include/sys/param.h
Xdetail.o: /usr/include/sys/bootinfo.h
Xdetail.o: /usr/include/sys/tuneable.h
Xdetail.o: /usr/include/sys/sysinfo.h
Xdetail.o: /usr/include/sys/sysmacros.h
Xdetail.o: /usr/include/sys/immu.h
Xdetail.o: /usr/include/sys/region.h
Xdetail.o: /usr/include/sys/proc.h
Xdetail.o: /usr/include/sys/var.h
Xdetail.o: nlsym.h
Xdetail.o: libkmem.h
Xdetail.o: libnlsym.h
Xdetail.o: u386mon.h
Xdet_proc.o: /usr/include/curses.h
Xdet_proc.o: /usr/include/panel.h
Xdet_proc.o: /usr/include/signal.h
Xdet_proc.o: /usr/include/string.h
Xdet_proc.o: /usr/include/fcntl.h
Xdet_proc.o: /usr/include/nlist.h
Xdet_proc.o: /usr/include/errno.h
Xdet_proc.o: /usr/include/time.h
Xdet_proc.o: /usr/include/pwd.h
Xdet_proc.o: /usr/include/sys/types.h
Xdet_proc.o: /usr/include/utmp.h
Xdet_proc.o: /usr/include/sys/stat.h
Xdet_proc.o: /usr/include/sys/ascii.h
Xdet_proc.o: /usr/include/sys/param.h
Xdet_proc.o: /usr/include/sys/bootinfo.h
Xdet_proc.o: /usr/include/sys/tuneable.h
Xdet_proc.o: /usr/include/sys/sysinfo.h
Xdet_proc.o: /usr/include/sys/sysmacros.h
Xdet_proc.o: /usr/include/sys/immu.h
Xdet_proc.o: /usr/include/sys/region.h
Xdet_proc.o: /usr/include/sys/proc.h
Xdet_proc.o: /usr/include/sys/fs/s5dir.h
Xdet_proc.o: /usr/include/sys/user.h
Xdet_proc.o: /usr/include/sys/var.h
Xdet_proc.o: nlsym.h
Xdet_proc.o: libkmem.h
Xdet_proc.o: libmem.h
Xdet_proc.o: libswap.h
Xdet_proc.o: libnlsym.h
Xdet_proc.o: u386mon.h
Xdisputil.o: /usr/include/curses.h
Xdisputil.o: /usr/include/panel.h
Xdisputil.o: /usr/include/sys/types.h
Xdisputil.o: u386mon.h
Xlibkmem.o: /usr/include/sys/types.h
Xlibkmem.o: /usr/include/fcntl.h
Xlibkmem.o: libkmem.h
Xlibmem.o: /usr/include/sys/types.h
Xlibmem.o: /usr/include/fcntl.h
Xlibmem.o: libmem.h
Xlibswap.o: /usr/include/sys/types.h
Xlibswap.o: /usr/include/fcntl.h
Xlibswap.o: libswap.h
Xlibnlsym.o: /usr/include/stdio.h
Xlibnlsym.o: /usr/include/sys/types.h
Xlibnlsym.o: /usr/include/sys/stat.h
Xlibnlsym.o: /usr/include/fcntl.h
Xlibnlsym.o: /usr/include/nlist.h
Xlibnlsym.o: nlsym.h
Xlibnlsym.o: libnlsym.h
Xnlsym.o: /usr/include/stdio.h
Xnlsym.o: /usr/include/sys/types.h
Xnlsym.o: /usr/include/sys/stat.h
Xnlsym.o: /usr/include/fcntl.h
Xnlsym.o: /usr/include/nlist.h
Xnlsym.o: nlsym.h
Xproc.o: /usr/include/curses.h
Xproc.o: /usr/include/panel.h
Xproc.o: /usr/include/sys/types.h
Xproc.o: /usr/include/sys/param.h
Xproc.o: /usr/include/sys/immu.h
Xproc.o: /usr/include/sys/region.h
Xproc.o: /usr/include/sys/proc.h
Xproc.o: /usr/include/sys/var.h
Xproc.o: /usr/include/nlist.h
Xproc.o: nlsym.h
Xproc.o: libkmem.h
Xproc.o: libnlsym.h
Xproc.o: u386mon.h
Xtune.o: /usr/include/curses.h
Xtune.o: /usr/include/panel.h
Xtune.o: /usr/include/sys/types.h
Xtune.o: /usr/include/sys/tuneable.h
Xtune.o: u386mon.h
Xu386mon.o: /usr/include/curses.h
Xu386mon.o: /usr/include/panel.h
Xu386mon.o: /usr/include/signal.h
Xu386mon.o: /usr/include/string.h
Xu386mon.o: /usr/include/fcntl.h
Xu386mon.o: /usr/include/nlist.h
Xu386mon.o: /usr/include/errno.h
Xu386mon.o: /usr/include/time.h
Xu386mon.o: /usr/include/sys/types.h
Xu386mon.o: /usr/include/sys/lock.h
Xu386mon.o: /usr/include/sys/utsname.h
Xu386mon.o: /usr/include/sys/stat.h
Xu386mon.o: /usr/include/sys/ascii.h
Xu386mon.o: /usr/include/sys/param.h
Xu386mon.o: /usr/include/sys/bootinfo.h
Xu386mon.o: /usr/include/sys/tuneable.h
Xu386mon.o: /usr/include/sys/sysinfo.h
Xu386mon.o: /usr/include/sys/sysmacros.h
Xu386mon.o: /usr/include/sys/immu.h
Xu386mon.o: /usr/include/sys/region.h
Xu386mon.o: /usr/include/sys/proc.h
Xu386mon.o: /usr/include/sys/var.h
Xu386mon.o: nlsym.h
Xu386mon.o: libkmem.h
Xu386mon.o: libmem.h
Xu386mon.o: libswap.h
Xu386mon.o: libnlsym.h
Xu386mon.o: u386mon.h
Xvar.o: /usr/include/curses.h
Xvar.o: /usr/include/panel.h
Xvar.o: /usr/include/sys/types.h
Xvar.o: /usr/include/sys/var.h
Xvar.o: u386mon.h
X#	DEPENDENCIES MUST END AT END OF	FILE
X#	IF YOU PUT STUFF HERE IT WILL GO AWAY
X#	see make depend	above
SHAR_EOF
$TOUCH -am 0628234390 Makefile.sco &&
chmod 0644 Makefile.sco ||
echo "restore of Makefile.sco failed"
set `wc -c Makefile.sco`;Wc_c=$1
if test "$Wc_c" != "7573"; then
	echo original size 7573, current size $Wc_c
fi
# ============= Makefile.isc ==============
echo "x - extracting Makefile.isc (Text)"
sed 's/^X//' << 'SHAR_EOF' > Makefile.isc &&
X#+-------------------------------------------------------------------
X#  Makefile for u386mon for ISC 386/ix
X#  ...!emory!n4hgf!wht
X#--------------------------------------------------------------------
X#+:EDITS:*/
X#:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers
X#:06-25-1990-04:14-wht@n4hgf-1.03-better error handling
X#:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de
X#:06-21-1990-14:27-r@n4hgf-version x0.12 seems bug free
X#:06-19-1990-21:37-wht@n4hgf-get ready for 0.08 release
X
X#------------> CFLAGS 
X# Add -DVPIX if you have VP/ix
X# Add -DMERGE386 if you have Merge/386
X#CFLAGS = -c -Octl -DLINT_ARGS
XCFLAGS = -c -O -DVPIX -DISC
X
X#------------> LIB
X#LIB = -lpanel -ltinfo -lx
XLIB = -lpanel -lcurses -lx -lmalloc -lc_s
X
X#------------> KMEMGRP
X#KMEMGRP = mem
XKMEMGRP = sys
X
X#------------> BINDIR
XBINDIR = /usr/local/bin
X
XLDFLAGS = -s
X
XVERSION = 1.12
X
X#handle Sys V make "feature" of using SHELL
XSHELL = /bin/sh
X
X#FCRC = fcrc -u $*.c ;
X.c.o:;	$(FCRC) $(CC) $(CFLAGS) $*.c 
X
XSRC = \
X	bootinfo.c\
X	detail.c\
X	det_proc.c\
X	det_sio.c\
X	disputil.c\
X	libkmem.c\
X	libmem.c\
X	libswap.c\
X	libnlsym.c\
X	nlsym.c\
X	proc.c\
X	tune.c\
X	u386mon.c\
X	var.c
X
XHDR = \
X	libkmem.h\
X	libmem.h\
X	libswap.h\
X	libnlsym.h\
X	lint_args.h\
X	nlsym.h\
X	u386mon.h
X
XNLSYM_OBJ =\
X	nlsym.o
X
XU386MON_OBJ =\
X	u386mon.o\
X	detail.o\
X	det_proc.o\
X	bootinfo.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
XSHARFLS = \
X	README\
X	Makefile.sco\
X	Makefile.isc\
X	$(SRC)\
X	$(HDR)\
X	renice/Makefile\
X	renice/renice.c
X
Xall: nlsym u386mon
X
X#must run as root
Xinstall: 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
Xnlsym: $(NLSYM_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(NLSYM_OBJ) $(LIB)
X
Xu386mon: $(U386MON_OBJ)
X	$(CC) $(LDFLAGS) -o $@ $(U386MON_OBJ) $(LIB)
X
X/unix.nlsym: nlsym /unix
X	nlsym
X	chmod 644 /unix.nlsym
X
X#not delivered
Xsrc.fls: $(SRC) Makefile
X	ls $(SRC) > src.fls
Xlint_args: src.fls
X	echo ' ' > lint_args.h
X	csh zgcc src.fls lint_args.h $(CFLAGS)
X
Xclean:
X	rm -f $(U386MON_OBJ) $(NLSYM_OBJ) \
X		core u386mon.lint Makefile.bak src.fls mkdep.*
X
Xclobber: clean
X	rm -f nlsym u386mon
X
Xlint:
X	lint -ux *.c > u386mon.lint
X
X#for shar 3.27 or later
Xshar:
X	shar -a -n u386mon.$(VERSION) -l 55 -o $(VERSION).sh $(SHARFLS)
X
X# MAKE DEPEND: regenerate .c:.h, .ol:.c, .ol:.asm dependencies automatically
X#
Xdepend:
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 '/^# 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 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 Makefile.bak
X		mv Makefile.new Makefile
X
X# DO NOT DELETE THIS LINE
Xbootinfo.o: /usr/include/curses.h
Xbootinfo.o: /usr/include/panel.h
Xbootinfo.o: /usr/include/sys/types.h
Xbootinfo.o: /usr/include/sys/bootinfo.h
Xbootinfo.o: u386mon.h
Xdetail.o: /usr/include/curses.h
Xdetail.o: /usr/include/panel.h
Xdetail.o: /usr/include/signal.h
Xdetail.o: /usr/include/string.h
Xdetail.o: /usr/include/fcntl.h
Xdetail.o: /usr/include/nlist.h
Xdetail.o: /usr/include/errno.h
Xdetail.o: /usr/include/time.h
Xdetail.o: /usr/include/pwd.h
Xdetail.o: /usr/include/sys/types.h
Xdetail.o: /usr/include/utmp.h
Xdetail.o: /usr/include/sys/utsname.h
Xdetail.o: /usr/include/sys/stat.h
Xdetail.o: /usr/include/sys/ascii.h
Xdetail.o: /usr/include/sys/param.h
Xdetail.o: /usr/include/sys/bootinfo.h
Xdetail.o: /usr/include/sys/tuneable.h
Xdetail.o: /usr/include/sys/sysinfo.h
Xdetail.o: /usr/include/sys/sysmacros.h
Xdetail.o: /usr/include/sys/immu.h
Xdetail.o: /usr/include/sys/region.h
Xdetail.o: /usr/include/sys/proc.h
Xdetail.o: /usr/include/sys/var.h
Xdetail.o: nlsym.h
Xdetail.o: libkmem.h
Xdetail.o: libnlsym.h
Xdetail.o: u386mon.h
Xdet_proc.o: /usr/include/curses.h
Xdet_proc.o: /usr/include/panel.h
Xdet_proc.o: /usr/include/signal.h
Xdet_proc.o: /usr/include/string.h
Xdet_proc.o: /usr/include/fcntl.h
Xdet_proc.o: /usr/include/nlist.h
Xdet_proc.o: /usr/include/errno.h
Xdet_proc.o: /usr/include/time.h
Xdet_proc.o: /usr/include/pwd.h
Xdet_proc.o: /usr/include/sys/types.h
Xdet_proc.o: /usr/include/utmp.h
Xdet_proc.o: /usr/include/sys/stat.h
Xdet_proc.o: /usr/include/sys/ascii.h
Xdet_proc.o: /usr/include/sys/param.h
Xdet_proc.o: /usr/include/sys/bootinfo.h
Xdet_proc.o: /usr/include/sys/tuneable.h
Xdet_proc.o: /usr/include/sys/sysinfo.h
Xdet_proc.o: /usr/include/sys/sysmacros.h
Xdet_proc.o: /usr/include/sys/immu.h
Xdet_proc.o: /usr/include/sys/region.h
Xdet_proc.o: /usr/include/sys/proc.h
Xdet_proc.o: /usr/include/sys/fs/s5dir.h
Xdet_proc.o: /usr/include/sys/user.h
Xdet_proc.o: /usr/include/sys/var.h
Xdet_proc.o: nlsym.h
Xdet_proc.o: libkmem.h
Xdet_proc.o: libmem.h
Xdet_proc.o: libswap.h
Xdet_proc.o: libnlsym.h
Xdet_proc.o: u386mon.h
Xdisputil.o: /usr/include/curses.h
Xdisputil.o: /usr/include/panel.h
Xdisputil.o: /usr/include/sys/types.h
Xdisputil.o: u386mon.h
Xlibkmem.o: /usr/include/sys/types.h
Xlibkmem.o: /usr/include/fcntl.h
Xlibkmem.o: libkmem.h
Xlibmem.o: /usr/include/sys/types.h
Xlibmem.o: /usr/include/fcntl.h
Xlibmem.o: libmem.h
Xlibswap.o: /usr/include/sys/types.h
Xlibswap.o: /usr/include/fcntl.h
Xlibswap.o: libswap.h
Xlibnlsym.o: /usr/include/stdio.h
Xlibnlsym.o: /usr/include/sys/types.h
Xlibnlsym.o: /usr/include/sys/stat.h
Xlibnlsym.o: /usr/include/fcntl.h
Xlibnlsym.o: /usr/include/nlist.h
Xlibnlsym.o: nlsym.h
Xlibnlsym.o: libnlsym.h
Xnlsym.o: /usr/include/stdio.h
Xnlsym.o: /usr/include/sys/types.h
Xnlsym.o: /usr/include/sys/stat.h
Xnlsym.o: /usr/include/fcntl.h
Xnlsym.o: /usr/include/nlist.h
Xnlsym.o: nlsym.h
Xproc.o: /usr/include/curses.h
Xproc.o: /usr/include/panel.h
Xproc.o: /usr/include/sys/types.h
Xproc.o: /usr/include/sys/param.h
Xproc.o: /usr/include/sys/immu.h
Xproc.o: /usr/include/sys/region.h
Xproc.o: /usr/include/sys/proc.h
Xproc.o: /usr/include/sys/var.h
Xproc.o: /usr/include/nlist.h
Xproc.o: nlsym.h
Xproc.o: libkmem.h
Xproc.o: libnlsym.h
Xproc.o: u386mon.h
Xtune.o: /usr/include/curses.h
Xtune.o: /usr/include/panel.h
Xtune.o: /usr/include/sys/types.h
Xtune.o: /usr/include/sys/tuneable.h
Xtune.o: u386mon.h
Xu386mon.o: /usr/include/curses.h
Xu386mon.o: /usr/include/panel.h
Xu386mon.o: /usr/include/signal.h
Xu386mon.o: /usr/include/string.h
Xu386mon.o: /usr/include/fcntl.h
Xu386mon.o: /usr/include/nlist.h
Xu386mon.o: /usr/include/errno.h
Xu386mon.o: /usr/include/time.h
Xu386mon.o: /usr/include/sys/types.h
Xu386mon.o: /usr/include/sys/lock.h
Xu386mon.o: /usr/include/sys/utsname.h
Xu386mon.o: /usr/include/sys/stat.h
Xu386mon.o: /usr/include/sys/ascii.h
Xu386mon.o: /usr/include/sys/param.h
Xu386mon.o: /usr/include/sys/bootinfo.h
Xu386mon.o: /usr/include/sys/tuneable.h
Xu386mon.o: /usr/include/sys/sysinfo.h
Xu386mon.o: /usr/include/sys/sysmacros.h
Xu386mon.o: /usr/include/sys/immu.h
Xu386mon.o: /usr/include/sys/region.h
Xu386mon.o: /usr/include/sys/proc.h
Xu386mon.o: /usr/include/sys/var.h
Xu386mon.o: nlsym.h
Xu386mon.o: libkmem.h
Xu386mon.o: libmem.h
Xu386mon.o: libswap.h
Xu386mon.o: libnlsym.h
Xu386mon.o: u386mon.h
Xvar.o: /usr/include/curses.h
Xvar.o: /usr/include/panel.h
Xvar.o: /usr/include/sys/types.h
Xvar.o: /usr/include/sys/var.h
Xvar.o: u386mon.h
X#	DEPENDENCIES MUST END AT END OF	FILE
X#	IF YOU PUT STUFF HERE IT WILL GO AWAY
X#	see make depend	above
SHAR_EOF
$TOUCH -am 0628234290 Makefile.isc &&
chmod 0644 Makefile.isc ||
echo "restore of Makefile.isc failed"
set `wc -c Makefile.isc`;Wc_c=$1
if test "$Wc_c" != "7846"; then
	echo original size 7846, current size $Wc_c
fi
# ============= bootinfo.c ==============
echo "x - extracting bootinfo.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > bootinfo.c &&
X/*+-------------------------------------------------------------------------
X	bootinfo.c - u386mon bootinfo struct display
X
X  Defined functions:
X	bmemf_text(flags)
X	display_bootinfo(win,y,x)
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
X/*:06-25-1990-03:18-wht@n4hgf-ODT/3.2.1 has B_MEM_CANTDMA not B_MEM_NODMA */
X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
X/*:06-17-1990-14:59-wht-creation */
X
X#define M_TERMINFO
X
X#include <curses.h>
X#include <panel.h>
X#include <sys/types.h>
X#include <sys/bootinfo.h>
X#include "u386mon.h"
X
X/*+-------------------------------------------------------------------------
X	bmemf_text(flags)
X--------------------------------------------------------------------------*/
Xchar *
Xbmemf_text(flags)
Xulong flags;
X{
X#ifdef B_MEM_DOWN
X	flags &= ~B_MEM_DOWN;
X#endif
X	if(!flags)
X		return("    ");
X	switch(flags)
X	{
X#ifdef B_MEM_RSRVD
X		case B_MEM_RSRVD: return("RSVD");
X#endif
X#ifdef B_MEM_KBSS
X		case B_MEM_KBSS:  return("KBSS");
X#endif
X#ifdef B_MEM_KTEXT
X		case B_MEM_KTEXT: return("KTXT");
X#endif
X#ifdef B_MEM_KDATA
X		case B_MEM_KDATA: return("KDTA");
X#endif
X#ifdef B_MEM_NODMA
X		case B_MEM_NODMA: return("NODM");
X#endif
X#ifdef B_MEM_CANTDMA
X		case B_MEM_CANTDMA: return("NODM");
X#endif
X	}
X	return("????");
X}	/* end of bmemf_text */
X
X/*+-------------------------------------------------------------------------
X	ISC_machinetype_text(machine)
X--------------------------------------------------------------------------*/
X#ifdef ME_COMPAQVGA	/* ISC machdep.h */
Xchar *
XISC_machinetype_text(machine)
Xunsigned char machine;
X{
X
X	switch(machine)
X	{
X		case M_UNKNOWN:
X			return("");
X			break;
X		case M_COMPAQ:
X			return("Compaq");
X			break;
X		case M_PS2:
X			return("PS/2");
X			break;
X		case M_AT:
X			return("Generic 386");
X			break;
X		case M_ATT:
X		case M_ATT5:
X			return("AT&T 6386");
X			break;
X		case M_M380:
X			return("Olivetti M380");
X			break;
X		case M_DELL:
X			return("Dell 386");
X			break;
X		case M_D325:
X			return("Dell 325");
X			break;
X		case M_ALR:
X			return("Adv Logic Res");
X			break;
X		case M_ZDS:
X			return("Zenith Data");
X			break;
X	}
X	return("??");
X}	/* end of ISC_machinetype_text */
X#endif
X
X/*+-------------------------------------------------------------------------
X	ISC_displaytype_text(adapter)
X--------------------------------------------------------------------------*/
X#ifdef ME_COMPAQVGA	/* ISC machdep.h */
Xchar *
XISC_displaytype_text(adapter)
Xunsigned char adapter;
X{
X
X	switch(adapter)
X	{
X		case ME_UNKNOWN:
X			return("unknown");
X			break;
X		case ME_EGA:
X			return("EGA");
X			break;
X		case ME_CGA80:
X			return("CGA");
X			break;
X		case ME_MONO:
X			return("MONO");
X			break;
X		case ME_COMPAQHR:
X			return("Compaq mono");
X			break;
X		case ME_Z449:
X			return("Zenith Z449");
X			break;
X		case ME_T5100:
X			return("Toshiba T5100");
X			break;
X		case ME_COMPAQVGA:
X			return("Compaq VGA");
X			break;
X		case ME_OTHERVGA:
X			return("VGA");
X			break;
X#ifdef ME_PVGA1
X		case ME_PVGA1:
X			return("Paradise VGA1");
X			break;
X#endif /*ME_PVGA1*/
X#ifdef ME_V7VGA
X		case ME_V7VGA:
X			return("Video 7 VGA");
X			break;
X#endif /*ME_V7VGA*/
X	}
X	return("???");
X}	/* end of ISC_displaytype_text */
X#endif
X
X/*+-------------------------------------------------------------------------
X	display_bootinfo(win,y,x)
X--------------------------------------------------------------------------*/
Xvoid
Xdisplay_bootinfo(win,y,x)
XWINDOW *win;
Xint y;
Xint x;
X{
Xregister itmp;
Xregister struct bootmem *bmem;
X
X	use_cp(win,cpBANNER);
X	wmove(win,y++,x);
X	waddstr(win,"-- Bootinfo ----------");
X#ifdef M_UNIX	/* ISC doesn't have this in struct */
X	wmove(win,y++,x);
X	disp_static_long(win,"basemem  ","%7ldk     ",bootinfo.basemem / 1024);
X	wmove(win,y++,x);
X	disp_static_long(win,"extmem   ","%7ldk     ",bootinfo.extmem / 1024);
X#endif
X#ifdef ME_COMPAQVGA	/* ISC machdep.h */
X	wmove(win,y++,x);
X	wprintw(win,"machine %14.14s",
X		ISC_machinetype_text(bootinfo.machenv.machine));
X	wmove(win,y++,x);
X	wprintw(win,"disp %17.17s",
X		ISC_displaytype_text(bootinfo.machenv.adapter));
X#endif
X	wmove(win,y++,x);
X	disp_static_long(win,"bflags   ","%08lx     ",bootinfo.bootflags);
X
X	wmove(win,y++,x); waddstr(win,"memory available      ");
X	for(itmp = 0; itmp < bootinfo.memavailcnt; itmp++)
X	{
X		bmem = &bootinfo.memavail[itmp];
X#ifdef B_MEM_DOWN
X		if(bmem->flags & B_MEM_DOWN)
X		{
X			bmem->base -= bmem->extent;
X			bmem->flags &= ~B_MEM_DOWN;
X		}
X#endif
X		wmove(win,y++,x);
X		wprintw(win,"%08lx %08lx %s",bmem->base,bmem->extent,
X			bmemf_text(bmem->flags));
X	}
X
X	wmove(win,y++,x); waddstr(win,"memory used           ");
X	for(itmp = 0; itmp < bootinfo.memusedcnt; itmp++)
X	{
X		bmem = &bootinfo.memused[itmp];
X#ifdef B_MEM_DOWN
X		if(bmem->flags & B_MEM_DOWN)
X		{
X			bmem->base -= bmem->extent;
X			bmem->flags &= ~B_MEM_DOWN;
X		}
X#endif
X		wmove(win,y++,x);
X		wprintw(win,"%08lx %08lx %s",bmem->base,bmem->extent,
X			bmemf_text(bmem->flags));
X	}
X
X}	/* end of display_bootinfo */
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of bootinfo.c */
SHAR_EOF
$TOUCH -am 0627165190 bootinfo.c &&
chmod 0644 bootinfo.c ||
echo "restore of bootinfo.c failed"
set `wc -c bootinfo.c`;Wc_c=$1
if test "$Wc_c" != "5216"; then
	echo original size 5216, current size $Wc_c
fi
# ============= detail.c ==============
echo "x - extracting detail.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > detail.c &&
X/*+-------------------------------------------------------------------------
X	detail.c - UNIX 386 system monitor detail window
X
X  Defined functions:
X	detail_init()
X	detail_panel_cmd(cmd)
X	detail_panel_update()
X	detpanel_destroy()
X	detpanel_extra_init()
X	detpanel_extra_update()
X	detpanel_ps_init(full43)
X	detpanel_ps_update()
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
X/*:06-25-1990-17:34-wht@n4hgf-add detail extra for 25 line tubes */
X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
X/*:06-15-1990-18:32-wht@n4hgf-creation */
X
X#define M_TERMINFO
X
X#include <curses.h>
X#include <panel.h>
X#include <signal.h>
X#include <string.h>
X#include <fcntl.h>
X#include <nlist.h>
X#include <errno.h>
X#include <time.h>
X#include <pwd.h>
X#include <sys/types.h>
X#include <utmp.h>
X#include <sys/utsname.h>
X#include <sys/stat.h>
X#include <sys/ascii.h>
X#undef NGROUPS_MAX
X#undef NULL
X#include <sys/param.h>
X#include <sys/bootinfo.h>
X#include <sys/tuneable.h>
X#include <sys/sysinfo.h>
X#include <sys/sysmacros.h>
X#include <sys/immu.h>
X#include <sys/region.h>
X#include <sys/proc.h>
X#include <sys/var.h>
X
X#include "nlsym.h"
X#include "libkmem.h"
X#include "libnlsym.h"
X#include "u386mon.h"
X
X#define DPT_NONE		0
X#define DPT_PS			1
X#define DPT_PS_LONG		2
X#define DPT_EXTRA		3
X#define DPT_SIO			4
X
XPANEL *mkpanel();
X
Xextern PANEL *pscr;
Xextern WINDOW *wscr;
X
XPANEL *pdet;
XWINDOW *wdet = (WINDOW *)0;
Xu_char detpanel_type = DPT_NONE;
Xint detpanel_length;
Xint detpanel_cols;
X
X/*+-------------------------------------------------------------------------
X	detpanel_ps_init(full43)
X--------------------------------------------------------------------------*/
Xvoid
Xdetpanel_ps_init(full43)
Xint full43;
X{
X/*
X#define DETAIL_PS_COLS ((LINES >= 43) ? EXTRA4_TLX - 1 : PER_SEC4_TLX)
Xdetpanel_cols = DETAIL_PS_COLS;
X*/
X
X#define DETAIL_PS_TLY ((LINES >= 43) ? ((full43)?PER_SEC_TLY:PER_SEC_TLY+14)\
X                                     : PER_SEC_TLY)
X
X#define DETAIL_PS_LENGTH		(MSG_TLY - DETAIL_PS_TLY)
X
X	detpanel_length = DETAIL_PS_LENGTH;
X	detpanel_cols = COLS;
X	if(!(pdet = mkpanel(detpanel_length,detpanel_cols,DETAIL_PS_TLY,0)))
X	{
X		leave_text("cannot make detail panel",1);
X	}
X	show_panel(pdet);
X	top_panel(pdet);
X	wdet = panel_window(pdet);
X	display_proc_stats(wdet,1);
X
X}	/* end of detpanel_ps_init */
X
X/*+-------------------------------------------------------------------------
X	detpanel_ps_update()
X--------------------------------------------------------------------------*/
Xvoid
Xdetpanel_ps_update()
X{
X	display_proc_stats(wdet,0);
X}	/* end of detpanel_ps_update */
X
X/*+-------------------------------------------------------------------------
X	detpanel_extra_init()
X--------------------------------------------------------------------------*/
Xvoid
Xdetpanel_extra_init()
X{
X#define DETAIL_EXTRA_TLY		PER_SEC_TLY
X#define DETAIL_EXTRA_LENGTH		(MSG_TLY - DETAIL_EXTRA_TLY)
X
X	detpanel_length = DETAIL_EXTRA_LENGTH;
X	detpanel_cols = COLS;
X	if(!(pdet = mkpanel(detpanel_length,detpanel_cols,DETAIL_EXTRA_TLY,0)))
X	{
X		leave_text("cannot make detail panel",1);
X	}
X	show_panel(pdet);
X	top_panel(pdet);
X	wdet = panel_window(pdet);
X	display_var(wdet,0,EXTRA1_TLX);
X	display_bootinfo(wdet,0,EXTRA2_TLX);
X	display_tune(wdet,0,EXTRA3_TLX);
X	display_proc(wdet,0,EXTRA4_TLX);
X
X}	/* end of detpanel_extra_init */
X
X/*+-------------------------------------------------------------------------
X	detpanel_extra_update()
X--------------------------------------------------------------------------*/
Xvoid
Xdetpanel_extra_update()
X{
X	display_proc(wdet,0,EXTRA4_TLX);
X}	/* end of detpanel_extra_update */
X
X/*+-------------------------------------------------------------------------
X	detpanel_sio_init()
X--------------------------------------------------------------------------*/
X#ifdef M_UNIX
Xvoid
Xdetpanel_sio_init()
X{
X#define DETAIL_SIO_TLY ((LINES >= 43) ? (PER_SEC_TLY+14) : PER_SEC_TLY)
X#define DETAIL_SIO_LENGTH		(CMD_TLY - DETAIL_SIO_TLY)
X
X	detpanel_length = DETAIL_SIO_LENGTH;
X	detpanel_cols = COLS;
X	if(!(pdet = mkpanel(detpanel_length,detpanel_cols,DETAIL_SIO_TLY,0)))
X	{
X		leave_text("cannot make detail panel",1);
X	}
X	show_panel(pdet);
X	top_panel(pdet);
X	wdet = panel_window(pdet);
X	display_sio_summary(wdet,1);
X}	/* end of detpanel_sio_init */
X#endif
X
X/*+-------------------------------------------------------------------------
X	detpanel_sio_update()
X--------------------------------------------------------------------------*/
X#ifdef M_UNIX
Xvoid
Xdetpanel_sio_update()
X{
X	display_sio_summary(wdet,0);
X}	/* end of detpanel_sio_update */
X#endif
X
X/*+-------------------------------------------------------------------------
X	detpanel_destroy()
X--------------------------------------------------------------------------*/
Xvoid
Xdetpanel_destroy()
X{
X	hide_panel(pdet);
X	delwin(wdet);
X	wdet = (WINDOW *)0;
X	del_panel(pdet);
X	top_panel(pscr);
X	disp_msg(cpINFO,"");
X	detpanel_type = DPT_NONE;
X}	/* end of detpanel_destroy */
X
X/*+-------------------------------------------------------------------------
X	detail_panel_cmd(cmd)
X
X  command: m main screen
X           p proc status
X--------------------------------------------------------------------------*/
Xvoid
Xdetail_panel_cmd(cmd)
Xchtype cmd;
X{
X	switch(cmd)
X	{
X		case 'm':
X			if(detpanel_type != DPT_NONE)
X				detpanel_destroy();
X			break;
X
X		case 'P':
X			if(detpanel_type == DPT_PS_LONG)
X				break;
X			if(detpanel_type != DPT_NONE)
X				detpanel_destroy();
X			detpanel_ps_init(1);
X			detpanel_type = DPT_PS_LONG;
X			break;
X
X		case 'p':
X			if(detpanel_type == DPT_PS)
X				break;
X			if(detpanel_type != DPT_NONE)
X				detpanel_destroy();
X			detpanel_ps_init(0);
X			detpanel_type = DPT_PS;
X			break;
X
X		case 'e':
X			if(LINES >= 43)
X				break;
X			if(detpanel_type == DPT_EXTRA)
X				break;
X			if(detpanel_type != DPT_NONE)
X				detpanel_destroy();
X			detpanel_extra_init();
X			detpanel_type = DPT_EXTRA;
X			break;
X
X#ifdef M_UNIX
X		case 's':
X			if(detpanel_type == DPT_SIO)
X				break;
X			if(detpanel_type != DPT_NONE)
X				detpanel_destroy();
X			detpanel_sio_init();
X			detpanel_type = DPT_SIO;
X			break;
X#endif
X
X	}
X}	/* end of detail_panel_cmd */
X
X/*+-------------------------------------------------------------------------
X	detail_panel_update()
X--------------------------------------------------------------------------*/
Xvoid
Xdetail_panel_update()
X{
X	switch(detpanel_type)
X	{
X		case DPT_PS:
X		case DPT_PS_LONG:
X			detpanel_ps_update();
X			break;
X		case DPT_EXTRA:
X			detpanel_extra_update();
X			break;
X#ifdef M_UNIX
X		case DPT_SIO:
X			detpanel_sio_update();
X			break;
X#endif
X	}
X}	/* end of detail_panel_update */
X
X/*+-------------------------------------------------------------------------
X	detail_init()
X--------------------------------------------------------------------------*/
Xvoid
Xdetail_init()
X{
X}	/* end of detail_init */
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of detail.c */
SHAR_EOF
$TOUCH -am 0627170690 detail.c &&
chmod 0644 detail.c ||
echo "restore of detail.c failed"
set `wc -c detail.c`;Wc_c=$1
if test "$Wc_c" != "7070"; then
	echo original size 7070, current size $Wc_c
fi
echo "End of part 1, continue with part 2"
exit 0
---------------------------------------------------------------------
Warren Tucker, TuckerWare  emory!n4hgf!wht or wht@n4hgf.Mt-Park.GA.US
Any perceptible delay will eventually get on your nerves. --Bob Hyers