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

  1. From: davidsen@sixhub.UUCP (Wm E. Davidsen Jr)
  2. Newsgroups: alt.sources
  3. Subject: Xenix screenblanker revisited
  4. Message-ID: <2525@sixhub.UUCP>
  5. Date: 8 Dec 90 23:56:29 GMT
  6.  
  7.  
  8.   Someone sent mail and asked for a copy of the better screen blanker
  9. for Xenix. Unfortunately their return address was toasted by some mailer
  10. along the way. Here it is, far better than the one I posted last month.
  11.  
  12. #!/bin/sh
  13. # shar:    Shell Archiver  (v1.27)
  14. #
  15. #    Run the following text with /bin/sh to create:
  16. #      readme
  17. #      makefile
  18. #      scrnblank2.c
  19. #      scrnblank2.L
  20. #      sb2.man
  21. #
  22. echo "x - extracting readme (Text)"
  23. sed 's/^X//' << 'SHAR_EOF' > readme &&
  24. X                               SCRNBLANK2
  25. X
  26. X          Screen Blanker for SCO Xenix, UNIX, and OpenDeskTop
  27. X
  28. X                        Bill Davidsen - Nov 1990
  29. X
  30. X
  31. X  scrnblank2 is a program which will run on a system and blank the
  32. Xscreen after inactivity on the virtual screens associated with the
  33. Xconsole. It does this by changing to a designates "blank" virtual
  34. Xterminal, clearing it to blank, and setting the height of the cursor to
  35. Xzero, so that the display is completely blank.
  36. X
  37. X  In addition, after blanking the screen, it checks for new activity on
  38. Xany screen, and switches to display of the screen with most recent
  39. Xinformation. This works particularly well for a program which may only
  40. Xproduce new information every hour or so.
  41. X
  42. XHOW IT WORKS
  43. X
  44. X  The devices tty01 through tty12 are checked for time last modified,
  45. Xand compared to the current time. If the 'age' of the most recently
  46. Xmodified screen is greater than the blanking interval requested, a
  47. Xswitch is made to the blank screen. When the screen has been blanked the
  48. Xprogram begins to monitor all screens and when any screen changes
  49. Xviewing is changed to that terminal. If no additional changes take place
  50. Xthe screen will again be blanked.
  51. X
  52. XPORTABILITY
  53. X
  54. X  While the method used to change screens is dependent in SCO extensions
  55. Xto the ANSI sequences, any implementation capable of clearing the screen
  56. Xand cursor and switching screens could be made to work, usually by
  57. Xadding ioctl calls in place of the output statements.
  58. X
  59. XAUTHOR AND COPYRIGHT
  60. X
  61. X  Written by Bill Davidsen, Nov 1990. Copyright 1990 by Bill Davidsen,
  62. Xall rights reserved. This program and documentation may be used and
  63. Xdistributed without fee, providing the copyright is intact.
  64. SHAR_EOF
  65. chmod 0644 readme || echo "restore of readme fails"
  66. echo "x - extracting makefile (Text)"
  67. sed 's/^X//' << 'SHAR_EOF' > makefile &&
  68. X# makefile for screen blanker #2
  69. X
  70. X# ================> config start
  71. X# the vterm to use as a blank screen
  72. XBLANKTTY    = 7
  73. X# timeout, minutes
  74. XTIMEOUT        = 10
  75. X# retest time for activeity when blank, sec
  76. XRETEST        = 90
  77. X# where you want your binaries
  78. XBINDIR        = /u/local/bin
  79. X# where you want your documentation
  80. XDOCDIR        = /usr/man
  81. X# manual section, should be C, L, or LOCAL
  82. XLOCAL        = LOCAL
  83. X# if scrnblank2 is too long a name, change it here
  84. X# ** don't change this unless you have nroff to reformat the man page! **
  85. XINSTALLNAME    = sb2
  86. X# your favorite shar if not installed as shar
  87. XSHAR        = shar
  88. X# ================> config ends
  89. X
  90. XBACKLIST    = readme makefile s.scrnblank2.c scrnblank2.L sb2.man
  91. XSHARLIST    = readme makefile scrnblank2.c scrnblank2.L sb2.man
  92. XDEFAULTS    = -DBLANK_TTY=$(BLANKTTY) -DTIMEOUT=$(TIMEOUT) \
  93. X          -DRETEST=$(RETEST)
  94. XDESTNAME    = $(BINDIR)/$(INSTALLNAME)
  95. XDOCDIR2        = $(DOCDIR)/man.$(LOCAL)
  96. XDOCNAME2    = $(DOCDIR2)/$(INSTALLNAME).$(LOCAL)
  97. XCATDIR2        = $(DOCDIR)/cat.$(LOCAL)
  98. XCATNAME2    = $(CATDIR2)/sb2.$(LOCAL)
  99. X
  100. X.c~.c:
  101. X    get $<
  102. X
  103. Xscrnblank2    : scrnblank2.o
  104. X    $(CC) -o scrnblank2 $(LFLAGS) scrnblank2.o
  105. X
  106. Xscrnblank2.o    : scrnblank2.c
  107. X    $(CC) -c $(CFLAGS) $(DEFAULTS) scrnblank2.c
  108. X
  109. X
  110. Xdebug:
  111. X    $(MAKE) CFLAGS="$(CFLAGS) -DDEBUG"
  112. X
  113. Xclean        : scrnblank2
  114. X    @if [ -f p.scrnblank2.c ]; then \
  115. X    echo "edit in progress";\
  116. X    exit 1;\
  117. X    fi;\
  118. X    rm -f scrnblank2.[co] scrnblnk2.shar
  119. X
  120. Xbackup        : clean zoo
  121. X
  122. Xzoo        : $(BACKLIST)
  123. X    zoo aunMPP scrnblank2 $(BACKLIST)
  124. X    rm -f scrnblank2.bak
  125. X
  126. Xshar        : $(SHARLIST)
  127. X    $(SHAR) $(SHARLIST) > scrnblnk2.shar
  128. X
  129. X# this must be run as root or other admin login
  130. Xinstall        : scrnblank2
  131. X    @if [ ! -d $(BINDIR) ];\
  132. X    then echo "$(BINDIR) - missing dir"; exit 1; fi
  133. X    @if [ ! -d $(DOCDIR) ];\
  134. X    then echo "$(DOCDIR) - missing dir"; exit 1; fi
  135. X    @if [ ! -d $(DOCDIR2) ];\
  136. X    then echo "$(DOCDIR2) - missing dir"; exit 1; fi
  137. X    @if [ ! -d $(CATDIR2) ];\
  138. X    then echo "$(CATDIR2) - missing dir"; exit 1; fi
  139. X    cp scrnblank2 $(DESTNAME)
  140. X    strip $(DESTNAME)
  141. X    chown bin $(DESTNAME)
  142. X    chmod 755 $(DESTNAME)
  143. X    @if [ ! -f /usr/bin/nroff ]; then \
  144. X      set -x;\
  145. X      cp sb2.man $(CATNAME2);\
  146. X      chuse bin $(CATNAME2);\
  147. X      chmod 644 $(CATNAME2);\
  148. X      set +x;\
  149. X    else \
  150. X      set -x;\
  151. X      sed 's/scrnblank2/$(INSTALLNAME)/g' scrnblank2.L | \
  152. X      sed 's/LOCAL/$(LOCAL)/g' > $(DOCNAME2);\
  153. X      chown bin $(DOCNAME2);\
  154. X      chmod 644 $(DOCNAME2);\
  155. X      set +x;\
  156. X    fi
  157. SHAR_EOF
  158. chmod 0644 makefile || echo "restore of makefile fails"
  159. echo "x - extracting scrnblank2.c (Text)"
  160. sed 's/^X//' << 'SHAR_EOF' > scrnblank2.c &&
  161. X/* blank screen */
  162. X
  163. X#include <stdio.h>
  164. X#include <sys/types.h>
  165. X#include <sys/stat.h>
  166. X#include <sys/param.h>
  167. X
  168. X#include <string.h>
  169. X
  170. X#ifdef    DEBUG
  171. X#define Debug(x) if (debug) printf x
  172. Xstatic int debug = 0;
  173. X#else    /* not even the code exists */
  174. X#define Debug(x)
  175. X#endif    /* optional debug */
  176. X
  177. Xstatic int check_ttys();
  178. X
  179. X/* number and id of ttys to ignore - ongoing output */
  180. Xstatic int num_ignore = 0;        /* pseudo stack pointer */
  181. Xstatic int ignorelist[12];
  182. X
  183. Xextern int optind, opterr;
  184. Xextern char *optarg;
  185. X
  186. X#ifndef lint
  187. Xstatic char *SCCSid[] = {
  188. X    "@(#)scrnblank2.c - v1.5, modified 11/14/90",
  189. X    "Copyright (c) 1990 by Bill Davidsen, may be freely distributed and used"
  190. X};
  191. X#endif    /* lint */
  192. X
  193. Xmain(argc, argv)
  194. Xint argc;
  195. Xchar *argv[];
  196. X{
  197. X    int blanktty = BLANK_TTY;    /* tty to use for blank screen */
  198. X    int checktime = RETEST;        /* time to check, def 90 sec */
  199. X    int timeout = TIMEOUT*60;    /* default timeout, 10 min */
  200. X    int timeleft;                /* time left before oldest tty times out */
  201. X    int optchar;                /* next option */
  202. X    char *wkptr;                /* pointer for ignore parse */
  203. X
  204. X    /* parse the args */
  205. X    while ((optchar = getopt(argc, argv, "i:b:t:r:d")) != EOF) {
  206. X        Debug(("Next option: %c\n", optchar));
  207. X        switch (optchar) {
  208. X        case 'b': /* tty to blank */
  209. X            blanktty = atoi(optarg);
  210. X            Debug((" Set blank tty to %d\n", blanktty));
  211. X            break;
  212. X        case 't': /* timeout in minutes */
  213. X            timeout = 60*atoi(optarg);
  214. X            Debug((" Set blank time %d sec\n", timeout));
  215. X            break;
  216. X        case 'r': /* retest time when blank */
  217. X            checktime = atoi(optarg);
  218. X            break;
  219. X        case 'i': /* ignore certain terminals */
  220. X            for (wkptr=optarg; wkptr; wkptr = strchr(wkptr, ',')) {
  221. X                if (*wkptr == ',') ++wkptr;
  222. X                ignorelist[num_ignore++] = atoi(wkptr);
  223. X                Debug((" Ignore #%d %2d\n", 
  224. X                    num_ignore, 
  225. X                    ignorelist[num_ignore - 1]
  226. X                ));
  227. X            }
  228. X            break;
  229. X#ifdef    DEBUG
  230. X        case 'd': /* debug on */
  231. X            debug = 1;
  232. X            break;
  233. X#endif    /* only when needed */
  234. X        case '?': /* bad option */
  235. X            help_and_exit();
  236. X            break;
  237. X        }
  238. X    }
  239. X
  240. X    for (;;) {
  241. X        timeleft = check_ttys(blanktty, timeout, checktime);
  242. X        sleep(timeleft+1);
  243. X    }
  244. X}
  245. X
  246. Xstatic int
  247. Xcheck_ttys(blkttynum, maxage, checktime)
  248. Xint blkttynum, maxage, checktime;
  249. X{
  250. X    static char blkttyname[50];        /* name of the blank tty */
  251. X    static FILE *blktty = NULL;        /* open the blank screen tty */
  252. X    static int blanked = 0;            /* flag when screen blanked */
  253. X
  254. X    int n;
  255. X    char devname[50];
  256. X    time_t newest = 0, now = time((char *)NULL);
  257. X    int new_tty = 0, age;
  258. X    struct stat stbuf;
  259. X
  260. X    if (blktty == NULL) {
  261. X        /* open the file */
  262. X        sprintf(blkttyname, "/dev/tty%02d", blkttynum);
  263. X        blktty = fopen(blkttyname, "a+");
  264. X        if (blktty == NULL) {
  265. X            perror("Can't open blank tty");
  266. X            exit(1);
  267. X        }
  268. X    }
  269. X
  270. X    do {
  271. X        for (n=1; n <= 12; ++n) {
  272. X            /* skip the blank tty, may have things going on */
  273. X            if (skipcheck(n, blkttynum)) continue;
  274. X
  275. X            /* form the name and stat it */
  276. X            sprintf(devname, "/dev/tty%02d", n);
  277. X            stat(devname, &stbuf);
  278. X
  279. X            age = now - stbuf.st_mtime;
  280. X            if (new_tty == 0 || age < newest) {
  281. X                /* this tty is more recent, log it */
  282. X                new_tty = n;
  283. X                newest = age;
  284. X            }
  285. X        }
  286. X
  287. X        /* wait for activity */
  288. X        if (blanked) {
  289. X            if (newest < maxage) {
  290. X                /* return to this one */
  291. X                fprintf(blktty, "\033[%02dz", new_tty-1);
  292. X                fflush(blktty);
  293. X                blanked = 0;
  294. X            } else {
  295. X                sleep(checktime);
  296. X            }
  297. X        }
  298. X    } while (blanked);
  299. X            
  300. X    if (!blanked && newest > maxage) {
  301. X        /* switch to blank screen and wait input */
  302. X        fprintf(blktty, "\033[%02dz", blkttynum-1);
  303. X        fprintf(blktty, "\033[=10;9C\f");
  304. X        fflush(blktty);
  305. X        blanked = 1;
  306. X    }
  307. X
  308. X    /* return earliest timeout value */
  309. X    return (maxage - newest);
  310. X}
  311. X
  312. X/*
  313. X *  returns true if this tty is being skipped
  314. X */
  315. X  
  316. Xint
  317. Xskipcheck(curtty, blktty)
  318. Xint curtty, blktty;
  319. X{
  320. X    int flag = 0, m;
  321. X
  322. X    if (curtty == blktty) flag = 1;
  323. X    else {
  324. X        for (m=0; m < num_ignore; ++m) {
  325. X            if (curtty == ignorelist[m]) {
  326. X                flag = 1;
  327. X                break;
  328. X            }
  329. X        }
  330. X    }
  331. X
  332. X    return flag;
  333. X}
  334. X
  335. X/*
  336. X *  print usage and quit
  337. X */
  338. X
  339. Xhelp_and_exit() {
  340. X    static char *helplines[] = {
  341. X        "Screenblanker v1.5, modified 11/14/90",
  342. X        "",
  343. X        "scrnblank2 [ options ]",
  344. X        "",
  345. X        "  -bN  blank vterm N (default 7)",
  346. X        "  -tN  timeout N minutes (default 10)",
  347. X        "  -rN  when blank, retest every N sec (default 90)",
  348. X        "  -iL  ignore output to list L (comma separated list)",
  349. X        "       Used when a vterm is getting regular monitoring output",
  350. X        "       which is checked when interesting",
  351. X        "",
  352. X        (char *)0
  353. X    };
  354. X    int n;
  355. X
  356. X    for (n=0; helplines[n]; ++n) {
  357. X        printf("%s\n", helplines[n]);
  358. X    }
  359. X    exit(1);
  360. X}
  361. SHAR_EOF
  362. chmod 0444 scrnblank2.c || echo "restore of scrnblank2.c fails"
  363. echo "x - extracting scrnblank2.L (Text)"
  364. sed 's/^X//' << 'SHAR_EOF' > scrnblank2.L &&
  365. X'\ run through tbl, too
  366. X.TH scrnblank2 LOCAL Local
  367. X.SH NAME
  368. Xscrnblank2 \- blank console screen when not in use
  369. X.SH SYNOPSIS
  370. Xscrnblank2 [ options ]
  371. X.SH DESCRIPTION
  372. X.ds sb \fBscrnblank2\fP
  373. X\*(sb is a program which blanks the console screen after inactivity. It
  374. Xuses the SCO specific extensions to ANSI escapes, but could be modified
  375. Xto use ioctl on other systems. One vterm will be selected and blanked,
  376. Xand therefore may not have a getty active on it.
  377. X.sp
  378. XAfter the screen is blanked, when activity resumes of \fIany\fP vterm
  379. X(see the -i option), the most recently active vterm will be selected and
  380. Xdisplayed. Then screen blanking will resume as before.
  381. X.SS Options
  382. X.TS
  383. Xtab(@);
  384. Xlbw(1i) l.
  385. X-t\fIN\fP@timeout after N minutes (default 10)
  386. X
  387. X-r\fIN\fP@T{
  388. Xwhen blanked check for activity every N sec (default 90)
  389. XT}
  390. X
  391. X-b\fIN\fP@T{
  392. Xblank to vterm N (default 7)
  393. XT}
  394. X
  395. X-i\fIlist\fP@T{
  396. XIgnore activity on vterms in \fIlist\fP, comma separated. This is useful
  397. Xwhen one vterm is displaying periodic information, when you wish to
  398. Xcheck only when of interest.
  399. XT}
  400. X.TE
  401. X.SS Installation
  402. XSelect a vterm and insure that there is no getty on it. The default
  403. Xvterm is tty07, although that may be changed. Edit the makefile where
  404. Xindicated and make. After testing make install as root.
  405. X.SH EXAMPLES
  406. X.nf
  407. Xscrnblank2 -t15         # 15 minute timeout
  408. Xscrnblank2 -b12         # blank screen on tty12
  409. Xscrnblank2 -i5          # ignore tty05 activity
  410. X.fi
  411. X.SH FILES
  412. X/dev/tty01-12
  413. X.SH SEE ALSO
  414. Xdisable(C), console(M)
  415. X.SH DIAGNOSTICS
  416. XError message only.
  417. X.SH LIMITATIONS
  418. XDoesn't check ttys higher than 12 if you diddle your config. May not
  419. Xwork if run from rc.d files rather than from a login session.
  420. X.SH AUTHOR
  421. XBill Davidsen, davidsen@crdos1.crd.ge.com
  422. X.SH Copyright
  423. XCopyright (c) 1990 by Bill Davidsen, all rights reserved. This program
  424. Xand documentation may be used and distributed without payment, provided
  425. Xthat the copyright notices are left intact.
  426. SHAR_EOF
  427. chmod 0666 scrnblank2.L || echo "restore of scrnblank2.L fails"
  428. echo "x - extracting sb2.man (Text)"
  429. sed 's/^X//' << 'SHAR_EOF' > sb2.man &&
  430. X
  431. X
  432. X
  433. X     s\010s\010s\010sb\010b\010b\010b2\0102\0102\0102(\010(\010(\010(L\010L\010L\010LO\010O\010O\010OC\010C\010C\010CA\010A\010A\010AL\010L\010L\010L)\010)\010)\010)          X\010X\010X\010XE\010E\010E\010EN\010N\010N\010NI\010I\010I\010IX\010X\010X\010X    S\010S\010S\010Sy\010y\010y\010ys\010s\010s\010st\010t\010t\010te\010e\010e\010em\010m\010m\010m V\010V\010V\010V (\010(\010(\010(L\010L\010L\010Lo\010o\010o\010oc\010c\010c\010ca\010a\010a\010al\010l\010l\010l)\010)\010)\010)        s\010s\010s\010sb\010b\010b\0
  434.  
  435.  
  436. 10b2\0102\0102\0102(\010(\010(\010(L\010L\010L\010LO\010O\010O\010OC\010C\010C\010CA\010A\010A\010AL\010L\010L\010L)\010)\010)\010)
  437. X
  438. X
  439. X
  440. X     N\010N\010N\010NA\010A\010A\010AM\010M\010M\010ME\010E\010E\010E
  441. X      sb2 -    blank console screen when not in use
  442. X
  443. X     S\010S\010S\010SY\010Y\010Y\010YN\010N\010N\010NO\010O\010O\010OP\010P\010P\010PS\010S\010S\010SI\010I\010I\010IS\010S\010S\010S
  444. X      sb2 [    options    ]
  445. X
  446. X     D\010D\010D\010DE\010E\010E\010ES\010S\010S\010SC\010C\010C\010CR\010R\010R\010RI\010I\010I\010IP\010P\010P\010PT\010T\010T\010TI\010I\010I\010IO\010O\010O\010ON\010N\010N\010N
  447. X      s\010s\010s\010sb\010b\010b\010b2\0102\0102\0102 is a program which blanks    the console screen after
  448. X      inactivity. It uses the SCO specific extensions to ANSI
  449. X      escapes, but could be    modified to use    ioctl on other
  450. X      systems. One vterm will be selected and blanked, and
  451. X      therefore may    not have a getty active    on it.
  452. X
  453. X      After    the screen is blanked, when activity resumes of    _\010a_\010n_\010y
  454. X      vterm    (see the -i option), the most recently active vterm
  455. X      will be selected and displayed. Then screen blanking will
  456. X      resume as before.
  457. X
  458. X    O\010O\010O\010Op\010p\010p\010pt\010t\010t\010ti\010i\010i\010io\010o\010o\010on\010n\010n\010ns\010s\010s\010s
  459. X      -\010-\010-\010-t\010t\010t\010t_\010N           timeout after N minutes (default    10)
  460. X
  461. X      -\010-\010-\010-r\010r\010r\010r_\010N           when blanked check for activity
  462. X               every N sec (default 90)
  463. X
  464. X      -\010-\010-\010-b\010b\010b\010b_\010N           blank to    vterm N    (default 7)
  465. X
  466. X      -\010-\010-\010-i\010i\010i\010i_\010l_\010i_\010s_\010t       Ignore activity on vterms in _\010l_\010i_\010s_\010t,
  467. X               comma separated.    This is    useful when
  468. X               one vterm is displaying periodic
  469. X               information, when you wish to check
  470. X               only when of interest.
  471. X
  472. X    I\010I\010I\010In\010n\010n\010ns\010s\010s\010st\010t\010t\010ta\010a\010a\010al\010l\010l\010ll\010l\010l\010la\010a\010a\010at\010t\010t\010ti\010i\010i\010io\010o\010o\010on\010n\010n\010n
  473. X      Select a vterm and insure that there is no getty on it. The
  474. X      default vterm    is tty07, although that    may be changed.    Edit
  475. X      the makefile where indicated and make. After testing make
  476. X      install as root.
  477. X
  478. X     E\010E\010E\010EX\010X\010X\010XA\010A\010A\010AM\010M\010M\010MP\010P\010P\010PL\010L\010L\010LE\010E\010E\010ES\010S\010S\010S
  479. X      sb2 -t15       # 15    minute timeout
  480. X      sb2 -b12       # blank screen on tty12
  481. X      sb2 -i5       # ignore tty05 activity
  482. X
  483. X     F\010F\010F\010FI\010I\010I\010IL\010L\010L\010LE\010E\010E\010ES\010S\010S\010S
  484. X      /dev/tty01-12
  485. X
  486. X     S\010S\010S\010SE\010E\010E\010EE\010E\010E\010E A\010A\010A\010AL\010L\010L\010LS\010S\010S\010SO\010O\010O\010O
  487. X      disable(C), console(M)
  488. X
  489. X     D\010D\010D\010DI\010I\010I\010IA\010A\010A\010AG\010G\010G\010GN\010N\010N\010NO\010O\010O\010OS\010S\010S\010ST\010T\010T\010TI\010I\010I\010IC\010C\010C\010CS\010S\010S\010S
  490. X      Error    message    only.
  491. X
  492. X
  493. X
  494. X
  495. X     Page 1                        (printed 11/14/90)
  496. X
  497. X
  498. X
  499. X
  500. X
  501. X
  502. X     s\010s\010s\010sb\010b\010b\010b2\0102\0102\0102(\010(\010(\010(L\010L\010L\010LO\010O\010O\010OC\010C\010C\010CA\010A\010A\010AL\010L\010L\010L)\010)\010)\010)          X\010X\010X\010XE\010E\010E\010EN\010N\010N\010NI\010I\010I\010IX\010X\010X\010X    S\010S\010S\010Sy\010y\010y\010ys\010s\010s\010st\010t\010t\010te\010e\010e\010em\010m\010m\010m V\010V\010V\010V (\010(\010(\010(L\010L\010L\010Lo\010o\010o\010oc\010c\010c\010ca\010a\010a\010al\010l\010l\010l)\010)\010)\010)        s\010s\010s\010sb\010b\010b\0
  503.  
  504.  
  505. 10b2\0102\0102\0102(\010(\010(\010(L\010L\010L\010LO\010O\010O\010OC\010C\010C\010CA\010A\010A\010AL\010L\010L\010L)\010)\010)\010)
  506. X
  507. X
  508. X
  509. X     L\010L\010L\010LI\010I\010I\010IM\010M\010M\010MI\010I\010I\010IT\010T\010T\010TA\010A\010A\010AT\010T\010T\010TI\010I\010I\010IO\010O\010O\010ON\010N\010N\010NS\010S\010S\010S
  510. X      Doesn't check    ttys higher than 12 if you diddle your config.
  511. X      May not work if run from rc.d    files rather than from a login
  512. X      session.
  513. X
  514. X     A\010A\010A\010AU\010U\010U\010UT\010T\010T\010TH\010H\010H\010HO\010O\010O\010OR\010R\010R\010R
  515. X      Bill Davidsen, davidsen@crdos1.crd.ge.com
  516. X
  517. X     C\010C\010C\010Co\010o\010o\010op\010p\010p\010py\010y\010y\010yr\010r\010r\010ri\010i\010i\010ig\010g\010g\010gh\010h\010h\010ht\010t\010t\010t
  518. X      Copyright (c)    1990 by    Bill Davidsen, all rights reserved.
  519. X      This program and documentation may be    used and distributed
  520. X      without payment, provided that the copyright notices are
  521. X      left intact.
  522. X
  523. X
  524. X
  525. X
  526. X
  527. X
  528. X
  529. X
  530. X
  531. X
  532. X
  533. X
  534. X
  535. X
  536. X
  537. X
  538. X
  539. X
  540. X
  541. X
  542. X
  543. X
  544. X
  545. X
  546. X
  547. X
  548. X
  549. X
  550. X
  551. X
  552. X
  553. X
  554. X
  555. X
  556. X
  557. X
  558. X
  559. X
  560. X
  561. X
  562. X
  563. X
  564. X     Page 2                        (printed 11/14/90)
  565. X
  566. X
  567. X
  568. SHAR_EOF
  569. chmod 0644 sb2.man || echo "restore of sb2.man fails"
  570. exit 0
  571.  
  572. -- 
  573. bill davidsen - davidsen@sixhub.uucp (uunet!crdgw1!sixhub!davidsen)
  574.     sysop *IX BBS and Public Access UNIX
  575.     moderator of comp.binaries.ibm.pc and 80386 mailing list
  576. "Stupidity, like virtue, is its own reward" -me
  577.