home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume13 / u386mon-1.12 / part03 < prev    next >
Encoding:
Text File  |  1990-07-02  |  50.8 KB  |  1,792 lines

  1. Newsgroups: comp.sources.misc
  2. subject: v13i105: u386mon 1.12 part 03.04
  3. From: wht@gatech.edu@n4hgf.UUCP (Warren Tucker)
  4. Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  5.  
  6. Posting-number: Volume 13, Issue 105
  7. Submitted-by: wht@gatech.edu@n4hgf.UUCP (Warren Tucker)
  8. Archive-name: u386mon-1.12/part03
  9.  
  10. #!/bin/sh
  11. # This is part 03 of u386mon.1.12
  12. if touch 2>&1 | fgrep 'mmdd' > /dev/null
  13.  then TOUCH=touch
  14.  else TOUCH=true
  15. fi
  16. # ============= proc.c ==============
  17. echo "x - extracting proc.c (Text)"
  18. sed 's/^X//' << 'SHAR_EOF' > proc.c &&
  19. X/*+-------------------------------------------------------------------------
  20. X    proc.c - u386mon proc table functions
  21. X
  22. X  Defined functions:
  23. X    display_proc(win,y,x)
  24. X    grok_proc()
  25. X    pstat_text(pstat)
  26. X
  27. X--------------------------------------------------------------------------*/
  28. X/*+:EDITS:*/
  29. X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
  30. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  31. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  32. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  33. X/*:06-17-1990-16:46-wht-creation */
  34. X
  35. X#define M_TERMINFO
  36. X
  37. X#include <curses.h>
  38. X#include <panel.h>
  39. X#include <sys/types.h>
  40. X#undef NGROUPS_MAX
  41. X#undef NULL
  42. X#include <sys/param.h>
  43. X#include <sys/immu.h>
  44. X#include <sys/region.h>
  45. X#include <sys/proc.h>
  46. X#include <sys/var.h>
  47. X#include <nlist.h>
  48. X#include "nlsym.h"
  49. X#include "libkmem.h"
  50. X#include "libnlsym.h"
  51. X#include "u386mon.h"
  52. X
  53. Xextern struct var v;
  54. X
  55. Xstruct proc *procs = (struct proc *)0;
  56. Xstruct proc *oldprocs = (struct proc *)0;
  57. X
  58. Xint procs_per_pstat[SXBRK + 1];
  59. Xint procs_in_core;
  60. Xint procs_alive;
  61. X
  62. X/*+-------------------------------------------------------------------------
  63. X    pstat_text(pstat)
  64. X--------------------------------------------------------------------------*/
  65. Xchar *
  66. Xpstat_text(pstat)
  67. Xchar pstat;
  68. X{
  69. Xstatic char errant[10];
  70. X
  71. X    switch(pstat)
  72. X    {
  73. X        case SSLEEP:   return("sleep ");
  74. X        case SRUN:     return("run   ");
  75. X        case SZOMB:    return("zombie");
  76. X        case SSTOP:    return("stop  ");
  77. X        case SIDL:     return("idle  ");
  78. X        case SONPROC:  return("onproc");
  79. X        case SXBRK:    return("xbrk  ");
  80. X    }
  81. X    (void)sprintf(errant,"%06u?",(unsigned char)pstat);
  82. X    return(errant);
  83. X
  84. X}    /* end of pstat_text */
  85. X
  86. X/*+-------------------------------------------------------------------------
  87. X    grok_proc() - read and examine kernel process table
  88. X--------------------------------------------------------------------------*/
  89. Xvoid
  90. Xgrok_proc()
  91. X{
  92. Xregister iproc;
  93. Xregister struct proc *pp;
  94. X
  95. X    if(!procs)
  96. X    {
  97. X        if(!(procs = (struct proc *)malloc(sizeof(struct proc) * v.v_proc)))
  98. X            leave_text("cannot alloc memory for proc table",1);
  99. X        if(!(oldprocs = (struct proc *)malloc(sizeof(struct proc) * v.v_proc)))
  100. X            leave_text("cannot alloc memory for proc table",1);
  101. X    }
  102. X    kread((caddr_t)procs,procaddr,sizeof(struct proc) * v.v_proc);
  103. X    for(iproc = 0; iproc < SXBRK + 1; iproc++)
  104. X        procs_per_pstat[iproc] = 0;
  105. X    procs_in_core = 0;
  106. X    procs_alive = 0;
  107. X
  108. X    for(iproc = 0; iproc < v.v_proc; iproc++)
  109. X    {
  110. X        pp = procs + iproc;
  111. X
  112. X        if(pp->p_stat)
  113. X            procs_alive++;
  114. X
  115. X        procs_per_pstat[pp->p_stat]++;    /* count # procs in each state */
  116. X
  117. X        if(pp->p_flag & SLOAD)            /* count # procs in memory */
  118. X            procs_in_core++;
  119. X    }
  120. X
  121. X}    /* end of grok_proc */
  122. X
  123. X/*+-------------------------------------------------------------------------
  124. X    display_proc(win,y,x)
  125. X--------------------------------------------------------------------------*/
  126. Xvoid
  127. Xdisplay_proc(win,y,x)
  128. XWINDOW *win;
  129. Xint y;
  130. Xint x;
  131. X{
  132. Xregister istat;
  133. X
  134. X    grok_proc();
  135. X
  136. X    use_cp(win,cpBANNER);
  137. X    wmove(win,y++,x);
  138. X    waddstr(win,"-- Proc ---");
  139. X    for(istat = SSLEEP; istat <= SXBRK; istat++)
  140. X    {
  141. X        wmove(win,y++,x);
  142. X        disp_info_int(win,pstat_text(istat),"  %3d",procs_per_pstat[istat]);
  143. X    }
  144. X    wmove(win,y++,x);
  145. X    disp_info_int(win,"total ","  %3d",procs_alive);
  146. X    wmove(win,y++,x);
  147. X    disp_info_int(win,"in mem","  %3d",procs_in_core);
  148. X}    /* end of display_proc */
  149. X
  150. X/* vi: set tabstop=4 shiftwidth=4: */
  151. X/* end of proc.c */
  152. SHAR_EOF
  153. $TOUCH -am 0627015790 proc.c &&
  154. chmod 0644 proc.c ||
  155. echo "restore of proc.c failed"
  156. set `wc -c proc.c`;Wc_c=$1
  157. if test "$Wc_c" != "3411"; then
  158.     echo original size 3411, current size $Wc_c
  159. fi
  160. # ============= tune.c ==============
  161. echo "x - extracting tune.c (Text)"
  162. sed 's/^X//' << 'SHAR_EOF' > tune.c &&
  163. X/*+-------------------------------------------------------------------------
  164. X    tune.c - u386mon tune struct display
  165. X
  166. X  Defined functions:
  167. X    display_tune(win,y,x)
  168. X
  169. X--------------------------------------------------------------------------*/
  170. X/*+:EDITS:*/
  171. X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
  172. X/*:06-25-1990-17:33-wht@n4hgf-alpha sort identifiers */
  173. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  174. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  175. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  176. X/*:06-17-1990-14:59-wht-creation */
  177. X
  178. X#define M_TERMINFO
  179. X
  180. X#include <curses.h>
  181. X#include <panel.h>
  182. X#include <sys/types.h>
  183. X#include <sys/tuneable.h>
  184. X#include "u386mon.h"
  185. X
  186. X/*+-------------------------------------------------------------------------
  187. X    display_tune(win,y,x)
  188. X--------------------------------------------------------------------------*/
  189. Xvoid
  190. Xdisplay_tune(win,y,x)
  191. XWINDOW *win;
  192. Xint y;
  193. Xint x;
  194. X{
  195. X
  196. X    use_cp(win,cpBANNER);
  197. X    wmove(win,y++,x);
  198. X    waddstr(win,"-- Tune ---------");
  199. X    wmove(win,y++,x);
  200. X    disp_static_int(win,"t_ageintvl  ","%5d",tune.t_ageinterval);
  201. X    wmove(win,y++,x);
  202. X    disp_static_int(win,"t_bdflushr  ","%5d",tune.t_bdflushr);
  203. X    wmove(win,y++,x);
  204. X    disp_static_int(win,"t_gpgshi    ","%5d",tune.t_gpgshi);
  205. X    wmove(win,y++,x);
  206. X    disp_static_int(win,"t_gpgslo    ","%5d",tune.t_gpgslo);
  207. X    wmove(win,y++,x);
  208. X    disp_static_int(win,"t_gpgsmsk   ","0x%03lx",tune.t_gpgsmsk);
  209. X    wmove(win,y++,x);
  210. X    disp_static_int(win,"t_maxfc     ","%5d",tune.t_maxfc);
  211. X    wmove(win,y++,x);
  212. X    disp_static_int(win,"t_maxsc     ","%5d",tune.t_maxsc);
  213. X    wmove(win,y++,x);
  214. X    disp_static_int(win,"t_maxumem   ","%5d",tune.t_maxumem);
  215. X    wmove(win,y++,x);
  216. X    disp_static_int(win,"t_minarmem  ","%5d",tune.t_minarmem);
  217. X    wmove(win,y++,x);
  218. X    disp_static_int(win,"t_minasmem  ","%5d",tune.t_minasmem);
  219. X
  220. X}    /* end of display_tune */
  221. X
  222. X/* vi: set tabstop=4 shiftwidth=4: */
  223. X/* end of tune.c */
  224. SHAR_EOF
  225. $TOUCH -am 0627015790 tune.c &&
  226. chmod 0644 tune.c ||
  227. echo "restore of tune.c failed"
  228. set `wc -c tune.c`;Wc_c=$1
  229. if test "$Wc_c" != "1941"; then
  230.     echo original size 1941, current size $Wc_c
  231. fi
  232. # ============= u386mon.c ==============
  233. echo "x - extracting u386mon.c (Text)"
  234. sed 's/^X//' << 'SHAR_EOF' > u386mon.c &&
  235. Xchar *revision = "1.12";
  236. X/*+-------------------------------------------------------------------------
  237. X    u386mon.c - UNIX 386 system monitor
  238. X
  239. X  Defined functions:
  240. X    calc_cpu_avg(per_state)
  241. X    calc_wait_avg(per_state)
  242. X    draw_cpuscale_literals(win,y,x)
  243. X    draw_per_sec_literals(win,y,x)
  244. X    draw_waitscale_literals(win,y,x)
  245. X    extra_info_stuff()
  246. X    extra_static_stuff()
  247. X    get_cpu_avg(cpu_ticks,period)
  248. X    get_elapsed_time(elapsed_seconds)
  249. X    get_wait_avg(wait_ticks,period)
  250. X    leave(exit_code)
  251. X    leave_text(text,exit_code)
  252. X    main(argc,argv,envp)
  253. X    update_cpuscale(win,y,x,width,per_state)
  254. X    update_waitscale(win,y,x,width,per_state,total_ticks)
  255. X
  256. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  257. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  258. X u386mon xxx.xxx                       PLOCK     INVALID      hh:mm:ss wht@n4hgf
  259. X
  260. X---- CPU --- tot usr ker brk ---------------------------------------------------
  261. X Instant %   ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  262. X 5 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  263. X10 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  264. X---- Wait -- tot  io swp pio ---------------------------------------------------
  265. X Instant %   ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  266. X 5 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  267. X10 Sec Avg % ### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  268. X
  269. X--------------------------------------------------------------------------*/
  270. X/*+:EDITS:*/
  271. X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
  272. X/*:06-27-1990-01:07-wht@n4hgf-add ^R and ^L refresh */
  273. X/*:06-25-1990-17:34-wht@n4hgf-add detail extra for 25 line tubes */
  274. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  275. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  276. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  277. X/*:06-15-1990-18:32-wht@n4hgf-creation */
  278. X
  279. X#define M_TERMINFO
  280. X
  281. X#include <curses.h>
  282. X#include <panel.h>
  283. X#include <signal.h>
  284. X#include <string.h>
  285. X#include <fcntl.h>
  286. X#include <nlist.h>
  287. X#include <errno.h>
  288. X#include <time.h>
  289. X#include <sys/types.h>
  290. X#include <sys/lock.h>
  291. X#include <sys/utsname.h>
  292. X#include <sys/stat.h>
  293. X#include <sys/ascii.h>
  294. X#undef NGROUPS_MAX
  295. X#undef NULL
  296. X#include <sys/param.h>
  297. X#include <sys/bootinfo.h>
  298. X#include <sys/tuneable.h>
  299. X#include <sys/sysinfo.h>
  300. X#include <sys/sysmacros.h>
  301. X#include <sys/immu.h>
  302. X#include <sys/region.h>
  303. X#include <sys/proc.h>
  304. X#include <sys/var.h>
  305. X#include "nlsym.h"
  306. X#include "libkmem.h"
  307. X#include "libmem.h"
  308. X#include "libswap.h"
  309. X#include "libnlsym.h"
  310. X#include "u386mon.h"
  311. X
  312. XPANEL *mkpanel();
  313. X
  314. Xstruct sysinfo sysinfo;
  315. Xstruct sysinfo sysinfo_last;
  316. X#define sysidelta(x) (sysinfo.x - sysinfo_last.x)
  317. X
  318. Xstruct minfo minfo;
  319. Xstruct minfo minfo_last;
  320. X#define midelta(x) (minfo.x - minfo_last.x)
  321. X
  322. Xstruct bootinfo bootinfo;
  323. Xstruct tune tune;
  324. Xstruct utsname utsname;
  325. Xstruct var v;
  326. Xtime_t now;
  327. Xtime_t then;
  328. Xint hz;
  329. Xint nswap;
  330. Xint maxmem;
  331. Xint freemem;
  332. Xdaddr_t myreadcnt = 0L;
  333. X
  334. XPANEL *pscr;
  335. XWINDOW *wscr;
  336. Xextern WINDOW *wdet;
  337. X
  338. X#define CPU_AVG_MAX        10
  339. Xint cpu_avg_init = 0;
  340. Xtime_t *cpu_avg[CPU_AVG_MAX];
  341. Xtime_t cpu_ticks[5];
  342. X
  343. X#define WAIT_AVG_MAX    10
  344. Xint wait_avg_init = 0;
  345. Xtime_t *wait_avg[WAIT_AVG_MAX];
  346. Xtime_t wait_ticks[5];
  347. X
  348. X/*+-------------------------------------------------------------------------
  349. X    leave(exit_code)
  350. X--------------------------------------------------------------------------*/
  351. Xvoid
  352. Xleave(exit_code)
  353. Xint exit_code;
  354. X{
  355. X    wmove(wscr,CMD_TLY,0);
  356. X    use_cp(wscr,cpLIT);
  357. X    wclrtoeol(wscr);
  358. X    pflush();
  359. X    endwin();
  360. X    exit(exit_code);
  361. X}    /* end of leave */
  362. X
  363. X/*+-------------------------------------------------------------------------
  364. X    leave_text(text,exit_code)
  365. XIf exit_code == 255, do wperror
  366. X--------------------------------------------------------------------------*/
  367. Xvoid
  368. Xleave_text(text,exit_code)
  369. Xchar *text;
  370. Xint exit_code;
  371. X{
  372. X    if(exit_code == 255)
  373. X    {
  374. X    int y;
  375. X    register x;
  376. X    extern int errno;
  377. X    extern int sys_nerr;
  378. X    extern char *sys_errlist[];
  379. X
  380. X        top_panel(pscr);
  381. X        wmove(wscr,MSG_TLY - 2,0);
  382. X        use_cp(wscr,cpHIGH);
  383. X        x = 0;
  384. X        while(x++ < COLS)
  385. X            waddch(wscr,(chtype)' ');
  386. X        wmove(wscr,MSG_TLY - 1,0);
  387. X        wprintw(wscr,"errno %d",errno);
  388. X        if(errno < sys_nerr)
  389. X            wprintw(wscr,": %s",sys_errlist[errno]);
  390. X        getyx(wscr,y,x);
  391. X        while(x++ < COLS)
  392. X            waddch(wscr,(chtype)' ');
  393. X    }
  394. X    disp_msg(cpHIGH,text);
  395. X    leave(exit_code);
  396. X}    /* end of leave */
  397. X
  398. X/*+-----------------------------------------------------------------------
  399. X    char *get_elapsed_time(elapsed_seconds) - "ddd+hh:mm:ss" returned
  400. X  static string address is returned
  401. X------------------------------------------------------------------------*/
  402. Xchar *
  403. Xget_elapsed_time(elapsed_seconds)
  404. Xtime_t elapsed_seconds;
  405. X{
  406. Xstatic char elapsed_time_str[32];
  407. Xtime_t dd,hh,mm,ss;
  408. X
  409. X    dd = 0;
  410. X    hh = elapsed_seconds / 3600;
  411. X    if(hh > 24)
  412. X    {
  413. X        dd = hh / 24;
  414. X        elapsed_seconds -= dd * 3600 * 24;
  415. X        hh %= 24;
  416. X    }
  417. X    elapsed_seconds -= hh * 3600;
  418. X    mm = elapsed_seconds / 60L;
  419. X    elapsed_seconds -= mm * 60L;
  420. X    ss = elapsed_seconds;
  421. X
  422. X    if(dd)
  423. X        (void)sprintf(elapsed_time_str,"%3ld+%02ld:%02ld:%02ld",dd,hh,mm,ss);
  424. X    else
  425. X        (void)sprintf(elapsed_time_str,"    %2ld:%02ld:%02ld",hh,mm,ss);
  426. X    return(elapsed_time_str);
  427. X}    /* end of get_elapsed_time */
  428. X
  429. X/*+-------------------------------------------------------------------------
  430. X    draw_cpuscale_literals(win)
  431. X--------------------------------------------------------------------------*/
  432. Xvoid
  433. Xdraw_cpuscale_literals(win,y,x)
  434. XWINDOW *win;
  435. Xint y;
  436. Xint x;
  437. X{
  438. Xint x2 = x;
  439. X
  440. X    wmove(win,y,x);
  441. X    use_cp(wscr,cpBANNER);
  442. X    waddstr(win,"---- CPU --- tot usr ker brk ");
  443. X    getyx(win,y,x2);
  444. X    while(x2 < COLS)
  445. X        waddch(win,(chtype)'-'),x2++;
  446. X    use_cp(wscr,cpLIT);
  447. X    wmove(win,y + 1,x);
  448. X      waddstr(win," Instant %  ");
  449. X    wmove(win,y + 2,x);
  450. X      waddstr(win," 5 Sec Avg %");
  451. X    wmove(win,y + 3,x);
  452. X    waddstr(win,"10 Sec Avg %");
  453. X
  454. X}    /* end of draw_cpuscale_literals */
  455. X
  456. X/*+-------------------------------------------------------------------------
  457. X    update_cpuscale(win,y,width,per_state)
  458. X
  459. X000000000011111111112222222222333333333344444444445555555555666666
  460. X012345678901234567890123456789012345678901234567890123456789012345
  461. Xtot usr ker misc 
  462. X### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  463. X--------------------------------------------------------------------------*/
  464. X#define _CPUSCALE_TX    0
  465. X#define _CPUSCALE_UX    4
  466. X#define _CPUSCALE_KX    8
  467. X#define _CPUSCALE_BX    12
  468. X#define _CPUSCALE_SX    16
  469. X
  470. Xtime_t
  471. Xupdate_cpuscale(win,y,x,width,per_state)
  472. XWINDOW *win;
  473. Xint y;
  474. Xint x;
  475. Xregister width;
  476. Xtime_t *per_state;
  477. X{
  478. Xregister itmp;
  479. Xint accum = 0;
  480. Xtime_t idle = per_state[CPU_IDLE] + per_state[CPU_WAIT];
  481. Xtime_t cpu_ticks_total = idle + per_state[CPU_SXBRK] + 
  482. X    per_state[CPU_IDLE] + per_state[CPU_KERNEL] + per_state[CPU_USER];
  483. Xtime_t percent_user    = (per_state[CPU_USER]   * 100) / cpu_ticks_total;
  484. Xtime_t percent_kernel  = (per_state[CPU_KERNEL] * 100) / cpu_ticks_total;
  485. Xtime_t percent_break   = (per_state[CPU_SXBRK]  * 100) / cpu_ticks_total;
  486. Xtime_t percent_busy    = percent_user + percent_kernel + percent_break;
  487. X
  488. X    if(!idle)            /* take care of integer div truncation */
  489. X        percent_busy = 100;
  490. X
  491. X    wmove(win,y, x + _CPUSCALE_TX);
  492. X    if(percent_busy < 70)
  493. X        use_cp(wscr,cpLOW);
  494. X    else if(percent_busy < 90)
  495. X        use_cp(wscr,cpMED);
  496. X    else
  497. X        use_cp(wscr,cpHIGH);
  498. X    wprintw(win,"%3ld",percent_busy);
  499. X
  500. X    wmove(win,y, x + _CPUSCALE_UX);
  501. X    use_cp(wscr,cpINFO);
  502. X    wprintw(win,"%3ld",percent_user);
  503. X    
  504. X    wmove(win,y, x + _CPUSCALE_KX);
  505. X    wprintw(win,"%3ld",percent_kernel);
  506. X    
  507. X    wmove(win,y, x + _CPUSCALE_BX);
  508. X    wprintw(win,"%3ld",percent_break);
  509. X    
  510. X    wmove(win,y, x + _CPUSCALE_SX);
  511. X
  512. X    use_cp(wscr,cpLOW);
  513. X    itmp = (width * percent_user) / 100;
  514. X    accum += itmp;
  515. X    while(itmp--)
  516. X        waddch(win,(chtype)'u');
  517. X
  518. X    use_cp(wscr,cpMED);
  519. X    itmp = (width * percent_kernel) / 100;
  520. X    accum += itmp;
  521. X    while(itmp--)
  522. X        waddch(win,(chtype)'k');
  523. X
  524. X    use_cp(wscr,cpHIGH);
  525. X    itmp = (width * percent_break) / 100;
  526. X    accum += itmp;
  527. X    while(itmp--)
  528. X        waddch(win,(chtype)'b');
  529. X
  530. X    if((percent_busy > 98) && ((width - accum) > 0))
  531. X    {
  532. X        waddch(win,(chtype)'*');
  533. X        accum++;
  534. X    }
  535. X
  536. X    if((itmp = (width - accum)) > 0)
  537. X    {
  538. X        while(itmp--)
  539. X            waddch(win,(chtype)' ');
  540. X    }
  541. X    return(cpu_ticks_total);
  542. X}    /* end of update_cpuscale */
  543. X
  544. X/*+-------------------------------------------------------------------------
  545. X    calc_cpu_avg(per_state) - add per_state array to avg array
  546. X--------------------------------------------------------------------------*/
  547. Xvoid
  548. Xcalc_cpu_avg(per_state)
  549. Xtime_t per_state[];
  550. X{
  551. Xregister itmp;
  552. X
  553. X    if(!cpu_avg_init)
  554. X    {
  555. X        for(itmp = 0; itmp < CPU_AVG_MAX; itmp++)
  556. X            (void)memcpy(cpu_avg[itmp],per_state,sizeof(time_t) * 5);
  557. X        cpu_avg_init = 1;
  558. X    }
  559. X    else
  560. X    {
  561. X        for(itmp = 0; itmp < CPU_AVG_MAX - 1; itmp++)
  562. X            (void)memcpy(cpu_avg[itmp],cpu_avg[itmp + 1],sizeof(time_t) * 5);
  563. X        (void)memcpy(cpu_avg[itmp],per_state,sizeof(time_t) * 5);
  564. X    }
  565. X
  566. X}    /* end of calc_cpu_avg */
  567. X
  568. X/*+-------------------------------------------------------------------------
  569. X    get_cpu_avg(cpu_ticks,period)
  570. X--------------------------------------------------------------------------*/
  571. Xget_cpu_avg(cpu_ticks,period)
  572. Xtime_t cpu_ticks[];
  573. Xint period;
  574. X{
  575. Xregister iperiod = CPU_AVG_MAX;
  576. Xregister istate;
  577. Xregister count = period;
  578. X
  579. X    for(istate = 0; istate < 5; istate++)
  580. X        cpu_ticks[istate] = 0;
  581. X
  582. X    while(count--)
  583. X    {
  584. X        iperiod--;
  585. X        for(istate = 0; istate < 5; istate++)
  586. X        {
  587. X            cpu_ticks[istate] += (cpu_avg[iperiod])[istate];
  588. X        }
  589. X    }
  590. X
  591. X    for(istate = 0; istate < 5; istate++)
  592. X        cpu_ticks[istate] /= period;
  593. X
  594. X}    /* end of get_cpu_avg */
  595. X
  596. X/*+-------------------------------------------------------------------------
  597. X    draw_waitscale_literals(win)
  598. X--------------------------------------------------------------------------*/
  599. Xvoid
  600. Xdraw_waitscale_literals(win,y,x)
  601. XWINDOW *win;
  602. Xint y;
  603. Xint x;
  604. X{
  605. Xint x2 = x;
  606. X
  607. X    wmove(win,y,x);
  608. X    use_cp(wscr,cpBANNER);
  609. X    waddstr(win,"---- Wait -- tot  io swp pio -- (% of real time) ");
  610. X    getyx(win,y,x2);
  611. X    while(x2 < COLS)
  612. X        waddch(win,(chtype)'-'),x2++;
  613. X    use_cp(wscr,cpLIT);
  614. X    wmove(win,y + 1,x);
  615. X      waddstr(win," Instant %  ");
  616. X    wmove(win,y + 2,x);
  617. X      waddstr(win," 5 Sec Avg %");
  618. X    wmove(win,y + 3,x);
  619. X    waddstr(win,"10 Sec Avg %");
  620. X
  621. X}    /* end of draw_waitscale_literals */
  622. X
  623. X/*+-------------------------------------------------------------------------
  624. X    draw_per_sec_literals(win)
  625. X--------------------------------------------------------------------------*/
  626. Xvoid
  627. Xdraw_per_sec_literals(win,y,x)
  628. XWINDOW *win;
  629. Xint y;
  630. Xint x;
  631. X{
  632. X
  633. X    wmove(win,y,x);
  634. X    use_cp(wscr,cpBANNER);
  635. X    waddstr(win,"---- Sysinfo/Minfo --- (last 1 second activity) ");
  636. X    getyx(win,y,x);
  637. X    while(x < getmaxx(win))
  638. X        waddch(win,(chtype)'-'),x++;
  639. X
  640. X}    /* end of draw_per_sec_literals */
  641. X
  642. X/*+-------------------------------------------------------------------------
  643. X    update_waitscale(win,y,width,per_state)
  644. X
  645. X000000000011111111112222222222333333333344444444445555555555666666
  646. X012345678901234567890123456789012345678901234567890123456789012345
  647. Xtot  io swp pio 
  648. X### ### ### ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  649. X--------------------------------------------------------------------------*/
  650. X#define _WAITSCALE_TX    0
  651. X#define _WAITSCALE_IX    4
  652. X#define _WAITSCALE_WX    8
  653. X#define _WAITSCALE_PX    12
  654. X#define _WAITSCALE_SX    16
  655. X
  656. Xtime_t
  657. Xupdate_waitscale(win,y,x,width,per_state,total_ticks)
  658. XWINDOW *win;
  659. Xint y;
  660. Xint x;
  661. Xregister width;
  662. Xtime_t *per_state;
  663. Xtime_t total_ticks;
  664. X{
  665. Xregister itmp;
  666. Xint accum = 0;
  667. Xtime_t percent_io = 0L;
  668. Xtime_t percent_swap = 0L;
  669. Xtime_t percent_pio = 0L;
  670. Xtime_t percent_total_wait;
  671. Xtime_t total_wait;
  672. X
  673. X/* crock: because of latency, total_ticks < all wait ticks sometimes */
  674. X    total_wait = per_state[W_IO] + per_state[W_SWAP] + per_state[W_PIO];
  675. X    if(total_ticks < total_wait)
  676. X        total_ticks = total_wait;
  677. X
  678. X    if(total_ticks)
  679. X    {
  680. X        percent_io    = (per_state[W_IO]   * 100) / total_ticks;
  681. X        percent_swap  = (per_state[W_SWAP] * 100) / total_ticks;
  682. X        percent_pio   = (per_state[W_PIO]  * 100) / total_ticks;
  683. X    }
  684. X
  685. X    percent_total_wait = percent_io + percent_swap + percent_pio;
  686. X    wmove(win,y, x + _WAITSCALE_TX);
  687. X    if(percent_total_wait < 30)
  688. X        use_cp(wscr,cpLOW);
  689. X    else if(percent_total_wait < 50)
  690. X        use_cp(wscr,cpMED);
  691. X    else
  692. X        use_cp(wscr,cpHIGH);
  693. X    wprintw(win,"%3ld",percent_total_wait);
  694. X
  695. X    wmove(win,y, x + _WAITSCALE_IX);
  696. X    use_cp(wscr,cpINFO);
  697. X    wprintw(win,"%3ld",percent_io);
  698. X    
  699. X    wmove(win,y, x + _WAITSCALE_WX);
  700. X    wprintw(win,"%3ld",percent_swap);
  701. X    
  702. X    wmove(win,y, x + _WAITSCALE_PX);
  703. X    wprintw(win,"%3ld",percent_pio);
  704. X    
  705. X    wmove(win,y, x + _WAITSCALE_SX);
  706. X
  707. X    use_cp(wscr,cpLOW);
  708. X    itmp = (width * percent_io) / 100;
  709. X    accum += itmp;
  710. X    while(itmp--)
  711. X        waddch(win,(chtype)'i');
  712. X
  713. X    use_cp(wscr,cpMED);
  714. X    itmp = (width * percent_swap) / 100;
  715. X    accum += itmp;
  716. X    while(itmp--)
  717. X        waddch(win,(chtype)'s');
  718. X
  719. X    use_cp(wscr,cpHIGH);
  720. X    itmp = (width * percent_pio) / 100;
  721. X    accum += itmp;
  722. X    while(itmp--)
  723. X        waddch(win,(chtype)'p');
  724. X
  725. X    if((itmp = (width - accum)) > 0)
  726. X    {
  727. X        while(itmp--)
  728. X            waddch(win,(chtype)' ');
  729. X    }
  730. X
  731. X}    /* end of update_waitscale */
  732. X
  733. X/*+-------------------------------------------------------------------------
  734. X    calc_wait_avg(per_state) - add per_state array to avg array
  735. X--------------------------------------------------------------------------*/
  736. Xvoid
  737. Xcalc_wait_avg(per_state)
  738. Xtime_t per_state[];
  739. X{
  740. Xregister itmp;
  741. X
  742. X    if(!wait_avg_init)
  743. X    {
  744. X        for(itmp = 0; itmp < WAIT_AVG_MAX; itmp++)
  745. X            (void)memcpy(wait_avg[itmp],per_state,sizeof(time_t) * 3);
  746. X        wait_avg_init = 1;
  747. X    }
  748. X    else
  749. X    {
  750. X        for(itmp = 0; itmp < WAIT_AVG_MAX - 1; itmp++)
  751. X            (void)memcpy(wait_avg[itmp],wait_avg[itmp + 1],sizeof(time_t) * 3);
  752. X        (void)memcpy(wait_avg[itmp],per_state,sizeof(time_t) * 3);
  753. X    }
  754. X
  755. X}    /* end of calc_wait_avg */
  756. X
  757. X/*+-------------------------------------------------------------------------
  758. X    get_wait_avg(wait_ticks,period)
  759. X--------------------------------------------------------------------------*/
  760. Xget_wait_avg(wait_ticks,period)
  761. Xtime_t wait_ticks[];
  762. Xint period;
  763. X{
  764. Xregister iperiod = WAIT_AVG_MAX;
  765. Xregister istate;
  766. Xregister count = period;
  767. X
  768. X    for(istate = 0; istate < 3; istate++)
  769. X        wait_ticks[istate] = 0;
  770. X
  771. X    while(count--)
  772. X    {
  773. X        iperiod--;
  774. X        for(istate = 0; istate < 3; istate++)
  775. X        {
  776. X            wait_ticks[istate] += (wait_avg[iperiod])[istate];
  777. X        }
  778. X    }
  779. X
  780. X    for(istate = 0; istate < 3; istate++)
  781. X        wait_ticks[istate] /= period;
  782. X
  783. X}    /* end of get_wait_avg */
  784. X
  785. X/*+-------------------------------------------------------------------------
  786. X    extra_static_stuff()/extra_info_stuff() - for 43 line display
  787. X--------------------------------------------------------------------------*/
  788. Xvoid
  789. Xextra_static_stuff()
  790. X{
  791. X    display_var(wscr,EXTRA_TLY,EXTRA1_TLX);
  792. X    display_bootinfo(wscr,EXTRA_TLY,EXTRA2_TLX);
  793. X    display_tune(wscr,EXTRA_TLY,EXTRA3_TLX);
  794. X}    /* end of extra_static_stuff */
  795. Xvoid
  796. Xextra_info_stuff()
  797. X{
  798. X    display_proc(wscr,EXTRA_TLY,EXTRA4_TLX);
  799. X}    /* end of extra_info_stuff */
  800. X
  801. X/*+-------------------------------------------------------------------------
  802. X    main(argc,argv,envp)
  803. X--------------------------------------------------------------------------*/
  804. X/*ARGSUSED*/
  805. Xmain(argc,argv,envp)
  806. Xint argc;
  807. Xchar **argv;
  808. Xchar **envp;
  809. X{
  810. Xregister itmp;
  811. Xregister char *cptr;
  812. Xregister chtype cmd;
  813. Xregister chtype initial_cmd = 0;
  814. Xint errflg = 0;
  815. Xint plock_indicator = 0;
  816. Xtime_t total_ticks;
  817. Xint y,x;
  818. Xint invalidity = 0;
  819. Xlong ltmp;
  820. Xstruct tm *lt;
  821. Xstatic char stdoutbuf[1024];
  822. Xchar s80[80];
  823. Xextern char *optarg;
  824. Xextern int optind;
  825. X
  826. X/*
  827. X * curses works better if standard output is fully buffered
  828. X */
  829. X    (void)setvbuf(stdout,stdoutbuf,_IOFBF,sizeof(stdoutbuf));
  830. X
  831. X/*
  832. X * check out command line
  833. X */
  834. X    while((itmp = getopt(argc,argv,"lPps")) != -1)
  835. X    {
  836. X        switch(itmp)
  837. X        {
  838. X            case 'P':
  839. X            case 'p':
  840. X#ifdef M_UNIX
  841. X            case 's':
  842. X#endif
  843. X                initial_cmd = (chtype) itmp;
  844. X                break;
  845. X            case 'l':
  846. X                plock_indicator = 1;
  847. X                break;
  848. X            case '?':
  849. X                errflg++;
  850. X        }
  851. X    }
  852. X    if(errflg || (optind != argc))
  853. X    {
  854. X        static char *usage_str[]=
  855. X        {
  856. X            "usage: u386mon [-l] [-p | -P]",
  857. X            "-l lock process into memory (if root)",
  858. X            "-p begin with short ps display",
  859. X            "-P begin with long ps display (if 43 line screen)",
  860. X            (char *)0
  861. X        };
  862. X        char **cpptr = usage_str;
  863. X        while(*cpptr)
  864. X            (void)fprintf(stderr,"%s\n",*(cpptr++));
  865. X        exit(1);
  866. X    }
  867. X
  868. X/*
  869. X * if man wants to plock() try it; fail silently if non-root
  870. X */
  871. X    if(plock_indicator && plock(PROCLOCK))
  872. X        plock_indicator = 0;
  873. X
  874. X/*
  875. X * Real(tm) performance monitor users will have done a kernel link
  876. X * and won't need to rely on /etc/systemid
  877. X */
  878. X    if(uname(&utsname))
  879. X    {
  880. X        leave_text("uname failed",255);
  881. X        exit(1);
  882. X    }
  883. X
  884. X/*
  885. X * allocate memory for cpu time array averaging buckets
  886. X */
  887. X    for(itmp = 0; itmp < CPU_AVG_MAX; itmp++)
  888. X    {
  889. X        if(!(cpu_avg[itmp] = (time_t *)malloc(sizeof(time_t) * 5)))
  890. X            leave_text("cannot alloc memory for cpu avg arrays",1);
  891. X    }
  892. X
  893. X/*
  894. X * allocate memory for wait time array averaging buckets
  895. X */
  896. X    for(itmp = 0; itmp < WAIT_AVG_MAX; itmp++)
  897. X    {
  898. X        if(!(wait_avg[itmp] = (time_t *)malloc(sizeof(time_t) * 3)))
  899. X            leave_text("cannot alloc memory for wait avg arrays",1);
  900. X    }
  901. X
  902. X/*
  903. X * initialize curses environment
  904. X */
  905. X    if(!initscr())
  906. X    {
  907. X        (void)printf("curses init failed\n");
  908. X        exit(1);
  909. X    }
  910. X    clear();
  911. X    refresh();
  912. X
  913. X    if((LINES < 24) || (COLS < 80))
  914. X    {
  915. X        waddstr(stdscr,"\n\n\nNeed at least 80x24 screen\n\n");
  916. X        refresh();
  917. X        endwin();
  918. X        exit(1);
  919. X    }
  920. X
  921. X    noecho();
  922. X    keypad(stdscr,1);
  923. X    typeahead(-1);
  924. X
  925. X    start_color();
  926. X    init_pair(cpLIT,cBLU,cBLK);
  927. X    init_pair(cpINFO,cGRN,cBLK);
  928. X    init_pair(cpLOW,cLTG,cBLK);
  929. X    init_pair(cpMED,cYEL,cBLK);
  930. X    init_pair(cpHIGH,cRED,cBLK);
  931. X    init_pair(cpBANNER,cBLK,cWHT);
  932. X    init_pair(cpREVERSE,cRED,cWHT);
  933. X
  934. X    /* a hack for now -- assuming AT char set */
  935. X#ifdef HI_BIT_CAN_BE_SET
  936. X    acs_map['l'] = A_ALTCHARSET | sTL;    
  937. X    acs_map['m'] = A_ALTCHARSET | sTR;    
  938. X    acs_map['j'] = A_ALTCHARSET | sBL;    
  939. X    acs_map['k'] = A_ALTCHARSET | sBR;    
  940. X    acs_map['x'] = A_ALTCHARSET | sVR;        /* vertical rule */
  941. X    acs_map['q'] = A_ALTCHARSET | sHR;        /* horizontal rule */
  942. X    acs_map['t'] = A_ALTCHARSET | sLT;        /* left hand T */
  943. X    acs_map['u'] = A_ALTCHARSET | sRT;        /* right hand T */
  944. X#endif
  945. X
  946. X    if(!(pscr = mkpanel(LINES,COLS,0,0)))
  947. X    {
  948. X        addstr("cannot make screen panel");
  949. X        refresh();
  950. X        endwin();
  951. X        exit(1);
  952. X    }
  953. X    wscr = panel_window(pscr);
  954. X    top_panel(pscr);
  955. X
  956. X/*
  957. X * read nlist symbols, open /dev/kmem, /dev/mem, /dev/swap,
  958. X * initialize detail environment
  959. X * (all of these must occur after curses init)
  960. X */
  961. X    nlsym_read();
  962. X    kinit(0);    /* read access only */
  963. X    minit(0);    /* read access only */
  964. X    sinit();
  965. X    (void)setgid(getgid());    /* now that we have the fds open, drop egid */
  966. X    detail_init();
  967. X    init_uid_name_hash();    /* see det_proc.c */
  968. X
  969. X/*
  970. X * start fireworks
  971. X */
  972. X    wmove(wscr,0,0);
  973. X    use_cp(wscr,cpBANNER);
  974. X    wprintw(wscr," u386mon %s  ",revision);
  975. X    wprintw(wscr,"%s - %s %s ",utsname.nodename,
  976. X        utsname.machine,utsname.release);
  977. X    getyx(wscr,y,x);
  978. X    while(x < getmaxx(wscr))
  979. X        waddch(wscr,(chtype)' '),x++;
  980. X    wmove(wscr,0,71);
  981. X    waddstr(wscr,"wht@n4hgf");
  982. X    if(plock_indicator)
  983. X    {
  984. X        wmove(wscr,0,38);
  985. X        use_cp(wscr,cpMED);
  986. X        waddstr(wscr," PLOCK ");
  987. X        use_cp(wscr,cpBANNER);
  988. X    }
  989. X    wmove(wscr,CMD_TLY,0);
  990. X    if(LINES >= 43)
  991. X        waddstr(wscr," ESC=quit  P=long ps  p=short ps  m=main ");
  992. X    else
  993. X        waddstr(wscr," ESC=quit  p=ps  e=extra  m=main ");
  994. X#ifdef M_UNIX
  995. X    waddstr(wscr," s=sio ");
  996. X#endif
  997. X    if(geteuid() == 0)
  998. X        waddstr(wscr," l=plock on  u=plock off ");
  999. X    getyx(wscr,y,x);
  1000. X    while(x < getmaxx(wscr))
  1001. X        waddch(wscr,(chtype)' '),x++;
  1002. X    use_cp(wscr,cpLIT);
  1003. X
  1004. X/*
  1005. X * make initial kmem readings
  1006. X */
  1007. X    hz = (cptr = getenv("HZ")) ? atoi(cptr) : HZ;
  1008. X    kread((caddr_t)&maxmem,maxmemaddr,sizeof(maxmem));
  1009. X    kread((caddr_t)&nswap,nswapaddr,sizeof(nswap));
  1010. X    kread((caddr_t)&sysinfo_last,sysinfoaddr,sizeof(sysinfo_last));
  1011. X    kread((caddr_t)&minfo_last,minfoaddr,sizeof(minfo));
  1012. X    kread((caddr_t)&tune,tuneaddr,sizeof(tune));
  1013. X    kread((caddr_t)&v,vaddr,sizeof(v));
  1014. X    kread((caddr_t)&bootinfo,bootinfoaddr,sizeof(bootinfo));
  1015. X
  1016. X/*
  1017. X * initialize static display (literals)
  1018. X */
  1019. X    draw_cpuscale_literals(wscr,CPUSCALE_TLY,0);
  1020. X    draw_waitscale_literals(wscr,WAITSCALE_TLY,0);
  1021. X    draw_per_sec_literals(wscr,PER_SEC_TLY,0);
  1022. X
  1023. X    if(LINES >= 43)
  1024. X        extra_static_stuff();
  1025. X
  1026. X/*
  1027. X * while(user_not_bored) entertain_and_inform_user();
  1028. X */
  1029. X    (void)time(&then);
  1030. X    while(1)
  1031. X    {
  1032. X        nap(1000L);
  1033. X        (void)time(&now);
  1034. X        wmove(wscr,0,62);
  1035. X        use_cp(wscr,cpBANNER);
  1036. X        lt = localtime(&now);
  1037. X        wprintw(wscr,"%02d:%02d:%02d",lt->tm_hour,lt->tm_min,lt->tm_sec);
  1038. X
  1039. X        /* heuristic validity determination */
  1040. X        wmove(wscr,0,48);
  1041. X        if((now - then) > 4)
  1042. X        {
  1043. X            use_cp(wscr,cpHIGH);
  1044. X            waddstr(wscr," INVALID ");
  1045. X            invalidity += 3;
  1046. X        }
  1047. X        else if((itmp = ((now - then) > 3)) || (invalidity > 2))
  1048. X        {
  1049. X            use_cp(wscr,cpMED);
  1050. X            waddstr(wscr," INEXACT ");
  1051. X            if(itmp)
  1052. X                invalidity += 2;
  1053. X        }
  1054. X        if(invalidity && !(--invalidity))
  1055. X        {
  1056. X            use_cp(wscr,cpBANNER);
  1057. X            waddstr(wscr,"         ");
  1058. X        }
  1059. X        (void)time(&then);
  1060. X
  1061. X        kread((caddr_t)&freemem,freememaddr,sizeof(freemem));
  1062. X        kread((caddr_t)&sysinfo,sysinfoaddr,sizeof(sysinfo));
  1063. X        kread((caddr_t)&minfo,minfoaddr,sizeof(minfo));
  1064. X
  1065. X#ifdef RIGHTEOUS    /* going this way seems to get cpu+wait ticks > real time */
  1066. X        for (itmp = 0; itmp < 5; itmp++)
  1067. X            cpu_ticks[itmp] = sysidelta(cpu[itmp]);
  1068. X        for (itmp = 0; itmp < 3; itmp++)
  1069. X            wait_ticks[itmp] = sysidelta(wait[itmp]);
  1070. X#else
  1071. X        for (itmp = 0; itmp < 5; itmp++)
  1072. X        {
  1073. X            if(itmp != CPU_WAIT)
  1074. X                cpu_ticks[itmp] = sysidelta(cpu[itmp]);
  1075. X        }
  1076. X        cpu_ticks[CPU_WAIT] = 0;
  1077. X        for (itmp = 0; itmp < 3; itmp++)
  1078. X            cpu_ticks[CPU_WAIT] += (wait_ticks[itmp] = sysidelta(wait[itmp]));
  1079. X#endif
  1080. X
  1081. X        total_ticks = update_cpuscale(wscr,CPUSCALE_TLY + 1,CPUSCALE_SX,
  1082. X            CPUSCALE_WIDTH,cpu_ticks);
  1083. X
  1084. X        update_waitscale(wscr,WAITSCALE_TLY + 1,WAITSCALE_SX,
  1085. X            WAITSCALE_WIDTH,wait_ticks,total_ticks);
  1086. X
  1087. X        calc_cpu_avg(cpu_ticks);
  1088. X        calc_wait_avg(wait_ticks);
  1089. X
  1090. X        get_cpu_avg(cpu_ticks,5);
  1091. X        total_ticks = update_cpuscale(wscr,CPUSCALE_TLY + 2,CPUSCALE_SX,
  1092. X            CPUSCALE_WIDTH,cpu_ticks);
  1093. X
  1094. X        get_wait_avg(wait_ticks,5);
  1095. X        update_waitscale(wscr,WAITSCALE_TLY + 2,WAITSCALE_SX,
  1096. X            WAITSCALE_WIDTH,wait_ticks,total_ticks);
  1097. X
  1098. X        get_cpu_avg(cpu_ticks,10);
  1099. X        total_ticks = update_cpuscale(wscr,CPUSCALE_TLY + 3,CPUSCALE_SX,
  1100. X            CPUSCALE_WIDTH,cpu_ticks);
  1101. X
  1102. X        get_wait_avg(wait_ticks,10);
  1103. X        update_waitscale(wscr,WAITSCALE_TLY + 3,WAITSCALE_SX,
  1104. X            WAITSCALE_WIDTH,wait_ticks,total_ticks);
  1105. X
  1106. X
  1107. X        use_cp(wscr,cpINFO);
  1108. X        y = PER_SEC_TLY + 1;
  1109. X        wmove(wscr,y++,PER_SEC1_TLX);
  1110. X        disp_info_long(wscr,"bread    ","%7ld",sysidelta(bread));
  1111. X        wmove(wscr,y++,PER_SEC1_TLX);
  1112. X        disp_info_long(wscr,"bwrite   ","%7ld",sysidelta(bwrite));
  1113. X        wmove(wscr,y++,PER_SEC1_TLX);
  1114. X        disp_info_long(wscr,"lread    ","%7ld",sysidelta(lread));
  1115. X        wmove(wscr,y++,PER_SEC1_TLX);
  1116. X        disp_info_long(wscr,"lwrite   ","%7ld",sysidelta(lwrite));
  1117. X        wmove(wscr,y++,PER_SEC1_TLX);
  1118. X        disp_info_long(wscr,"swapin   ","%7ld",sysidelta(swapin));
  1119. X        wmove(wscr,y++,PER_SEC1_TLX);
  1120. X        disp_info_long(wscr,"swapout  ","%7ld",sysidelta(swapout));
  1121. X        wmove(wscr,y++,PER_SEC1_TLX);
  1122. X        disp_info_long(wscr,"bswapin  ","%7ld",sysidelta(bswapin));
  1123. X        wmove(wscr,y++,PER_SEC1_TLX);
  1124. X        disp_info_long(wscr,"bswapout ","%7ld",sysidelta(bswapout));
  1125. X        wmove(wscr,y++,PER_SEC1_TLX);
  1126. X        disp_info_long(wscr,"iget     ","%7ld",sysidelta(iget));
  1127. X        wmove(wscr,y++,PER_SEC1_TLX);
  1128. X        disp_info_long(wscr,"namei    ","%7ld",sysidelta(namei));
  1129. X        wmove(wscr,y++,PER_SEC1_TLX);
  1130. X        disp_info_long(wscr,"dirblk   ","%7ld",sysidelta(dirblk));
  1131. X
  1132. X        wmove(wscr,y++,PER_SEC1_TLX);
  1133. X        if((ltmp = sysidelta(readch) - myreadcnt) < 0)
  1134. X            ltmp = 0;
  1135. X        disp_info_long(wscr,"readch   ","%7ld",ltmp);
  1136. X        myreadcnt = 0;    /* reset /dev/mem & /dev/kmem read count*/
  1137. X
  1138. X        wmove(wscr,y++,PER_SEC1_TLX);
  1139. X        disp_info_long(wscr,"writch   ","%7ld",sysidelta(writech));
  1140. X
  1141. X        y = PER_SEC_TLY + 1;
  1142. X        wmove(wscr,y++,PER_SEC2_TLX);
  1143. X        disp_info_long(wscr,"rawch  ","%6ld",sysidelta(rawch));
  1144. X        wmove(wscr,y++,PER_SEC2_TLX);
  1145. X        disp_info_long(wscr,"canch  ","%6ld",sysidelta(canch));
  1146. X        wmove(wscr,y++,PER_SEC2_TLX);
  1147. X        disp_info_long(wscr,"outch  ","%6ld",sysidelta(outch));
  1148. X
  1149. X        y++;
  1150. X        wmove(wscr,y++,PER_SEC2_TLX);
  1151. X        disp_info_long(wscr,"msg    ","%6ld",sysidelta(msg));
  1152. X        wmove(wscr,y++,PER_SEC2_TLX);
  1153. X        disp_info_long(wscr,"sema   ","%6ld",sysidelta(sema));
  1154. X
  1155. X        y++;
  1156. X        wmove(wscr,y++,PER_SEC2_TLX);
  1157. X        disp_static_long(wscr, "maxmem  ","%6ldk",(long)maxmem * NBPP / 1024);
  1158. X        wmove(wscr,y++,PER_SEC2_TLX);
  1159. X        disp_info_long(wscr,   "frmem   ","%6ldk",(long)freemem * NBPP / 1024);
  1160. X        wmove(wscr,y++,PER_SEC2_TLX);
  1161. X        disp_info_int (wscr,   "mem used","%6d%%",
  1162. X            100 - (int)((freemem * 100) / maxmem));
  1163. X
  1164. X        wmove(wscr,y++,PER_SEC2_TLX);
  1165. X        disp_static_int(wscr, "nswap   ","%6ldk",nswap/2);
  1166. X        wmove(wscr,y++,PER_SEC2_TLX);
  1167. X        disp_info_long(wscr,  "frswp   ","%6ldk",minfo.freeswap/2);
  1168. X        wmove(wscr,y++,PER_SEC2_TLX);
  1169. X        disp_info_int(wscr,   "swp used","%6d%%",
  1170. X            100 - (int)((minfo.freeswap * 100) / nswap));
  1171. X
  1172. X        y = PER_SEC_TLY + 1;
  1173. X        wmove(wscr,y++,PER_SEC3_TLX);
  1174. X        disp_info_long(wscr,"pswitch ","%5ld",sysidelta(pswitch));
  1175. X        wmove(wscr,y++,PER_SEC3_TLX);
  1176. X        disp_info_long(wscr,"syscall ","%5ld",sysidelta(syscall));
  1177. X        wmove(wscr,y++,PER_SEC3_TLX);
  1178. X        disp_info_long(wscr,"sysread ","%5ld",sysidelta(sysread));
  1179. X        wmove(wscr,y++,PER_SEC3_TLX);
  1180. X        disp_info_long(wscr,"syswrit ","%5ld",sysidelta(syswrite));
  1181. X        wmove(wscr,y++,PER_SEC3_TLX);
  1182. X        disp_info_long(wscr,"sysfork ","%5ld",sysidelta(sysfork));
  1183. X        wmove(wscr,y++,PER_SEC3_TLX);
  1184. X        disp_info_long(wscr,"sysexec ","%5ld",sysidelta(sysexec));
  1185. X
  1186. X        y++;
  1187. X        wmove(wscr,y++,PER_SEC3_TLX);
  1188. X        disp_info_long(wscr,"runque  ","%5ld",sysidelta(runque));
  1189. X        wmove(wscr,y++,PER_SEC3_TLX);
  1190. X        disp_info_long(wscr,"runocc  ","%5ld",sysidelta(runocc));
  1191. X        wmove(wscr,y++,PER_SEC3_TLX);
  1192. X        disp_info_long(wscr,"swpque  ","%5ld",sysidelta(swpque));
  1193. X        wmove(wscr,y++,PER_SEC3_TLX);
  1194. X        disp_info_long(wscr,"swpocc  ","%5ld",sysidelta(swpocc));
  1195. X
  1196. X        y = PER_SEC_TLY + 1;
  1197. X        wmove(wscr,y++,PER_SEC4_TLX);
  1198. X        disp_info_long(wscr,"vfault  ","%3ld",midelta(vfault));
  1199. X        wmove(wscr,y++,PER_SEC4_TLX);
  1200. X        disp_info_long(wscr,"demand  ","%3ld",midelta(demand));
  1201. X        wmove(wscr,y++,PER_SEC4_TLX);
  1202. X        disp_info_long(wscr,"pfault  ","%3ld",midelta(pfault));
  1203. X        wmove(wscr,y++,PER_SEC4_TLX);
  1204. X        disp_info_long(wscr,"cw      ","%3ld",midelta(cw));
  1205. X        wmove(wscr,y++,PER_SEC4_TLX);
  1206. X        disp_info_long(wscr,"steal   ","%3ld",midelta(steal));
  1207. X        wmove(wscr,y++,PER_SEC4_TLX);
  1208. X        disp_info_long(wscr,"frdpgs  ","%3ld",midelta(freedpgs));
  1209. X        wmove(wscr,y++,PER_SEC4_TLX);
  1210. X        disp_info_long(wscr,"vfpg    ","%3ld",midelta(vfpg));
  1211. X        wmove(wscr,y++,PER_SEC4_TLX);
  1212. X        disp_info_long(wscr,"sfpg    ","%3ld",midelta(sfpg));
  1213. X        wmove(wscr,y++,PER_SEC4_TLX);
  1214. X        disp_info_long(wscr,"vspg    ","%3ld",midelta(vspg));
  1215. X        wmove(wscr,y++,PER_SEC4_TLX);
  1216. X        disp_info_long(wscr,"sspg    ","%3ld",midelta(sspg));
  1217. X        wmove(wscr,y++,PER_SEC4_TLX);
  1218. X        disp_info_long(wscr,"pnpfault","%3ld",sysidelta(pnpfault));
  1219. X        wmove(wscr,y++,PER_SEC4_TLX);
  1220. X        disp_info_long(wscr,"wrtfault","%3ld",sysidelta(wrtfault));
  1221. X
  1222. X        y = PER_SEC_TLY + 1;
  1223. X        wmove(wscr,y++,PER_SEC5_TLX);
  1224. X        disp_info_long(wscr,"unmodsw ","%3ld",midelta(unmodsw));
  1225. X        wmove(wscr,y++,PER_SEC5_TLX);
  1226. X        disp_info_long(wscr,"unmodfl ","%3ld",midelta(unmodfl));
  1227. X        wmove(wscr,y++,PER_SEC5_TLX);
  1228. X        disp_info_long(wscr,"psoutok ","%3ld",midelta(psoutok));
  1229. X        wmove(wscr,y++,PER_SEC5_TLX);
  1230. X        disp_info_long(wscr,"psinfai ","%3ld",midelta(psinfail));
  1231. X        wmove(wscr,y++,PER_SEC5_TLX);
  1232. X        disp_info_long(wscr,"psinok  ","%3ld",midelta(psinok));
  1233. X        wmove(wscr,y++,PER_SEC5_TLX);
  1234. X        disp_info_long(wscr,"rsout   ","%3ld",midelta(rsout));
  1235. X        wmove(wscr,y++,PER_SEC5_TLX);
  1236. X        disp_info_long(wscr,"rsin    ","%3ld",midelta(rsin));
  1237. X
  1238. X        y++;
  1239. X        wmove(wscr,y++,PER_SEC5_TLX);
  1240. X        use_cp(wscr,cpLIT);
  1241. X        waddstr(wscr,"pages on   ");
  1242. X        wmove(wscr,y++,PER_SEC5_TLX);
  1243. X        disp_info_long(wscr,"swap  ","%5ld",midelta(swap));
  1244. X        wmove(wscr,y++,PER_SEC5_TLX);
  1245. X        disp_info_long(wscr,"cache ","%5ld",midelta(cache));
  1246. X        wmove(wscr,y++,PER_SEC5_TLX);
  1247. X        disp_info_long(wscr,"file  ","%5ld",midelta(file));
  1248. X
  1249. X        if(LINES >= 43)
  1250. X            extra_info_stuff();
  1251. X
  1252. X        sysinfo_last = sysinfo;
  1253. X        minfo_last = minfo;
  1254. X
  1255. X        detail_panel_update();
  1256. X
  1257. X        if(initial_cmd)
  1258. X        {
  1259. X            detail_panel_cmd(initial_cmd);
  1260. X            initial_cmd = 0;
  1261. X        }
  1262. X
  1263. X        pflush();
  1264. X
  1265. X        if(rdchk(0))
  1266. X        {
  1267. X            switch(cmd = wgetch(wscr))
  1268. X            {
  1269. X                case 'L' & 0x1F:        /* ^L */
  1270. X                case 'R' & 0x1F:        /* ^R */
  1271. X                    touchwin(wscr);
  1272. X                    wrefresh(wscr);
  1273. X                    if(wdet)
  1274. X                    {
  1275. X                        touchwin(wdet);
  1276. X                        wrefresh(wscr);
  1277. X                    }
  1278. X                    break;
  1279. X
  1280. X                case 'q':
  1281. X                case A_ESC:
  1282. X                    goto GOOD_BYE;
  1283. X#ifdef M_UNIX
  1284. X                case 'b':
  1285. X                    if(bootinfo.bootstrlen > 79)
  1286. X                        itmp = 79;
  1287. X                    else
  1288. X                        itmp = bootinfo.bootstrlen;
  1289. X                    kread(s80,bootinfoaddr +
  1290. X                        (bootinfo.bootstr - (caddr_t)&bootinfo),itmp);
  1291. X                    s80[itmp] = 0;
  1292. X                    disp_msg(cpMED,s80);
  1293. X                    break;
  1294. X#endif
  1295. X                case 'e':
  1296. X                case 'P':
  1297. X                case 'p':
  1298. X                case 'm':
  1299. X#ifdef M_UNIX
  1300. X                case 's':
  1301. X#endif
  1302. X                    detail_panel_cmd(cmd);
  1303. X                    break;
  1304. X                case 'l':
  1305. X                    if(!plock_indicator)
  1306. X                    {
  1307. X                        if(!plock(PROCLOCK))
  1308. X                        {
  1309. X                            plock_indicator = 1;
  1310. X                            wmove(wscr,0,38);
  1311. X                            use_cp(wscr,cpMED);
  1312. X                            waddstr(wscr," PLOCK ");
  1313. X                        }
  1314. X                    }
  1315. X                    break;
  1316. X                case 'u':
  1317. X                    if(plock_indicator)
  1318. X                    {
  1319. X                        if(!plock(UNLOCK))
  1320. X                        {
  1321. X                            plock_indicator = 0;
  1322. X                            wmove(wscr,0,38);
  1323. X                            use_cp(wscr,cpBANNER);
  1324. X                            waddstr(wscr,"       ");
  1325. X                        }
  1326. X                    }
  1327. X                    break;
  1328. X            }
  1329. X        }
  1330. X    }
  1331. X
  1332. XGOOD_BYE:
  1333. X    leave_text("",0);
  1334. X    /*NOTREACHED*/
  1335. X}    /* end of main */
  1336. X
  1337. X/* vi: set tabstop=4 shiftwidth=4: */
  1338. X/* end of u386mon.c */
  1339. SHAR_EOF
  1340. $TOUCH -am 0628235690 u386mon.c &&
  1341. chmod 0644 u386mon.c ||
  1342. echo "restore of u386mon.c failed"
  1343. set `wc -c u386mon.c`;Wc_c=$1
  1344. if test "$Wc_c" != "28976"; then
  1345.     echo original size 28976, current size $Wc_c
  1346. fi
  1347. # ============= var.c ==============
  1348. echo "x - extracting var.c (Text)"
  1349. sed 's/^X//' << 'SHAR_EOF' > var.c &&
  1350. X/*+-------------------------------------------------------------------------
  1351. X    var.c - u386mon var struct display
  1352. X
  1353. X  Defined functions:
  1354. X    display_var(win,y,x)
  1355. X
  1356. X--------------------------------------------------------------------------*/
  1357. X/*+:EDITS:*/
  1358. X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
  1359. X/*:06-25-1990-17:33-wht@n4hgf-alpha sort identifiers */
  1360. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  1361. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  1362. X/*:06-21-1990-14:27-r@n4hgf-version x0.12 seems bug free */
  1363. X/*:06-17-1990-14:59-wht-creation */
  1364. X
  1365. X#define M_TERMINFO
  1366. X
  1367. X#include <curses.h>
  1368. X#include <panel.h>
  1369. X#include <sys/types.h>
  1370. X#include <sys/var.h>
  1371. X#include "u386mon.h"
  1372. X
  1373. X/*+-------------------------------------------------------------------------
  1374. X    display_var(win,y,x)
  1375. X--------------------------------------------------------------------------*/
  1376. Xvoid
  1377. Xdisplay_var(win,y,x)
  1378. XWINDOW *win;
  1379. Xint y;
  1380. Xint x;
  1381. X{
  1382. X    use_cp(win,cpBANNER);
  1383. X    wmove(win,y++,x);
  1384. X    waddstr(win,"-- Var ---------");
  1385. X    wmove(win,y++,x);
  1386. X    disp_static_int(win,"v_autoup   ","%5d",v.v_autoup);
  1387. X    wmove(win,y++,x);
  1388. X    disp_static_int(win,"v_buf      ","%5d",v.v_buf);
  1389. X    wmove(win,y++,x);
  1390. X    disp_static_int(win,"v_clist    ","%5d",v.v_clist);
  1391. X    wmove(win,y++,x);
  1392. X    disp_static_int(win,"v_file     ","%5d",v.v_file);
  1393. X    wmove(win,y++,x);
  1394. X    disp_static_int(win,"v_hbuf     ","%5d",v.v_hbuf);
  1395. X    wmove(win,y++,x);
  1396. X    disp_static_int(win,"v_inode    ","%5d",v.v_inode);
  1397. X    wmove(win,y++,x);
  1398. X    disp_static_int(win,"v_maxpmem  ","%5d",v.v_maxpmem);
  1399. X    wmove(win,y++,x);
  1400. X    disp_static_int(win,"v_maxup    ","%5d",v.v_maxup);
  1401. X    wmove(win,y++,x);
  1402. X    disp_static_int(win,"v_mount    ","%5d",v.v_mount);
  1403. X    wmove(win,y++,x);
  1404. X    disp_static_int(win,"v_pbuf     ","%5d",v.v_pbuf);
  1405. X    wmove(win,y++,x);
  1406. X    disp_static_int(win,"v_proc     ","%5d",v.v_proc);
  1407. X    wmove(win,y++,x);
  1408. X    disp_static_int(win,"v_region   ","%5d",v.v_region);
  1409. X    wmove(win,y++,x);
  1410. X    disp_static_int(win,"v_vhndfrac ","%5d",v.v_vhndfrac);
  1411. X
  1412. X}    /* end of display_var */
  1413. X
  1414. X/* vi: set tabstop=4 shiftwidth=4: */
  1415. X/* end of var.c */
  1416. SHAR_EOF
  1417. $TOUCH -am 0627015790 var.c &&
  1418. chmod 0644 var.c ||
  1419. echo "restore of var.c failed"
  1420. set `wc -c var.c`;Wc_c=$1
  1421. if test "$Wc_c" != "2079"; then
  1422.     echo original size 2079, current size $Wc_c
  1423. fi
  1424. # ============= libkmem.h ==============
  1425. echo "x - extracting libkmem.h (Text)"
  1426. sed 's/^X//' << 'SHAR_EOF' > libkmem.h &&
  1427. X/*+-----------------------------------------------------------------------
  1428. X    libkmem.h
  1429. X    ...!emory!n4hgf!wht
  1430. X------------------------------------------------------------------------*/
  1431. X/*+:EDITS:*/
  1432. X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
  1433. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  1434. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  1435. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  1436. X/*:10-28-1988-14:46-afterlint-creation */
  1437. X
  1438. X#ifndef BUILDING_LINT_ARGS
  1439. X#ifdef LINT_ARGS
  1440. X
  1441. X/* libkmem.c */
  1442. Xvoid kinit(int );
  1443. Xvoid kread(char  *,long ,int );
  1444. Xvoid kwrite(long ,char  *,int );
  1445. X
  1446. X#else        /* compiler doesn't know about prototyping */
  1447. X
  1448. X/* libkmem.c */
  1449. Xvoid kinit();
  1450. Xvoid kread();
  1451. Xvoid kwrite();
  1452. X
  1453. X#endif /* LINT_ARGS */
  1454. X#endif /* BUILDING_LINT_ARGS */
  1455. X
  1456. X/* end of libkmem.h */
  1457. SHAR_EOF
  1458. $TOUCH -am 0627015790 libkmem.h &&
  1459. chmod 0644 libkmem.h ||
  1460. echo "restore of libkmem.h failed"
  1461. set `wc -c libkmem.h`;Wc_c=$1
  1462. if test "$Wc_c" != "859"; then
  1463.     echo original size 859, current size $Wc_c
  1464. fi
  1465. # ============= libmem.h ==============
  1466. echo "x - extracting libmem.h (Text)"
  1467. sed 's/^X//' << 'SHAR_EOF' > libmem.h &&
  1468. X/*+-----------------------------------------------------------------------
  1469. X    libmem.h
  1470. X    ...!emory!n4hgf!wht
  1471. X------------------------------------------------------------------------*/
  1472. X/*+:EDITS:*/
  1473. X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
  1474. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  1475. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  1476. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  1477. X/*:10-28-1988-14:46-afterlint-creation */
  1478. X
  1479. X#ifndef BUILDING_LINT_ARGS
  1480. X#ifdef LINT_ARGS
  1481. X
  1482. X/* libmem.c */
  1483. Xvoid minit(int );
  1484. Xvoid mread(char  *,long ,int );
  1485. Xvoid mwrite(long ,char  *,int );
  1486. X
  1487. X#else        /* compiler doesn't mnow about prototyping */
  1488. X
  1489. X/* libmem.c */
  1490. Xvoid minit();
  1491. Xvoid mread();
  1492. Xvoid mwrite();
  1493. X
  1494. X#endif /* LINT_ARGS */
  1495. X#endif /* BUILDING_LINT_ARGS */
  1496. X
  1497. X/* end of libmem.h */
  1498. SHAR_EOF
  1499. $TOUCH -am 0627015790 libmem.h &&
  1500. chmod 0644 libmem.h ||
  1501. echo "restore of libmem.h failed"
  1502. set `wc -c libmem.h`;Wc_c=$1
  1503. if test "$Wc_c" != "855"; then
  1504.     echo original size 855, current size $Wc_c
  1505. fi
  1506. # ============= libswap.h ==============
  1507. echo "x - extracting libswap.h (Text)"
  1508. sed 's/^X//' << 'SHAR_EOF' > libswap.h &&
  1509. X/*+-----------------------------------------------------------------------
  1510. X    libswap.h
  1511. X    ...!emory!n4hgf!wht
  1512. X------------------------------------------------------------------------*/
  1513. X/*+:EDITS:*/
  1514. X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
  1515. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  1516. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  1517. X/*:06-22-1990-02:03-root@n4hgf-creation from libmem */
  1518. X
  1519. X#ifndef BUILDING_LINT_ARGS
  1520. X#ifdef LINT_ARGS
  1521. X
  1522. X/* libswap.c */
  1523. Xvoid sinit(void );
  1524. Xvoid sread(char  *,long ,int );
  1525. X
  1526. X#else        /* compiler doesn't mnow about prototyping */
  1527. X
  1528. X/* libswap.c */
  1529. Xvoid sinit();
  1530. Xvoid sread();
  1531. Xvoid swrite();
  1532. X
  1533. X#endif /* LINT_ARGS */
  1534. X#endif /* BUILDING_LINT_ARGS */
  1535. X
  1536. X/* end of libswap.h */
  1537. SHAR_EOF
  1538. $TOUCH -am 0627015790 libswap.h &&
  1539. chmod 0644 libswap.h ||
  1540. echo "restore of libswap.h failed"
  1541. set `wc -c libswap.h`;Wc_c=$1
  1542. if test "$Wc_c" != "780"; then
  1543.     echo original size 780, current size $Wc_c
  1544. fi
  1545. # ============= libnlsym.h ==============
  1546. echo "x - extracting libnlsym.h (Text)"
  1547. sed 's/^X//' << 'SHAR_EOF' > libnlsym.h &&
  1548. X/*+-----------------------------------------------------------------------
  1549. X    libnlsym.h
  1550. X    ...!emory!n4hgf!wht
  1551. X------------------------------------------------------------------------*/
  1552. X/*+:EDITS:*/
  1553. X/*:06-27-1990-01:57-wht@n4hgf-1.10 - incorporate suggestions from alpha testers */
  1554. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  1555. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  1556. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  1557. X/*:10-28-1988-14:47-afterlint-creation */
  1558. X
  1559. X#ifndef BUILDING_LINT_ARGS
  1560. X#ifdef LINT_ARGS
  1561. X
  1562. X/* libnlsym.c */
  1563. Xvoid nlsym_error(char * );
  1564. Xvoid nlsym_read(void);
  1565. X
  1566. X#else        /* compiler doesn't know about prototyping */
  1567. X
  1568. X/* libnlsym.c */
  1569. Xvoid nlsym_error();
  1570. Xvoid nlsym_read();
  1571. X
  1572. X#endif /* LINT_ARGS */
  1573. X#endif /* BUILDING_LINT_ARGS */
  1574. X
  1575. X/* end of libnlsym.h */
  1576. SHAR_EOF
  1577. $TOUCH -am 0627015790 libnlsym.h &&
  1578. chmod 0644 libnlsym.h ||
  1579. echo "restore of libnlsym.h failed"
  1580. set `wc -c libnlsym.h`;Wc_c=$1
  1581. if test "$Wc_c" != "826"; then
  1582.     echo original size 826, current size $Wc_c
  1583. fi
  1584. # ============= lint_args.h ==============
  1585. echo "x - extracting lint_args.h (Text)"
  1586. sed 's/^X//' << 'SHAR_EOF' > lint_args.h &&
  1587. X/*+-----------------------------------------------------------------------
  1588. X    lint_args.h
  1589. X------------------------------------------------------------------------*/
  1590. X/*+:EDITS:*/
  1591. X/*:06-27-1990-02:01-afterlint-creation */
  1592. X
  1593. X#ifndef BUILDING_LINT_ARGS
  1594. X#ifdef LINT_ARGS
  1595. X
  1596. X/* bootinfo.c */
  1597. Xextern  char *bmemf_text(unsigned long flags);
  1598. Xextern  void display_bootinfo(struct _win_st *win,int y,int x);
  1599. X/* det_proc.c */
  1600. Xextern  char *get_cpu_time_str(long ticks);
  1601. Xextern  char *pgrp_to_ttyname(int pgrp);
  1602. Xextern  char *uid_to_name(int uid);
  1603. Xextern  int get_user(struct proc *tproc,struct user *tuser);
  1604. Xextern  int getpwent_and_enter(int uid);
  1605. Xextern  int proc_pid_compare(struct proc *p1,struct proc *p2);
  1606. Xextern  int uid_name_enter(int uid,char *name);
  1607. Xextern  struct utmp *find_utmp_for_pgrp(int pgrp);
  1608. Xextern  void display_proc_stat(struct _win_st *win,int iproc,int initial);
  1609. Xextern  void display_proc_stats(struct _win_st *win,int initial);
  1610. Xextern  void init_uid_name_hash(void );
  1611. Xextern  void read_and_sort_procs(int initial);
  1612. Xextern  void read_utmp(void );
  1613. X/* det_sio.c */
  1614. Xextern  char *B_to_baud_rate(int code);
  1615. Xextern  char *cflag_to_baud_d_p_s(int cflag);
  1616. Xextern  int display_sio_summary(struct _win_st *win,int initial);
  1617. Xextern  int tty_slot_compare(struct tty *sio1,struct tty *sio2);
  1618. Xextern  void display_siofull_init(struct _win_st *win,int tly,int tlx,int show_flag);
  1619. Xextern  void display_siofull_update(struct _win_st *win,int tly,int tlx,struct tty *tsio);
  1620. Xextern  void display_siosum_update(struct _win_st *win,int y,struct tty *tsio);
  1621. Xextern  void grok_sio_tty(void );
  1622. X/* detail.c */
  1623. Xextern  void detail_init(void );
  1624. Xextern  void detail_panel_cmd(unsigned long cmd);
  1625. Xextern  void detail_panel_update(void );
  1626. Xextern  void detpanel_destroy(void );
  1627. Xextern  void detpanel_extra_init(void );
  1628. Xextern  void detpanel_extra_update(void );
  1629. Xextern  void detpanel_ps_init(int full43);
  1630. Xextern  void detpanel_ps_update(void );
  1631. Xextern  void detpanel_sio_init(void );
  1632. Xextern  void detpanel_sio_update(void );
  1633. X/* disputil.c */
  1634. Xextern  struct PANEL *mkpanel(int rows,int cols,int tly,int tlx);
  1635. Xextern  void clear_area(struct _win_st *win,int y,int x,int len);
  1636. Xextern  void clear_area_char(struct _win_st *win,int y,int x,int len,unsigned char fillchar);
  1637. Xextern  void disp_info_int(struct _win_st *win,char *label,char *fmt,int value);
  1638. Xextern  void disp_info_long(struct _win_st *win,char *label,char *fmt,long value);
  1639. Xextern  void disp_msg(unsigned long cp,char *msg);
  1640. Xextern  void disp_static_int(struct _win_st *win,char *label,char *fmt,int value);
  1641. Xextern  void disp_static_long(struct _win_st *win,char *label,char *fmt,long value);
  1642. Xextern  void pflush(void );
  1643. Xextern  void wperror(struct _win_st *win,char *desc);
  1644. X/* libkmem.c */
  1645. Xextern  void kinit(int write_needed);
  1646. Xextern  void kread(char *caddr,long kaddr,int len);
  1647. X/* libmem.c */
  1648. Xextern  void minit(int write_needed);
  1649. Xextern  void mread(char *caddr,long maddr,int len);
  1650. X/* libnlsym.c */
  1651. Xextern  void nlsym_error(char *text);
  1652. Xextern  void nlsym_read(void );
  1653. X/* libswap.c */
  1654. Xextern  void sinit(void );
  1655. Xextern  void sread(char *caddr,long maddr,int len);
  1656. X/* nlsym.c */
  1657. Xextern  int main(int argc,char * *argv,char * *envp);
  1658. Xextern  void nlsym_write_error(int code);
  1659. X/* proc.c */
  1660. Xextern  char *pstat_text(char pstat);
  1661. Xextern  void display_proc(struct _win_st *win,int y,int x);
  1662. Xextern  void grok_proc(void );
  1663. X/* tune.c */
  1664. Xextern  void display_tune(struct _win_st *win,int y,int x);
  1665. X/* u386mon.c */
  1666. Xextern  char *get_elapsed_time(long elapsed_seconds);
  1667. Xextern  int get_cpu_avg(long *cpu_ticks,int period);
  1668. Xextern  int get_wait_avg(long *wait_ticks,int period);
  1669. Xextern  int main(int argc,char * *argv,char * *envp);
  1670. Xextern  long update_cpuscale(struct _win_st *win,int y,int x,int width,long *per_state);
  1671. Xextern  long update_waitscale(struct _win_st *win,int y,int x,int width,long *per_state,long total_ticks);
  1672. Xextern  void calc_cpu_avg(long *per_state);
  1673. Xextern  void calc_wait_avg(long *per_state);
  1674. Xextern  void draw_cpuscale_literals(struct _win_st *win,int y,int x);
  1675. Xextern  void draw_per_sec_literals(struct _win_st *win,int y,int x);
  1676. Xextern  void draw_waitscale_literals(struct _win_st *win,int y,int x);
  1677. Xextern  void extra_info_stuff(void );
  1678. Xextern  void extra_static_stuff(void );
  1679. Xextern  void leave(int exit_code);
  1680. Xextern  void leave_text(char *text,int exit_code);
  1681. X/* var.c */
  1682. Xextern  void display_var(struct _win_st *win,int y,int x);
  1683. X
  1684. X#else        /* compiler doesn't know about prototyping */
  1685. X
  1686. X/* bootinfo.c */
  1687. Xextern  char *bmemf_text();
  1688. Xextern  void display_bootinfo();
  1689. X/* det_proc.c */
  1690. Xextern  char *get_cpu_time_str();
  1691. Xextern  char *pgrp_to_ttyname();
  1692. Xextern  char *uid_to_name();
  1693. Xextern  int get_user();
  1694. Xextern  int getpwent_and_enter();
  1695. Xextern  int proc_pid_compare();
  1696. Xextern  int uid_name_enter();
  1697. Xextern  struct utmp *find_utmp_for_pgrp();
  1698. Xextern  void display_proc_stat();
  1699. Xextern  void display_proc_stats();
  1700. Xextern  void init_uid_name_hash();
  1701. Xextern  void read_and_sort_procs();
  1702. Xextern  void read_utmp();
  1703. X/* det_sio.c */
  1704. Xextern  char *B_to_baud_rate();
  1705. Xextern  char *cflag_to_baud_d_p_s();
  1706. Xextern  int display_sio_summary();
  1707. Xextern  int tty_slot_compare();
  1708. Xextern  void display_siofull_init();
  1709. Xextern  void display_siofull_update();
  1710. Xextern  void display_siosum_update();
  1711. Xextern  void grok_sio_tty();
  1712. X/* detail.c */
  1713. Xextern  void detail_init();
  1714. Xextern  void detail_panel_cmd();
  1715. Xextern  void detail_panel_update();
  1716. Xextern  void detpanel_destroy();
  1717. Xextern  void detpanel_extra_init();
  1718. Xextern  void detpanel_extra_update();
  1719. Xextern  void detpanel_ps_init();
  1720. Xextern  void detpanel_ps_update();
  1721. Xextern  void detpanel_sio_init();
  1722. Xextern  void detpanel_sio_update();
  1723. X/* disputil.c */
  1724. Xextern  struct PANEL *mkpanel();
  1725. Xextern  void clear_area();
  1726. Xextern  void clear_area_char();
  1727. Xextern  void disp_info_int();
  1728. Xextern  void disp_info_long();
  1729. Xextern  void disp_msg();
  1730. Xextern  void disp_static_int();
  1731. Xextern  void disp_static_long();
  1732. Xextern  void pflush();
  1733. Xextern  void wperror();
  1734. X/* libkmem.c */
  1735. Xextern  void kinit();
  1736. Xextern  void kread();
  1737. X/* libmem.c */
  1738. Xextern  void minit();
  1739. Xextern  void mread();
  1740. X/* libnlsym.c */
  1741. Xextern  void nlsym_error();
  1742. Xextern  void nlsym_read();
  1743. X/* libswap.c */
  1744. Xextern  void sinit();
  1745. Xextern  void sread();
  1746. X/* nlsym.c */
  1747. Xextern  int main();
  1748. Xextern  void nlsym_write_error();
  1749. X/* proc.c */
  1750. Xextern  char *pstat_text();
  1751. Xextern  void display_proc();
  1752. Xextern  void grok_proc();
  1753. X/* tune.c */
  1754. Xextern  void display_tune();
  1755. X/* u386mon.c */
  1756. Xextern  char *get_elapsed_time();
  1757. Xextern  int get_cpu_avg();
  1758. Xextern  int get_wait_avg();
  1759. Xextern  int main();
  1760. Xextern  long update_cpuscale();
  1761. Xextern  long update_waitscale();
  1762. Xextern  void calc_cpu_avg();
  1763. Xextern  void calc_wait_avg();
  1764. Xextern  void draw_cpuscale_literals();
  1765. Xextern  void draw_per_sec_literals();
  1766. Xextern  void draw_waitscale_literals();
  1767. Xextern  void extra_info_stuff();
  1768. Xextern  void extra_static_stuff();
  1769. Xextern  void leave();
  1770. Xextern  void leave_text();
  1771. X/* var.c */
  1772. Xextern  void display_var();
  1773. X
  1774. X#endif /* LINT_ARGS */
  1775. X#endif /* BUILDING_LINT_ARGS */
  1776. X
  1777. X/* end of lint_args.h */
  1778. SHAR_EOF
  1779. $TOUCH -am 0627020190 lint_args.h &&
  1780. chmod 0644 lint_args.h ||
  1781. echo "restore of lint_args.h failed"
  1782. set `wc -c lint_args.h`;Wc_c=$1
  1783. if test "$Wc_c" != "6985"; then
  1784.     echo original size 6985, current size $Wc_c
  1785. fi
  1786. echo "End of part 3, continue with part 4"
  1787. exit 0
  1788. ---------------------------------------------------------------------
  1789. Warren Tucker, TuckerWare  emory!n4hgf!wht or wht@n4hgf.Mt-Park.GA.US
  1790. Any perceptible delay will eventually get on your nerves. --Bob Hyers
  1791.  
  1792.