home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1494 < prev    next >
Internet Message Format  |  1990-12-28  |  51KB

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