home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / comp / sources / misc / 4119 < prev    next >
Encoding:
Text File  |  1992-11-21  |  40.1 KB  |  1,422 lines

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