home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume33 / u386mon / part05 < prev    next >
Encoding:
Text File  |  1992-11-20  |  39.9 KB  |  1,416 lines

  1. Newsgroups: comp.sources.misc
  2. From: Warren Tucker <wht@n4hgf.Mt-Park.GA.US>
  3. Subject:  v33i114:  u386mon - SVR3 performance/status monitor v2.60, Part05/09
  4. Message-ID: <1992Nov22.020208.24247@sparky.imd.sterling.com>
  5. X-Md4-Signature: 34ee97d65286ed8f8ae233cd77991b9e
  6. Date: Sun, 22 Nov 1992 02:02:08 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Warren Tucker <wht@n4hgf.Mt-Park.GA.US>
  10. Posting-number: Volume 33, Issue 114
  11. Archive-name: u386mon/part05
  12. Environment: SYSVR3
  13. Supersedes: u386mon: Volume 22, Issue 3-9
  14.  
  15. #!/bin/sh
  16. # This is part 05 of u386mon.2.60
  17. # ============= det_stream.c ==============
  18. if test -f 'det_stream.c' -a X"$1" != X"-c"; then
  19.     echo 'x - skipping det_stream.c (File already exists)'
  20. else
  21. echo 'x - extracting det_stream.c (Text)'
  22. sed 's/^X//' << 'SHAR_EOF' > 'det_stream.c' &&
  23. X/* CHK=0x88E9 */
  24. X/*+-------------------------------------------------------------------------
  25. X    det_stream.c - UNIX V/386 system monitor stream usage detail
  26. X    martin@hppcmart.grenoble.hp.com
  27. X
  28. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  29. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  30. XResource             Config Alloc Fail -- (% of resource used) -----------------
  31. X#################### ###### ##### #### ######################################### 
  32. X  Defined functions:
  33. X
  34. X--------------------------------------------------------------------------*/
  35. X/*+:EDITS:*/
  36. X/*:07-15-1992-14:31-wht@n4hgf-2.60 release - u386mon+siotools merge */
  37. X/*:08-20-1991-12:44-root@n4hgf-nba@sysware.dk S5R31 and config reorg */
  38. X/*:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point */
  39. X/*:05-15-1991-17:22-wht@n4hgf-2.3 patches for SVR31 from nba@sysware.dk */
  40. X/*:02-07-1991-13:30-martin@hppcmart-creation */
  41. X
  42. X#include "config.h"
  43. X
  44. X#if defined(DPT_STREAMS)
  45. X
  46. X#include <curses.h>
  47. X#include "libpanel.h"
  48. X#include <string.h>
  49. X#include <nlist.h>
  50. X#include <sys/types.h>
  51. X#include <sys/stat.h>
  52. X#include <sys/var.h>
  53. X#undef NGROUPS_MAX
  54. X#undef NULL
  55. X#include <sys/param.h>
  56. X#include <sys/stream.h>
  57. X#include <sys/strstat.h>
  58. X
  59. X#include "nlsym.h"
  60. X#include "libkmem.h"
  61. X#include "libmem.h"
  62. X#include "libswap.h"
  63. X#include "libnlsym.h"
  64. X#include "u386mon.h"
  65. X
  66. Xextern struct var v;
  67. Xunsigned stream_size[NCLASS+4];
  68. Xushort rbsize[NCLASS];
  69. Xstruct strstat strst;
  70. X
  71. X#define _NDX_STREAMS    0
  72. X#define _NDX_QUEUES        1
  73. X#define _NDX_MESSAGES    2
  74. X#define    _NDX_NBLK        3
  75. X#define _NDX_NBLK4        4
  76. X#define _NDX_NBLK16        5
  77. X#define _NDX_NBLK64        6
  78. X#define _NDX_NBLK128    7
  79. X#define _NDX_NBLK256    8
  80. X#define _NDX_NBLK512    9
  81. X#define _NDX_NBLK1024    10
  82. X#define _NDX_NBLK2048    11
  83. X#define _NDX_NBLK4096    12
  84. X
  85. X/*+----------------------------------------------------------------------------
  86. X    init_stream()
  87. X-----------------------------------------------------------------------------*/
  88. Xvoid
  89. Xinit_stream()
  90. X{
  91. X    int nmblock, i;
  92. X
  93. X    kread((caddr_t) rbsize, rbsizeaddr, sizeof(ushort) * NCLASS);
  94. X    stream_size[_NDX_STREAMS]=v.v_nstream;
  95. X    stream_size[_NDX_QUEUES]=v.v_nqueue;
  96. X    kread((caddr_t) &nmblock, nmblockaddr, sizeof(int));
  97. X    stream_size[_NDX_MESSAGES]=nmblock;
  98. X    stream_size[_NDX_NBLK4]=v.v_nblk4;    
  99. X    stream_size[_NDX_NBLK16]=v.v_nblk16;    
  100. X    stream_size[_NDX_NBLK64]=v.v_nblk64;    
  101. X    stream_size[_NDX_NBLK128]=v.v_nblk128;    
  102. X    stream_size[_NDX_NBLK256]=v.v_nblk256;    
  103. X    stream_size[_NDX_NBLK512]=v.v_nblk512;    
  104. X    stream_size[_NDX_NBLK1024]=v.v_nblk1024;    
  105. X    stream_size[_NDX_NBLK2048]=v.v_nblk2048;    
  106. X    stream_size[_NDX_NBLK4096]=v.v_nblk4096;    
  107. X    stream_size[_NDX_NBLK]=0;
  108. X    for(i=_NDX_NBLK4; i<=_NDX_NBLK4096; i++)
  109. X        stream_size[_NDX_NBLK]+=stream_size[i];
  110. X}
  111. X
  112. X/*+----------------------------------------------------------------------------
  113. X    draw_streamscale_literals(win, y, x);
  114. X
  115. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  116. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  117. XResource             Config Alloc Fail -- (% of resource used) -----------------
  118. XStreams              ###### ##### #### #########################################
  119. XQueues
  120. XMessage blocks
  121. XData blocks
  122. XData block size ####
  123. X-----------------------------------------------------------------------------*/
  124. X
  125. Xvoid
  126. Xdraw_streamscale_literals(win, y, x)
  127. XWINDOW *win;
  128. Xint y, x;
  129. X
  130. X{
  131. X    static char *header = 
  132. X"Resource            Config Alloc  Fail -- (% of resource used) ";
  133. X    int x2, i;
  134. X
  135. X    wmove(win, y, x);
  136. X    use_cp(win, cpBANNER);
  137. X    waddstr(win, header);
  138. X    getyx(win,y,x2);
  139. X    while (x2++ <= COLS)
  140. X        waddch(win, (chtype)'-');
  141. X    use_cp(win,cpLIT);
  142. X    clear_area(win,getmaxy(win)-1,0,getmaxx(win));
  143. X    mvwaddstr(win, y + 1, x, "Streams");
  144. X    mvwaddstr(win, y + 2, x, "Queues");
  145. X    mvwaddstr(win, y + 3, x, "Message blocks");
  146. X    mvwaddstr(win, y + 4, x, "Data blocks");
  147. X    for (i=0; i<NCLASS; i++)
  148. X        mvwprintw(win, (y+i+5), x, "Data block size %4lu", rbsize[i]);
  149. X} 
  150. X
  151. X/*+----------------------------------------------------------------------------
  152. X    update_streamscale(win, y, x, width);
  153. X
  154. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  155. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  156. XConf  Alloc Fail  -- (% of resource used) -----------------
  157. X##### ##### ##### #########################################
  158. X-----------------------------------------------------------------------------*/
  159. X#define _STREAM_CO    0
  160. X#define _STREAM_AL    6
  161. X#define _STREAM_FA    12
  162. X#define _STREAM_SX    18
  163. X
  164. Xvoid
  165. Xupdate_streamscale(win, y, x, width)
  166. XWINDOW *win;
  167. Xint y, x;
  168. Xint width;
  169. X
  170. X{
  171. X    int percent_used, percent_max;
  172. X    int i, itmp, max;
  173. X    alcdat    *strdat;
  174. X
  175. X    kread((caddr_t)&strst, strstaddr, sizeof(struct strstat));
  176. X    strdat=(alcdat *)&strst;
  177. X    for (i=0; i<NCLASS+4; i++) {
  178. X        percent_used=stream_size[i] ? (strdat->use*100/stream_size[i]) : 0;
  179. X        percent_max=stream_size[i] ? (strdat->max*100/stream_size[i]) : 0;
  180. X        use_cp(win, cpINFO);
  181. X        mvwprintw(win, y+i, _STREAM_CO+x, "%5i", stream_size[i]);
  182. X        mvwprintw(win, y+i, _STREAM_AL+x, "%5i", strdat->use);
  183. X        if (strdat->fail)
  184. X            use_cp(win, cpHIGH);
  185. X        else
  186. X            use_cp(win, cpINFO);
  187. X        mvwprintw(win, y+i, _STREAM_FA+x, "%5i", strdat->fail);
  188. X        wmove(win, y+i, _STREAM_SX+x);
  189. X
  190. X        if (percent_used < 70)
  191. X            use_cp(win, cpLOW);
  192. X        else if (percent_used < 90)
  193. X            use_cp(win, cpMED);
  194. X        else
  195. X            use_cp(win, cpHIGH);
  196. X
  197. X        itmp=(width * percent_used) / 100;
  198. X        max=(width * percent_max) / 100;
  199. X        while (-1) {
  200. X            itmp--;max--;
  201. X            if (max<1) {
  202. X                use_cp(win, cpHIGH);
  203. X                waddch(win, (chtype)'M');
  204. X                break;
  205. X            }
  206. X            if (itmp>-1)
  207. X                waddch(win, (chtype)'-');
  208. X            else
  209. X                waddch(win, (chtype)' ');
  210. X        }
  211. X
  212. X        wclrtoeol(win);
  213. X        strdat++;
  214. X    }
  215. X}
  216. X
  217. X#endif /* DPT_STREAMS */
  218. X
  219. X/* vi: set tabstop=4 shiftwidth=4: */
  220. X/* end of det_stream.c */
  221. SHAR_EOF
  222. chmod 0644 det_stream.c ||
  223. echo 'restore of det_stream.c failed'
  224. Wc_c="`wc -c < 'det_stream.c'`"
  225. test 5746 -eq "$Wc_c" ||
  226.     echo 'det_stream.c: original size 5746, current size' "$Wc_c"
  227. fi
  228. # ============= det_table.c ==============
  229. if test -f 'det_table.c' -a X"$1" != X"-c"; then
  230.     echo 'x - skipping det_table.c (File already exists)'
  231. else
  232. echo 'x - extracting det_table.c (Text)'
  233. sed 's/^X//' << 'SHAR_EOF' > 'det_table.c' &&
  234. X/* CHK=0x7B68 */
  235. X/*+-------------------------------------------------------------------------
  236. X    det_table.c - UNIX V/386 system monitor table usage detail
  237. X    martin@hppcmart.grenoble.hp.com
  238. X
  239. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  240. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  241. XResource     actual total ovfl %used -------------------------------------------
  242. X#################### ###### ##### #### ######################################### 
  243. X  Defined functions:
  244. Xfiles_in_use()
  245. Xinodes_in_use()
  246. Xupdate_table_line(win, y, x, width, num_item, max_item, conf_item, percent_item)
  247. Xinit_table()
  248. Xdraw_table_literals(win,y,x)
  249. X
  250. X--------------------------------------------------------------------------*/
  251. X/*+:EDITS:*/
  252. X/*:07-15-1992-14:31-wht@n4hgf-2.60 release - u386mon+siotools merge */
  253. X/*:08-20-1991-12:44-root@n4hgf-nba@sysware.dk S5R31 and config reorg */
  254. X/*:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point */
  255. X/*:05-15-1991-17:22-wht@n4hgf-2.3 patches for SVR31 from nba@sysware.dk */
  256. X/*:02-07-1991-13:30-martin@hppcmart-creation */
  257. X
  258. X#include "config.h"
  259. X
  260. X#if defined(DPT_TABLE)
  261. X
  262. X#include <curses.h>
  263. X#include "libpanel.h"
  264. X#include <string.h>
  265. X#include <nlist.h>
  266. X#include <sys/types.h>
  267. X#include <sys/stat.h>
  268. X#include <sys/var.h>
  269. X#undef NGROUPS_MAX
  270. X#undef NULL
  271. X#include <sys/param.h>
  272. X#include <sys/inode.h>
  273. X#include <sys/file.h>
  274. X#include <sys/fcntl.h>
  275. X#include <sys/flock.h>
  276. X#include <sys/sysinfo.h>
  277. X#include <sys/immu.h>
  278. X#include <sys/region.h>
  279. X#include <sys/callo.h>
  280. X
  281. X#include "nlsym.h"
  282. X#include "libkmem.h"
  283. X#include "libmem.h"
  284. X#include "libswap.h"
  285. X#include "libnlsym.h"
  286. X#include "u386mon.h"
  287. X
  288. Xextern struct var v;
  289. Xextern int procs_alive;
  290. Xstruct file *fpbase;
  291. Xstruct inode *ipbase;
  292. Xstruct flckinfo flckinfo;
  293. Xstruct syserr syserr;
  294. Xstruct region *rgbase;
  295. Xstruct callo *callbase;
  296. Xint max_files=0;
  297. Xint max_inodes=0;
  298. Xint max_locks=0;
  299. Xint max_regions=0;
  300. Xint max_callouts=0;
  301. Xint max_procs=0;
  302. X
  303. X/*+-------------------------------------------------------------------------
  304. X    files_in_use()
  305. X
  306. X    Returns the number of files in use or -1 if the free list
  307. X    pointers were munged when read which happens every now and then.
  308. X--------------------------------------------------------------------------*/
  309. Xstatic int
  310. Xfiles_in_use()
  311. X{
  312. X    struct file *fp, *fflist;
  313. X    register int cnt=0;
  314. X    unsigned int ndx;
  315. X
  316. X    kread((caddr_t) fpbase, fileaddr, sizeof(struct file)*v.v_file);
  317. X    kread((caddr_t) &fflist, ffreelistaddr, sizeof(struct file *));
  318. X    fp=fpbase + (fflist - (struct file *)fileaddr);
  319. X    while (1) {
  320. X        cnt++;
  321. X        if (fp->f_next == 0) break;
  322. X        ndx=fp->f_next - (struct file *)fileaddr;
  323. X        if ((ndx >= v.v_file) || (ndx < 0) || (cnt > v.v_file)) return(-1);
  324. X        fp=fpbase + ndx;
  325. X            
  326. X    }
  327. X    return(v.v_file-cnt);
  328. X}
  329. X
  330. X/*+-------------------------------------------------------------------------
  331. X    inodes_in_use()
  332. X
  333. X    Returns the number of inodes used or -1 if the free list
  334. X    pointers were munged when read which happens every now and then.
  335. X--------------------------------------------------------------------------*/
  336. X
  337. Xstatic int
  338. Xinodes_in_use()
  339. X{
  340. X    struct inode *ip, *iflistend;
  341. X    struct ifreelist iflist;
  342. X    register int cnt=0;
  343. X    int ndx;
  344. X
  345. X    kread((caddr_t) ipbase, inodeaddr, sizeof(struct inode)*v.v_inode);
  346. X    kread((caddr_t) &iflist, ifreelistaddr, sizeof(struct ifreelist));
  347. X    ip=ipbase + (iflist.av_forw - (struct inode *)inodeaddr);
  348. X    iflistend=ipbase + (iflist.av_back - (struct inode *)inodeaddr);
  349. X    while (1) {
  350. X        cnt++;
  351. X        if (ip==iflistend) break;
  352. X        ndx=ip->av_forw - (struct inode *)inodeaddr;
  353. X        if ((ndx >= v.v_inode) || (ndx < 0) || (cnt > v.v_inode)) return(-1);
  354. X        ip=ipbase + ndx;
  355. X    }
  356. X    return(v.v_inode-cnt);
  357. X}
  358. X
  359. X/*+-------------------------------------------------------------------------
  360. X    regions_in_use()
  361. X
  362. X    Returns the number of regions used or -1 if the free list
  363. X    pointers were munged when read which happens every now and then.
  364. X--------------------------------------------------------------------------*/
  365. X
  366. Xstatic int
  367. Xregions_in_use()
  368. X{
  369. X    struct region *rg, ractive;
  370. X    register int cnt=0;
  371. X    int ndx;
  372. X
  373. X    kread((caddr_t) rgbase, regionaddr, sizeof(struct region)*v.v_region);
  374. X    kread((caddr_t) &ractive, ractiveaddr, sizeof(struct region));
  375. X    rg=rgbase + (ractive.r_forw - (struct region *)regionaddr);
  376. X    while (1) {
  377. X        cnt++;
  378. X        if (rg->r_forw==(struct region *)ractiveaddr) break;
  379. X        ndx=rg->r_forw - (struct region *)regionaddr;
  380. X        if ((ndx >= v.v_region) || (ndx < 0) || (cnt > v.v_region)) return(-1);
  381. X        rg=rgbase + ndx;
  382. X    }
  383. X    return(cnt);
  384. X}
  385. X
  386. X/*+-------------------------------------------------------------------------
  387. X    callouts_in_use()
  388. X
  389. X    Returns the number of callouts used.
  390. X--------------------------------------------------------------------------*/
  391. X
  392. Xstatic int
  393. Xcallouts_in_use()
  394. X{
  395. X    struct callo *call;
  396. X    register int cnt=0;
  397. X    register int ndx=0;
  398. X
  399. X    kread((caddr_t) callbase, calloutaddr, sizeof(struct callo)*v.v_call);
  400. X    call=callbase;
  401. X    while (ndx<v.v_call) {
  402. X        ndx++; call++;
  403. X                /* This is a guess - I'm checking it with SCO */
  404. X        if (call->c_id>0) cnt++;
  405. X    }
  406. X    return(cnt);
  407. X}
  408. X
  409. X
  410. X
  411. X/*+-------------------------------------------------------------------------
  412. X    update_table_line(win)
  413. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  414. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  415. Xtual total ovfl %used ------------------------------------------------
  416. X####  ####  ###   ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  417. X--------------------------------------------------------------------------*/
  418. X
  419. X#define _TABLESCALE_AC    0
  420. X#define _TABLESCALE_TO    6
  421. X#define _TABLESCALE_OV    12
  422. X#define _TABLESCALE_PE    18
  423. X#define _TABLESCALE_SX    22
  424. X
  425. Xstatic void
  426. Xupdate_table_line(win, y, x, width, num_item, max_item, conf_item, percent_item, ovfl_item)
  427. XWINDOW *win;
  428. Xint y;
  429. Xint x;
  430. Xint width;
  431. Xint num_item;
  432. Xint max_item;
  433. Xint conf_item;
  434. Xint percent_item;
  435. Xint ovfl_item;
  436. X
  437. X{
  438. X    int itmp, max;
  439. X
  440. X    if (num_item<0) {
  441. X
  442. X        wmove(win, y, x + _TABLESCALE_AC);
  443. X        use_cp(win, cpHIGH);
  444. X        waddstr(win, "OVER");
  445. X
  446. X    } else {
  447. X
  448. X        wmove(win,y, x + _TABLESCALE_AC);
  449. X        use_cp(win,cpINFO);
  450. X        wprintw(win,"%4ld",num_item);
  451. X
  452. X        wmove(win,y, x + _TABLESCALE_TO);
  453. X        use_cp(win,cpINFO);
  454. X        wprintw(win,"%4ld",conf_item);
  455. X
  456. X        if (ovfl_item != -1) {
  457. X            wmove(win,y, x + _TABLESCALE_OV);
  458. X            use_cp(win,cpINFO);
  459. X            wprintw(win,"%3ld",ovfl_item);
  460. X        }
  461. X
  462. X        wmove(win,y, x + _TABLESCALE_PE);
  463. X        if(percent_item < 70)
  464. X            use_cp(win,cpLOW);
  465. X        else if(percent_item < 90)
  466. X            use_cp(win,cpMED);
  467. X        else
  468. X            use_cp(win,cpHIGH);
  469. X        wprintw(win,"%3ld", percent_item);
  470. X
  471. X        wmove(win,y, x + _TABLESCALE_SX);
  472. X
  473. X        itmp = (width * percent_item) / 100;
  474. X        max = (width * max_item) / 100;
  475. X        while(-1) {
  476. X            itmp--; max--;
  477. X            if (max<1) {
  478. X                use_cp(win,cpHIGH);
  479. X                waddch(win,(chtype)'M');
  480. X                break;
  481. X            }
  482. X            if (itmp>-1)
  483. X                waddch(win,(chtype)'-');
  484. X            else
  485. X                waddch(win,(chtype)' ');
  486. X        }
  487. X        wclrtoeol(win);
  488. X    }
  489. X}
  490. X            
  491. X
  492. X
  493. X/*+-------------------------------------------------------------------------
  494. X    init_table()
  495. X
  496. X--------------------------------------------------------------------------*/
  497. X
  498. Xvoid
  499. Xinit_table()
  500. X
  501. X{
  502. X    if (!(fpbase = (struct file *) malloc(sizeof(struct file)*v.v_file)))
  503. X        leave_text("cannot alloc memory for file table",1);
  504. X    if (!(ipbase = (struct inode *) malloc(sizeof(struct inode)*v.v_inode)))
  505. X        leave_text("cannot alloc memory for inode table",1);
  506. X    if (!(rgbase = (struct region *) malloc(sizeof(struct region)*v.v_region)))
  507. X        leave_text("cannot alloc memory for region table",1);
  508. X    if (!(callbase = (struct callo *) malloc(sizeof(struct callo)*v.v_call)))
  509. X        leave_text("cannot alloc memory for region table",1);
  510. X}
  511. X
  512. X/*+-------------------------------------------------------------------------
  513. X    update_table(win,y,x)
  514. X
  515. X--------------------------------------------------------------------------*/
  516. X
  517. Xvoid
  518. Xupdate_table(win,y,x)
  519. XWINDOW *win;
  520. Xint y;
  521. Xint x;
  522. X{
  523. X    int num_files;
  524. X    int num_inodes;
  525. X    int num_regions;
  526. X    int num_callouts;
  527. X    int percent_files;
  528. X    int percent_inodes;
  529. X    int percent_locks;
  530. X    int percent_regions;
  531. X    int percent_callouts;
  532. X    int percent_procs;
  533. X    register width;
  534. X
  535. X    x += 15; /* skip literals */
  536. X    width = COLS - _TABLESCALE_SX - x;
  537. X
  538. X    num_files=files_in_use();
  539. X    num_inodes=inodes_in_use();
  540. X    num_regions=regions_in_use();
  541. X    num_callouts=callouts_in_use();
  542. X    kread((caddr_t)&flckinfo, flckinfoaddr, sizeof(struct flckinfo));
  543. X    grok_proc ();
  544. X    kread((caddr_t)&syserr, syserraddr, sizeof (struct syserr));
  545. X
  546. X    percent_files=(num_files * 100 / v.v_file);
  547. X    percent_inodes=(num_inodes * 100 / v.v_inode);
  548. X    percent_regions=(num_regions * 100 / v.v_region);
  549. X    percent_locks=flckinfo.recs ? (flckinfo.reccnt * 100 / flckinfo.recs) : 0;
  550. X    percent_callouts=( num_callouts * 100 / v.v_call);
  551. X    percent_procs=(procs_alive * 100 / v.v_proc);
  552. X    if(percent_files > max_files) max_files=percent_files;
  553. X    if(percent_inodes > max_inodes) max_inodes=percent_inodes;
  554. X    if(percent_locks > max_locks) max_locks=percent_locks;
  555. X    if(percent_regions > max_regions) max_regions=percent_regions;
  556. X    if(percent_callouts > max_callouts) max_callouts=percent_callouts;
  557. X    if(percent_procs > max_procs) max_procs=percent_procs;
  558. X
  559. X    update_table_line(win, y, x, width,
  560. X            num_files, max_files, v.v_file, percent_files, syserr.fileovf);
  561. X    update_table_line(win, y + 1, x, width,
  562. X            num_inodes, max_inodes, v.v_inode, percent_inodes, syserr.inodeovf);
  563. X    update_table_line(win, y + 2, x, width,
  564. X            flckinfo.reccnt, max_locks, flckinfo.recs, percent_locks, flckinfo.recovf);
  565. X    update_table_line(win, y + 3, x, width,
  566. X            num_regions, max_regions, v.v_region, percent_regions, -1);
  567. X    update_table_line(win, y + 4, x, width,
  568. X            num_callouts, max_callouts, v.v_call, percent_callouts, -1);
  569. X    update_table_line(win, y + 5, x, width,
  570. X            procs_alive, max_procs, v.v_proc, percent_procs, syserr.procovf);
  571. X    return;
  572. X}    /* end of update_table */
  573. X
  574. X
  575. X/*+-------------------------------------------------------------------------
  576. X    draw_table_literals(win)
  577. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  578. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  579. XResource     actual total ovfl %used -------------------------------------------
  580. X############   ####  ####  ###   ### xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  581. X--------------------------------------------------------------------------*/
  582. Xvoid
  583. Xdraw_table_literals(win,y,x)
  584. XWINDOW *win;
  585. Xint y;
  586. Xint x;
  587. X{
  588. Xint x2 = x;
  589. X
  590. X    wmove(win,y,x);
  591. X    use_cp(win,cpBANNER);
  592. X    waddstr(win,"Resource     actual total ovfl %used ");
  593. X    getyx(win,y,x2);
  594. X    while(x2 < COLS)
  595. X        waddch(win,(chtype)'-'),x2++;
  596. X    use_cp(win,cpLIT);
  597. X    wmove(win,y + 1,x);
  598. X      waddstr(win,"File table ");
  599. X    wmove(win,y + 2,x);
  600. X      waddstr(win,"Inode table");
  601. X    wmove(win,y + 3,x);
  602. X    waddstr(win,"Lock table ");
  603. X    wmove(win,y + 4,x);
  604. X    waddstr(win,"Region table ");
  605. X    wmove(win,y + 5,x);
  606. X    waddstr(win,"Callout table ");
  607. X    wmove(win,y + 6,x);
  608. X    waddstr(win,"Proc table ");
  609. X
  610. X}    /* end of draw_table_literals */
  611. X
  612. X#endif /* DPT_TABLE */
  613. SHAR_EOF
  614. chmod 0644 det_table.c ||
  615. echo 'restore of det_table.c failed'
  616. Wc_c="`wc -c < 'det_table.c'`"
  617. test 10833 -eq "$Wc_c" ||
  618.     echo 'det_table.c: original size 10833, current size' "$Wc_c"
  619. fi
  620. # ============= det_wd.c ==============
  621. if test -f 'det_wd.c' -a X"$1" != X"-c"; then
  622.     echo 'x - skipping det_wd.c (File already exists)'
  623. else
  624. echo 'x - extracting det_wd.c (Text)'
  625. sed 's/^X//' << 'SHAR_EOF' > 'det_wd.c' &&
  626. X/* CHK=0x7811 */
  627. X/*+-------------------------------------------------------------------------
  628. X    det_wd.c - UNIX V/386 system monitor WD disk controller usage detail
  629. X    martin@hppcmart.grenoble.hp.com
  630. X
  631. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  632. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  633. XDevice  Av Q  r+w/s Blks/s -- (% Utilization) ----------------------------------
  634. X######  ##### ##### #####  ##################################################### 
  635. X  Defined functions:
  636. X
  637. X--------------------------------------------------------------------------*/
  638. X/*+:EDITS:*/
  639. X/*:07-15-1992-14:31-wht@n4hgf-2.60 release - u386mon+siotools merge */
  640. X/*:08-20-1991-12:44-root@n4hgf-nba@sysware.dk S5R31 and config reorg */
  641. X/*:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point */
  642. X/*:02-07-1991-13:30-martin@hppcmart-creation */
  643. X
  644. X#include "config.h"
  645. X
  646. X#if defined(DPT_WD)
  647. X
  648. X#include <curses.h>
  649. X#include "libpanel.h"
  650. X#include <string.h>
  651. X#include <nlist.h>
  652. X#include <sys/types.h>
  653. X#include <sys/stat.h>
  654. X#include <sys/ascii.h>
  655. X#include <sys/var.h>
  656. X#undef NGROUPS_MAX
  657. X#undef NULL
  658. X#include <sys/param.h>
  659. X#include <sys/elog.h>
  660. X
  661. X#include "nlsym.h"
  662. X#include "libkmem.h"
  663. X#include "libmem.h"
  664. X#include "libswap.h"
  665. X#include "libnlsym.h"
  666. X#include "u386mon.h"
  667. X
  668. Xextern struct var v;
  669. X
  670. X/* WD Driver */
  671. X#define NCTLR        2
  672. X#define NWD            2
  673. X#define NWDTOTAL    NCTLR*NWD
  674. X/* Floppy drives */
  675. X#define NDRIVES        4
  676. X    
  677. Xstatic int max_util[NWDTOTAL+NDRIVES];
  678. Xstatic struct     iotime    ia[NWDTOTAL+NDRIVES],ialast[NWDTOTAL+NDRIVES];
  679. Xstatic time_t     timelast,now;
  680. X/*+----------------------------------------------------------------------------
  681. X    init_wd();
  682. X    Get initial drive stats.
  683. X-----------------------------------------------------------------------------*/
  684. Xvoid
  685. Xinit_wd()
  686. X{
  687. X    register i;
  688. X
  689. X    (void)time(&timelast);
  690. X    for(i=0;i<(NWDTOTAL+NDRIVES);i++)
  691. X        max_util[i]=0;
  692. X    kread((caddr_t) ialast,wd1010statsaddr,sizeof(struct iotime) * NCTLR * NWD);
  693. X    kread((caddr_t) &ialast[NWDTOTAL],flstatsaddr,sizeof(struct iotime) * NDRIVES);
  694. X}
  695. X
  696. X/*+----------------------------------------------------------------------------
  697. X    draw_wd_literals(win, y, x);
  698. X
  699. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  700. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  701. XDevice  Jobs/s r+w/s Blks/s -- (% Utilization) ---------------------------------
  702. X######   ##### ##### #####  ####################################################
  703. X%wd##
  704. X%fd##
  705. X-----------------------------------------------------------------------------*/
  706. X
  707. Xvoid
  708. Xdraw_wd_literals(win,y,x)
  709. XWINDOW *win;
  710. Xint y,x;
  711. X
  712. X{
  713. X    static char *header = 
  714. X"Device  Jobs/s r+w/s Blks/s -- (% Utilization) ";
  715. X    int x2,ctlr,drive;
  716. X
  717. X    wmove(win,y,x);
  718. X    use_cp(win,cpBANNER);
  719. X    waddstr(win,header);
  720. X    getyx(win,y,x2);
  721. X    while(x2++ <= COLS)
  722. X        waddch(win,(chtype)'-');
  723. X    use_cp(win,cpLIT);
  724. X    clear_area(win,getmaxy(win)-1,0,getmaxx(win));
  725. X    for(ctlr=0; ctlr<NCTLR; ctlr++) {
  726. X        for(drive=0; drive<NWD; drive++) {
  727. X            mvwprintw(win,(y+(ctlr*NWD)+drive+1),x,"wd%1d%1d",ctlr,drive);
  728. X        }
  729. X    }
  730. X    getyx(win,y,x2);
  731. X    for(drive=0; drive<NDRIVES; drive++)
  732. X        mvwprintw(win,(y+drive+1),x,"fd%1d",drive);
  733. X} 
  734. X
  735. X/*+----------------------------------------------------------------------------
  736. X    update_wd(win, y, x, width);
  737. X
  738. X00000000001111111111222222222233333333334444444444555555555566666666667777777777
  739. X01234567890123456789012345678901234567890123456789012345678901234567890123456789
  740. Xobs/s r+w/s Blks/s -- (% Utilization) ---------------------------------
  741. X##### ##### #####  ####################################################
  742. X-----------------------------------------------------------------------------*/
  743. X#define _WD_AQ    0
  744. X#define _WD_RW    6
  745. X#define _WD_BK    12
  746. X#define _WD_UT    19
  747. X
  748. Xvoid
  749. Xupdate_wd(win,y,x,width)
  750. XWINDOW *win;
  751. Xint y,x;
  752. Xint width;
  753. X
  754. X{
  755. X    register i;
  756. X    time_t elapsed_secs;
  757. X    int itmp;
  758. X    int percent_used;
  759. X/*
  760. X    int max;
  761. X*/
  762. X
  763. X    (void)time(&now);
  764. X    elapsed_secs=now-timelast;
  765. X    kread((caddr_t) ia,wd1010statsaddr,sizeof(struct iotime) * NCTLR * NWD);
  766. X    kread((caddr_t) &ia[NWDTOTAL],flstatsaddr,
  767. X            sizeof(struct iotime) * NDRIVES);
  768. X    for(i=0; i<(NWDTOTAL+NDRIVES);i++) {
  769. X        use_cp(win,cpINFO);
  770. X        mvwprintw(win,y+i,_WD_AQ+x,"%5i",
  771. X            (ia[i].io_qc-ialast[i].io_qc));
  772. X        mvwprintw(win,y+i,_WD_RW+x,"%5i",
  773. X            (ia[i].io_cnt-ialast[i].io_cnt));
  774. X        itmp = ia[i].io_bcnt-ialast[i].io_bcnt;
  775. X        mvwprintw(win,y+i,_WD_BK+x,"%5i",
  776. X            (itmp > 99999) ? 99999 : itmp);    /* protect transient overflow */
  777. X        wmove(win,y+i,_WD_UT+x);
  778. X        percent_used=(ia[i].io_act-ialast[i].io_act);
  779. X        wprintw(win,"%5i",(percent_used > 99999) ? 99999 : percent_used);
  780. X/*
  781. X        max_util[i]=max_util[i]<percent_used ? percent_used : max_util[i];
  782. X        if(percent_used < 70)
  783. X            use_cp(win, cpLOW);
  784. X        else if (percent_used < 90)
  785. X            use_cp(win, cpMED);
  786. X        else
  787. X            use_cp(win, cpHIGH);
  788. X
  789. X        itmp = (width * percent_used) / 100;
  790. X        max = (width * max_util[i]) / 100;
  791. X        while(-1) {
  792. X            itmp--;max--;
  793. X            if (max<1) {
  794. X                use_cp(win, cpHIGH);
  795. X                waddch(win, (chtype)'M');
  796. X                break;
  797. X            }
  798. X            if (itmp>-1)
  799. X                waddch(win, (chtype)'-');
  800. X            else
  801. X                waddch(win, (chtype)' ');
  802. X        }
  803. X
  804. X        wclrtoeol(win);
  805. X*/
  806. X    }
  807. X    memcpy((char *)ialast,(char *)ia,
  808. X        sizeof(struct iotime) * (NWDTOTAL + NDRIVES));
  809. X    timelast=now;
  810. X}
  811. X
  812. X#endif /* DPT_WD */
  813. SHAR_EOF
  814. chmod 0644 det_wd.c ||
  815. echo 'restore of det_wd.c failed'
  816. Wc_c="`wc -c < 'det_wd.c'`"
  817. test 5222 -eq "$Wc_c" ||
  818.     echo 'det_wd.c: original size 5222, current size' "$Wc_c"
  819. fi
  820. # ============= disputil.c ==============
  821. if test -f 'disputil.c' -a X"$1" != X"-c"; then
  822.     echo 'x - skipping disputil.c (File already exists)'
  823. else
  824. echo 'x - extracting disputil.c (Text)'
  825. sed 's/^X//' << 'SHAR_EOF' > 'disputil.c' &&
  826. X/* CHK=0x4203 */
  827. X/*+-------------------------------------------------------------------------
  828. X    disputil.c - u386mon display utilities
  829. X
  830. X  Defined functions:
  831. X    clear_area(win,y,x,len)
  832. X    clear_area_char(win,y,x,len,fillchar)
  833. X    disp_info_int(win,label,fmt,value)
  834. X    disp_info_long(win,label,fmt,value)
  835. X    disp_msg(cp,msg)
  836. X    disp_static_int(win,label,fmt,value)
  837. X    disp_static_long(win,label,fmt,value)
  838. X    mkpanel(rows,cols,tly,tlx,userp)
  839. X    pflush()
  840. X    wperror(win,desc)
  841. X
  842. X--------------------------------------------------------------------------*/
  843. X/*+:EDITS:*/
  844. X/*:07-15-1992-14:31-wht@n4hgf-2.60 release - u386mon+siotools merge */
  845. X/*:08-20-1991-12:44-root@n4hgf-nba@sysware.dk S5R31 and config reorg */
  846. X/*:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point */
  847. X/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
  848. X/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates */
  849. X/*:08-02-1990-15:36-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations */
  850. X/*:07-28-1990-18:06-wht@n4hgf-2.10 release */
  851. X/*:07-10-1990-19:06-root@n4hgf-redesign attributes/color pairs */
  852. X/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
  853. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  854. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  855. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  856. X/*:06-17-1990-15:15-wht-creation */
  857. X
  858. X#include "config.h"
  859. X
  860. X#include <curses.h>
  861. X#undef timeout
  862. X#undef reg     /* per nba@sysware.dk */
  863. X#include "libpanel.h"
  864. X#include <sys/types.h>
  865. X#include "u386mon.h"
  866. X
  867. X#ifdef COLOR_PAIR
  868. Xlong color_attr[] =
  869. X{
  870. X    COLOR_PAIR(0),
  871. X    COLOR_PAIR(cpINFO),
  872. X    COLOR_PAIR(cpREVERSE),
  873. X    COLOR_PAIR(cpBANWARN),
  874. X    COLOR_PAIR(cpLOW) | A_BOLD,
  875. X    COLOR_PAIR(cpMED) | A_BOLD,
  876. X    COLOR_PAIR(cpHIGH),
  877. X    COLOR_PAIR(cpBANNER),
  878. X    COLOR_PAIR(cpLIT),
  879. X    0
  880. X};
  881. X#endif
  882. X
  883. Xlong mono_attr[] =
  884. X{
  885. X    0,                        /* 0 */
  886. X    0,                        /* cpINFO */
  887. X    A_REVERSE,                /* cpREVERSE */
  888. X    A_BOLD,                     /* cpBANWARN */
  889. X    0,                        /* cpLOW */
  890. X    A_UNDERLINE,            /* cpMED */
  891. X    A_BLINK,                /* cpHIGH */
  892. X    A_REVERSE,                /* cpBANNER */
  893. X    A_DIM,                    /* cpLIT */
  894. X};
  895. X
  896. Xextern WINDOW *wdet, *wscr;
  897. X
  898. X/*+-------------------------------------------------------------------------
  899. X    clear_area_char(win,y,x,len,fillchar)
  900. X--------------------------------------------------------------------------*/
  901. Xvoid
  902. Xclear_area_char(win,y,x,len,fillchar)
  903. XWINDOW *win;
  904. Xint y;
  905. Xint x;
  906. Xint len;
  907. Xu_char fillchar;
  908. X{
  909. X    wmove(win,y,x);
  910. X    while(len-- > 0)
  911. X        waddch(win,(chtype)fillchar);
  912. X    wmove(win,y,x);
  913. X
  914. X}    /* end of clear_area_char */
  915. X
  916. X/*+-------------------------------------------------------------------------
  917. X    clear_area(win,y,x,len)
  918. X--------------------------------------------------------------------------*/
  919. Xvoid
  920. Xclear_area(win,y,x,len)
  921. XWINDOW *win;
  922. Xint y;
  923. Xint x;
  924. Xint len;
  925. X{
  926. X    clear_area_char(win,y,x,len,' ');
  927. X}    /* end of clear_area_char */
  928. X
  929. X/*+-------------------------------------------------------------------------
  930. X    pflush() - do update_panels() and doupdate()
  931. X--------------------------------------------------------------------------*/
  932. Xvoid
  933. Xpflush()
  934. X{
  935. X    update_panels();
  936. X    curs_set(0);
  937. X    doupdate();
  938. X    curs_set(1);
  939. X}    /* end of pflush */
  940. X
  941. X/*+-------------------------------------------------------------------------
  942. X    wperror(win,desc)
  943. X--------------------------------------------------------------------------*/
  944. Xvoid
  945. Xwperror(win,desc)
  946. XWINDOW *win;
  947. Xchar *desc;
  948. X{
  949. Xextern int errno;
  950. Xextern int sys_nerr;
  951. Xextern char *sys_errlist[];
  952. X
  953. X    waddstr(win,desc);
  954. X    waddstr(win,": ");
  955. X    if(errno < sys_nerr)
  956. X        waddstr(win,sys_errlist[errno]);
  957. X    else
  958. X        wprintw(win,"error %u",errno);
  959. X
  960. X}    /* end of wperror */
  961. X
  962. X/*+-------------------------------------------------------------------------
  963. X    mkpanel(rows,cols,tly,tlx,userp) - alloc win and pan and associate them
  964. X--------------------------------------------------------------------------*/
  965. XPANEL *
  966. Xmkpanel(rows,cols,tly,tlx,userp)
  967. Xint rows;
  968. Xint cols;
  969. Xint tly;
  970. Xint tlx;
  971. Xchar *userp;
  972. X{
  973. XWINDOW *win = newwin(rows,cols,tly,tlx);
  974. XPANEL *pan;
  975. X
  976. X    if(!win)
  977. X        return((PANEL *)0);
  978. X    if(pan = new_panel(win))
  979. X    {
  980. X        set_panel_userptr(pan,userp);
  981. X        return(pan);
  982. X    }
  983. X    delwin(win);
  984. X    return((PANEL *)0);
  985. X}    /* end of mkpanel */
  986. X
  987. X/*+-------------------------------------------------------------------------
  988. X    disp_info_long(win,label,fmt,value)
  989. X--------------------------------------------------------------------------*/
  990. Xvoid
  991. Xdisp_info_long(win,label,fmt,value)
  992. XWINDOW *win;
  993. Xchar *label;
  994. Xchar *fmt;
  995. Xlong value;
  996. X{
  997. X    use_cp(win,cpLIT);
  998. X    waddstr(win,label);
  999. X    use_cp(win,cpINFO);
  1000. X    wprintw(win,fmt,value);
  1001. X}    /* end of disp_info_long */
  1002. X
  1003. X/*+-------------------------------------------------------------------------
  1004. X    disp_info_int(win,label,fmt,value)
  1005. X--------------------------------------------------------------------------*/
  1006. Xvoid
  1007. Xdisp_info_int(win,label,fmt,value)
  1008. XWINDOW *win;
  1009. Xchar *label;
  1010. Xchar *fmt;
  1011. Xint value;
  1012. X{
  1013. X    use_cp(win,cpLIT);
  1014. X    waddstr(win,label);
  1015. X    use_cp(win,cpINFO);
  1016. X    wprintw(win,fmt,value);
  1017. X}    /* end of disp_info_int */
  1018. X
  1019. X/*+-------------------------------------------------------------------------
  1020. X    disp_static_long(win,label,fmt,value)
  1021. X--------------------------------------------------------------------------*/
  1022. Xvoid
  1023. Xdisp_static_long(win,label,fmt,value)
  1024. XWINDOW *win;
  1025. Xchar *label;
  1026. Xchar *fmt;
  1027. Xlong value;
  1028. X{
  1029. X    use_cp(win,cpLIT);
  1030. X    waddstr(win,label);
  1031. X    wprintw(win,fmt,value);
  1032. X}    /* end of disp_static_long */
  1033. X
  1034. X/*+-------------------------------------------------------------------------
  1035. X    disp_static_int(win,label,fmt,value)
  1036. X--------------------------------------------------------------------------*/
  1037. Xvoid
  1038. Xdisp_static_int(win,label,fmt,value)
  1039. XWINDOW *win;
  1040. Xchar *label;
  1041. Xchar *fmt;
  1042. Xint value;
  1043. X{
  1044. X    use_cp(win,cpLIT);
  1045. X    waddstr(win,label);
  1046. X    wprintw(win,fmt,value);
  1047. X}    /* end of disp_static_int */
  1048. X
  1049. X/*+-------------------------------------------------------------------------
  1050. X    disp_msg(cp,msg)
  1051. X--------------------------------------------------------------------------*/
  1052. Xvoid
  1053. Xdisp_msg(cp,msg)
  1054. Xchtype cp;
  1055. Xchar *msg;
  1056. X{
  1057. Xextern WINDOW *wscr;
  1058. Xint y;
  1059. Xregister int x;
  1060. X
  1061. X    wmove(wscr,MSG_TLY,0);
  1062. X    use_cp(wscr,cp);
  1063. X    waddstr(wscr,msg);
  1064. X    getyx(wscr,y,x);
  1065. X    while(x < getmaxx(wscr))
  1066. X        waddch(wscr,(chtype)' '),x++;
  1067. X}    /* end of disp_msg */
  1068. X
  1069. X/* vi: set tabstop=4 shiftwidth=4: */
  1070. X/* end of disputil.c */
  1071. SHAR_EOF
  1072. chmod 0644 disputil.c ||
  1073. echo 'restore of disputil.c failed'
  1074. Wc_c="`wc -c < 'disputil.c'`"
  1075. test 6172 -eq "$Wc_c" ||
  1076.     echo 'disputil.c: original size 6172, current size' "$Wc_c"
  1077. fi
  1078. # ============= kludge.c ==============
  1079. if test -f 'kludge.c' -a X"$1" != X"-c"; then
  1080.     echo 'x - skipping kludge.c (File already exists)'
  1081. else
  1082. echo 'x - extracting kludge.c (Text)'
  1083. sed 's/^X//' << 'SHAR_EOF' > 'kludge.c' &&
  1084. X/* CHK=0xC28D */
  1085. X
  1086. X/*+-------------------------------------------------------------------------
  1087. X    kludge.c - u386mon KLUDGE
  1088. X
  1089. XWe want S5R3 curses #define PERFORMANCE because it has several macro
  1090. Xreplacements for functions, but one of the macros has a bug in it.  The
  1091. Xmacro has_colors() refers to an undefined 'max_pairs' ...  in the interest
  1092. Xof speed, we do the has_colors() call here and get the function
  1093. Xhas_colors() without the bogus extern reference.
  1094. X--------------------------------------------------------------------------*/
  1095. X/*+:EDITS:*/
  1096. X/*:07-15-1992-14:31-wht@n4hgf-2.60 release - u386mon+siotools merge */
  1097. X/*:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point */
  1098. X/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
  1099. X/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates */
  1100. X/*:08-03-1990-05:04-wht-creation */
  1101. X
  1102. X#define M_TERMINFO
  1103. X#include <curses.h>
  1104. X
  1105. X/*+-------------------------------------------------------------------------
  1106. X    has_colors_kludge() - don't ask
  1107. X--------------------------------------------------------------------------*/
  1108. X#if defined(COLOR_PAIR)
  1109. Xvoid
  1110. Xhas_colors_kludge()
  1111. X{
  1112. Xextern int color_avail;
  1113. X    color_avail = has_colors();
  1114. X}    /* end of has_colors_kludge */
  1115. X#endif
  1116. X
  1117. X/* vi: set tabstop=4 shiftwidth=4: */
  1118. X/* end of kludge.c */
  1119. SHAR_EOF
  1120. chmod 0644 kludge.c ||
  1121. echo 'restore of kludge.c failed'
  1122. Wc_c="`wc -c < 'kludge.c'`"
  1123. test 1282 -eq "$Wc_c" ||
  1124.     echo 'kludge.c: original size 1282, current size' "$Wc_c"
  1125. fi
  1126. # ============= libkmem.c ==============
  1127. if test -f 'libkmem.c' -a X"$1" != X"-c"; then
  1128.     echo 'x - skipping libkmem.c (File already exists)'
  1129. else
  1130. echo 'x - extracting libkmem.c (Text)'
  1131. sed 's/^X//' << 'SHAR_EOF' > 'libkmem.c' &&
  1132. X/* CHK=0x1C11 */
  1133. X/*LINTLIBRARY*/
  1134. X/*+-------------------------------------------------------------------------
  1135. X    libkmem.c -- /dev/kmem routines for SCO UNIX/386 (maybe other *NIX)
  1136. X    ...!{gatech,emory}!n4hgf!wht
  1137. X
  1138. X  Defined functions:
  1139. X    kinit(write_needed)
  1140. X    kread(caddr,kaddr,len)
  1141. X    kwrite(kaddr,caddr,len)
  1142. X
  1143. X routines were originally written by Mike "Ford" Ditto: kudos!!!
  1144. X--------------------------------------------------------------------------*/
  1145. X/*+:EDITS:*/
  1146. X/*:07-15-1992-14:31-wht@n4hgf-2.60 release - u386mon+siotools merge */
  1147. X/*:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point */
  1148. X/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
  1149. X/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates */
  1150. X/*:08-02-1990-15:36-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations */
  1151. X/*:08-01-1990-19:33-jdc@dell.com-add more error text */
  1152. X/*:07-28-1990-18:06-wht@n4hgf-2.10 release */
  1153. X/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
  1154. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  1155. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  1156. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  1157. X/*:12-07-1988-22:06-wht-put in test for initialized fdkmem */
  1158. X/*:10-27-1988-22:44-wht-creation of file */
  1159. X
  1160. X#include <sys/types.h>
  1161. X#include <sys/errno.h>
  1162. X#include <fcntl.h>
  1163. X#include "libkmem.h"
  1164. X
  1165. Xvoid leave_text();
  1166. X
  1167. Xextern int errno;
  1168. X
  1169. Xstatic int fdkmem = -2;
  1170. Xdaddr_t lseek();
  1171. X
  1172. X/*+-------------------------------------------------------------------------
  1173. X    kinit(write_needed)
  1174. X--------------------------------------------------------------------------*/
  1175. Xvoid
  1176. Xkinit(write_needed)
  1177. Xint write_needed;
  1178. X{
  1179. X    if(fdkmem >= 0)
  1180. X        return;
  1181. X    if((fdkmem=open("/dev/kmem",(write_needed) ? O_RDWR : O_RDONLY,0)) < 0)
  1182. X    {
  1183. X        if (write_needed)
  1184. X        {
  1185. X            leave_text("can't open /dev/kmem for read/write access",255);
  1186. X        }
  1187. X        else
  1188. X        {
  1189. X            leave_text("can't open /dev/kmem for read access",255);
  1190. X        }
  1191. X    }
  1192. X
  1193. X}    /* end of kinit */
  1194. X
  1195. X/*+-------------------------------------------------------------------------
  1196. X    kread(caddr,kaddr,len)
  1197. X--------------------------------------------------------------------------*/
  1198. Xvoid
  1199. Xkread(caddr,kaddr,len)
  1200. Xcaddr_t caddr;
  1201. Xdaddr_t kaddr;
  1202. Xint len;
  1203. X{
  1204. Xchar s80[80];
  1205. Xextern daddr_t myreadlen;
  1206. Xextern int myreadcnt;
  1207. X
  1208. X#if defined(M_I286)
  1209. X    kaddr &= 0xFFFFL;
  1210. X#endif
  1211. X#if defined(mips)
  1212. X    kaddr &= 0x7FFFFFFFL;
  1213. X#endif
  1214. X
  1215. X    if(fdkmem == -2)
  1216. X        leave_text("kinit() not called",1);
  1217. X
  1218. X    if(lseek(fdkmem,kaddr,0) == -1L)
  1219. X    {
  1220. X        (void)sprintf(s80,"kmem read seek error addr %08lx",kaddr);
  1221. X        leave_text(s80,255);
  1222. X    }
  1223. X
  1224. X    if(read(fdkmem,caddr,len) != len)
  1225. X    {
  1226. X        (void)sprintf(s80,"kmem read error len %d addr %08lx",len,kaddr);
  1227. X        leave_text(s80,255);
  1228. X    }
  1229. X    myreadlen += len;
  1230. X    myreadcnt++;
  1231. X}    /* end of kread */
  1232. X
  1233. X/*+-------------------------------------------------------------------------
  1234. X    kwrite(kaddr,caddr,len)
  1235. X--------------------------------------------------------------------------*/
  1236. X#ifdef KWRITE_NEEDED
  1237. Xvoid
  1238. Xkwrite(kaddr,caddr,len)
  1239. Xdaddr_t kaddr;
  1240. Xcaddr_t caddr;
  1241. Xint len;
  1242. X{
  1243. Xchar s80[80];
  1244. X
  1245. X#if defined(M_I286)
  1246. X    kaddr &= 0xFFFFL;
  1247. X#endif
  1248. X
  1249. X    if(fdkmem == -2)
  1250. X        leave_text("kinit() not called",1);
  1251. X
  1252. X    if(lseek(fdkmem,kaddr,0) == -1L)
  1253. X    {
  1254. X        (void)sprintf(s80,
  1255. X            "/dev/kmem write seek error addr %08lx",kaddr);
  1256. X        leave_text(s80,255);
  1257. X    }
  1258. X    if(write(fdkmem,caddr,len) != len)
  1259. X    {
  1260. X        (void)sprintf(s80,
  1261. X            "/dev/kmem write error addr %08lx len %08lx",kaddr,len);
  1262. X        leave_text(s80,255);
  1263. X    }
  1264. X}    /* end of kwrite */
  1265. X#endif
  1266. X
  1267. X/* vi: set tabstop=4 shiftwidth=4: */
  1268. SHAR_EOF
  1269. chmod 0644 libkmem.c ||
  1270. echo 'restore of libkmem.c failed'
  1271. Wc_c="`wc -c < 'libkmem.c'`"
  1272. test 3495 -eq "$Wc_c" ||
  1273.     echo 'libkmem.c: original size 3495, current size' "$Wc_c"
  1274. fi
  1275. # ============= libmem.c ==============
  1276. if test -f 'libmem.c' -a X"$1" != X"-c"; then
  1277.     echo 'x - skipping libmem.c (File already exists)'
  1278. else
  1279. echo 'x - extracting libmem.c (Text)'
  1280. sed 's/^X//' << 'SHAR_EOF' > 'libmem.c' &&
  1281. X/* CHK=0x271E */
  1282. X/*LINTLIBRARY*/
  1283. X/*+-------------------------------------------------------------------------
  1284. X    libmem.c -- /dev/mem routines for SCO UNIX/386 (maybe other *NIX)
  1285. X    ...!{gatech,emory}!n4hgf!wht
  1286. X
  1287. X  Defined functions:
  1288. X    minit(write_needed)
  1289. X    mread(caddr,maddr,len)
  1290. X    mwrite(maddr,caddr,len)
  1291. X
  1292. X routines were originally written by Mike "Ford" Ditto: kudos!!!
  1293. X--------------------------------------------------------------------------*/
  1294. X/*+:EDITS:*/
  1295. X/*:07-15-1992-14:31-wht@n4hgf-2.60 release - u386mon+siotools merge */
  1296. X/*:08-01-1991-23:34-wht@n4hgf-release 2.40 source control point */
  1297. X/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
  1298. X/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.dk SVR31 updates */
  1299. X/*:08-02-1990-15:36-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations */
  1300. X/*:07-28-1990-18:06-wht@n4hgf-2.10 release */
  1301. X/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
  1302. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  1303. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  1304. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  1305. X/*:12-07-1988-22:06-wht-put in test for initialized fdmem */
  1306. X/*:10-27-1988-22:44-wht-creation of file */
  1307. X
  1308. X#include <sys/types.h>
  1309. X#include <fcntl.h>
  1310. X#include "libmem.h"
  1311. X
  1312. Xvoid leave_text();
  1313. X
  1314. Xextern int errno;
  1315. X
  1316. Xstatic int fdmem = -2;
  1317. Xdaddr_t lseek();
  1318. X
  1319. X/*+-------------------------------------------------------------------------
  1320. X    minit(write_needed)
  1321. X--------------------------------------------------------------------------*/
  1322. Xvoid
  1323. Xminit(write_needed)
  1324. Xint write_needed;
  1325. X{
  1326. X    if(fdmem >= 0)
  1327. X        return;
  1328. X    if((fdmem=open("/dev/mem",(write_needed) ? O_RDWR : O_RDONLY,0)) < 0)
  1329. X        leave_text("can't open /dev/mem",255);
  1330. X
  1331. X}    /* end of minit */
  1332. X
  1333. X/*+-------------------------------------------------------------------------
  1334. X    mread(caddr,maddr,len)
  1335. X--------------------------------------------------------------------------*/
  1336. Xvoid
  1337. Xmread(caddr,maddr,len)
  1338. Xcaddr_t caddr;
  1339. Xdaddr_t maddr;
  1340. Xint len;
  1341. X{
  1342. Xchar s80[80];
  1343. Xextern daddr_t myreadlen;
  1344. Xextern int myreadcnt;
  1345. X
  1346. X#if defined(M_I286)
  1347. X    maddr &= 0xFFFFL;
  1348. X#endif
  1349. X
  1350. X    if(fdmem == -2)
  1351. X        leave_text("minit() not called",1);
  1352. X
  1353. X    if(lseek(fdmem,maddr,0) == -1L)
  1354. X    {
  1355. X        (void)sprintf(s80,"mem seek err (%08lx)",maddr);
  1356. X        leave_text(s80,1);
  1357. X    }
  1358. X
  1359. X    if(read(fdmem,caddr,len) != len)
  1360. X    {
  1361. X        (void)sprintf(s80,
  1362. X            "mem read errno %d len %d addr %08lx",errno,len,maddr);
  1363. X        leave_text(s80,1);
  1364. X    }
  1365. X    myreadlen += len;
  1366. X    myreadcnt++;
  1367. X}    /* end of mread */
  1368. X
  1369. X/*+-------------------------------------------------------------------------
  1370. X    mwrite(maddr,caddr,len)
  1371. X--------------------------------------------------------------------------*/
  1372. X#ifdef MWRITE_NEEDED
  1373. Xvoid
  1374. Xmwrite(maddr,caddr,len)
  1375. Xdaddr_t maddr;
  1376. Xcaddr_t caddr;
  1377. Xint len;
  1378. X{
  1379. Xchar s80[80];
  1380. X
  1381. X#if defined(M_I286)
  1382. X    maddr &= 0xFFFFL;
  1383. X#endif
  1384. X
  1385. X    if(fdmem == -2)
  1386. X        leave_text("minit() not called",1);
  1387. X
  1388. X    if(lseek(fdkmem,kaddr,0) == -1L)
  1389. X    {
  1390. X        (void)sprintf(s80,
  1391. X            "/dev/kmem seek error addr %08lx",kaddr);
  1392. X        leave_text(s80,255);
  1393. X    }
  1394. X    if(write(fdkmem,caddr,len) != len)
  1395. X    {
  1396. X        (void)sprintf(s80,
  1397. X            "/dev/kmem write error addr %08lx len %08lx",kaddr,len);
  1398. X        leave_text(s80,255);
  1399. X    }
  1400. X}    /* end of mwrite */
  1401. X#endif /* MWRITE_NEEDED */
  1402. X
  1403. X/* vi: set tabstop=4 shiftwidth=4: */
  1404. SHAR_EOF
  1405. chmod 0644 libmem.c ||
  1406. echo 'restore of libmem.c failed'
  1407. Wc_c="`wc -c < 'libmem.c'`"
  1408. test 3235 -eq "$Wc_c" ||
  1409.     echo 'libmem.c: original size 3235, current size' "$Wc_c"
  1410. fi
  1411. true || echo 'restore of libpanel.c failed'
  1412. echo End of part 5, continue with part 6
  1413. exit 0
  1414.  
  1415. exit 0 # Just in case...
  1416.