home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2772 < prev    next >
Encoding:
Internet Message Format  |  1991-02-17  |  37.5 KB

  1. From: wht@n4hgf.Mt-Park.GA.US (Warren Tucker)
  2. Newsgroups: alt.sources
  3. Subject: X386MON part 03/06
  4. Message-ID: <323@n4hgf.Mt-Park.GA.US>
  5. Date: 16 Feb 91 19:34:31 GMT
  6.  
  7. Submitted-by: wht@n4hgf
  8. Archive-name: x386monx100/part03
  9.  
  10. #!/bin/sh
  11. # This is part 03 of x386monx100
  12. # ============= x386mon/disp_info.h ==============
  13. if test ! -d 'x386mon'; then
  14.     echo 'x - creating directory x386mon'
  15.     mkdir 'x386mon'
  16. fi
  17. if test -f 'x386mon/disp_info.h' -a X"$1" != X"-c"; then
  18.     echo 'x - skipping x386mon/disp_info.h (File already exists)'
  19. else
  20. echo 'x - extracting x386mon/disp_info.h (Text)'
  21. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/disp_info.h' &&
  22. X/*+-------------------------------------------------------------------------
  23. X    disp_info.h - function and macro declarations for disp_info.c users
  24. X    wht@n4hgf.Mt-Park.GA.US
  25. X--------------------------------------------------------------------------*/
  26. X/*+:EDITS:*/
  27. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  28. X
  29. X#ifdef __STDC__
  30. Xvoid disp_info(int,int,char *,int,long);
  31. Xvoid disp_static(int,int,char *,int,long);
  32. Xvoid disp_info_units(int,int,char *,int,char *,long);
  33. Xvoid disp_info_units_color(int,int,char *,int,char *,long,unsigned long);
  34. Xvoid disp_static_units(int,int,char *,int,char *,long);
  35. Xint disp_info_text(int,int,unsigned long,char *);
  36. Xvoid disp_static_text(int,int,char *);
  37. X#else
  38. Xvoid disp_info();
  39. Xvoid disp_static();
  40. Xvoid disp_info_units();
  41. Xvoid disp_info_units_color();
  42. Xvoid disp_static_units();
  43. Xint disp_info_text();
  44. Xvoid disp_static_text();
  45. X#endif
  46. X
  47. X#define disp_info_long(x,y,label,flen,value)\
  48. X        disp_info(x,y,label,flen,value)
  49. X#define disp_info_int(x,y,label,flen,value)\
  50. X        disp_info(x,y,label,flen,(unsigned long)(value))
  51. X#define disp_info_long_units(x,y,label,flen,units,value)\
  52. X        disp_info_units(x,y,label,flen,units,value)
  53. X#define disp_info_int_units(x,y,label,flen,units,value)\
  54. X        disp_info_units(x,y,label,flen,units,(unsigned long)(value))
  55. X#define disp_static_long(x,y,label,flen,value)\
  56. X        disp_static(x,y,label,flen,value)
  57. X#define disp_static_int(x,y,label,flen,value)\
  58. X        disp_static(x,y,label,flen,(unsigned long)(value))
  59. X#define disp_static_long_units(x,y,label,flen,units,value)\
  60. X        disp_static_units(x,y,label,flen,units,value)
  61. X#define disp_static_int_units(x,y,label,flen,units,value)\
  62. X        disp_static_units(x,y,label,flen,units,(unsigned long)(value))
  63. X
  64. X/* vi: set tabstop=4 shiftwidth=4: */
  65. X/* end of disp_info.h */
  66. SHAR_EOF
  67. chmod 0644 x386mon/disp_info.h ||
  68. echo 'restore of x386mon/disp_info.h failed'
  69. Wc_c="`wc -c < 'x386mon/disp_info.h'`"
  70. test 1804 -eq "$Wc_c" ||
  71.     echo 'x386mon/disp_info.h: original size 1804, current size' "$Wc_c"
  72. fi
  73. # ============= x386mon/exits.c ==============
  74. if test -f 'x386mon/exits.c' -a X"$1" != X"-c"; then
  75.     echo 'x - skipping x386mon/exits.c (File already exists)'
  76. else
  77. echo 'x - extracting x386mon/exits.c (Text)'
  78. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/exits.c' &&
  79. X/*+-------------------------------------------------------------------------
  80. X    exits.c - X386MON exit processor
  81. X    wht@n4hgf.Mt-Park.GA.US
  82. X
  83. X  Defined functions:
  84. X    adb_trap()
  85. X    caught_signal(sig)
  86. X    leave(exit_code)
  87. X    leave_text(text,exit_code)
  88. X    leaving()
  89. X
  90. X--------------------------------------------------------------------------*/
  91. X/*+:EDITS:*/
  92. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  93. X
  94. X#include "x386mon.h"
  95. X#include <stdio.h>
  96. X#include <signal.h>
  97. X
  98. X/*+-------------------------------------------------------------------------
  99. X    leaving() - perform leave() basic processing and return
  100. X--------------------------------------------------------------------------*/
  101. Xvoid
  102. Xleaving()
  103. X{
  104. X    if(window)
  105. X    {
  106. X        XDestroyWindow(display,window);    
  107. X        XCloseDisplay(display);
  108. X    }
  109. X}    /* end of leaving */
  110. X
  111. X/*+-------------------------------------------------------------------------
  112. X    leave(exit_code) - leave program with exit code
  113. X--------------------------------------------------------------------------*/
  114. Xvoid
  115. Xleave(exit_code)
  116. Xint exit_code;
  117. X{
  118. X    leaving();
  119. X    exit(exit_code);
  120. X}    /* end of leave */
  121. X
  122. X/*+-------------------------------------------------------------------------
  123. X    leave_text(text,exit_code) - leave program with message and exit code
  124. XIf exit_code == 255, do wperror
  125. X--------------------------------------------------------------------------*/
  126. Xvoid
  127. Xleave_text(text,exit_code)
  128. Xchar *text;
  129. Xint exit_code;
  130. X{
  131. X    fputs("\nx386mon: ",stdout);
  132. X
  133. X    if (text && *text)
  134. X    {
  135. X        if(window)
  136. X            disp_msg(colorRed.pixel,text);
  137. X        fputs(text,stdout);
  138. X        fputs("\n",stdout);
  139. X    }
  140. X
  141. X    if(exit_code == 255)
  142. X    {
  143. X    extern int errno;
  144. X    extern int sys_nerr;
  145. X    extern char *sys_errlist[];
  146. X
  147. X        if(errno < sys_nerr)
  148. X            printf("system-provided error status: %s\n",sys_errlist[errno]);
  149. X    }
  150. X
  151. X    fflush(stdout);
  152. X    leave(exit_code);
  153. X
  154. X}    /* end of leave_text */
  155. X
  156. X/*+-------------------------------------------------------------------------
  157. X    adb_trap() - convenient trap for catching abort
  158. X
  159. X  Get a look at stack before abort() botches it
  160. X--------------------------------------------------------------------------*/
  161. X#if defined(ADB_DEBUG)
  162. Xvoid
  163. Xadb_trap()
  164. X{
  165. X    printf("too bad .... goodbye\n");
  166. X}    /* end of adb_trap */
  167. X#endif
  168. X
  169. X/*+-------------------------------------------------------------------------
  170. X    caught_signal(sig) - SIGHUP thru SIGSYS: leave with possible abort
  171. X--------------------------------------------------------------------------*/
  172. Xvoid
  173. Xcaught_signal(sig)
  174. Xint sig;
  175. X{
  176. X    leaving();
  177. X    switch(sig)
  178. X    {
  179. X        case SIGQUIT:
  180. X        case SIGILL:
  181. X        case SIGTRAP:
  182. X        case SIGIOT:
  183. X        case SIGEMT:
  184. X        case SIGFPE:
  185. X        case SIGBUS:
  186. X        case SIGSEGV:
  187. X        case SIGSYS:
  188. X#if defined(ADB_DEBUG)
  189. X            adb_trap();    /* if debugging, stop at convenient breakpoint */
  190. X#endif
  191. X            abort();
  192. X    }
  193. X    exit(128 + sig);
  194. X}    /* end of caught_signal */
  195. X
  196. X/* vi: set tabstop=4 shiftwidth=4: */
  197. X/* end of exits.c */
  198. SHAR_EOF
  199. chmod 0644 x386mon/exits.c ||
  200. echo 'restore of x386mon/exits.c failed'
  201. Wc_c="`wc -c < 'x386mon/exits.c'`"
  202. test 2809 -eq "$Wc_c" ||
  203.     echo 'x386mon/exits.c: original size 2809, current size' "$Wc_c"
  204. fi
  205. # ============= x386mon/libkmem.c ==============
  206. if test -f 'x386mon/libkmem.c' -a X"$1" != X"-c"; then
  207.     echo 'x - skipping x386mon/libkmem.c (File already exists)'
  208. else
  209. echo 'x - extracting x386mon/libkmem.c (Text)'
  210. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/libkmem.c' &&
  211. X/*LINTLIBRARY*/
  212. X/*+-------------------------------------------------------------------------
  213. X    libkmem.c -- /dev/kmem routines for SCO UNIX/386 (maybe other *NIX)
  214. X    ...!{gatech,emory}!n4hgf!wht
  215. X
  216. X  Defined functions:
  217. X    kinit(write_needed)
  218. X    kread(caddr,kaddr,len)
  219. X    kwrite(kaddr,caddr,len)
  220. X
  221. X routines were originally written by Mike "Ford" Ditto: kudos!!!
  222. X--------------------------------------------------------------------------*/
  223. X/*+:EDITS:*/
  224. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  225. X
  226. X#include <sys/types.h>
  227. X#include <sys/errno.h>
  228. X#include <fcntl.h>
  229. X#include "libkmem.h"
  230. X
  231. Xvoid leave_text();
  232. X
  233. Xextern int errno;
  234. X
  235. Xstatic int fdkmem = -2;
  236. Xdaddr_t lseek();
  237. X
  238. X/*+-------------------------------------------------------------------------
  239. X    kinit(write_needed)
  240. X--------------------------------------------------------------------------*/
  241. Xvoid
  242. Xkinit(write_needed)
  243. Xint write_needed;
  244. X{
  245. X    if(fdkmem >= 0)
  246. X        return;
  247. X    if((fdkmem=open("/dev/kmem",(write_needed) ? O_RDWR : O_RDONLY,0)) < 0)
  248. X    {
  249. X        if (write_needed)
  250. X        {
  251. X            leave_text("can't open /dev/kmem for read/write access",255);
  252. X        }
  253. X        else
  254. X        {
  255. X            leave_text("can't open /dev/kmem for read access",255);
  256. X        }
  257. X    }
  258. X
  259. X}    /* end of kinit */
  260. X
  261. X/*+-------------------------------------------------------------------------
  262. X    kread(caddr,kaddr,len)
  263. X--------------------------------------------------------------------------*/
  264. Xvoid
  265. Xkread(caddr,kaddr,len)
  266. Xcaddr_t caddr;
  267. Xdaddr_t kaddr;
  268. Xint len;
  269. X{
  270. Xchar s80[80];
  271. Xextern daddr_t myreadlen;
  272. Xextern int myreadcnt;
  273. X
  274. X#if defined(M_I286)
  275. X    kaddr &= 0xFFFFL;
  276. X#endif
  277. X#if defined(mips)
  278. X    kaddr &= 0x7FFFFFFFL;
  279. X#endif
  280. X
  281. X    if(fdkmem == -2)
  282. X        leave_text("kinit() not called",1);
  283. X
  284. X    if(lseek(fdkmem,kaddr,0) == -1L)
  285. X    {
  286. X        (void)sprintf(s80,"kmem read seek error addr %08lx",kaddr);
  287. X        leave_text(s80,255);
  288. X    }
  289. X
  290. X    if(read(fdkmem,caddr,len) != len)
  291. X    {
  292. X        (void)sprintf(s80,"kmem read error len %d addr %08lx",len,kaddr);
  293. X        leave_text(s80,255);
  294. X    }
  295. X    myreadlen += len;
  296. X    myreadcnt++;
  297. X}    /* end of kread */
  298. X
  299. X/*+-------------------------------------------------------------------------
  300. X    kwrite(kaddr,caddr,len)
  301. X--------------------------------------------------------------------------*/
  302. X#ifdef KWRITE_NEEDED
  303. Xvoid
  304. Xkwrite(kaddr,caddr,len)
  305. Xdaddr_t kaddr;
  306. Xcaddr_t caddr;
  307. Xint len;
  308. X{
  309. Xchar s80[80];
  310. X
  311. X#if defined(M_I286)
  312. X    kaddr &= 0xFFFFL;
  313. X#endif
  314. X#if defined(mips)
  315. X    kaddr &= 0x7FFFFFFFL;
  316. X#endif
  317. X
  318. X    if(fdkmem == -2)
  319. X        leave_text("kinit() not called",1);
  320. X
  321. X    if(lseek(fdkmem,kaddr,0) == -1L)
  322. X    {
  323. X        (void)sprintf(s80,
  324. X            "/dev/kmem write seek error addr %08lx",kaddr);
  325. X        leave_text(s80,255);
  326. X    }
  327. X    if(write(fdkmem,caddr,len) != len)
  328. X    {
  329. X        (void)sprintf(s80,
  330. X            "/dev/kmem write error addr %08lx len %08lx",kaddr,len);
  331. X        leave_text(s80,255);
  332. X    }
  333. X}    /* end of kwrite */
  334. X#endif
  335. X
  336. X/* vi: set tabstop=4 shiftwidth=4: */
  337. SHAR_EOF
  338. chmod 0644 x386mon/libkmem.c ||
  339. echo 'restore of x386mon/libkmem.c failed'
  340. Wc_c="`wc -c < 'x386mon/libkmem.c'`"
  341. test 2748 -eq "$Wc_c" ||
  342.     echo 'x386mon/libkmem.c: original size 2748, current size' "$Wc_c"
  343. fi
  344. # ============= x386mon/libkmem.h ==============
  345. if test -f 'x386mon/libkmem.h' -a X"$1" != X"-c"; then
  346.     echo 'x - skipping x386mon/libkmem.h (File already exists)'
  347. else
  348. echo 'x - extracting x386mon/libkmem.h (Text)'
  349. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/libkmem.h' &&
  350. X/*+-----------------------------------------------------------------------
  351. X    libkmem.h
  352. X    ...!{gatech,emory}!n4hgf!wht
  353. X------------------------------------------------------------------------*/
  354. X/*+:EDITS:*/
  355. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  356. X
  357. X#ifndef BUILDING_PROTOTYPES
  358. X#ifdef __STDC__
  359. X
  360. X/* libkmem.c */
  361. Xvoid kinit(int );
  362. Xvoid kread(char  *,long ,int );
  363. Xvoid kwrite(long ,char  *,int );
  364. X
  365. X#else        /* compiler doesn't know about prototyping */
  366. X
  367. X/* libkmem.c */
  368. Xvoid kinit();
  369. Xvoid kread();
  370. Xvoid kwrite();
  371. X
  372. X#endif /* __STDC__ */
  373. X#endif /* BUILDING_PROTOTYPES */
  374. X
  375. X/* end of libkmem.h */
  376. SHAR_EOF
  377. chmod 0644 x386mon/libkmem.h ||
  378. echo 'restore of x386mon/libkmem.h failed'
  379. Wc_c="`wc -c < 'x386mon/libkmem.h'`"
  380. test 605 -eq "$Wc_c" ||
  381.     echo 'x386mon/libkmem.h: original size 605, current size' "$Wc_c"
  382. fi
  383. # ============= x386mon/libmem.c ==============
  384. if test -f 'x386mon/libmem.c' -a X"$1" != X"-c"; then
  385.     echo 'x - skipping x386mon/libmem.c (File already exists)'
  386. else
  387. echo 'x - extracting x386mon/libmem.c (Text)'
  388. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/libmem.c' &&
  389. X/*LINTLIBRARY*/
  390. X/*+-------------------------------------------------------------------------
  391. X    libmem.c -- /dev/mem routines for SCO UNIX/386 (maybe other *NIX)
  392. X    ...!{gatech,emory}!n4hgf!wht
  393. X
  394. X  Defined functions:
  395. X    minit(write_needed)
  396. X    mread(caddr,maddr,len)
  397. X    mwrite(maddr,caddr,len)
  398. X
  399. X routines were originally written by Mike "Ford" Ditto: kudos!!!
  400. X--------------------------------------------------------------------------*/
  401. X/*+:EDITS:*/
  402. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  403. X
  404. X#include <sys/types.h>
  405. X#include <fcntl.h>
  406. X#include "libmem.h"
  407. X
  408. Xvoid leave_text();
  409. X
  410. Xextern int errno;
  411. X
  412. Xstatic int fdmem = -2;
  413. Xdaddr_t lseek();
  414. X
  415. X/*+-------------------------------------------------------------------------
  416. X    minit(write_needed)
  417. X--------------------------------------------------------------------------*/
  418. Xvoid
  419. Xminit(write_needed)
  420. Xint write_needed;
  421. X{
  422. X    if(fdmem >= 0)
  423. X        return;
  424. X    if((fdmem=open("/dev/mem",(write_needed) ? O_RDWR : O_RDONLY,0)) < 0)
  425. X        leave_text("can't open /dev/mem",255);
  426. X
  427. X}    /* end of minit */
  428. X
  429. X/*+-------------------------------------------------------------------------
  430. X    mread(caddr,maddr,len)
  431. X--------------------------------------------------------------------------*/
  432. Xvoid
  433. Xmread(caddr,maddr,len)
  434. Xcaddr_t caddr;
  435. Xdaddr_t maddr;
  436. Xint len;
  437. X{
  438. Xchar s80[80];
  439. Xextern daddr_t myreadlen;
  440. Xextern int myreadcnt;
  441. X
  442. X#if defined(M_I286)
  443. X    maddr &= 0xFFFFL;
  444. X#endif
  445. X
  446. X    if(fdmem == -2)
  447. X        leave_text("minit() not called",1);
  448. X
  449. X    if(lseek(fdmem,maddr,0) == -1L)
  450. X    {
  451. X        (void)sprintf(s80,"mem seek err (%08lx)",maddr);
  452. X        leave_text(s80,1);
  453. X    }
  454. X
  455. X    if(read(fdmem,caddr,len) != len)
  456. X    {
  457. X        (void)sprintf(s80,
  458. X            "mem read errno %d len %d addr %08lx",errno,len,maddr);
  459. X        leave_text(s80,1);
  460. X    }
  461. X    myreadlen += len;
  462. X    myreadcnt++;
  463. X}    /* end of mread */
  464. X
  465. X/*+-------------------------------------------------------------------------
  466. X    mwrite(maddr,caddr,len)
  467. X--------------------------------------------------------------------------*/
  468. X#ifdef MWRITE_NEEDED
  469. Xvoid
  470. Xmwrite(maddr,caddr,len)
  471. Xdaddr_t maddr;
  472. Xcaddr_t caddr;
  473. Xint len;
  474. X{
  475. Xchar s80[80];
  476. X
  477. X#if defined(M_I286)
  478. X    maddr &= 0xFFFFL;
  479. X#endif
  480. X
  481. X    if(fdmem == -2)
  482. X        leave_text("minit() not called",1);
  483. X
  484. X    if(lseek(fdkmem,kaddr,0) == -1L)
  485. X    {
  486. X        (void)sprintf(s80,
  487. X            "/dev/kmem seek error addr %08lx",kaddr);
  488. X        leave_text(s80,255);
  489. X    }
  490. X    if(write(fdkmem,caddr,len) != len)
  491. X    {
  492. X        (void)sprintf(s80,
  493. X            "/dev/kmem write error addr %08lx len %08lx",kaddr,len);
  494. X        leave_text(s80,255);
  495. X    }
  496. X}    /* end of mwrite */
  497. X#endif /* MWRITE_NEEDED */
  498. X
  499. X/* vi: set tabstop=4 shiftwidth=4: */
  500. SHAR_EOF
  501. chmod 0644 x386mon/libmem.c ||
  502. echo 'restore of x386mon/libmem.c failed'
  503. Wc_c="`wc -c < 'x386mon/libmem.c'`"
  504. test 2497 -eq "$Wc_c" ||
  505.     echo 'x386mon/libmem.c: original size 2497, current size' "$Wc_c"
  506. fi
  507. # ============= x386mon/libmem.h ==============
  508. if test -f 'x386mon/libmem.h' -a X"$1" != X"-c"; then
  509.     echo 'x - skipping x386mon/libmem.h (File already exists)'
  510. else
  511. echo 'x - extracting x386mon/libmem.h (Text)'
  512. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/libmem.h' &&
  513. X/*+-----------------------------------------------------------------------
  514. X    libmem.h
  515. X    ...!{gatech,emory}!n4hgf!wht
  516. X------------------------------------------------------------------------*/
  517. X/*+:EDITS:*/
  518. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  519. X
  520. X#ifndef BUILDING_PROTOTYPES
  521. X#ifdef __STDC__
  522. X
  523. X/* libmem.c */
  524. Xvoid minit(int );
  525. Xvoid mread(char  *,long ,int );
  526. Xvoid mwrite(long ,char  *,int );
  527. X
  528. X#else        /* compiler doesn't mnow about prototyping */
  529. X
  530. X/* libmem.c */
  531. Xvoid minit();
  532. Xvoid mread();
  533. Xvoid mwrite();
  534. X
  535. X#endif /* __STDC__ */
  536. X#endif /* BUILDING_PROTOTYPES */
  537. X
  538. X/* end of libmem.h */
  539. SHAR_EOF
  540. chmod 0644 x386mon/libmem.h ||
  541. echo 'restore of x386mon/libmem.h failed'
  542. Wc_c="`wc -c < 'x386mon/libmem.h'`"
  543. test 601 -eq "$Wc_c" ||
  544.     echo 'x386mon/libmem.h: original size 601, current size' "$Wc_c"
  545. fi
  546. # ============= x386mon/libnlsym.c ==============
  547. if test -f 'x386mon/libnlsym.c' -a X"$1" != X"-c"; then
  548.     echo 'x - skipping x386mon/libnlsym.c (File already exists)'
  549. else
  550. echo 'x - extracting x386mon/libnlsym.c (Text)'
  551. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/libnlsym.c' &&
  552. X/*LINTLIBRARY*/
  553. X/*+-------------------------------------------------------------------------
  554. X    libnlsym.c -- common runtime for nlsym users
  555. X    ...!{gatech,emory}!n4hgf!wht
  556. X
  557. X  Defined functions:
  558. X    nlsym_error(text)
  559. X    nlsym_read()
  560. X
  561. X--------------------------------------------------------------------------*/
  562. X/*+:EDITS:*/
  563. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  564. X
  565. X#include "config.h"
  566. X#include <stdio.h>
  567. X#include <sys/types.h>
  568. X#include <sys/stat.h>
  569. X#include <fcntl.h>
  570. X#include <nlist.h>
  571. X#if defined(mips)
  572. X#define n_sclass n_type
  573. X#endif
  574. X
  575. Xvoid leave_text();
  576. X
  577. X#define DEFINE_NLSYM
  578. X#include "nlsym.h"
  579. X#include "libnlsym.h"
  580. X
  581. Xextern int errno;
  582. Xextern char *sys_errlist[];
  583. X
  584. Xint nlsym_has_been_read = 0;
  585. X
  586. X/*+-------------------------------------------------------------------------
  587. X    nlsym_error(text)
  588. X--------------------------------------------------------------------------*/
  589. Xvoid
  590. Xnlsym_error(text)
  591. Xchar *text;
  592. X{
  593. Xchar s128[128];
  594. X
  595. X    (void)strcpy(s128,text);
  596. X    (void)strcat(s128,": run nlsym");
  597. X    leave_text(s128,(errno) ? 255 : 1);
  598. X}    /* end of nlsym_error */
  599. X
  600. X/*+-------------------------------------------------------------------------
  601. X    nlsym_read()
  602. X--------------------------------------------------------------------------*/
  603. Xvoid
  604. Xnlsym_read()
  605. X{
  606. Xchar s80[80];
  607. Xint fdnlsym;
  608. Xstruct stat curstat;    /* current /unix status */
  609. Xstruct stat unixstat;        /* /unix status at nlsym run (void)time */
  610. Xlong unique1 = 0;
  611. Xlong unique2 = 0;
  612. X
  613. X    if(nlsym_has_been_read)
  614. X        return;
  615. X
  616. X    if(stat(UNIX_KERNEL,&curstat) < 0)
  617. X    {
  618. X        (void)sprintf(s80,"cannot stat %s",UNIX_KERNEL);
  619. X        nlsym_error(s80);
  620. X    }
  621. X
  622. X    errno = 0;
  623. X    if((fdnlsym = open(UNIX_NLSYM,O_RDONLY,0)) < 0)
  624. X    {
  625. X        (void)sprintf(s80,"%s open error",UNIX_NLSYM);
  626. X        nlsym_error(s80);
  627. X    }
  628. X
  629. X    if(read(fdnlsym,(char *)&unixstat,sizeof(unixstat)) != sizeof(unixstat))
  630. X        nlsym_error("nlsym_read: /unix stat read error");
  631. X
  632. X    if(read(fdnlsym,(char *)nlsym,sizeof(nlsym)) != sizeof(nlsym))
  633. X        nlsym_error("nlsym_read: nlsym read error");
  634. X
  635. X    if(read(fdnlsym,(char *)&unique1,sizeof(unique1)) != sizeof(unique1))
  636. X        nlsym_error("nlsym_read: `unique' read error");
  637. X
  638. X    if(read(fdnlsym,(char *)&unique2,sizeof(unique2)) != sizeof(unique2))
  639. X        nlsym_error("nlsym_read: `unique' read error");
  640. X
  641. X    (void)close(fdnlsym);
  642. X
  643. X    if( (unique1 != NLSYM_UNIQUE1) ||
  644. X        (unique2 != NLSYM_UNIQUE2) ||
  645. X        (unixstat.st_ino != curstat.st_ino) ||
  646. X        (unixstat.st_mtime != curstat.st_mtime) ||
  647. X        (unixstat.st_size != curstat.st_size))
  648. X    {
  649. X        (void)sprintf(s80,"%s out of date",UNIX_NLSYM);
  650. X        nlsym_error(s80);
  651. X    }
  652. X    nlsym_has_been_read = 1;
  653. X
  654. X}    /* end of nlsym_read */
  655. SHAR_EOF
  656. chmod 0644 x386mon/libnlsym.c ||
  657. echo 'restore of x386mon/libnlsym.c failed'
  658. Wc_c="`wc -c < 'x386mon/libnlsym.c'`"
  659. test 2546 -eq "$Wc_c" ||
  660.     echo 'x386mon/libnlsym.c: original size 2546, current size' "$Wc_c"
  661. fi
  662. # ============= x386mon/libnlsym.h ==============
  663. if test -f 'x386mon/libnlsym.h' -a X"$1" != X"-c"; then
  664.     echo 'x - skipping x386mon/libnlsym.h (File already exists)'
  665. else
  666. echo 'x - extracting x386mon/libnlsym.h (Text)'
  667. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/libnlsym.h' &&
  668. X/*+-----------------------------------------------------------------------
  669. X    libnlsym.h
  670. X    ...!{gatech,emory}!n4hgf!wht
  671. X------------------------------------------------------------------------*/
  672. X/*+:EDITS:*/
  673. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  674. X
  675. X#ifndef BUILDING_PROTOTYPES
  676. X#ifdef __STDC__
  677. X
  678. X/* libnlsym.c */
  679. Xvoid nlsym_error(char * );
  680. Xvoid nlsym_read(void);
  681. X
  682. X#else        /* compiler doesn't know about prototyping */
  683. X
  684. X/* libnlsym.c */
  685. Xvoid nlsym_error();
  686. Xvoid nlsym_read();
  687. X
  688. X#endif /* __STDC__ */
  689. X#endif /* BUILDING_PROTOTYPES */
  690. X
  691. X/* end of libnlsym.h */
  692. SHAR_EOF
  693. chmod 0644 x386mon/libnlsym.h ||
  694. echo 'restore of x386mon/libnlsym.h failed'
  695. Wc_c="`wc -c < 'x386mon/libnlsym.h'`"
  696. test 572 -eq "$Wc_c" ||
  697.     echo 'x386mon/libnlsym.h: original size 572, current size' "$Wc_c"
  698. fi
  699. # ============= x386mon/libswap.c ==============
  700. if test -f 'x386mon/libswap.c' -a X"$1" != X"-c"; then
  701.     echo 'x - skipping x386mon/libswap.c (File already exists)'
  702. else
  703. echo 'x - extracting x386mon/libswap.c (Text)'
  704. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/libswap.c' &&
  705. X/*LINTLIBRARY*/
  706. X/*+-------------------------------------------------------------------------
  707. X    libswap.c -- /dev/swap routines for SCO UNIX/386 (maybe other *NIX)
  708. X    ...!{gatech,emory}!n4hgf!wht
  709. X
  710. X  Defined functions:
  711. X    sinit()
  712. X    sread(caddr,maddr,len)
  713. X
  714. X routines were originally written by Mike "Ford" Ditto: kudos!!!
  715. X--------------------------------------------------------------------------*/
  716. X/*+:EDITS:*/
  717. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  718. X
  719. X#include <sys/types.h>
  720. X#include <fcntl.h>
  721. X#include "libswap.h"
  722. X
  723. Xvoid leave_text();
  724. X
  725. Xextern int errno;
  726. X
  727. Xstatic int fdswap = -2;
  728. Xdaddr_t lseek();
  729. X
  730. X/*+-------------------------------------------------------------------------
  731. X    sinit()
  732. X--------------------------------------------------------------------------*/
  733. Xvoid
  734. Xsinit()
  735. X{
  736. X    if(fdswap >= 0)
  737. X        return;
  738. X    if((fdswap=open("/dev/swap",O_RDONLY)) < 0)
  739. X#ifdef M_SYS5
  740. X        leave_text("can't open /dev/swap (chgrp mem /dev/swap)",1);
  741. X#else
  742. X        leave_text("can't open /dev/swap (chgrp sys /dev/swap)",1);
  743. X#endif
  744. X
  745. X}    /* end of sinit */
  746. X
  747. X/*+-------------------------------------------------------------------------
  748. X    sread(caddr,maddr,len)
  749. X--------------------------------------------------------------------------*/
  750. Xvoid
  751. Xsread(caddr,maddr,len)
  752. Xcaddr_t caddr;
  753. Xdaddr_t maddr;
  754. Xint len;
  755. X{
  756. Xchar s80[80];
  757. Xextern daddr_t myreadlen;
  758. Xextern int myreadcnt;
  759. X
  760. X#if defined(M_I286)
  761. X    maddr &= 0xFFFFL;
  762. X#endif
  763. X
  764. X    if(fdswap == -2)
  765. X        leave_text("sinit() not called",1);
  766. X
  767. X    if(lseek(fdswap,maddr,0) == -1L)
  768. X    {
  769. X        (void)sprintf(s80,"swap seek error addr %08lx",maddr);
  770. X        leave_text(s80,1);
  771. X    }
  772. X
  773. X    if(read(fdswap,caddr,len) != len)
  774. X    {
  775. X        (void)sprintf(s80,"swap read error len %d addr %08lx",len,maddr);
  776. X        leave_text(s80,255);
  777. X    }
  778. X    myreadlen += len;
  779. X    myreadcnt++;
  780. X}    /* end of sread */
  781. X
  782. X/* vi: set tabstop=4 shiftwidth=4: */
  783. SHAR_EOF
  784. chmod 0644 x386mon/libswap.c ||
  785. echo 'restore of x386mon/libswap.c failed'
  786. Wc_c="`wc -c < 'x386mon/libswap.c'`"
  787. test 1793 -eq "$Wc_c" ||
  788.     echo 'x386mon/libswap.c: original size 1793, current size' "$Wc_c"
  789. fi
  790. # ============= x386mon/libswap.h ==============
  791. if test -f 'x386mon/libswap.h' -a X"$1" != X"-c"; then
  792.     echo 'x - skipping x386mon/libswap.h (File already exists)'
  793. else
  794. echo 'x - extracting x386mon/libswap.h (Text)'
  795. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/libswap.h' &&
  796. X/*+-----------------------------------------------------------------------
  797. X    libswap.h
  798. X    ...!{gatech,emory}!n4hgf!wht
  799. X------------------------------------------------------------------------*/
  800. X/*+:EDITS:*/
  801. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  802. X
  803. X#ifndef BUILDING_PROTOTYPES
  804. X#ifdef __STDC__
  805. X
  806. X/* libswap.c */
  807. Xvoid sinit(void );
  808. Xvoid sread(char  *,long ,int );
  809. X
  810. X#else        /* compiler doesn't mnow about prototyping */
  811. X
  812. X/* libswap.c */
  813. Xvoid sinit();
  814. Xvoid sread();
  815. Xvoid swrite();
  816. X
  817. X#endif /* __STDC__ */
  818. X#endif /* BUILDING_PROTOTYPES */
  819. X
  820. X/* end of libswap.h */
  821. SHAR_EOF
  822. chmod 0644 x386mon/libswap.h ||
  823. echo 'restore of x386mon/libswap.h failed'
  824. Wc_c="`wc -c < 'x386mon/libswap.h'`"
  825. test 573 -eq "$Wc_c" ||
  826.     echo 'x386mon/libswap.h: original size 573, current size' "$Wc_c"
  827. fi
  828. # ============= x386mon/nlsym.c ==============
  829. if test -f 'x386mon/nlsym.c' -a X"$1" != X"-c"; then
  830.     echo 'x - skipping x386mon/nlsym.c (File already exists)'
  831. else
  832. echo 'x - extracting x386mon/nlsym.c (Text)'
  833. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/nlsym.c' &&
  834. X/*+-------------------------------------------------------------------------
  835. X    nlsym.c -- utility nlist - fast access to kernel /dev/kmem offsets
  836. X    ...!{gatech,emory}!n4hgf!wht
  837. X
  838. X  Defined functions:
  839. X    main(argc,argv,envp)
  840. X    nlsym_write_error(code)
  841. X
  842. X--------------------------------------------------------------------------*/
  843. X/*+:EDITS:*/
  844. X/*:08-10-1990-14:12-jmd@p1so/wht@n4hgf-2.20-add Tandem Integrity S2 */
  845. X/*:08-07-1990-14:24-wht@n4hgf-nba@sysware.sysware.dk S5R31 updates */
  846. X/*:08-02-1990-15:36-wht@n4hgf-2.12-old curses hacks+minor 3.2 formalizations */
  847. X/*:07-28-1990-18:06-wht@n4hgf-2.10 release */
  848. X/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
  849. X/*:06-27-1990-01:55-wht@n4hgf-use 64 bits of unique check */
  850. X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
  851. X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
  852. X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
  853. X/*:05-12-1989-18:27-wht-fix endless loop error on cannot nlist */
  854. X/*:10-27-1988-10:58-wht-creation */
  855. X
  856. X#include "config.h"
  857. X#include <stdio.h>
  858. X#include <sys/types.h>
  859. X#include <sys/stat.h>
  860. X#include <fcntl.h>
  861. X#include <nlist.h>
  862. X#if defined(mips)
  863. X#define n_sclass n_type
  864. X#endif
  865. X
  866. X#define DEFINE_NLSYM
  867. X#include "nlsym.h"
  868. X
  869. X/*+-------------------------------------------------------------------------
  870. X    nlsym_write_error(code)
  871. X--------------------------------------------------------------------------*/
  872. Xvoid
  873. Xnlsym_write_error(code)
  874. Xint code;
  875. X{
  876. X    (void)fprintf(stderr,"code %d: ",code);
  877. X    perror(UNIX_NLSYM);
  878. X    exit(1);
  879. X}    /* end of nlsym_write_error */
  880. X
  881. X/*+-------------------------------------------------------------------------
  882. X    main(argc,argv,envp)
  883. X--------------------------------------------------------------------------*/
  884. X/*ARGSUSED*/
  885. Xmain(argc,argv,envp)
  886. Xint argc;
  887. Xchar **argv;
  888. Xchar **envp;
  889. X{
  890. Xregister int itmp;
  891. Xregister struct nlist *nn;
  892. Xstruct stat unixstat;        /* /unix status at nlsym run (void)time */
  893. Xint fdnlsym;
  894. Xint nlist_error = 0;
  895. Xlong unique;
  896. XFILE *kludge;
  897. X
  898. X    (void)nlist(UNIX_KERNEL,nlsym);
  899. X
  900. X    nn = nlsym;
  901. X    while(nn->n_name)
  902. X    {
  903. X        if(!nn->n_sclass)
  904. X        {
  905. X#if !defined(mips)
  906. X            (void)printf("%s: can't nlist\n", nn->n_name);
  907. X            nlist_error = 1;
  908. X#endif
  909. X            nn++;
  910. X            continue;
  911. X        }
  912. X        (void)printf("%-12.12s  storage class: %04x value: %08lx\n",
  913. X            nn->n_name,
  914. X            nn->n_sclass,
  915. X            nn->n_value);
  916. X        nn++;
  917. X    }
  918. X
  919. X    if(nlist_error > 1)
  920. X    {
  921. X        (void)fprintf(stderr,"%s NOT produced\n",UNIX_NLSYM);
  922. X        exit(1);
  923. X    }
  924. X
  925. X    if((kludge = fopen(UNIX_NLSYM,"w")) == NULL)    /* scratch/create */
  926. X        nlsym_write_error(-1);
  927. X    (void)fclose(kludge);
  928. X
  929. X    if((fdnlsym = open(UNIX_NLSYM,O_WRONLY,0)) < 0)
  930. X        nlsym_write_error(fdnlsym);
  931. X
  932. X    if(stat(UNIX_KERNEL,&unixstat) < 0)
  933. X    {
  934. X        (void)fputs("cannot stat ",stderr);
  935. X        perror(UNIX_KERNEL);
  936. X        exit(1);
  937. X    }
  938. X
  939. X    if((itmp = write(fdnlsym,&unixstat,sizeof(unixstat))) != sizeof(unixstat))
  940. X        nlsym_write_error(itmp);
  941. X
  942. X    if((itmp = write(fdnlsym,nlsym,sizeof(nlsym))) != sizeof(nlsym))
  943. X        nlsym_write_error(itmp);
  944. X
  945. X    unique = NLSYM_UNIQUE1;
  946. X    if((itmp = write(fdnlsym,&unique,sizeof(unique))) != sizeof(unique))
  947. X        nlsym_write_error(itmp);
  948. X
  949. X    unique = NLSYM_UNIQUE2;
  950. X    if((itmp = write(fdnlsym,&unique,sizeof(unique))) != sizeof(unique))
  951. X        nlsym_write_error(itmp);
  952. X
  953. X    (void)close(fdnlsym);
  954. X    exit(0);
  955. X    /*NOTREACHED*/
  956. X}    /* end of main */
  957. X
  958. X/* vi: set tabstop=4 shiftwidth=4: */
  959. SHAR_EOF
  960. chmod 0644 x386mon/nlsym.c ||
  961. echo 'restore of x386mon/nlsym.c failed'
  962. Wc_c="`wc -c < 'x386mon/nlsym.c'`"
  963. test 3306 -eq "$Wc_c" ||
  964.     echo 'x386mon/nlsym.c: original size 3306, current size' "$Wc_c"
  965. fi
  966. # ============= x386mon/nlsym.h ==============
  967. if test -f 'x386mon/nlsym.h' -a X"$1" != X"-c"; then
  968.     echo 'x - skipping x386mon/nlsym.h (File already exists)'
  969. else
  970. echo 'x - extracting x386mon/nlsym.h (Text)'
  971. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/nlsym.h' &&
  972. X/*+-------------------------------------------------------------------------
  973. X    nlsym.h -- utility nlist - fast access to kernel /dev/kmem offsets
  974. X    ...!{gatech,emory}!n4hgf!wht
  975. X
  976. XThe nlsym file contains three records:
  977. X1.  struct stat unixstat - stat buffer from /unix at file creation time
  978. X2.  struct nlist nlsym - the structure of nlist'd information
  979. X3.  long unique - a unique identifier to help ensure correct nlsym length
  980. X
  981. X--------------------------------------------------------------------------*/
  982. X/*+:EDITS:*/
  983. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  984. X
  985. X#define UNIX_KERNEL        "/unix"
  986. X#define UNIX_NLSYM        "/unix.nlsym"
  987. X#define NLSYM_UNIQUE1    0x1BADD00DL
  988. X#define NLSYM_UNIQUE2    0xDEADB1FFL
  989. X
  990. X#define Nindex_AVAILRMEM            0
  991. X#define Nindex_AVAILSMEM            1
  992. X#define Nindex_BDEVCNT              2
  993. X#define Nindex_BDEVSW               3
  994. X#if defined(HAS_BOOTINFO)
  995. X#define Nindex_BOOTINFO             4
  996. X#endif
  997. X#define Nindex_CDEVCNT              5
  998. X#define Nindex_CDEVSW               6
  999. X#define Nindex_CFREE                7
  1000. X#define Nindex_CFREECNT             8
  1001. X#define Nindex_CFREELIST            9
  1002. X#define Nindex_CONSSW              10
  1003. X#define Nindex_CURPROC             11
  1004. X#define Nindex_DINFO               12
  1005. X#define Nindex_DSTFLAG             13
  1006. X#define Nindex_DUMPDEV             14
  1007. X#define Nindex_EMAP                15
  1008. X#define Nindex_FFREELIST           16
  1009. X#define Nindex_FILE                17
  1010. X#define Nindex_FMODCNT             18
  1011. X#define Nindex_FMODSW              19
  1012. X#define Nindex_FREEMEM             20
  1013. X#define Nindex_FSINFO              21
  1014. X#define Nindex_FSTYPSW             22
  1015. X#define Nindex_HZ                  23
  1016. X#define Nindex_IDLESERVER          24
  1017. X#define Nindex_IFREELIST           25
  1018. X#define Nindex_INODE               26
  1019. X#define Nindex_KPTBL               27
  1020. X#define Nindex_LBOLT               28
  1021. X#define Nindex_LINECNT             29
  1022. X#define Nindex_LINESW              30
  1023. X#define Nindex_MAXCLICK            31
  1024. X#define Nindex_MAXMEM              32
  1025. X#define Nindex_MINFO               33
  1026. X#define Nindex_MOUNT               34
  1027. X#define Nindex_MSGLISTCNT          35
  1028. X#define Nindex_NFSTYP              36
  1029. X#define Nindex_NPTALLOCED          37
  1030. X#define Nindex_NPTFREE             38
  1031. X#define Nindex_NSERVERS            39
  1032. X#define Nindex_NSWAP               40
  1033. X#define Nindex_NSYSENT             41
  1034. X#define Nindex_OLDPROC             42
  1035. X#define Nindex_OLD_CURPROC         43
  1036. X#define Nindex_PANICSTR            44
  1037. X#define Nindex_PHYSMEM             45
  1038. X#define Nindex_PIPEDEV             46
  1039. X#define Nindex_PROC                47
  1040. X#define Nindex_RCINFO              48
  1041. X#define Nindex_ROOTDEV             49
  1042. X#define Nindex_RUNQ                50
  1043. X#define Nindex_SHLBINFO            51
  1044. X#define Nindex_SWAPDEV             52
  1045. X#define Nindex_SWPLO               53
  1046. X#define Nindex_SYSERR              54
  1047. X#define Nindex_SYSINFO             55
  1048. X#define Nindex_SYSSEGS             56
  1049. X#define Nindex_SYSWAIT             57
  1050. X#define Nindex_TIME                58
  1051. X#define Nindex_TIMEZONE            59
  1052. X#define Nindex_TTHIWAT             60
  1053. X#define Nindex_TTLOWAT             61
  1054. X#define Nindex_TUNE                62
  1055. X#define Nindex_U                   63
  1056. X#define Nindex_USERTABLE           64
  1057. X#define Nindex_V                   65
  1058. X#define Nindex_WIN_UBLK            66
  1059. X#define Nindex_REGION              67
  1060. X#ifdef M_UNIX
  1061. X#define Nindex_SIO_TTY             68
  1062. X#endif
  1063. X
  1064. X#if defined(HAS_BOOTINFO)
  1065. X#define bootinfoaddr (nlsym[Nindex_BOOTINFO].n_value)
  1066. X#endif
  1067. X#define freememaddr (nlsym[Nindex_FREEMEM].n_value)
  1068. X#define lboltaddr (nlsym[Nindex_LBOLT].n_value)
  1069. X#define maxmemaddr (nlsym[Nindex_MAXMEM].n_value)
  1070. X#define minfoaddr (nlsym[Nindex_MINFO].n_value)
  1071. X#define nswapaddr (nlsym[Nindex_NSWAP].n_value)
  1072. X#define physmemaddr (nlsym[Nindex_PHYSMEM].n_value)
  1073. X#define procaddr (nlsym[Nindex_PROC].n_value)
  1074. X#define regionaddr (nlsym[Nindex_REGION].n_regionalue)
  1075. X#define sysinfoaddr (nlsym[Nindex_SYSINFO].n_value)
  1076. X#define tuneaddr (nlsym[Nindex_TUNE].n_value)
  1077. X#define vaddr (nlsym[Nindex_V].n_value)
  1078. X#ifdef M_UNIX
  1079. X#define sio_ttyaddr (nlsym[Nindex_SIO_TTY].n_value)
  1080. X#endif
  1081. X
  1082. X#ifdef DEFINE_NLSYM
  1083. Xstruct nlist nlsym[] =
  1084. X{
  1085. X    { "availrmem" },
  1086. X    { "availsmem" },
  1087. X    { "bdevcnt" },
  1088. X    { "bdevsw" },
  1089. X#if defined(HAS_BOOTINFO)
  1090. X    { "bootinfo" },
  1091. X#else
  1092. X    { "spl" },
  1093. X#endif
  1094. X    { "cdevcnt" },
  1095. X    { "cdevsw" },
  1096. X    { "cfree" },
  1097. X    { "cfreecnt" },
  1098. X    { "cfreelist" },
  1099. X    { "conssw" },
  1100. X    { "curproc" },
  1101. X    { "dinfo" },
  1102. X    { "Dstflag" },
  1103. X    { "dumpdev" },
  1104. X    { "emap" },
  1105. X    { "ffreelist" },
  1106. X    { "file" },
  1107. X    { "fmodcnt" },
  1108. X    { "fmodsw" },
  1109. X    { "freemem" },
  1110. X    { "fsinfo" },
  1111. X    { "fstypsw" },
  1112. X    { "Hz" },
  1113. X    { "idleserver" },
  1114. X    { "ifreelist" },
  1115. X    { "inode" },
  1116. X    { "kptbl" },
  1117. X    { "lbolt" },
  1118. X    { "linecnt" },
  1119. X    { "linesw" },
  1120. X    { "maxclick" },
  1121. X    { "maxmem" },
  1122. X    { "minfo" },
  1123. X    { "mount" },
  1124. X    { "msglistcnt" },
  1125. X    { "nfstyp" },
  1126. X    { "nptalloced" },
  1127. X    { "nptfree" },
  1128. X    { "nservers" },
  1129. X    { "nswap" },
  1130. X    { "nsysent" },
  1131. X    { "oldproc" },
  1132. X    { "old_curproc" },
  1133. X    { "panicstr" },
  1134. X    { "physmem" },
  1135. X    { "pipedev" },
  1136. X    { "proc" },
  1137. X    { "rcinfo" },
  1138. X    { "rootdev" },
  1139. X    { "runq" },
  1140. X    { "shlbinfo" },
  1141. X    { "swapdev" },
  1142. X    { "swplo" },
  1143. X    { "syserr" },
  1144. X    { "sysinfo" },
  1145. X    { "syssegs" },
  1146. X    { "syswait" },
  1147. X    { "time" },
  1148. X    { "Timezone" },
  1149. X    { "tthiwat" },
  1150. X    { "ttlowat" },
  1151. X    { "tune" },
  1152. X    { "u" },
  1153. X    { "usertable" },
  1154. X    { "v" },
  1155. X    { "win_ublk" },
  1156. X    { "region" },
  1157. X#ifdef M_UNIX
  1158. X    { "sio_tty" },
  1159. X#endif
  1160. X    { (char *)0 }
  1161. X};
  1162. X#else
  1163. Xextern struct nlist nlsym[];
  1164. X#endif
  1165. X
  1166. X/* vi: set tabstop=4 shiftwidth=4: */
  1167. SHAR_EOF
  1168. chmod 0644 x386mon/nlsym.h ||
  1169. echo 'restore of x386mon/nlsym.h failed'
  1170. Wc_c="`wc -c < 'x386mon/nlsym.h'`"
  1171. test 5373 -eq "$Wc_c" ||
  1172.     echo 'x386mon/nlsym.h: original size 5373, current size' "$Wc_c"
  1173. fi
  1174. # ============= x386mon/proc.c ==============
  1175. if test -f 'x386mon/proc.c' -a X"$1" != X"-c"; then
  1176.     echo 'x - skipping x386mon/proc.c (File already exists)'
  1177. else
  1178. echo 'x - extracting x386mon/proc.c (Text)'
  1179. sed 's/^X//' << 'SHAR_EOF' > 'x386mon/proc.c' &&
  1180. X/*+-------------------------------------------------------------------------
  1181. X    proc.c - X386MON proc table handler
  1182. X    wht@n4hgf.Mt-Park.GA.US
  1183. X
  1184. X  Defined functions:
  1185. X    draw_Proc(x,y,initial)
  1186. X    initialize_Proc()
  1187. X    grok_proc()
  1188. X    pstat_text(pstat)
  1189. X
  1190. X--------------------------------------------------------------------------*/
  1191. X/*+:EDITS:*/
  1192. X/*:01-12-1991-04:35-wht@n4hgf-x1.00 (flush old edit notes) */
  1193. X
  1194. X#include "unixincs.h"
  1195. X#define WANT_MON_EXTERNS
  1196. X#include "x386mon.h"
  1197. X#include "buttons.h"
  1198. X#include "disp_info.h"
  1199. X
  1200. X#undef NGROUPS_MAX
  1201. X#undef NULL
  1202. X#include <sys/param.h>
  1203. X#if defined(mips)
  1204. X#include <sys/sbd.h>
  1205. X#endif
  1206. X#include <nlist.h>
  1207. X#include "nlsym.h"
  1208. X#include "libkmem.h"
  1209. X#include "libnlsym.h"
  1210. X
  1211. Xextern struct var v;
  1212. X
  1213. Xstruct proc *procs = (struct proc *)0;
  1214. Xstruct proc *oldprocs = (struct proc *)0;
  1215. Xstruct proc **pprocs = (struct proc **)0;
  1216. Xstruct proc **poldprocs = (struct proc **)0;
  1217. X
  1218. Xint procs_per_pstat[SXBRK + 1];
  1219. Xint procs_in_core;
  1220. Xint procs_alive;
  1221. X
  1222. Xstatic int line_style = LineSolid;
  1223. Xstatic int cap_style = CapButt;
  1224. Xstatic int join_style = JoinMiter;
  1225. X
  1226. X/*+-------------------------------------------------------------------------
  1227. X    pstat_text(pstat)
  1228. X--------------------------------------------------------------------------*/
  1229. Xchar *
  1230. Xpstat_text(pstat)
  1231. Xchar pstat;
  1232. X{
  1233. Xstatic char errant[10];
  1234. X
  1235. X    switch(pstat)
  1236. X    {
  1237. X        case SSLEEP:   return("sleep ");
  1238. X        case SRUN:     return("run   ");
  1239. X        case SZOMB:    return("zombie");
  1240. X        case SSTOP:    return("stop  ");
  1241. X        case SIDL:     return("idle  ");
  1242. X        case SONPROC:  return("onproc");
  1243. X        case SXBRK:    return("xbrk  ");
  1244. X    }
  1245. X    (void)sprintf(errant,"%06u?",(unsigned char)pstat);
  1246. X    return(errant);
  1247. X
  1248. X}    /* end of pstat_text */
  1249. X
  1250. X/*+-------------------------------------------------------------------------
  1251. X    grok_proc() - read and examine kernel process table
  1252. X--------------------------------------------------------------------------*/
  1253. Xvoid
  1254. Xgrok_proc()
  1255. X{
  1256. Xregister iproc;
  1257. Xregister struct proc *tproc;
  1258. X
  1259. X    kread((caddr_t)procs,procaddr,sizeof(struct proc) * v.v_proc);
  1260. X    for(iproc = 0; iproc < SXBRK + 1; iproc++)
  1261. X        procs_per_pstat[iproc] = 0;
  1262. X    procs_in_core = 0;
  1263. X    procs_alive = 0;
  1264. X
  1265. X    for(iproc = 0; iproc < v.v_proc; iproc++)
  1266. X    {
  1267. X        tproc = pprocs[iproc] = (procs + iproc);
  1268. X
  1269. X        if(tproc->p_stat)
  1270. X            procs_alive++;
  1271. X
  1272. X        procs_per_pstat[tproc->p_stat]++;    /* count # procs in each state */
  1273. X
  1274. X        if(tproc->p_flag & SLOAD)            /* count # procs in memory */
  1275. X            procs_in_core++;
  1276. X    }
  1277. X
  1278. X}    /* end of grok_proc */
  1279. X
  1280. X/*+-------------------------------------------------------------------------
  1281. X    draw_Proc(x,y,initial)
  1282. X--------------------------------------------------------------------------*/
  1283. Xvoid
  1284. Xdraw_Proc(x,y,initial)
  1285. Xint y;
  1286. Xint x;
  1287. Xint initial;
  1288. X{
  1289. Xregister istat;
  1290. Xregister itmp;
  1291. Xchar *cptr;
  1292. Xchar s80[80];
  1293. Xint fwidth = FWIDTH;
  1294. Xint fheight = FHEIGHT;
  1295. Xint len;
  1296. Xint x2 = x;
  1297. Xint yl1 = y + (FASCENT / 2);
  1298. Xint yl2 = y + (fheight / 2) - 1;
  1299. Xint ys  = y + FASCENT;
  1300. X
  1301. X    switch(current_display_mode)
  1302. X    {
  1303. X        case BUTTON_main:
  1304. X            break;
  1305. X        default:
  1306. X            return;
  1307. X    }
  1308. X
  1309. X    if(DrawAreaXYWH.height < (y + (fheight * 2)))
  1310. X        return;
  1311. X
  1312. X    if(initial)
  1313. X    {
  1314. X        cptr = "---Proc----";
  1315. X        len = strlen(cptr);
  1316. X        /* the "background" bar */
  1317. X        XSetForeground(display,gc,colorSlate.pixel);
  1318. X        XSetLineAttributes(display,gc,fheight,
  1319. X            line_style,cap_style,join_style);
  1320. X        XDrawLine(display,window,gc, x,yl1, x + (len * fwidth),yl1);
  1321. X
  1322. X        /* draw the black line before "Proc" */
  1323. X        XSetForeground(display,gc,foreground);
  1324. X        XSetLineAttributes(display,gc,FASCENT / 2,
  1325. X            line_style,cap_style,join_style);
  1326. X        XDrawLine(display,window,gc,
  1327. X            x2,yl1,
  1328. X            x2 + (len = (fwidth * 3)) - FGAP,yl1);
  1329. X        x2 += len;
  1330. X
  1331. X        /* draw "Proc" */
  1332. X        cptr = "Proc";
  1333. X        XDrawString(display,window,gc, x2,  ys, cptr,len = strlen(cptr));
  1334. X        XDrawString(display,window,gc, x2+1,ys, cptr,len);
  1335. X        x2 += fwidth * len;
  1336. X
  1337. X        /* draw the black line after "Proc" */
  1338. X        XDrawLine(display,window,gc,
  1339. X            x2 + FGAP + 1,yl1,
  1340. X            x2 + (len = (fwidth * 4)),yl1);
  1341. X    }
  1342. X    y += fheight;
  1343. X
  1344. X    grok_proc();
  1345. X
  1346. X    for(istat = SSLEEP; istat <= SXBRK; istat++)
  1347. X    {
  1348. X        disp_info_int(x,y,pstat_text(istat),5,procs_per_pstat[istat]);
  1349. X        y += fheight;
  1350. X    }
  1351. X    disp_info_int(x,y,"total ",5,procs_alive);
  1352. X    y += fheight;
  1353. X    disp_info_int(x,y,"in mem",5,procs_in_core);
  1354. X
  1355. X}    /* end of draw_Proc */
  1356. X
  1357. X/*+-------------------------------------------------------------------------
  1358. X    initialize_Proc()
  1359. X--------------------------------------------------------------------------*/
  1360. Xinitialize_Proc()
  1361. X{
  1362. Xstatic char *memfail = "cannot alloc memory for proc table";
  1363. X
  1364. X    if(!(procs = (struct proc *)malloc(sizeof(struct proc) * v.v_proc)))
  1365. X        leave_text(memfail,1);
  1366. X    if(!(oldprocs = (struct proc *)malloc(sizeof(struct proc) * v.v_proc)))
  1367. X        leave_text(memfail,1);
  1368. X    if(!(pprocs = (struct proc **)malloc(sizeof(struct proc *) * v.v_proc)))
  1369. X        leave_text(memfail,1);
  1370. X    if(!(poldprocs=(struct proc **)malloc(sizeof(struct proc *)*v.v_proc)))
  1371. X        leave_text(memfail,1);
  1372. X
  1373. X}    /* end of initialize_Proc */
  1374. X
  1375. X/* vi: set tabstop=4 shiftwidth=4: */
  1376. X/* end of proc.c */
  1377. SHAR_EOF
  1378. chmod 0644 x386mon/proc.c ||
  1379. echo 'restore of x386mon/proc.c failed'
  1380. Wc_c="`wc -c < 'x386mon/proc.c'`"
  1381. test 4886 -eq "$Wc_c" ||
  1382.     echo 'x386mon/proc.c: original size 4886, current size' "$Wc_c"
  1383. fi
  1384. true || echo 'restore of x386mon/ps.c failed'
  1385. echo End of part 3, continue with part 4
  1386. exit 0
  1387.  
  1388. -----------------------------------------------------------------------
  1389. Warren Tucker, TuckerWare   gatech!n4hgf!wht or wht@n4hgf.Mt-Park.GA.US
  1390. Many [Nobel physics] prizes  have been given  to people for  telling us
  1391. the universe is not as simple as we thought it was. -Stephen Hawking in
  1392. A Brief History of Time     In computing, there are no such prizes. -me
  1393.