wht@gatech.edu@n4hgf.UUCP (Warren Tucker) (07/03/90)
Posting-number: Volume 13, Issue 101 Submitted-by: wht@gatech.edu@n4hgf.UUCP (Warren Tucker) Archive-name: u386mon/part03 #!/bin/sh # This is part 03 of u386mon.1.10 if touch 2>&1 | fgrep 'mmdd' > /dev/null then TOUCH=touch else TOUCH=true fi # ============= tune.c ============== echo "x - extracting tune.c (Text)" sed 's/^X//' << 'SHAR_EOF' > tune.c && X/*+------------------------------------------------------------------------- X tune.c - u386mon tune struct display X X Defined functions: X display_tune(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-17:33-wht@n4hgf-alpha sort identifiers */ 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-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/tuneable.h> X#include "u386mon.h" X X/*+------------------------------------------------------------------------- X display_tune(win,y,x) X--------------------------------------------------------------------------*/ Xvoid Xdisplay_tune(win,y,x) XWINDOW *win; Xint y; Xint x; X{ X X use_cp(win,cpBANNER); X wmove(win,y++,x); X waddstr(win,"-- Tune ---------"); X wmove(win,y++,x); X disp_static_int(win,"t_ageintvl ","%5d",tune.t_ageinterval); X wmove(win,y++,x); X disp_static_int(win,"t_bdflushr ","%5d",tune.t_bdflushr); X wmove(win,y++,x); X disp_static_int(win,"t_gpgshi ","%5d",tune.t_gpgshi); X wmove(win,y++,x); X disp_static_int(win,"t_gpgslo ","%5d",tune.t_gpgslo); X wmove(win,y++,x); X disp_static_int(win,"t_gpgsmsk ","0x%03lx",tune.t_gpgsmsk); X wmove(win,y++,x); X disp_static_int(win,"t_maxfc ","%5d",tune.t_maxfc); X wmove(win,y++,x); X disp_static_int(win,"t_maxsc ","%5d",tune.t_maxsc); X wmove(win,y++,x); X disp_static_int(win,"t_maxumem ","%5d",tune.t_maxumem); X wmove(win,y++,x); X disp_static_int(win,"t_minarmem ","%5d",tune.t_minarmem); X wmove(win,y++,x); X disp_static_int(win,"t_minasmem ","%5d",tune.t_minasmem); X X} /* end of display_tune */ X X/* vi: set tabstop=4 shiftwidth=4: */ X/* end of tune.c */ SHAR_EOF $TOUCH -am 0627015790 tune.c && chmod 0644 tune.c || echo "restore of tune.c failed" set `wc -c tune.c`;Wc_c=$1 if test "$Wc_c" != "1941"; then echo original size 1941, current size $Wc_c fi # ============= u386mon.c ============== echo "x - extracting u386mon.c (Text)" sed 's/^X//' << 'SHAR_EOF' > u386mon.c && Xchar *revision = "1.10"; X/*+------------------------------------------------------------------------- X u386mon.c - UNIX 386 system monitor X X Defined functions: X calc_cpu_avg(per_state) X calc_wait_avg(per_state) 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 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 X00000000001111111111222222222233333333334444444444555555555566666666667777777777 X01234567890123456789012345678901234567890123456789012345678901234567890123456789 X u386mon xxx.xxx PLOCK INVALID hh:mm:ss wht@n4hgf X X---- CPU --- tot usr ker brk --------------------------------------------------- X Instant % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X 5 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X10 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X---- Wait -- tot io swp pio --------------------------------------------------- X Instant % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X 5 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X10 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X X--------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */ X/*:06-27-1990-01:07-wht@n4hgf-add ^R and ^L refresh */ 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 <sys/types.h> X#include <sys/lock.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#include "nlsym.h" X#include "libkmem.h" X#include "libmem.h" X#include "libswap.h" X#include "libnlsym.h" X#include "u386mon.h" X XPANEL *mkpanel(); X Xstruct sysinfo sysinfo; Xstruct sysinfo sysinfo_last; X#define sysidelta(x) (sysinfo.x - sysinfo_last.x) X Xstruct minfo minfo; Xstruct minfo minfo_last; X#define midelta(x) (minfo.x - minfo_last.x) X Xstruct bootinfo bootinfo; Xstruct tune tune; Xstruct utsname utsname; Xstruct var v; Xtime_t now; Xtime_t then; Xint hz; Xint nswap; Xint maxmem; Xint freemem; Xdaddr_t myreadcnt = 0L; X XPANEL *pscr; XWINDOW *wscr; Xextern WINDOW *wdet; X X#define CPU_AVG_MAX 10 Xint cpu_avg_init = 0; Xtime_t *cpu_avg[CPU_AVG_MAX]; Xtime_t cpu_ticks[5]; X X#define WAIT_AVG_MAX 10 Xint wait_avg_init = 0; Xtime_t *wait_avg[WAIT_AVG_MAX]; Xtime_t wait_ticks[5]; X X/*+------------------------------------------------------------------------- X leave(exit_code) X--------------------------------------------------------------------------*/ Xvoid Xleave(exit_code) Xint exit_code; X{ X wmove(wscr,CMD_TLY,0); X use_cp(wscr,cpLIT); X wclrtoeol(wscr); X pflush(); X endwin(); X exit(exit_code); X} /* end of leave */ X X/*+------------------------------------------------------------------------- X leave_text(text,exit_code) XIf exit_code == 255, do wperror X--------------------------------------------------------------------------*/ Xvoid Xleave_text(text,exit_code) Xchar *text; Xint exit_code; X{ 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 disp_msg(cpHIGH,text); X leave(exit_code); X} /* end of leave */ X X/*+----------------------------------------------------------------------- X char *get_elapsed_time(elapsed_seconds) - "ddd+hh:mm:ss" returned X static string address is returned X------------------------------------------------------------------------*/ Xchar * Xget_elapsed_time(elapsed_seconds) Xtime_t elapsed_seconds; X{ Xstatic char elapsed_time_str[32]; Xtime_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); X} /* end of get_elapsed_time */ X X/*+------------------------------------------------------------------------- X draw_cpuscale_literals(win) X--------------------------------------------------------------------------*/ Xvoid Xdraw_cpuscale_literals(win,y,x) XWINDOW *win; Xint y; Xint x; X{ Xint 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 waddstr(win," Instant % "); X wmove(win,y + 2,x); X waddstr(win," 5 Sec Avg %"); X wmove(win,y + 3,x); X waddstr(win,"10 Sec Avg %"); X X} /* end of draw_cpuscale_literals */ X X/*+------------------------------------------------------------------------- X update_cpuscale(win,y,width,per_state) X X000000000011111111112222222222333333333344444444445555555555666666 X012345678901234567890123456789012345678901234567890123456789012345 Xtot usr ker misc X### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X--------------------------------------------------------------------------*/ X#define _CPUSCALE_TX 0 X#define _CPUSCALE_UX 4 X#define _CPUSCALE_KX 8 X#define _CPUSCALE_BX 12 X#define _CPUSCALE_SX 16 X Xtime_t Xupdate_cpuscale(win,y,x,width,per_state) XWINDOW *win; Xint y; Xint x; Xregister width; Xtime_t *per_state; X{ Xregister itmp; Xint accum = 0; Xtime_t idle = per_state[CPU_IDLE] + per_state[CPU_WAIT]; Xtime_t cpu_ticks_total = idle + per_state[CPU_SXBRK] + X per_state[CPU_IDLE] + per_state[CPU_KERNEL] + per_state[CPU_USER]; Xtime_t percent_user = (per_state[CPU_USER] * 100) / cpu_ticks_total; Xtime_t percent_kernel = (per_state[CPU_KERNEL] * 100) / cpu_ticks_total; Xtime_t percent_break = (per_state[CPU_SXBRK] * 100) / cpu_ticks_total; Xtime_t percent_busy = percent_user + percent_kernel + percent_break; 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 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 while(itmp--) X waddch(win,(chtype)' '); X } X return(cpu_ticks_total); X} /* end of update_cpuscale */ X X/*+------------------------------------------------------------------------- X calc_cpu_avg(per_state) - add per_state array to avg array X--------------------------------------------------------------------------*/ Xvoid Xcalc_cpu_avg(per_state) Xtime_t per_state[]; X{ Xregister 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 X} /* end of calc_cpu_avg */ X X/*+------------------------------------------------------------------------- X get_cpu_avg(cpu_ticks,period) X--------------------------------------------------------------------------*/ Xget_cpu_avg(cpu_ticks,period) Xtime_t cpu_ticks[]; Xint period; X{ Xregister iperiod = CPU_AVG_MAX; Xregister istate; Xregister 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 X} /* end of get_cpu_avg */ X X/*+------------------------------------------------------------------------- X draw_waitscale_literals(win) X--------------------------------------------------------------------------*/ Xvoid Xdraw_waitscale_literals(win,y,x) XWINDOW *win; Xint y; Xint x; X{ Xint x2 = x; X X wmove(win,y,x); X use_cp(wscr,cpBANNER); X waddstr(win,"---- Wait -- tot io swp pio -- (% 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 waddstr(win," Instant % "); X wmove(win,y + 2,x); X waddstr(win," 5 Sec Avg %"); X wmove(win,y + 3,x); X waddstr(win,"10 Sec Avg %"); X X} /* end of draw_waitscale_literals */ X X/*+------------------------------------------------------------------------- X draw_per_sec_literals(win) X--------------------------------------------------------------------------*/ Xvoid Xdraw_per_sec_literals(win,y,x) XWINDOW *win; Xint y; Xint x; X{ X X wmove(win,y,x); X use_cp(wscr,cpBANNER); X waddstr(win,"---- Sysinfo/Minfo --- (last 1 second activity) "); X getyx(win,y,x); X while(x < getmaxx(win)) X waddch(win,(chtype)'-'),x++; X X} /* end of draw_per_sec_literals */ X X/*+------------------------------------------------------------------------- X update_waitscale(win,y,width,per_state) X X000000000011111111112222222222333333333344444444445555555555666666 X012345678901234567890123456789012345678901234567890123456789012345 Xtot io swp pio X### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X--------------------------------------------------------------------------*/ X#define _WAITSCALE_TX 0 X#define _WAITSCALE_IX 4 X#define _WAITSCALE_WX 8 X#define _WAITSCALE_PX 12 X#define _WAITSCALE_SX 16 X Xtime_t Xupdate_waitscale(win,y,x,width,per_state,total_ticks) XWINDOW *win; Xint y; Xint x; Xregister width; Xtime_t *per_state; Xtime_t total_ticks; X{ Xregister itmp; Xint accum = 0; Xtime_t percent_io = 0L; Xtime_t percent_swap = 0L; Xtime_t percent_pio = 0L; Xtime_t percent_total_wait; Xtime_t total_wait; X 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_swap = (per_state[W_SWAP] * 100) / total_ticks; X percent_pio = (per_state[W_PIO] * 100) / total_ticks; X } X X percent_total_wait = percent_io + percent_swap + percent_pio; X wmove(win,y, x + _WAITSCALE_TX); 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 wmove(win,y, x + _WAITSCALE_IX); X use_cp(wscr,cpINFO); X wprintw(win,"%3ld",percent_io); X X wmove(win,y, x + _WAITSCALE_WX); X wprintw(win,"%3ld",percent_swap); X X wmove(win,y, x + _WAITSCALE_PX); X wprintw(win,"%3ld",percent_pio); X X wmove(win,y, x + _WAITSCALE_SX); X 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_swap) / 100; X accum += itmp; X while(itmp--) X waddch(win,(chtype)'s'); X X use_cp(wscr,cpHIGH); X itmp = (width * percent_pio) / 100; X accum += itmp; X while(itmp--) X waddch(win,(chtype)'p'); X X if((itmp = (width - accum)) > 0) X { X while(itmp--) X waddch(win,(chtype)' '); X } X X} /* end of update_waitscale */ X X/*+------------------------------------------------------------------------- X calc_wait_avg(per_state) - add per_state array to avg array X--------------------------------------------------------------------------*/ Xvoid Xcalc_wait_avg(per_state) Xtime_t per_state[]; X{ Xregister 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 X} /* end of calc_wait_avg */ X X/*+------------------------------------------------------------------------- X get_wait_avg(wait_ticks,period) X--------------------------------------------------------------------------*/ Xget_wait_avg(wait_ticks,period) Xtime_t wait_ticks[]; Xint period; X{ Xregister iperiod = WAIT_AVG_MAX; Xregister istate; Xregister 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 X} /* end of get_wait_avg */ X X/*+------------------------------------------------------------------------- X extra_static_stuff()/extra_info_stuff() - for 43 line display X--------------------------------------------------------------------------*/ Xvoid Xextra_static_stuff() X{ X display_var(wscr,EXTRA_TLY,EXTRA1_TLX); X display_bootinfo(wscr,EXTRA_TLY,EXTRA2_TLX); X display_tune(wscr,EXTRA_TLY,EXTRA3_TLX); X} /* end of extra_static_stuff */ Xvoid Xextra_info_stuff() X{ X display_proc(wscr,EXTRA_TLY,EXTRA4_TLX); X} /* end of extra_info_stuff */ X X/*+------------------------------------------------------------------------- X main(argc,argv,envp) X--------------------------------------------------------------------------*/ X/*ARGSUSED*/ Xmain(argc,argv,envp) Xint argc; Xchar **argv; Xchar **envp; X{ Xregister itmp; Xregister char *cptr; Xregister chtype cmd; Xregister chtype initial_cmd = 0; Xint errflg = 0; Xint plock_indicator = 0; Xtime_t total_ticks; Xint y,x; Xint invalidity = 0; Xlong ltmp; Xstruct tm *lt; Xstatic char stdoutbuf[1024]; Xchar s80[80]; Xextern char *optarg; Xextern int optind; X X/* X * curses works better if standard output is fully buffered X */ X (void)setvbuf(stdout,stdoutbuf,_IOFBF,sizeof(stdoutbuf)); X X/* X * check out command line X */ X while((itmp = getopt(argc,argv,"lPps")) != -1) X { X switch(itmp) X { X case 'P': X case 'p': X#ifdef M_UNIX X case 's': X#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 "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 (char *)0 X }; X char **cpptr = usage_str; X while(*cpptr) X (void)fprintf(stderr,"%s\n",*(cpptr++)); X exit(1); X } X X/* X * if man wants to plock() try it; fail silently if non-root X */ X if(plock_indicator && plock(PROCLOCK)) 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 */ X if(uname(&utsname)) X { X leave_text("uname failed",255); X exit(1); X } 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/* 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/* X * initialize curses environment X */ X if(!initscr()) X { X (void)printf("curses init failed\n"); X exit(1); X } X clear(); X refresh(); X X if((LINES < 25) || (COLS < 80)) X { X waddstr(stdscr,"\n\n\nNeed at least 80x25 screen\n\n"); X refresh(); X endwin(); X exit(1); X } X X noecho(); X keypad(stdscr,1); X typeahead(-1); 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 X /* a hack for now -- assuming AT char set */ X#ifdef HI_BIT_CAN_BE_SET 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 */ X#endif X X if(!(pscr = mkpanel(LINES,COLS,0,0))) X { X addstr("cannot make screen panel"); X refresh(); X endwin(); X exit(1); X } X wscr = panel_window(pscr); X top_panel(pscr); X 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 */ X nlsym_read(); X kinit(0); /* read access only */ X minit(0); /* read access only */ X sinit(); X (void)setgid(getgid()); /* now that we have the fds open, drop egid */ X detail_init(); X init_uid_name_hash(); /* see det_proc.c */ X X/* X * start fireworks X */ X wmove(wscr,0,0); X use_cp(wscr,cpBANNER); X wprintw(wscr," u386mon %s ",revision); X wprintw(wscr,"%s - %s %s ",utsname.nodename, X utsname.machine,utsname.release); X getyx(wscr,y,x); X while(x < getmaxx(wscr)) X waddch(wscr,(chtype)' '),x++; X wmove(wscr,0,71); X waddstr(wscr,"wht@n4hgf"); X if(plock_indicator) X { X wmove(wscr,0,38); X use_cp(wscr,cpMED); X waddstr(wscr," PLOCK "); X use_cp(wscr,cpBANNER); X } X wmove(wscr,CMD_TLY,0); X if(LINES >= 43) X waddstr(wscr," ESC=quit P=long ps p=short ps m=main "); X else X waddstr(wscr," ESC=quit p=ps e=extra m=main "); X#ifdef M_UNIX X waddstr(wscr," s=sio "); X#endif X if(geteuid() == 0) X waddstr(wscr," l=plock on u=plock off "); X getyx(wscr,y,x); X while(x < getmaxx(wscr)) X waddch(wscr,(chtype)' '),x++; X use_cp(wscr,cpLIT); X X/* X * make initial kmem readings X */ X hz = (cptr = getenv("HZ")) ? atoi(cptr) : HZ; X kread((caddr_t)&maxmem,maxmemaddr,sizeof(maxmem)); X kread((caddr_t)&nswap,nswapaddr,sizeof(nswap)); X kread((caddr_t)&sysinfo_last,sysinfoaddr,sizeof(sysinfo_last)); X kread((caddr_t)&minfo_last,minfoaddr,sizeof(minfo)); X kread((caddr_t)&tune,tuneaddr,sizeof(tune)); X kread((caddr_t)&v,vaddr,sizeof(v)); X kread((caddr_t)&bootinfo,bootinfoaddr,sizeof(bootinfo)); X 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/* X * while(user_not_bored) entertain_and_inform_user(); X */ X (void)time(&then); X while(1) X { X nap(1000L); X (void)time(&now); X wmove(wscr,0,62); X use_cp(wscr,cpBANNER); X lt = localtime(&now); X wprintw(wscr,"%02d:%02d:%02d",lt->tm_hour,lt->tm_min,lt->tm_sec); X X /* heuristic validity determination */ X wmove(wscr,0,48); X if((now - then) > 4) X { X use_cp(wscr,cpHIGH); X waddstr(wscr," INVALID "); X invalidity += 3; X } X else if((itmp = ((now - then) > 3)) || (invalidity > 2)) X { X use_cp(wscr,cpMED); X waddstr(wscr," INEXACT "); X if(itmp) X invalidity += 2; X } X if(invalidity && !(--invalidity)) X { X use_cp(wscr,cpBANNER); X waddstr(wscr," "); X } X (void)time(&then); X X kread((caddr_t)&freemem,freememaddr,sizeof(freemem)); X kread((caddr_t)&sysinfo,sysinfoaddr,sizeof(sysinfo)); X kread((caddr_t)&minfo,minfoaddr,sizeof(minfo)); X X#ifdef RIGHTEOUS /* 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]); X#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])); X#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 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 disp_info_long(wscr,"lread ","%7ld",sysidelta(lread)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"lwrite ","%7ld",sysidelta(lwrite)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"swapin ","%7ld",sysidelta(swapin)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"swapout ","%7ld",sysidelta(swapout)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"bswapin ","%7ld",sysidelta(bswapin)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"bswapout ","%7ld",sysidelta(bswapout)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"iget ","%7ld",sysidelta(iget)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"namei ","%7ld",sysidelta(namei)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"dirblk ","%7ld",sysidelta(dirblk)); X X wmove(wscr,y++,PER_SEC1_TLX); X if((ltmp = sysidelta(readch) - myreadcnt) < 0) X ltmp = 0; X disp_info_long(wscr,"readch ","%7ld",ltmp); X myreadcnt = 0; /* reset /dev/mem & /dev/kmem read count*/ X X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"writch ","%7ld",sysidelta(writech)); X X y = PER_SEC_TLY + 1; X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"rawch ","%6ld",sysidelta(rawch)); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"canch ","%6ld",sysidelta(canch)); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"outch ","%6ld",sysidelta(outch)); X X y++; X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"msg ","%6ld",sysidelta(msg)); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"sema ","%6ld",sysidelta(sema)); X X y++; X wmove(wscr,y++,PER_SEC2_TLX); X disp_static_long(wscr, "maxmem ","%6ldk",(long)maxmem * NBPP / 1024); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr, "frmem ","%6ldk",(long)freemem * NBPP / 1024); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_int (wscr, "mem used","%6d%%", X 100 - (int)((freemem * 100) / maxmem)); X X wmove(wscr,y++,PER_SEC2_TLX); X disp_static_int(wscr, "nswap ","%6ldk",nswap/2); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr, "frswp ","%6ldk",minfo.freeswap/2); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_int(wscr, "swp used","%6d%%", X 100 - (int)((minfo.freeswap * 100) / nswap)); X X y = PER_SEC_TLY + 1; X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"pswitch ","%5ld",sysidelta(pswitch)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"syscall ","%5ld",sysidelta(syscall)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"sysread ","%5ld",sysidelta(sysread)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"syswrit ","%5ld",sysidelta(syswrite)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"sysfork ","%5ld",sysidelta(sysfork)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"sysexec ","%5ld",sysidelta(sysexec)); X X y++; X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"runque ","%5ld",sysidelta(runque)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"runocc ","%5ld",sysidelta(runocc)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"swpque ","%5ld",sysidelta(swpque)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"swpocc ","%5ld",sysidelta(swpocc)); X X y = PER_SEC_TLY + 1; X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"vfault ","%3ld",midelta(vfault)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"demand ","%3ld",midelta(demand)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"pfault ","%3ld",midelta(pfault)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"cw ","%3ld",midelta(cw)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"steal ","%3ld",midelta(steal)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"frdpgs ","%3ld",midelta(freedpgs)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"vfpg ","%3ld",midelta(vfpg)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"sfpg ","%3ld",midelta(sfpg)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"vspg ","%3ld",midelta(vspg)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"sspg ","%3ld",midelta(sspg)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"pnpfault","%3ld",sysidelta(pnpfault)); X wmove(wscr,y++,PER_SEC4_TLX); X disp_info_long(wscr,"wrtfault","%3ld",sysidelta(wrtfault)); X X y = PER_SEC_TLY + 1; X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"unmodsw ","%3ld",midelta(unmodsw)); X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"unmodfl ","%3ld",midelta(unmodfl)); X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"psoutok ","%3ld",midelta(psoutok)); X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"psinfai ","%3ld",midelta(psinfail)); X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"psinok ","%3ld",midelta(psinok)); X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"rsout ","%3ld",midelta(rsout)); X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"rsin ","%3ld",midelta(rsin)); X X y++; X wmove(wscr,y++,PER_SEC5_TLX); X use_cp(wscr,cpLIT); X waddstr(wscr,"pages on "); X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"swap ","%5ld",midelta(swap)); X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"cache ","%5ld",midelta(cache)); X wmove(wscr,y++,PER_SEC5_TLX); X disp_info_long(wscr,"file ","%5ld",midelta(file)); X X if(LINES >= 43) X extra_info_stuff(); X X sysinfo_last = sysinfo; X minfo_last = minfo; X X detail_panel_update(); X X if(initial_cmd) X { X detail_panel_cmd(initial_cmd); X initial_cmd = 0; X } X X pflush(); X X if(rdchk(0)) X { X switch(cmd = wgetch(wscr)) X { X case 'L' & 0x1F: /* ^L */ X case 'R' & 0x1F: /* ^R */ X touchwin(wscr); X if(wdet) X touchwin(wscr); X break; X X case 'q': X case A_ESC: X goto GOOD_BYE; X#ifdef M_UNIX X case 'b': X if(bootinfo.bootstrlen > 79) X itmp = 79; X else X itmp = bootinfo.bootstrlen; X kread(s80,bootinfoaddr + X (bootinfo.bootstr - (caddr_t)&bootinfo),itmp); X s80[itmp] = 0; X disp_msg(cpMED,s80); X break; X#endif X case 'e': X case 'P': X case 'p': X case 'm': X#ifdef M_UNIX X case 's': X#endif X detail_panel_cmd(cmd); X break; X case 'l': X if(!plock_indicator) X { X if(!plock(PROCLOCK)) X { X plock_indicator = 1; X wmove(wscr,0,38); X use_cp(wscr,cpMED); X waddstr(wscr," PLOCK "); X } X } X break; X case 'u': X if(plock_indicator) X { X if(!plock(UNLOCK)) X { X plock_indicator = 0; X wmove(wscr,0,38); X use_cp(wscr,cpBANNER); X waddstr(wscr," "); X } X } X break; X } X } X } X XGOOD_BYE: X leave_text("",0); X /*NOTREACHED*/ X} /* end of main */ X X/* vi: set tabstop=4 shiftwidth=4: */ X/* end of u386mon.c */ SHAR_EOF $TOUCH -am 0627015790 u386mon.c && chmod 0644 u386mon.c || echo "restore of u386mon.c failed" set `wc -c u386mon.c`;Wc_c=$1 if test "$Wc_c" != "28919"; then echo original size 28919, current size $Wc_c fi # ============= var.c ============== echo "x - extracting var.c (Text)" sed 's/^X//' << 'SHAR_EOF' > var.c && X/*+------------------------------------------------------------------------- X var.c - u386mon var struct display X X Defined functions: X display_var(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-17:33-wht@n4hgf-alpha sort identifiers */ 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:27-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/var.h> X#include "u386mon.h" X X/*+------------------------------------------------------------------------- X display_var(win,y,x) X--------------------------------------------------------------------------*/ Xvoid Xdisplay_var(win,y,x) XWINDOW *win; Xint y; Xint x; X{ X use_cp(win,cpBANNER); X wmove(win,y++,x); X waddstr(win,"-- Var ---------"); X wmove(win,y++,x); X disp_static_int(win,"v_autoup ","%5d",v.v_autoup); X wmove(win,y++,x); X disp_static_int(win,"v_buf ","%5d",v.v_buf); X wmove(win,y++,x); X disp_static_int(win,"v_clist ","%5d",v.v_clist); X wmove(win,y++,x); X disp_static_int(win,"v_file ","%5d",v.v_file); X wmove(win,y++,x); X disp_static_int(win,"v_hbuf ","%5d",v.v_hbuf); X wmove(win,y++,x); X disp_static_int(win,"v_inode ","%5d",v.v_inode); X wmove(win,y++,x); X disp_static_int(win,"v_maxpmem ","%5d",v.v_maxpmem); X wmove(win,y++,x); X disp_static_int(win,"v_maxup ","%5d",v.v_maxup); X wmove(win,y++,x); X disp_static_int(win,"v_mount ","%5d",v.v_mount); X wmove(win,y++,x); X disp_static_int(win,"v_pbuf ","%5d",v.v_pbuf); X wmove(win,y++,x); X disp_static_int(win,"v_proc ","%5d",v.v_proc); X wmove(win,y++,x); X disp_static_int(win,"v_region ","%5d",v.v_region); X wmove(win,y++,x); X disp_static_int(win,"v_vhndfrac ","%5d",v.v_vhndfrac); X X} /* end of display_var */ X X/* vi: set tabstop=4 shiftwidth=4: */ X/* end of var.c */ SHAR_EOF $TOUCH -am 0627015790 var.c && chmod 0644 var.c || echo "restore of var.c failed" set `wc -c var.c`;Wc_c=$1 if test "$Wc_c" != "2079"; then echo original size 2079, current size $Wc_c fi # ============= libkmem.h ============== echo "x - extracting libkmem.h (Text)" sed 's/^X//' << 'SHAR_EOF' > libkmem.h && X/*+----------------------------------------------------------------------- X libkmem.h 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.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/*:10-28-1988-14:46-afterlint-creation */ X X#ifndef BUILDING_LINT_ARGS X#ifdef LINT_ARGS X X/* libkmem.c */ Xvoid kinit(int ); Xvoid kread(char *,long ,int ); Xvoid kwrite(long ,char *,int ); X X#else /* compiler doesn't know about prototyping */ X X/* libkmem.c */ Xvoid kinit(); Xvoid kread(); Xvoid kwrite(); X X#endif /* LINT_ARGS */ X#endif /* BUILDING_LINT_ARGS */ X X/* end of libkmem.h */ SHAR_EOF $TOUCH -am 0627015790 libkmem.h && chmod 0644 libkmem.h || echo "restore of libkmem.h failed" set `wc -c libkmem.h`;Wc_c=$1 if test "$Wc_c" != "859"; then echo original size 859, current size $Wc_c fi # ============= libmem.h ============== echo "x - extracting libmem.h (Text)" sed 's/^X//' << 'SHAR_EOF' > libmem.h && X/*+----------------------------------------------------------------------- X libmem.h 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.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/*:10-28-1988-14:46-afterlint-creation */ X X#ifndef BUILDING_LINT_ARGS X#ifdef LINT_ARGS X X/* libmem.c */ Xvoid minit(int ); Xvoid mread(char *,long ,int ); Xvoid mwrite(long ,char *,int ); X X#else /* compiler doesn't mnow about prototyping */ X X/* libmem.c */ Xvoid minit(); Xvoid mread(); Xvoid mwrite(); X X#endif /* LINT_ARGS */ X#endif /* BUILDING_LINT_ARGS */ X X/* end of libmem.h */ SHAR_EOF $TOUCH -am 0627015790 libmem.h && chmod 0644 libmem.h || echo "restore of libmem.h failed" set `wc -c libmem.h`;Wc_c=$1 if test "$Wc_c" != "855"; then echo original size 855, current size $Wc_c fi # ============= libswap.h ============== echo "x - extracting libswap.h (Text)" sed 's/^X//' << 'SHAR_EOF' > libswap.h && X/*+----------------------------------------------------------------------- X libswap.h 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.02-better error handling */ X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */ X/*:06-22-1990-02:03-root@n4hgf-creation from libmem */ X X#ifndef BUILDING_LINT_ARGS X#ifdef LINT_ARGS X X/* libswap.c */ Xvoid sinit(void ); Xvoid sread(char *,long ,int ); X X#else /* compiler doesn't mnow about prototyping */ X X/* libswap.c */ Xvoid sinit(); Xvoid sread(); Xvoid swrite(); X X#endif /* LINT_ARGS */ X#endif /* BUILDING_LINT_ARGS */ X X/* end of libswap.h */ SHAR_EOF $TOUCH -am 0627015790 libswap.h && chmod 0644 libswap.h || echo "restore of libswap.h failed" set `wc -c libswap.h`;Wc_c=$1 if test "$Wc_c" != "780"; then echo original size 780, current size $Wc_c fi # ============= libnlsym.h ============== echo "x - extracting libnlsym.h (Text)" sed 's/^X//' << 'SHAR_EOF' > libnlsym.h && X/*+----------------------------------------------------------------------- X libnlsym.h 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.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/*:10-28-1988-14:47-afterlint-creation */ X X#ifndef BUILDING_LINT_ARGS X#ifdef LINT_ARGS X X/* libnlsym.c */ Xvoid nlsym_error(char * ); Xvoid nlsym_read(void); X X#else /* compiler doesn't know about prototyping */ X X/* libnlsym.c */ Xvoid nlsym_error(); Xvoid nlsym_read(); X X#endif /* LINT_ARGS */ X#endif /* BUILDING_LINT_ARGS */ X X/* end of libnlsym.h */ SHAR_EOF $TOUCH -am 0627015790 libnlsym.h && chmod 0644 libnlsym.h || echo "restore of libnlsym.h failed" set `wc -c libnlsym.h`;Wc_c=$1 if test "$Wc_c" != "826"; then echo original size 826, current size $Wc_c fi # ============= lint_args.h ============== echo "x - extracting lint_args.h (Text)" sed 's/^X//' << 'SHAR_EOF' > lint_args.h && X/*+----------------------------------------------------------------------- X lint_args.h X------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:06-27-1990-02:01-afterlint-creation */ X X#ifndef BUILDING_LINT_ARGS X#ifdef LINT_ARGS X X/* bootinfo.c */ Xextern char *bmemf_text(unsigned long flags); Xextern void display_bootinfo(struct _win_st *win,int y,int x); X/* det_proc.c */ Xextern char *get_cpu_time_str(long ticks); Xextern char *pgrp_to_ttyname(int pgrp); Xextern char *uid_to_name(int uid); Xextern int get_user(struct proc *tproc,struct user *tuser); Xextern int getpwent_and_enter(int uid); Xextern int proc_pid_compare(struct proc *p1,struct proc *p2); Xextern int uid_name_enter(int uid,char *name); Xextern struct utmp *find_utmp_for_pgrp(int pgrp); Xextern void display_proc_stat(struct _win_st *win,int iproc,int initial); Xextern void display_proc_stats(struct _win_st *win,int initial); Xextern void init_uid_name_hash(void ); Xextern void read_and_sort_procs(int initial); Xextern void read_utmp(void ); X/* det_sio.c */ Xextern char *B_to_baud_rate(int code); Xextern char *cflag_to_baud_d_p_s(int cflag); Xextern int display_sio_summary(struct _win_st *win,int initial); Xextern int tty_slot_compare(struct tty *sio1,struct tty *sio2); Xextern void display_siofull_init(struct _win_st *win,int tly,int tlx,int show_flag); Xextern void display_siofull_update(struct _win_st *win,int tly,int tlx,struct tty *tsio); Xextern void display_siosum_update(struct _win_st *win,int y,struct tty *tsio); Xextern void grok_sio_tty(void ); X/* detail.c */ Xextern void detail_init(void ); Xextern void detail_panel_cmd(unsigned long cmd); Xextern void detail_panel_update(void ); Xextern void detpanel_destroy(void ); Xextern void detpanel_extra_init(void ); Xextern void detpanel_extra_update(void ); Xextern void detpanel_ps_init(int full43); Xextern void detpanel_ps_update(void ); Xextern void detpanel_sio_init(void ); Xextern void detpanel_sio_update(void ); X/* disputil.c */ Xextern struct PANEL *mkpanel(int rows,int cols,int tly,int tlx); Xextern void clear_area(struct _win_st *win,int y,int x,int len); Xextern void clear_area_char(struct _win_st *win,int y,int x,int len,unsigned char fillchar); Xextern void disp_info_int(struct _win_st *win,char *label,char *fmt,int value); Xextern void disp_info_long(struct _win_st *win,char *label,char *fmt,long value); Xextern void disp_msg(unsigned long cp,char *msg); Xextern void disp_static_int(struct _win_st *win,char *label,char *fmt,int value); Xextern void disp_static_long(struct _win_st *win,char *label,char *fmt,long value); Xextern void pflush(void ); Xextern void wperror(struct _win_st *win,char *desc); X/* libkmem.c */ Xextern void kinit(int write_needed); Xextern void kread(char *caddr,long kaddr,int len); X/* libmem.c */ Xextern void minit(int write_needed); Xextern void mread(char *caddr,long maddr,int len); X/* libnlsym.c */ Xextern void nlsym_error(char *text); Xextern void nlsym_read(void ); X/* libswap.c */ Xextern void sinit(void ); Xextern void sread(char *caddr,long maddr,int len); X/* nlsym.c */ Xextern int main(int argc,char * *argv,char * *envp); Xextern void nlsym_write_error(int code); X/* proc.c */ Xextern char *pstat_text(char pstat); Xextern void display_proc(struct _win_st *win,int y,int x); Xextern void grok_proc(void ); X/* tune.c */ Xextern void display_tune(struct _win_st *win,int y,int x); X/* u386mon.c */ Xextern char *get_elapsed_time(long elapsed_seconds); Xextern int get_cpu_avg(long *cpu_ticks,int period); Xextern int get_wait_avg(long *wait_ticks,int period); Xextern int main(int argc,char * *argv,char * *envp); Xextern long update_cpuscale(struct _win_st *win,int y,int x,int width,long *per_state); Xextern long update_waitscale(struct _win_st *win,int y,int x,int width,long *per_state,long total_ticks); Xextern void calc_cpu_avg(long *per_state); Xextern void calc_wait_avg(long *per_state); Xextern void draw_cpuscale_literals(struct _win_st *win,int y,int x); Xextern void draw_per_sec_literals(struct _win_st *win,int y,int x); Xextern void draw_waitscale_literals(struct _win_st *win,int y,int x); Xextern void extra_info_stuff(void ); Xextern void extra_static_stuff(void ); Xextern void leave(int exit_code); Xextern void leave_text(char *text,int exit_code); X/* var.c */ Xextern void display_var(struct _win_st *win,int y,int x); X X#else /* compiler doesn't know about prototyping */ X X/* bootinfo.c */ Xextern char *bmemf_text(); Xextern void display_bootinfo(); X/* det_proc.c */ Xextern char *get_cpu_time_str(); Xextern char *pgrp_to_ttyname(); Xextern char *uid_to_name(); Xextern int get_user(); Xextern int getpwent_and_enter(); Xextern int proc_pid_compare(); Xextern int uid_name_enter(); Xextern struct utmp *find_utmp_for_pgrp(); Xextern void display_proc_stat(); Xextern void display_proc_stats(); Xextern void init_uid_name_hash(); Xextern void read_and_sort_procs(); Xextern void read_utmp(); X/* det_sio.c */ Xextern char *B_to_baud_rate(); Xextern char *cflag_to_baud_d_p_s(); Xextern int display_sio_summary(); Xextern int tty_slot_compare(); Xextern void display_siofull_init(); Xextern void display_siofull_update(); Xextern void display_siosum_update(); Xextern void grok_sio_tty(); X/* detail.c */ Xextern void detail_init(); Xextern void detail_panel_cmd(); Xextern void detail_panel_update(); Xextern void detpanel_destroy(); Xextern void detpanel_extra_init(); Xextern void detpanel_extra_update(); Xextern void detpanel_ps_init(); Xextern void detpanel_ps_update(); Xextern void detpanel_sio_init(); Xextern void detpanel_sio_update(); X/* disputil.c */ Xextern struct PANEL *mkpanel(); Xextern void clear_area(); Xextern void clear_area_char(); Xextern void disp_info_int(); Xextern void disp_info_long(); Xextern void disp_msg(); Xextern void disp_static_int(); Xextern void disp_static_long(); Xextern void pflush(); Xextern void wperror(); X/* libkmem.c */ Xextern void kinit(); Xextern void kread(); X/* libmem.c */ Xextern void minit(); Xextern void mread(); X/* libnlsym.c */ Xextern void nlsym_error(); Xextern void nlsym_read(); X/* libswap.c */ Xextern void sinit(); Xextern void sread(); X/* nlsym.c */ Xextern int main(); Xextern void nlsym_write_error(); X/* proc.c */ Xextern char *pstat_text(); Xextern void display_proc(); Xextern void grok_proc(); X/* tune.c */ Xextern void display_tune(); X/* u386mon.c */ Xextern char *get_elapsed_time(); Xextern int get_cpu_avg(); Xextern int get_wait_avg(); Xextern int main(); Xextern long update_cpuscale(); Xextern long update_waitscale(); Xextern void calc_cpu_avg(); Xextern void calc_wait_avg(); Xextern void draw_cpuscale_literals(); Xextern void draw_per_sec_literals(); Xextern void draw_waitscale_literals(); Xextern void extra_info_stuff(); Xextern void extra_static_stuff(); Xextern void leave(); Xextern void leave_text(); X/* var.c */ Xextern void display_var(); X X#endif /* LINT_ARGS */ X#endif /* BUILDING_LINT_ARGS */ X X/* end of lint_args.h */ SHAR_EOF $TOUCH -am 0627020190 lint_args.h && chmod 0644 lint_args.h || echo "restore of lint_args.h failed" set `wc -c lint_args.h`;Wc_c=$1 if test "$Wc_c" != "6985"; then echo original size 6985, current size $Wc_c fi # ============= nlsym.h ============== echo "x - extracting nlsym.h (Text)" sed 's/^X//' << 'SHAR_EOF' > nlsym.h && X/*+------------------------------------------------------------------------- X nlsym.h -- utility nlist - fast access to kernel /dev/kmem offsets X ...!emory!n4hgf!wht X XThe nlsym file contains three records: X1. struct stat unixstat - stat buffer from /unix at file creation time X2. struct nlist nlsym - the structure of nlist'd information X3. long unique - a unique identifier to help ensure correct nlsym length X X--------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */ X/*:06-27-1990-01:55-wht@n4hgf-use 64 bits of unique check */ 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/*:10-27-1988-11:07-wht-creation */ X X#define UNIX_KERNEL "/unix" X#define UNIX_NLSYM "/unix.nlsym" X#define NLSYM_UNIQUE1 0x1BADD00DL X#define NLSYM_UNIQUE2 0xDEADB1FFL X X#define Nindex_AVAILRMEM 0 X#define Nindex_AVAILSMEM 1 X#define Nindex_BDEVCNT 2 X#define Nindex_BDEVSW 3 X#define Nindex_BOOTINFO 4 X#define Nindex_CDEVCNT 5 X#define Nindex_CDEVSW 6 X#define Nindex_CFREE 7 X#define Nindex_CFREECNT 8 X#define Nindex_CFREELIST 9 X#define Nindex_CONSSW 10 X#define Nindex_CURPROC 11 X#define Nindex_DINFO 12 X#define Nindex_DSTFLAG 13 X#define Nindex_DUMPDEV 14 X#define Nindex_EMAP 15 X#define Nindex_FFREELIST 16 X#define Nindex_FILE 17 X#define Nindex_FMODCNT 18 X#define Nindex_FMODSW 19 X#define Nindex_FREEMEM 20 X#define Nindex_FSINFO 21 X#define Nindex_FSTYPSW 22 X#define Nindex_HZ 23 X#define Nindex_IDLESERVER 24 X#define Nindex_IFREELIST 25 X#define Nindex_INODE 26 X#define Nindex_KPTBL 27 X#define Nindex_LBOLT 28 X#define Nindex_LINECNT 29 X#define Nindex_LINESW 30 X#define Nindex_MAXCLICK 31 X#define Nindex_MAXMEM 32 X#define Nindex_MINFO 33 X#define Nindex_MOUNT 34 X#define Nindex_MSGLISTCNT 35 X#define Nindex_NFSTYP 36 X#define Nindex_NPTALLOCED 37 X#define Nindex_NPTFREE 38 X#define Nindex_NSERVERS 39 X#define Nindex_NSWAP 40 X#define Nindex_NSYSENT 41 X#define Nindex_OLDPROC 42 X#define Nindex_OLD_CURPROC 43 X#define Nindex_PANICSTR 44 X#define Nindex_PHYSMEM 45 X#define Nindex_PIPEDEV 46 X#define Nindex_PROC 47 X#define Nindex_RCINFO 48 X#define Nindex_ROOTDEV 49 X#define Nindex_RUNQ 50 X#define Nindex_SHLBINFO 51 X#define Nindex_SWAPDEV 52 X#define Nindex_SWPLO 53 X#define Nindex_SYSERR 54 X#define Nindex_SYSINFO 55 X#define Nindex_SYSSEGS 56 X#define Nindex_SYSWAIT 57 X#define Nindex_TIME 58 X#define Nindex_TIMEZONE 59 X#define Nindex_TTHIWAT 60 X#define Nindex_TTLOWAT 61 X#define Nindex_TUNE 62 X#define Nindex_U 63 X#define Nindex_USERTABLE 64 X#define Nindex_V 65 X#define Nindex_WIN_UBLK 66 X#ifdef M_UNIX X#define Nindex_SIO_TTY 67 X#endif X X#define bootinfoaddr (nlsym[Nindex_BOOTINFO].n_value) X#define freememaddr (nlsym[Nindex_FREEMEM].n_value) X#define lboltaddr (nlsym[Nindex_LBOLT].n_value) X#define maxmemaddr (nlsym[Nindex_MAXMEM].n_value) X#define minfoaddr (nlsym[Nindex_MINFO].n_value) X#define nswapaddr (nlsym[Nindex_NSWAP].n_value) X#define physmemaddr (nlsym[Nindex_PHYSMEM].n_value) X#define procaddr (nlsym[Nindex_PROC].n_value) X#define sysinfoaddr (nlsym[Nindex_SYSINFO].n_value) X#define tuneaddr (nlsym[Nindex_TUNE].n_value) X#define vaddr (nlsym[Nindex_V].n_value) X#ifdef M_UNIX X#define sio_ttyaddr (nlsym[Nindex_SIO_TTY].n_value) X#endif X X#ifdef DEFINE_NLSYM Xstruct nlist nlsym[] = X{ X { "availrmem" }, X { "availsmem" }, X { "bdevcnt" }, X { "bdevsw" }, X { "bootinfo" }, X { "cdevcnt" }, X { "cdevsw" }, X { "cfree" }, X { "cfreecnt" }, X { "cfreelist" }, X { "conssw" }, X { "curproc" }, X { "dinfo" }, X { "Dstflag" }, X { "dumpdev" }, X { "emap" }, X { "ffreelist" }, X { "file" }, X { "fmodcnt" }, X { "fmodsw" }, X { "freemem" }, X { "fsinfo" }, X { "fstypsw" }, X { "Hz" }, X { "idleserver" }, X { "ifreelist" }, X { "inode" }, X { "kptbl" }, X { "lbolt" }, X { "linecnt" }, X { "linesw" }, X { "maxclick" }, X { "maxmem" }, X { "minfo" }, X { "mount" }, X { "msglistcnt" }, X { "nfstyp" }, X { "nptalloced" }, X { "nptfree" }, X { "nservers" }, X { "nswap" }, X { "nsysent" }, X { "oldproc" }, X { "old_curproc" }, X { "panicstr" }, X { "physmem" }, X { "pipedev" }, X { "proc" }, X { "rcinfo" }, X { "rootdev" }, X { "runq" }, X { "shlbinfo" }, X { "swapdev" }, X { "swplo" }, X { "syserr" }, X { "sysinfo" }, X { "syssegs" }, X { "syswait" }, X { "time" }, X { "Timezone" }, X { "tthiwat" }, X { "ttlowat" }, X { "tune" }, X { "u" }, X { "usertable" }, X { "v" }, X { "win_ublk" }, X#ifdef M_UNIX X { "sio_tty" }, X#endif X { (char *)0 } X}; X#else Xextern struct nlist nlsym[]; X#endif X X/* vi: set tabstop=4 shiftwidth=4: */ SHAR_EOF $TOUCH -am 0627015790 nlsym.h && chmod 0644 nlsym.h || echo "restore of nlsym.h failed" set `wc -c nlsym.h`;Wc_c=$1 if test "$Wc_c" != "5457"; then echo original size 5457, current size $Wc_c fi echo "End of part 3, continue with part 4" exit 0