From: wht@n4hgf.uucp (Warren Tucker) Newsgroups: alt.sources Subject: u386mon x0.11 part 2/2 Message-ID: <107@n4hgf.uucp> Date: 21 Jun 90 02:29:51 GMT Archive-name: u386mon011/part02 #!/bin/sh # This is part 02 of u386mon.x0.11 if touch 2>&1 | fgrep 'mmdd' > /dev/null then TOUCH=touch else TOUCH=true fi # ============= proc.c ============== echo "x - extracting proc.c (Text)" sed 's/^X//' << 'SHAR_EOF' > proc.c && X/*+------------------------------------------------------------------------- X proc.c - u386mon proc table functions X X Defined functions: X display_proc(win,y,x) X grok_proc() X pstat_text(pstat) X X--------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:06-17-1990-16:46-wht-creation */ X X#define M_TERMINFO X X#include X#include X#include X#undef NGROUPS_MAX X#undef NULL X#include X#include X#include X#include X#include X#include "nlsym.h" X#include "libkmem.h" X#include "libnlsym.h" X#include "u386mon.h" X Xextern int nproc; Xstruct proc *procs = (struct proc *)0; Xstruct proc *oldprocs = (struct proc *)0; X Xint procs_per_pstat[SXBRK + 1]; Xint procs_in_core; Xint procs_alive; X X/*+------------------------------------------------------------------------- X pstat_text(pstat) X--------------------------------------------------------------------------*/ Xchar * Xpstat_text(pstat) Xchar pstat; X{ Xstatic char errant[10]; X X switch(pstat) X { X case SSLEEP: return("sleep "); X case SRUN: return("run "); X case SZOMB: return("zombie"); X case SSTOP: return("stop "); X case SIDL: return("idle "); X case SONPROC: return("onproc"); X case SXBRK: return("xbrk "); X } X sprintf(errant,"%06u?",(unsigned char)pstat); X return(errant); X X} /* end of pstat_text */ X X/*+------------------------------------------------------------------------- X grok_proc() - read and examine kernel process table X--------------------------------------------------------------------------*/ Xvoid Xgrok_proc() X{ Xregister iproc; Xregister struct proc *pp; X X if(!procs) X { X if(!(procs = (struct proc *)malloc(sizeof(struct proc) * nproc))) X leave_text("cannot alloc memory for proc table",1); X if(!(oldprocs = (struct proc *)malloc(sizeof(struct proc) * nproc))) X leave_text("cannot alloc memory for proc table",1); X } X kread((caddr_t)procs,procaddr,sizeof(struct proc) * nproc); X for(iproc = 0; iproc < SXBRK + 1; iproc++) X procs_per_pstat[iproc] = 0; X procs_in_core = 0; X procs_alive = 0; X X for(iproc = 0; iproc < nproc; iproc++) X { X pp = procs + iproc; X X if(pp->p_stat) X procs_alive++; X X procs_per_pstat[pp->p_stat]++; /* count # procs in each state */ X X if(pp->p_flag & SLOAD) /* count # procs in memory */ X procs_in_core++; X } X X} /* end of grok_proc */ X X/*+------------------------------------------------------------------------- X display_proc(win,y,x) X--------------------------------------------------------------------------*/ Xvoid Xdisplay_proc(win,y,x) XWINDOW *win; Xint y; Xint x; X{ Xregister istat; X X grok_proc(); X X use_cp(win,cpBANNER); X wmove(win,y++,x); X waddstr(win,"-- proc ---"); X for(istat = SSLEEP; istat <= SXBRK; istat++) X { X wmove(win,y++,x); X disp_info_int(win,pstat_text(istat)," %3d",procs_per_pstat[istat]); X } X wmove(win,y++,x); X disp_info_int(win,"total ","%3d",procs_alive); X wmove(win,y++,x); X disp_info_int(win,"in mem ","%3d",procs_in_core); X} /* end of display_proc */ X X/* vi: set tabstop=4 shiftwidth=4: */ X/* end of proc.c */ SHAR_EOF $TOUCH -am 0620172390 proc.c && chmod 0644 proc.c || echo "restore of proc.c failed" set `wc -c proc.c`;Wc_c=$1 if test "$Wc_c" != "3085"; then echo original size 3085, current size $Wc_c 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-17-1990-14:59-wht-creation */ X X#define M_TERMINFO X X#include X#include X#include X#include 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_gpgslo ","%5d",tune.t_gpgslo); 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_gpgsmsk ","0x%03lx",tune.t_gpgsmsk); 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_maxsc ","%5d",tune.t_maxsc); 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_maxumem ","%5d",tune.t_maxumem); 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_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 0620163590 tune.c && chmod 0644 tune.c || echo "restore of tune.c failed" set `wc -c tune.c`;Wc_c=$1 if test "$Wc_c" != "1602"; then echo original size 1602, current size $Wc_c fi # ============= u386mon.c ============== echo "x - extracting u386mon.c (Text)" sed 's/^X//' << 'SHAR_EOF' > u386mon.c && Xchar *revision = "x0.11"; X/*+------------------------------------------------------------------------- X u386mon.c - UNIX 386 system monitor X X Defined functions: X calc_cpu_avg(cpu_ticks) X calc_wait_avg(wait_ticks) 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 mm/dd/yy hh:mm:ss 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-15-1990-18:32-wht@n4hgf-creation */ X X#define M_TERMINFO X X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include X#undef NGROUPS_MAX X#undef NULL X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include "nlsym.h" X#include "libkmem.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 nproc; Xint nswap; Xint maxmem; Xint freemem; X XPANEL *pscr; XWINDOW *wscr; 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) X--------------------------------------------------------------------------*/ Xvoid Xleave_text(text,exit_code) Xchar *text; Xint exit_code; X{ X wmove(wscr,LVMSG_Y,LVMSG_X); X wclrtoeol(wscr); X waddstr(wscr,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 sprintf(elapsed_time_str,"%3ld+%02ld:%02ld:%02ld",dd,hh,mm,ss); X else X 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(cpu_ticks) - add cpu_tick array to avg array X--------------------------------------------------------------------------*/ Xvoid Xcalc_cpu_avg(cpu_ticks) Xtime_t cpu_ticks[]; X{ Xregister itmp; X X if(!cpu_avg_init) X { X for(itmp = 0; itmp < CPU_AVG_MAX; itmp++) X memcpy(cpu_avg[itmp],cpu_ticks,sizeof(time_t) * 5); X cpu_avg_init = 1; X } X else X { X for(itmp = 0; itmp < CPU_AVG_MAX - 1; itmp++) X memcpy(cpu_avg[itmp],cpu_avg[itmp + 1],sizeof(time_t) * 5); X memcpy(cpu_avg[itmp],cpu_ticks,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 < COLS) 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 < 20) X use_cp(wscr,cpLOW); X else if(percent_total_wait < 40) 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(wait_ticks) - add wait_tick array to avg array X--------------------------------------------------------------------------*/ Xvoid Xcalc_wait_avg(wait_ticks) Xtime_t wait_ticks[]; X{ Xregister itmp; X X if(!wait_avg_init) X { X for(itmp = 0; itmp < WAIT_AVG_MAX; itmp++) X memcpy(wait_avg[itmp],wait_ticks,sizeof(time_t) * 3); X wait_avg_init = 1; X } X else X { X for(itmp = 0; itmp < WAIT_AVG_MAX - 1; itmp++) X memcpy(wait_avg[itmp],wait_avg[itmp + 1],sizeof(time_t) * 3); X memcpy(wait_avg[itmp],wait_ticks,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--------------------------------------------------------------------------*/ Xmain(argc,argv,envp) Xint argc; Xchar **argv; Xchar **envp; X{ Xregister itmp; Xregister char *cptr; Xregister chtype cmd; Xtime_t total_ticks; Xint y,x; Xint invalidity = 0; X X if(uname(&utsname)) X { X perror("uname"); X exit(1); X } X X for(itmp = 0; itmp < CPU_AVG_MAX; itmp++) X { X if(!(cpu_avg[itmp] = (time_t *)malloc(sizeof(time_t) * 5))) X { X fputs("cannot alloc memory!\n",stderr); X exit(1); X } X } X X for(itmp = 0; itmp < WAIT_AVG_MAX; itmp++) X { X if(!(wait_avg[itmp] = (time_t *)malloc(sizeof(time_t) * 3))) X { X fputs("cannot alloc memory!\n",stderr); X exit(1); X } X } X X if(!initscr()) X { X printf("curses init failed\n"); X exit(1); X } X clear(); X refresh(); X X nlsym_read(); X kinit(0); /* read access only */ X minit(0); /* read access only */ X init_uid_name_hash(); /* see det_proc.c */ X setuid(getuid()); 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 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 X detail_init(); X top_panel(pscr); 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 < 80) X waddch(wscr,(chtype)' '),x++; X wmove(wscr,0,71); X waddstr(wscr,"wht@n4hgf"); X wmove(wscr,CMD_TLY,0); X waddstr(wscr," ESC=quit p=ps m=main "); X getyx(wscr,y,x); X while(x < 80) X waddch(wscr,(chtype)' '),x++; X use_cp(wscr,cpLIT); 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 nproc = v.v_proc; X kread((caddr_t)&bootinfo,bootinfoaddr,sizeof(bootinfo)); 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 time(&then); X while(1) X { X nap(1000L); X time(&now); X X /* heuristic validity determination */ X wmove(wscr,0,45); 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 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 for (itmp = 0; itmp < 5; itmp++) X cpu_ticks[itmp] = sysidelta(cpu[itmp]); X X for (itmp = 0; itmp < 3; itmp++) X wait_ticks[itmp] = sysidelta(wait[itmp]); X X total_ticks = update_cpuscale(wscr,CPUSCALE_TLY + 1,CPUSCALE_SX, X CPUSCALE_WIDTH, X cpu_ticks); X X update_waitscale(wscr,WAITSCALE_TLY + 1,WAITSCALE_SX, X WAITSCALE_WIDTH, X 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, X cpu_ticks); X X get_wait_avg(wait_ticks,5); X update_waitscale(wscr,WAITSCALE_TLY + 2,WAITSCALE_SX, X WAITSCALE_WIDTH, X 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, X cpu_ticks); X X get_wait_avg(wait_ticks,10); X update_waitscale(wscr,WAITSCALE_TLY + 3,WAITSCALE_SX, X WAITSCALE_WIDTH, X 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 ","%6ld",sysidelta(bread)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"bwrite ","%6ld",sysidelta(bwrite)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"lread ","%6ld",sysidelta(lread)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"lwrite ","%6ld",sysidelta(lwrite)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"phread ","%6ld",sysidelta(phread)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"phwrit ","%6ld",sysidelta(phwrite)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"iget ","%6ld",sysidelta(iget)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"namei ","%6ld",sysidelta(namei)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"dirblk ","%6ld",sysidelta(dirblk)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"readch ","%6ld",sysidelta(readch)); X wmove(wscr,y++,PER_SEC1_TLX); X disp_info_long(wscr,"writch ","%6ld",sysidelta(writech)); X X y = PER_SEC_TLY + 1; X/* X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"rcvint ","%5ld",sysidelta(rcvint)); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"xmtint ","%5ld",sysidelta(xmtint)); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"mdmint ","%5ld\n",sysidelta(mdmint)); X*/ X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"rawch ","%5ld\n",sysidelta(rawch)); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"canch ","%5ld\n",sysidelta(canch)); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"outch ","%5ld\n",sysidelta(outch)); X X y++; X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"msg ","%5ld\n",sysidelta(msg)); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr,"sema ","%5ld\n",sysidelta(sema)); X X y++; X wmove(wscr,y++,PER_SEC2_TLX); X disp_static_long(wscr,"maxmem ","%7ldk",maxmem * NBPP / 1024); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr, "frmem ","%7ldk",freemem * NBPP / 1024); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_int (wscr, "mem used ","%3d%%", X 100 - (int)((freemem * 100) / maxmem)); X X wmove(wscr,y++,PER_SEC2_TLX); X disp_static_long(wscr,"nswap ","%7ldk",nswap/2); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_long(wscr, "frswp ","%7ldk",minfo.freeswap/2); X wmove(wscr,y++,PER_SEC2_TLX); X disp_info_int(wscr, "swp used ","%3d%%", 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 ","%4ld",sysidelta(pswitch)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"syscall ","%4ld",sysidelta(syscall)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"sysread ","%4ld",sysidelta(sysread)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"syswrit ","%4ld",sysidelta(syswrite)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"sysfork ","%4ld",sysidelta(sysfork)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"sysexec ","%4ld",sysidelta(sysexec)); X X y++; X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"runque ","%4ld",sysidelta(runque)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"runocc ","%4ld",sysidelta(runocc)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"swpque ","%4ld",sysidelta(swpque)); X wmove(wscr,y++,PER_SEC3_TLX); X disp_info_long(wscr,"swpocc ","%4ld",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 X y = PER_SEC_TLY + 1; 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 pflush(); X X if(rdchk(0)) X { X switch(cmd = wgetch(wscr)) X { X case 'q': X case A_ESC: X goto GOOD_BYE; X case 'p': X case 'm': X detail_panel_cmd(cmd); X break; X } X } X } X XGOOD_BYE: X leave_text("",0); X} /* end of main */ X X/* vi: set tabstop=4 shiftwidth=4: */ X/* end of u386mon.c */ SHAR_EOF $TOUCH -am 0620220090 u386mon.c && chmod 0644 u386mon.c || echo "restore of u386mon.c failed" set `wc -c u386mon.c`;Wc_c=$1 if test "$Wc_c" != "23942"; then echo original size 23942, 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-17-1990-14:59-wht-creation */ X X#define M_TERMINFO X X#include X#include X#include X#include 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_buf ","%5d",v.v_buf); 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_file ","%5d",v.v_file); 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_proc ","%5d",v.v_proc); 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_sptmap ","%5d",v.v_sptmap); X wmove(win,y++,x); X disp_static_int(win,"v_vhndfrac ","%5d",v.v_vhndfrac); X wmove(win,y++,x); X disp_static_int(win,"v_maxpmem ","%5d",v.v_maxpmem); X X} /* end of display_var */ X X/* vi: set tabstop=4 shiftwidth=4: */ X/* end of var.c */ SHAR_EOF $TOUCH -am 0620152990 var.c && chmod 0644 var.c || echo "restore of var.c failed" set `wc -c var.c`;Wc_c=$1 if test "$Wc_c" != "1453"; then echo original size 1453, 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 ...!gatech!emory!tridom!wht X------------------------------------------------------------------------*/ X/*+:EDITS:*/ 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 0620150490 libkmem.h && chmod 0644 libkmem.h || echo "restore of libkmem.h failed" set `wc -c libkmem.h`;Wc_c=$1 if test "$Wc_c" != "584"; then echo original size 584, 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 ...!gatech!emory!tridom!wht X------------------------------------------------------------------------*/ X/*+:EDITS:*/ 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 0620184490 libmem.h && chmod 0644 libmem.h || echo "restore of libmem.h failed" set `wc -c libmem.h`;Wc_c=$1 if test "$Wc_c" != "580"; then echo original size 580, 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 ...!gatech!emory!tridom!wht X------------------------------------------------------------------------*/ X/*+:EDITS:*/ 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 0620150490 libnlsym.h && chmod 0644 libnlsym.h || echo "restore of libnlsym.h failed" set `wc -c libnlsym.h`;Wc_c=$1 if test "$Wc_c" != "551"; then echo original size 551, 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-20-1990-22:17-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,int slot,struct user *user); 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/* detail.c */ Xextern void detail_init(void ); Xextern void detail_panel_cmd(unsigned long cmd); Xextern void detail_panel_proc_status_init(void ); Xextern void detail_panel_proc_status_update(void ); Xextern void detail_panel_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_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/* 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 *cpu_ticks); Xextern void calc_wait_avg(long *wait_ticks); 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/* detail.c */ Xextern void detail_init(); Xextern void detail_panel_cmd(); Xextern void detail_panel_proc_status_init(); Xextern void detail_panel_proc_status_update(); Xextern void detail_panel_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_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/* 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 0620221790 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" != "5612"; then echo original size 5612, 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 ...!gatech!emory!tridom!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/*:10-27-1988-11:07-wht-creation */ X X#define UNIX_KERNEL "/unix" X#define UNIX_NLSYM "/unix.nlsym" X#define NLSYM_UNIQUE 0xEFBC9A78L 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_CMASK 10 X#define Nindex_CONSSW 11 X#define Nindex_CURPROC 12 X#define Nindex_DINFO 13 X#define Nindex_DISKINFO 14 X#define Nindex_DSTFLAG 15 X#define Nindex_DUMPDEV 16 X#define Nindex_EMAP 17 X#define Nindex_FFREELIST 18 X#define Nindex_FILE 19 X#define Nindex_FMODCNT 20 X#define Nindex_FMODSW 21 X#define Nindex_FREEMEM 22 X#define Nindex_FSINFO 23 X#define Nindex_FSTYPSW 24 X#define Nindex_HZ 25 X#define Nindex_IDLESERVER 26 X#define Nindex_IFREELIST 27 X#define Nindex_INODE 28 X#define Nindex_KPTBL 29 X#define Nindex_LBOLT 30 X#define Nindex_LINECNT 31 X#define Nindex_LINESW 32 X#define Nindex_MAXCLICK 33 X#define Nindex_MAXMEM 34 X#define Nindex_MFMAP 35 X#define Nindex_MFMAX 36 X#define Nindex_MINFO 37 X#define Nindex_MOUNT 38 X#define Nindex_MSGLISTCNT 39 X#define Nindex_NFSTYP 40 X#define Nindex_NPTALLOCED 41 X#define Nindex_NPTFREE 42 X#define Nindex_NSERVERS 43 X#define Nindex_NSWAP 44 X#define Nindex_NSYSENT 45 X#define Nindex_OLDPROC 46 X#define Nindex_OLD_CURPROC 47 X#define Nindex_PANICSTR 48 X#define Nindex_PHYSMEM 49 X#define Nindex_PIPEDEV 50 X#define Nindex_PROC 51 X#define Nindex_RCINFO 52 X#define Nindex_ROOTDEV 53 X#define Nindex_RUNQ 54 X#define Nindex_SHLBINFO 55 X#define Nindex_SWAPDEV 56 X#define Nindex_SWPLO 57 X#define Nindex_SYSERR 58 X#define Nindex_SYSINFO 59 X#define Nindex_SYSSEGS 60 X#define Nindex_SYSWAIT 61 X#define Nindex_TIME 62 X#define Nindex_TIMEZONE 63 X#define Nindex_TTHIWAT 64 X#define Nindex_TTLOWAT 65 X#define Nindex_TTNULQ 66 X#define Nindex_TTYHOG 67 X#define Nindex_TUNE 68 X#define Nindex_U 69 X#define Nindex_USERTABLE 70 X#define Nindex_V 71 X#define Nindex_WIN_UBLK 72 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 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 { "Cmask" }, X { "conssw" }, X { "curproc" }, X { "dinfo" }, X { "diskinfo" }, 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 { "mfmap" }, X { "mfmax" }, 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 { "ttnulq" }, X { "ttyhog" }, X { "tune" }, X { "u" }, X { "usertable" }, X { "v" }, X { "win_ublk" }, X { (char *)0 } X}; X#else Xextern struct nlist nlsym[]; X#endif X X/* vi: set tabstop=4 shiftwidth=4: */ SHAR_EOF $TOUCH -am 0620150490 nlsym.h && chmod 0644 nlsym.h || echo "restore of nlsym.h failed" set `wc -c nlsym.h`;Wc_c=$1 if test "$Wc_c" != "4869"; then echo original size 4869, current size $Wc_c fi # ============= u386mon.h ============== echo "x - extracting u386mon.h (Text)" sed 's/^X//' << 'SHAR_EOF' > u386mon.h && X X/*+------------------------------------------------------------------------- X u386mon.h X--------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:06-20-1990-03:03-root@n4hgf-trick use_cp into making bright fgnd colors */ X/*:06-19-1990-21:35-wht-get ready for release */ X Xchar *getenv(); Xchar *strchr(); Xchar *strrchr(); X#ifdef __STDC__ Xvoid *malloc(); X#else Xchar *malloc(); X#endif X X#define pW(pan) panel_window(pan) X#define W WINDOW X#define P PANEL X X/* color numbers for EGA/VGA */ X#ifdef COLOR_16_TERMINFO /* wht 16-color fgnd/bgnd terminfo */ X#define cHIBIT 8 X#define cBLK 0 X#define cBLU 1 X#define cGRN 2 X#define cCYN 3 X#define cRED 4 X#define cMAG 5 X#define cBRN 6 X#define cWHT 7 X#define cGRY (cBLK | cHIBIT) X#define cLTB (cBLU | cHIBIT) X#define cLTG (cGRN | cHIBIT) X#define cLTC (cCYN | cHIBIT) X#define cLTR (cRED | cHIBIT) X#define cLTM (cMAG | cHIBIT) X#define cYEL (cBRN | cHIBIT) X#define cHIW (cWHT | cHIBIT) X#else X#define cBLK COLOR_BLACK X#define cBLU COLOR_BLUE X#define cGRN COLOR_GREEN X#define cCYN COLOR_CYAN X#define cRED COLOR_RED X#define cMAG COLOR_MAGENTA X#define cBRN COLOR_YELLOW X#define cWHT COLOR_WHITE X#define cGRY COLOR_BLACK X#define cLTB COLOR_BLUE X#define cLTG COLOR_GREEN X#define cLTC COLOR_CYAN X#define cLTR COLOR_RED X#define cLTM COLOR_MAGENTA X#define cYEL COLOR_YELLOW X#define cHIW COLOR_WHITE X#endif X X#define sTL 0xDA X#define sTR 0xBF X#define sBL 0xC0 X#define sBR 0xD9 X#define sLT 0xC3 /* left hand T */ X#define sRT 0xB4 /* right hand T */ X#define sVR 0xB3 /* vertical rule */ X#define sHR 0xC4 /* horizontal rule */ X X/* color pairs */ X#ifdef COLOR_16_TERMINFO /* wht 16-color fgnd/bgnd terminfo */ X#define use_cp(win,cp) wattrset(win,COLOR_PAIR(cp)) X#else X#define use_cp(win,cp) wattrset(win,COLOR_PAIR(cp) | ((cp >= cpLOW)?A_BOLD:0)) X#endif X#define cpINFO 1 /* information field */ X#define cpHIGH 2 /* high/brk/pio */ X/* color pairs >= cpLOW need A_BOLD when using standard ISO (non-wht) terminfo X */ X#define cpLOW 3 /* low/user/iop */ X#define cpMED 4 /* medium/kernel/swap */ X#define cpBANNER 5 /* banner */ X#define cpLIT 6 /* field literals */ X X#define MSG_TLY (LINES - 2) X#define CMD_TLY (LINES - 1) X#define LVMSG_Y MSG_TLY X#define LVMSG_X 0 X X#define CPUSCALE_TLY 1 X#define CPUSCALE_SX 13 X#define CPUSCALE_WIDTH 50 X X#define WAITSCALE_TLY 5 X#define WAITSCALE_SX 13 X#define WAITSCALE_WIDTH 50 X X/* Sysinfo/Minfo per second area */ X#define PER_SEC_TLY 9 X#define PER_SEC1_TLX 0 X#define PER_SEC2_TLX 15 X#define PER_SEC3_TLX 32 X#define PER_SEC4_TLX 48 X#define PER_SEC5_TLX 63 X X/* extra info area */ X#define EXTRA_TLY 26 X#define EXTRA1_TLX 0 X#define EXTRA2_TLX 18 X#define EXTRA3_TLX 42 X#define EXTRA4_TLX 61 X X/* X#define DETAIL_TLY ((LINES >= 43) ? EXTRA_TLY : PER_SEC_TLY) X*/ X#define DETAIL_TLY PER_SEC_TLY X#define DETAIL_LENGTH (MSG_TLY - DETAIL_TLY) X X#include "lint_args.h" X X/* vi: set tabstop=4 shiftwidth=4: */ X/* end of u386mon.h */ SHAR_EOF $TOUCH -am 0620220190 u386mon.h && chmod 0644 u386mon.h || echo "restore of u386mon.h failed" set `wc -c u386mon.h`;Wc_c=$1 if test "$Wc_c" != "2941"; then echo original size 2941, current size $Wc_c fi exit 0 --------------------------------------------------------------------- Warren Tucker, TuckerWare gatech!n4hgf!wht or wht%n4hgf@gatech.edu Any perceptible delay will eventually get on your nerves. --Bob Hyers