home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume24 / pucc-lib / part02 < prev    next >
Text File  |  1991-03-19  |  56KB  |  2,183 lines

  1. Subject:  v24i056:  Library for Purdue University Computing Center tools, Part02/02
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 6a410d43 45c1ef42 fc0d9542 6c60aeb0
  5.  
  6. Submitted-by: Kevin Braunsdorf <ksb@cc.purdue.edu>
  7. Posting-number: Volume 24, Issue 56
  8. Archive-name: pucc-lib/part02
  9.  
  10. #!/bin/sh
  11. # This is part 02 of pucc-1a
  12. # ============= maketd/main.c ==============
  13. if test ! -d 'maketd'; then
  14.     echo 'x - creating directory maketd'
  15.     mkdir 'maketd'
  16. fi
  17. if test -f 'maketd/main.c' -a X"$1" != X"-c"; then
  18.     echo 'x - skipping maketd/main.c (File already exists)'
  19. else
  20. echo 'x - extracting maketd/main.c (Text)'
  21. sed 's/^X//' << 'Purdue' > 'maketd/main.c' &&
  22. /*
  23. X * machine generated cmd line parser
  24. X */
  25. #include "machine.h"
  26. X
  27. #include <stdio.h>
  28. #include "getopt.h"
  29. X
  30. char
  31. X    RCSId[] = "$Id: main.c,v 4.8 90/07/02 15:10:43 ksb Exp $",
  32. X    *progname = RCSId,
  33. X    uline[] = " [-4CabcdfhlnrvVx] [-D define] [-I includedir] [-L lib.a] [-U undefine] [-j extender] [-m makefile] [-o dir] [-s suffix] [-t target] [files]",
  34. X    *help[] = {
  35. X        "4            use m4 to generate dependencies",
  36. X        "C            cancel all cpp flags",
  37. X        "D define     specify defines, as in /lib/cpp",
  38. #if 0
  39. X        "E            set no explicit rule",
  40. X        "F cmd        provide a shell command to generate depends",
  41. #endif
  42. X        "I includedir specify include directory, as in /lib/cpp",
  43. X        "L lib.a      specify a library to contain targets",
  44. X        "U undefine   specify undefines, as in /lib/cpp",
  45. X        "V            show which version of maketd is running",
  46. X        "a            do all dependencies, including /usr/include",
  47. X        "b            generate binary, rather than object related dependencies",
  48. X        "c            use cpp to generate dependencies",
  49. X        "d            dependencies to stdout, rather than Makefile",
  50. #if 0
  51. X        "e rule       force an explicit rule",
  52. #endif
  53. X        "f            force header/trailer (use with -d)",
  54. X        "h            print this help message",
  55. X        "j extender   supply a new extender for old makefile",
  56. X        "l            targets live in current Makefiles directory, turn off -n",
  57. X        "m makefile   specify makefile for update",
  58. X        "n            targets live in their source directory",
  59. X        "o dir        prepend DIR to target: DIR/a.o: foo.h",
  60. X        "r            replace dependencies for targets",
  61. X        "s suffix     change suffix target's suffix: a.suffix: foo.h",
  62. X        "t target     change target's basename: target.o: foo.h",
  63. X        "v            print extra verbose (debug) output to stderr",
  64. X        "x            don't abbreviate includes",
  65. X        "files        C source files to process for depends",
  66. X        (char *)0
  67. X    };
  68. int
  69. X    alldep = 0,
  70. X    use_stdout = 0,
  71. X    force_head = 0;
  72. char
  73. X    *explicit = (char *)0,
  74. X    *exten = (char *)0,
  75. X    *inlib = (char *)0,
  76. X    *makename = (char *)0;
  77. int
  78. X    replace = 0,
  79. X    verbose = 0,
  80. X    shortincl = 1;
  81. X
  82. /*
  83. X * a usage function
  84. X */
  85. int
  86. usage(curopt)
  87. int curopt;
  88. {
  89. X    register char **ppch;
  90. X
  91. X    fprintf(stderr, "%s: usage%s\n", progname, uline);
  92. X    if ('h' != curopt)
  93. X        return;
  94. X    for (ppch = help; (char *)0 != *ppch; ++ppch)
  95. X        printf("%s\n", *ppch);
  96. }
  97. X
  98. /*
  99. X * parser
  100. X */
  101. int
  102. main(argc, argv)
  103. int argc;
  104. char **argv;
  105. {
  106. X    static char sbOpt[] = "4CD:EF:L:I:U:abcde:fhj:lm:no:rs:t:vVx";
  107. X    register int curopt;
  108. X    extern char *strrchr();
  109. X
  110. X    progname = strrchr(argv[0], '/');
  111. X    if ((char *)0 == progname)
  112. X        progname = argv[0];
  113. X    else
  114. X        ++progname;
  115. X
  116. X    DoInit();
  117. X    for (;;) {
  118. X        if (EOF != (curopt = getopt(argc, argv, sbOpt))) {
  119. X            /* fallthrough */;
  120. X        } else if (EOF != getarg(argc, argv)) {
  121. X            FileArgs(optarg);
  122. X            continue;
  123. X        } else {
  124. X            break;
  125. X        }
  126. X        switch (curopt) {
  127. X        case BADARG:
  128. X            fprintf(stderr, "%s: option %c needs an argument\n", progname, optopt);
  129. X            exit(1);
  130. X            break;
  131. X        case '4':
  132. X            SetPP(1);
  133. X            break;
  134. X        case 'C':
  135. X            SetCPPFlags(curopt, (char *)0);
  136. X            break;
  137. X        case 'D':
  138. X            SetCPPFlags(curopt, optarg);
  139. X            break;
  140. X        case 'E':
  141. X            explicit = (char *)0;
  142. X            break;
  143. X        case 'F':
  144. X            UserFilter(optarg);
  145. X            break;
  146. X        case 'I':
  147. X            SetCPPFlags(curopt, optarg);
  148. X            break;
  149. X        case 'L':
  150. X            inlib = '\000' == optarg[0] ? (char *)0 : optarg;
  151. X            break;
  152. X        case 'U':
  153. X            SetCPPFlags(curopt, optarg);
  154. X            break;
  155. X        case 'a':
  156. X            alldep = 1;
  157. X            break;
  158. X        case 'b':
  159. X            SetSuffix(curopt, (char *)0);
  160. X            break;
  161. X        case 'c':
  162. X            SetPP(0);
  163. X            break;
  164. X        case 'd':
  165. X            use_stdout = 1;
  166. X            break;
  167. X        case 'e':
  168. X            explicit = '\000' == optarg[0] ? (char *)0 : optarg;
  169. X            break;
  170. X        case 'f':
  171. X            force_head = 1;
  172. X            break;
  173. X        case BADCH:
  174. X        case 'h':
  175. X            usage(curopt);
  176. X            exit(curopt != 'h');
  177. X            break;
  178. X        case 'j':
  179. X            exten = optarg;
  180. X            break;
  181. X        case 'l':
  182. X            SetLocalO(0);
  183. X            break;
  184. X        case 'm':
  185. X            makename = optarg;
  186. X            break;
  187. X        case 'n':
  188. X            SetLocalO(1);
  189. X            break;
  190. X        case 'o':
  191. X            SetObjPath(optarg);
  192. X            break;
  193. X        case 'r':
  194. X            replace = 1;
  195. X            break;
  196. X        case 's':
  197. X            SetSuffix(curopt, optarg);
  198. X            break;
  199. X        case 't':
  200. X            SetTargetName(optarg);
  201. X            break;
  202. X        case 'v':
  203. X            verbose = 1;
  204. X            break;
  205. X        case 'V':
  206. X            printf("%s: %s\n", progname, RCSId);
  207. X            exit(0);
  208. X        case 'x':
  209. X            shortincl = 0;
  210. X            break;
  211. X        }
  212. X    }
  213. X    MakeTD();
  214. X
  215. X    exit(0);
  216. }
  217. Purdue
  218. chmod 0444 maketd/main.c ||
  219. echo 'restore of maketd/main.c failed'
  220. Wc_c="`wc -c < 'maketd/main.c'`"
  221. test 4235 -eq "$Wc_c" ||
  222.     echo 'maketd/main.c: original size 4235, current size' "$Wc_c"
  223. fi
  224. # ============= maketd/M4.patch ==============
  225. if test -f 'maketd/M4.patch' -a X"$1" != X"-c"; then
  226.     echo 'x - skipping maketd/M4.patch (File already exists)'
  227. else
  228. echo 'x - extracting maketd/M4.patch (Text)'
  229. sed 's/^X//' << 'Purdue' > 'maketd/M4.patch' &&
  230. *** /tmp/,RCSt1021406    Fri Dec 18 14:39:34 1987
  231. --- m4.c    Tue Jun 30 01:03:10 1987
  232. ***************
  233. *** 11,17
  234. X   */
  235. X  
  236. X  #ifndef lint
  237. ! static char rcsid[] = "$Header: /usr/src/dynix/src/usr.bin/m4/RCS/m4.c,v 2.0.1.1 87/01/05 00:28:14 root Dist $";
  238. X  #endif
  239. X  
  240. X  #include <stdio.h>
  241. X
  242. --- 11,17 -----
  243. X   */
  244. X  
  245. X  #ifndef lint
  246. ! static char rcsid[] = "$Header: /usr/src/dynix/src/usr.bin/m4/RCS/m4.c,v 2.0.1.2 87/06/30 01:02:32 doc Exp $";
  247. X  #endif
  248. X  
  249. X  #include <stdio.h>
  250. ***************
  251. *** 49,54
  252. X  
  253. X  #define    putbak(c)    *ip++ = c;
  254. X  #define    getchr()    (ip>cur_ip?*--ip: getc(infile[infptr]))
  255. X  #define    putchr(c)    if (cp==NULL) {if (curfile)putc(c,curfile);} else *op++ = c
  256. X  char    type[] = {
  257. X      0,    0,    0,    0,    0,    0,    0,    0,
  258. X
  259. --- 49,57 -----
  260. X  
  261. X  #define    putbak(c)    *ip++ = c;
  262. X  #define    getchr()    (ip>cur_ip?*--ip: getc(infile[infptr]))
  263. + #ifdef MAKETD
  264. + #define    putchr(c)    if (NULL==cp) {if (0 == makedepend && curfile)putc(c,curfile);} else *op++ = c
  265. + #else  MAKETD
  266. X  #define    putchr(c)    if (cp==NULL) {if (curfile)putc(c,curfile);} else *op++ = c
  267. X  #endif MAKETD
  268. X  
  269. ***************
  270. *** 50,55
  271. X  #define    putbak(c)    *ip++ = c;
  272. X  #define    getchr()    (ip>cur_ip?*--ip: getc(infile[infptr]))
  273. X  #define    putchr(c)    if (cp==NULL) {if (curfile)putc(c,curfile);} else *op++ = c
  274. X  char    type[] = {
  275. X      0,    0,    0,    0,    0,    0,    0,    0,
  276. X      0,    0,    0,    0,    0,    0,    0,    0,
  277. X
  278. --- 53,60 -----
  279. X  #define    putchr(c)    if (NULL==cp) {if (0 == makedepend && curfile)putc(c,curfile);} else *op++ = c
  280. X  #else  MAKETD
  281. X  #define    putchr(c)    if (cp==NULL) {if (curfile)putc(c,curfile);} else *op++ = c
  282. + #endif MAKETD
  283. X  char    type[] = {
  284. X      0,    0,    0,    0,    0,    0,    0,    0,
  285. X      0,    0,    0,    0,    0,    0,    0,    0,
  286. ***************
  287. *** 130,135
  288. X  FILE    *curfile = { stdout };
  289. X  FILE    *infile[10] = { stdin };
  290. X  int    infptr    = 0;
  291. X  
  292. X  main(argc, argv)
  293. X  char **argv;
  294. X
  295. --- 135,156 -----
  296. X  FILE    *curfile = { stdout };
  297. X  FILE    *infile[10] = { stdin };
  298. X  int    infptr    = 0;
  299. + #ifdef MAKETD
  300. + #include <sys/param.h>
  301. + int    makedepend = 0;
  302. + char    curfilename[MAXPATHLEN + 1];
  303. + newputc(x,c)
  304. + char x;
  305. + FILE *c;
  306. + {
  307. +     if (0 == makedepend)
  308. +         putc(x,c);
  309. + }
  310. + #undef putc
  311. + #define putc(x, c)    newputc(x, c)
  312. + #undef putchar
  313. + #define putchar(x)    newputc(x, stdin)
  314. + #endif MAKETD
  315. X  
  316. X  main(argc, argv)
  317. X  char **argv;
  318. ***************
  319. *** 219,224
  320. X  #ifdef gcos
  321. X      tempname = "m4.tempa";
  322. X  #endif
  323. X      if (argc>1)
  324. X          putbak(0);
  325. X      for (;;) {
  326. X
  327. --- 240,252 -----
  328. X  #ifdef gcos
  329. X      tempname = "m4.tempa";
  330. X  #endif
  331. + #ifdef MAKETD
  332. +     if (0 == strcmp("-M", argv[1])) {
  333. +         argc--;
  334. +         argv++;
  335. +         makedepend++;
  336. +     }
  337. + #endif MAKETD
  338. X      if (argc>1)
  339. X          putbak(0);
  340. X      for (;;) {
  341. ***************
  342. *** 243,248
  343. X              else if ((infile[infptr]=fopen(argv[0], READ))==ERROR) {
  344. X                  fprintf(stderr, "m4: file not found: %s\n", argv[0]);
  345. X                  delexit();
  346. X              }
  347. X              continue;
  348. X          }
  349. X
  350. --- 271,281 -----
  351. X              else if ((infile[infptr]=fopen(argv[0], READ))==ERROR) {
  352. X                  fprintf(stderr, "m4: file not found: %s\n", argv[0]);
  353. X                  delexit();
  354. +             } 
  355. + #ifdef MAKETD
  356. +             else if (0 != makedepend) {
  357. +                 strcpy(curfilename, argv[0]);
  358. +                 printf("%s: %s\n", curfilename, curfilename);
  359. X              }
  360. X  #endif MAKETD
  361. X                  
  362. ***************
  363. *** 244,249
  364. X                  fprintf(stderr, "m4: file not found: %s\n", argv[0]);
  365. X                  delexit();
  366. X              }
  367. X              continue;
  368. X          }
  369. X          if (type[t]==ALPH) {
  370. X
  371. --- 277,284 -----
  372. X                  strcpy(curfilename, argv[0]);
  373. X                  printf("%s: %s\n", curfilename, curfilename);
  374. X              }
  375. + #endif MAKETD
  376. +                 
  377. X              continue;
  378. X          }
  379. X          if (type[t]==ALPH) {
  380. ***************
  381. *** 671,676
  382. X  doincl(ap, c, noisy)
  383. X  char **ap;
  384. X  {
  385. X      if (c > 0 && strlen(ap[1]) > 0) {
  386. X          infptr++;
  387. X          ip_stk[infptr] = cur_ip = ip;
  388. X
  389. --- 706,716 -----
  390. X  doincl(ap, c, noisy)
  391. X  char **ap;
  392. X  {
  393. + #ifdef MAKETD
  394. +     if (0 != makedepend) {
  395. +         printf("%s: %s\n",curfilename, ap[1]);
  396. +     }
  397. + #endif MAKETD
  398. X      if (c > 0 && strlen(ap[1]) > 0) {
  399. X          infptr++;
  400. X          ip_stk[infptr] = cur_ip = ip;
  401. Purdue
  402. chmod 0444 maketd/M4.patch ||
  403. echo 'restore of maketd/M4.patch failed'
  404. Wc_c="`wc -c < 'maketd/M4.patch'`"
  405. test 3826 -eq "$Wc_c" ||
  406.     echo 'maketd/M4.patch: original size 3826, current size' "$Wc_c"
  407. fi
  408. # ============= libopt/Makefile ==============
  409. if test ! -d 'libopt'; then
  410.     echo 'x - creating directory libopt'
  411.     mkdir 'libopt'
  412. fi
  413. if test -f 'libopt/Makefile' -a X"$1" != X"-c"; then
  414.     echo 'x - skipping libopt/Makefile (File already exists)'
  415. else
  416. echo 'x - extracting libopt/Makefile (Text)'
  417. sed 's/^X//' << 'Purdue' > 'libopt/Makefile' &&
  418. # Makefile for libopt.a        (Kevin Braunsdorf Feb 1987)
  419. #
  420. # for 
  421. #2.9 bsd
  422. # DEFS= -DBSD2.9
  423. # LDFLAGS= -i
  424. X
  425. LIB=    ${DESTDIR}/usr/local/lib
  426. INCL=    ${DESTDIR}/usr/include/local
  427. NAME=libopt.a
  428. X
  429. I=/usr/include
  430. S=/usr/include/sys
  431. P=
  432. X
  433. INCLUDE=
  434. DEBUG=    -O
  435. DEFS=
  436. #DEFS=    -D"strchr=index"
  437. CFLAGS=    ${DEBUG} ${DEFS} ${INCLUDE}
  438. LDFLAGS=
  439. X
  440. HDR=    getopt.h
  441. SRC=    getopt.c getarg.c rescan.c envopt.c
  442. OBJ=    getopt.o getarg.o rescan.o envopt.o
  443. MAN=    libopt.3l
  444. SOURCE=    Makefile README ${MAN} ${SRC} ${HDR}
  445. X
  446. all: ${NAME} getopt.h
  447. X
  448. ${NAME}:$P ${OBJ}
  449. X    ar rc ${NAME} ${OBJ}
  450. X
  451. clean: FRC
  452. X    rm -f Makefile.bak ${NAME} *.o errs a.out core lint.out
  453. X
  454. deinstall: ${MAN}
  455. X    install -D ${LIB}/${NAME}
  456. X    mkcat -R ${MAN}
  457. X
  458. depend: ${HDR} ${SRC} FRC
  459. X    maketd -a ${CDEFS} ${INCLUDE} ${SRC}
  460. X
  461. install: all FRC
  462. X    install -cl -m 644 ${NAME} ${LIB}/${NAME}
  463. X    install -c -m 644  getopt.h ${INCL}/getopt.h
  464. X
  465. lint: ${SRC} ${HDR}
  466. X    lint -h ${SRC}
  467. X
  468. mkcat: ${MAN}
  469. X    mkcat ${MAN}
  470. X
  471. print: source FRC
  472. X    lpr -J"getopt library" ${SOURCE}
  473. X
  474. source: ${SOURCE}
  475. X    
  476. spotless: clean
  477. X    rcsclean ${SOURCE}
  478. X
  479. tags: ${HDR} ${SRC}
  480. X    ctags -at ${HDR} ${SRC}
  481. X
  482. ${SOURCE}:
  483. X    co -q $@
  484. X
  485. FRC:
  486. X
  487. # DO NOT DELETE THIS LINE - make depend DEPENDS ON IT
  488. X
  489. getopt.o: $I/stdio.h getopt.c getopt.h
  490. X
  491. getarg.o: $I/stdio.h getarg.c getopt.h
  492. X
  493. rescan.o: $I/stdio.h getopt.h rescan.c
  494. X
  495. envopt.o: $I/stdio.h envopt.c getopt.h
  496. X
  497. # *** Do not add anything here - It will go away. ***
  498. Purdue
  499. chmod 0644 libopt/Makefile ||
  500. echo 'restore of libopt/Makefile failed'
  501. Wc_c="`wc -c < 'libopt/Makefile'`"
  502. test 1360 -eq "$Wc_c" ||
  503.     echo 'libopt/Makefile: original size 1360, current size' "$Wc_c"
  504. fi
  505. # ============= libopt/README ==============
  506. if test -f 'libopt/README' -a X"$1" != X"-c"; then
  507.     echo 'x - skipping libopt/README (File already exists)'
  508. else
  509. echo 'x - extracting libopt/README (Text)'
  510. sed 's/^X//' << 'Purdue' > 'libopt/README' &&
  511. This package allows all out PUCC local command to read their name
  512. (in upper case) as a list of additional options to parse.  We have
  513. found this works out quite well in general.  You do have to watch
  514. out for Sun's make and for scripts getting the user's values.
  515. X
  516. Life is like that.
  517. X
  518. X
  519. If you install the header file in /usr/include/local and the library
  520. in some lib dir that ld searches by deafult you should be set.  You
  521. will have to change the L= macro in all the Makefiles.
  522. X
  523. If you don't wanna install it just type
  524. X    make
  525. X
  526. and the other tools will use ../libopt as the L= dir and the source for
  527. the library.
  528. X
  529. kayessbee
  530. Purdue
  531. chmod 0644 libopt/README ||
  532. echo 'restore of libopt/README failed'
  533. Wc_c="`wc -c < 'libopt/README'`"
  534. test 619 -eq "$Wc_c" ||
  535.     echo 'libopt/README: original size 619, current size' "$Wc_c"
  536. fi
  537. # ============= libopt/getopt.c ==============
  538. if test -f 'libopt/getopt.c' -a X"$1" != X"-c"; then
  539.     echo 'x - skipping libopt/getopt.c (File already exists)'
  540. else
  541. echo 'x - extracting libopt/getopt.c (Text)'
  542. sed 's/^X//' << 'Purdue' > 'libopt/getopt.c' &&
  543. /* @(#)getopt.c
  544. X * based on Keith Bostic's getopt in comp.sources.unix volume1
  545. X */
  546. X
  547. #ifdef pdp11
  548. #include <sys/types.h>
  549. #endif
  550. #include <stdio.h>
  551. X
  552. #include "getopt.h"
  553. X
  554. /*
  555. X * get option letter from argument vector
  556. X */
  557. int
  558. X    optind = 1,        /* index into parent argv vector    */
  559. X    optsil = 1,        /* be silent on errors            */
  560. X    optopt,            /* character checked for validity    */
  561. X    _eargc;            /* scan before args line        */
  562. char    *optarg,        /* argument associated with option    */
  563. X    **_eargv =        /* scan before args line        */
  564. X        (char **)0;
  565. X
  566. static void
  567. tell(a,s)
  568. char *a, *s;
  569. {
  570. X    fputs(a,stderr);
  571. X    fputs(s,stderr);
  572. X    fputc(optopt,stderr);
  573. X    fputc('\n',stderr);
  574. }
  575. X
  576. int
  577. getopt(nargc, nargv, ostr)
  578. int nargc;
  579. char **nargv, *ostr;
  580. {
  581. X    extern char    *strchr();
  582. X    register char    *oli;        /* option letter list index    */
  583. X    static char    EMSG[] = "";    /* just a null place        */
  584. X    static char    *place = EMSG;    /* option letter processing    */
  585. X
  586. X    if ((char **)0 != _eargv) {
  587. X        if (optind < _eargc) {
  588. X            nargv = _eargv;
  589. X            nargc = _eargc;
  590. X        } else {
  591. X            _eargv = (char **)0;
  592. X            optind = 1;
  593. X        }
  594. X    }
  595. X    if ('\000' == *place) {        /* update scanning pointer */
  596. X        if (optind >= nargc || nargv[optind][0] != '-')
  597. X            return EOF;
  598. X        place = nargv[optind];
  599. X        if ('\000' == *++place)    /* "-" (stdin)        */
  600. X            return EOF;
  601. X        if (*place == '-') {    /* found "--"        */
  602. X            ++optind;
  603. X            return EOF;
  604. X        }
  605. X    }                /* option letter okay? */
  606. X    if ((optopt = (int)*place++) == (int)':' || !(oli = strchr(ostr,optopt))) {
  607. X        if(!*place) ++optind;
  608. X        if (! optsil) tell(*nargv, ": illegal option -- ");
  609. X        return(BADCH);
  610. X    }
  611. X    if (*++oli != ':') {        /* don't need argument */
  612. X        optarg = NULL;
  613. X        if (!*place)
  614. X            ++optind;
  615. X    } else {                /* need an argument */
  616. X        if (*place) {            /* no white space */
  617. X            optarg = place;
  618. X        } else if (nargc <= ++optind) {    /* no arg */
  619. X            place = EMSG;
  620. X            if (! optsil) tell(*nargv, ": option requires an argument -- ");
  621. X            return(BADARG);
  622. X        } else {
  623. X            optarg = nargv[optind];    /* white space */
  624. X        }
  625. X        place = EMSG;
  626. X        ++optind;
  627. X    }
  628. X    return optopt;            /* dump back option letter */
  629. }
  630. Purdue
  631. chmod 0444 libopt/getopt.c ||
  632. echo 'restore of libopt/getopt.c failed'
  633. Wc_c="`wc -c < 'libopt/getopt.c'`"
  634. test 1999 -eq "$Wc_c" ||
  635.     echo 'libopt/getopt.c: original size 1999, current size' "$Wc_c"
  636. fi
  637. # ============= libsrtunq/Makefile ==============
  638. if test ! -d 'libsrtunq'; then
  639.     echo 'x - creating directory libsrtunq'
  640.     mkdir 'libsrtunq'
  641. fi
  642. if test -f 'libsrtunq/Makefile' -a X"$1" != X"-c"; then
  643.     echo 'x - skipping libsrtunq/Makefile (File already exists)'
  644. else
  645. echo 'x - extracting libsrtunq/Makefile (Text)'
  646. sed 's/^X//' << 'Purdue' > 'libsrtunq/Makefile' &&
  647. # Copyright 1990 Purdue Research Foundation, West Lafayette, Indiana
  648. # 47907.  All rights reserved.
  649. #
  650. # Written by Jeff Smith, jsmith@cc.purdue.edu, purdue!jsmith
  651. #
  652. # This software is not subject to any license of the American Telephone
  653. # and Telegraph Company or the Regents of the University of California.
  654. #
  655. # Permission is granted to anyone to use this software for any purpose on
  656. # any computer system, and to alter it and redistribute it freely, subject
  657. # to the following restrictions:
  658. #
  659. # 1. Neither the authors nor Purdue University are responsible for any
  660. #    consequences of the use of this software.
  661. #
  662. # 2. The origin of this software must not be misrepresented, either by
  663. #    explicit claim or by omission.  Credit to the authors and Purdue
  664. #    University must appear in documentation and sources.
  665. #
  666. # 3. Altered versions must be plainly marked as such, and must not be
  667. #    misrepresented as being the original software.
  668. #
  669. # 4. This notice may not be removed or altered.
  670. #
  671. # Makefile for libsrtunq.a, DO NOT assume explode(1L)
  672. #
  673. # $Id: Makefile,v 2.4 90/11/29 08:00:34 ksb Exp $
  674. #
  675. X
  676. DEST= ${DESTDIR}/usr/local/lib
  677. HEADER= ${DESTDIR}/usr/include/local
  678. NAME=libsrtunq.a
  679. X
  680. I=/usr/include
  681. S=/usr/include/sys
  682. P=
  683. X
  684. # for 2.9 bsd
  685. # LDFLAGS= -i
  686. # CDEFS= -DBSD2.9
  687. LDFLAGS=
  688. INCLUDE= 
  689. CDEFS=
  690. DEBUG= -O
  691. CFLAGS= ${DEBUG} ${CDEFS} ${INCLUDE}
  692. X
  693. HDR=    srtunq.h
  694. SRC=    srtapply.c srtdel.c srtdtree.c srtfree.c srtgets.c srtgti.c srtin.c \
  695. X    srtinit.c srtmem.c
  696. DEP=    ${SRC}
  697. OBJ=    srtapply.o srtdel.o srtdtree.o srtfree.o srtgets.o srtgti.o srtin.o \
  698. X    srtinit.o srtmem.o
  699. MAN=    libsrtunq.3l
  700. SOURCE=    Makefile README ${HDR} ${SRC}
  701. X
  702. all:$P srtunq.h ${NAME}
  703. X
  704. ${NAME}:$P ${OBJ}
  705. X    ar rc ${NAME} ${OBJ}
  706. X
  707. clean: FRC
  708. X    rm -f Makefile.bak *.o ${GEN} ${NAME} a.out core errs lint.out
  709. X
  710. deinstall: ${MAN}
  711. X    install -D ${DEST}/${NAME}
  712. X    mkcat -R ${MAN}
  713. X
  714. depend: ${HDR} ${SRC} ${GEN} FRC
  715. X    maketd -a ${CDEFS} ${INCLUDE} ${DEP}
  716. X
  717. install: all FRC
  718. X    install -cl -m 644 ${NAME} ${DEST}/${NAME}
  719. X    install -cm 644 srtunq.h ${HEADER}/srtunq.h
  720. X
  721. lint: ${HDR} ${SRC} ${GEN} FRC
  722. X    lint -h ${CDEFS} ${INCLUDE} ${DEP}
  723. X
  724. mkcat: ${MAN}
  725. X    mkcat ${MAN}
  726. X
  727. source: ${SOURCE}
  728. X    
  729. spotless: clean
  730. X    rcsclean ${SOURCE}
  731. X
  732. tags: ${HDR} ${SRC} ${GEN}
  733. X    ctags -at ${HDR} ${SRC} ${GEN}
  734. X
  735. ${HDR} ${SRC}:
  736. X    co -q $@
  737. X
  738. FRC:
  739. X
  740. # DO NOT DELETE THIS LINE - maketd DEPENDS ON IT
  741. X
  742. srtapply.o: $I/stdio.h $S/types.h srtapply.c srtunq.h
  743. X
  744. srtdtree.o: $I/stdio.h $S/types.h srtdtree.c srtunq.h
  745. X
  746. srtfree.o: $I/stdio.h $S/types.h srtfree.c srtunq.h
  747. X
  748. srtgets.o: $I/stdio.h $S/types.h srtgets.c srtunq.h
  749. X
  750. srtgti.o: $I/stdio.h $S/types.h srtgti.c srtunq.h
  751. X
  752. srtin.o: $I/errno.h $I/stdio.h $S/types.h srtin.c srtunq.h
  753. X
  754. srtinit.o: $I/stdio.h $S/types.h srtinit.c srtunq.h
  755. X
  756. srtmem.o: $I/errno.h $I/stdio.h $S/types.h srtmem.c srtunq.h
  757. X
  758. # *** Do not add anything here - It will go away. ***
  759. Purdue
  760. chmod 0644 libsrtunq/Makefile ||
  761. echo 'restore of libsrtunq/Makefile failed'
  762. Wc_c="`wc -c < 'libsrtunq/Makefile'`"
  763. test 2793 -eq "$Wc_c" ||
  764.     echo 'libsrtunq/Makefile: original size 2793, current size' "$Wc_c"
  765. fi
  766. # ============= libsrtunq/srtdel.c ==============
  767. if test -f 'libsrtunq/srtdel.c' -a X"$1" != X"-c"; then
  768.     echo 'x - skipping libsrtunq/srtdel.c (File already exists)'
  769. else
  770. echo 'x - extracting libsrtunq/srtdel.c (Text)'
  771. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtdel.c' &&
  772. /* Sorting function that inserts strings one at a time into memory.
  773. X * Strings are null terminated.
  774. X * Only uniq strings are stored (no count is kept of how many)
  775. X * Any memory used is freed on init (or re-init).
  776. X *
  777. X * Author: Kevin Braunsdorf, PUCC, 1990
  778. X *
  779. X * $Log:    srtdel.c,v $
  780. X * Revision 2.0  90/06/11  22:23:49  ksb
  781. X * mkcat needed it
  782. X * 
  783. X */
  784. X
  785. #include <stdio.h>        /* for NULL                */
  786. #include <sys/types.h>        /* for void, in V7            */
  787. #include "srtunq.h"        /* for srtunq structs & functions    */
  788. X
  789. #include <errno.h>
  790. extern int errno, strcmp();
  791. extern char *malloc(), *strcpy();
  792. X
  793. /*
  794. X * srtdel - delete string in the sorted & unique list.
  795. X * returns one if found, else 0
  796. X */
  797. int
  798. srtdel(ent, str, compar)
  799. SRTTABLE *ent;
  800. char *str;
  801. int (*compar)();
  802. {
  803. X    register int i;            /* string compare result    */
  804. X    register SRTENTRY *s, *p, *os;    /* temp                */
  805. X    register SRTENTRY **pps;    /* where            */
  806. X
  807. X    pps = & ent->srt_top;
  808. X    os = NULL;
  809. X    while (NULL != (s = *pps)) {
  810. X        if (0 == (i = (*compar)(str, s->srt_str)))
  811. X            break;
  812. X        os = s;
  813. X        pps = (i > 0) ? & s->srt_more : & s->srt_less;
  814. X    }
  815. X
  816. X    if (NULL == s)
  817. X        return 0;
  818. X
  819. X    if (s == ent->srt_next) {    /* if we are the cur, mode cur    */
  820. X        p = s;
  821. X        if (p->srt_more != NULL) {
  822. X            p = p->srt_more;    /* go one more */
  823. X            while (p->srt_less != NULL)/* then all the way less */
  824. X                p = p->srt_less;
  825. X        } else {
  826. X            while (p != ent->srt_top && p->srt_prev->srt_more == p)
  827. X                p = p->srt_prev;
  828. X            p = (p == ent->srt_top) ? NULL : p->srt_prev;
  829. X        }
  830. X        ent->srt_next = p;
  831. X    }
  832. X
  833. X    p = s->srt_more;
  834. X    s = s->srt_less;
  835. X
  836. X    if (os != (*pps)->srt_prev)    /*ZZZ*/
  837. X        abort();
  838. X
  839. X    free(*pps);
  840. X    for (;;) {
  841. X        if (NULL == s) {        /* just one kid        */
  842. X            *pps = p;
  843. X            if (NULL == p)
  844. X                break;
  845. X            p->srt_prev = os;
  846. X            break;
  847. X        }
  848. X        if (NULL == p) {
  849. X            *pps = s;
  850. X            s->srt_prev = os;
  851. X            break;
  852. X        }
  853. X
  854. X        if (NULL == p->srt_less) {    /* hand off the middle    */
  855. X            p->srt_prev = os;
  856. X            *pps = p;
  857. X            p->srt_less = s;
  858. X            s->srt_prev = p;
  859. X            break;
  860. X        }
  861. X        if (NULL == s->srt_more) {
  862. X            *pps = s;
  863. X            s->srt_prev = os;
  864. X            s->srt_more = p;
  865. X            p->srt_prev = s;
  866. X            break;
  867. X        }
  868. X
  869. X        if (NULL == s->srt_less) {    /* rotate into middle    */
  870. X            *pps = s->srt_more;
  871. X            s->srt_more->srt_prev = os;
  872. X            s->srt_more = (*pps)->srt_less;
  873. X            s->srt_more->srt_prev = s;
  874. X            (*pps)->srt_less = s;
  875. X            s->srt_prev = *pps;
  876. X            pps = & (*pps)->srt_more;
  877. X            s = *pps;
  878. X            continue;
  879. X        }
  880. X        *pps = p->srt_less;
  881. X        p->srt_less->srt_prev = os;
  882. X        p->srt_less = (*pps)->srt_more;
  883. X        p->srt_less->srt_prev = p;
  884. X        (*pps)->srt_more = p;
  885. X        p->srt_prev = *pps;
  886. X        pps = & (*pps)->srt_less;
  887. X        p = *pps;
  888. X    }
  889. X    return 1;
  890. }
  891. Purdue
  892. chmod 0444 libsrtunq/srtdel.c ||
  893. echo 'restore of libsrtunq/srtdel.c failed'
  894. Wc_c="`wc -c < 'libsrtunq/srtdel.c'`"
  895. test 2530 -eq "$Wc_c" ||
  896.     echo 'libsrtunq/srtdel.c: original size 2530, current size' "$Wc_c"
  897. fi
  898. # ============= maketd/Makefile ==============
  899. if test -f 'maketd/Makefile' -a X"$1" != X"-c"; then
  900.     echo 'x - skipping maketd/Makefile (File already exists)'
  901. else
  902. echo 'x - extracting maketd/Makefile (Text)'
  903. sed 's/^X//' << 'Purdue' > 'maketd/Makefile' &&
  904. # Makefile for maketd
  905. #        Kevin Braunsdorf    Purdue University Computing Center
  906. BIN=    ${DESTDIR}/usr/local/bin
  907. PROG=    maketd
  908. X
  909. #Compile time options have been moved to machine.h
  910. X
  911. # We might need the old style script to make our first depends!
  912. # Use either of these lines, upper might be faster if your cc has -M
  913. # (the second line goes to great trouble to get a `#' sign, some
  914. # makes are very broken!)
  915. #OLDCODE= ${CC} ${CFLAGS} -M $$file |sed -e 's/^.*\.o *: *//'
  916. OLDCODE= ${CC} ${CFLAGS} -E $$file |\
  917. X     sed -n -e `echo '/^@/p' |tr "@" "\043"` |\
  918. X     sed -e 's/^.[ 0-9]*"\(.*\)" *$$/\1/' -e '/\/usr\/include/d'
  919. X
  920. L=../libsrtunq
  921. O=../libopt
  922. #L=/usr/include/local
  923. I=/usr/include
  924. S=/usr/include/sys
  925. P=
  926. X
  927. #INCLUDE= -I$L
  928. INCLUDE= -I$L -I$O
  929. DEBUG=    -O
  930. CDEFS=
  931. CFLAGS=    ${DEBUG} ${CDEFS} ${INCLUDE}
  932. X
  933. HDR=    abrv.h errors.h maketd.h main.h machine.h
  934. SRC=    abrv.c errors.c maketd.c main.c
  935. GEN=
  936. DEP=    ${SRC}
  937. OBJ=    main.o abrv.o errors.o maketd.o
  938. MAN=    maketd.1l
  939. SOURCE=    Makefile README GCC.awk M4.patch ${MAN} ${HDR} ${SRC}
  940. X
  941. all: ${PROG}
  942. X
  943. ${PROG}:$P ${OBJ}
  944. #    ${CC} -o $@ ${DEBUG} ${OBJ} -lopt -lsrtunq
  945. #    ${CC} -o $@ ${DEBUG} ${OBJ} -L /usr/local/lib -lopt -lsrtunq
  946. X    ${CC} -o $@ ${DEBUG} ${OBJ} ../libopt/libopt.a ../libsrtunq/libsrtunq.a
  947. X
  948. clean: FRC
  949. X    rm -f Makefile.bak ${PROG} ${GEN} *.o a.out core errs lint.errs tags
  950. X
  951. # we use the old sloppy code for booting our depends
  952. depend: ${HDR} ${SRC} ${GEN} FRC
  953. X    mv Makefile Makefile.bak
  954. X    sed '/^# DO NOT DELETE THIS LINE/,$$d' <Makefile.bak >Makefile
  955. X    echo '# DO NOT DELETE THIS LINE - maketd DEPENDS ON IT' >>Makefile
  956. X    echo '' >>Makefile
  957. X    for file in ${DEP}; do \
  958. X        o=`echo $$file |sed 's/c$$/o/'` ;\
  959. X        ${OLDCODE} |sort -u |\
  960. X        awk 'BEGIN { rec = "'$${o}'" ": " ; } \
  961. X        { if (length(rec $$1) > 76) \
  962. X        { print rec, "\\" ; rec = "  " $$1 } \
  963. X        else { rec = rec " " $$1 } } \
  964. X        END { print rec, "\n" } ' >>Makefile ;\
  965. X    done
  966. X    echo '# *** Do not add anything here - It will go away. ***' >>Makefile
  967. X
  968. depend2: ${HDR} ${SRC} ${GEN} FRC all
  969. X    ./${PROG} -d ${INCLUDE} ${DEP}
  970. X
  971. install: all FRC
  972. X    install -c -s ${PROG} ${BIN}/${PROG}
  973. X
  974. lint: ${HDR} ${SRC} ${GEN} FRC
  975. X    lint -h ${CDEFS} ${INCLUDE} ${DEP}
  976. X
  977. mkcat: ${MAN}
  978. X    mkcat ${MAN}
  979. X
  980. print: source FRC
  981. X    lpr -p -Pstaff -J"Maketd Source" ${SOURCE}
  982. X
  983. shar: source FRC
  984. X    shar ${SOURCE}
  985. X
  986. source: ${SOURCE}
  987. X
  988. spotless: clean
  989. X    rcsclean ${SOURCE}
  990. X
  991. tags: ${SRC} ${HDR} ${GEN}
  992. X    ctags -t ${SRC} ${HDR} ${GEN}
  993. X
  994. ${SOURCE}:
  995. X    co -q $@
  996. X
  997. FRC:
  998. X
  999. # DO NOT DELETE THIS LINE - maketd DEPENDS ON IT
  1000. X
  1001. abrv.o:  ./abrv.h ./errors.h ./machine.h ./main.h ./maketd.h abrv.c 
  1002. X
  1003. errors.o:  ./errors.h ./machine.h ./main.h ./maketd.h errors.c 
  1004. X
  1005. maketd.o:  ./abrv.h ./errors.h ./machine.h ./main.h ./maketd.h maketd.c 
  1006. X
  1007. main.o:  ./machine.h main.c 
  1008. X
  1009. # *** Do not add anything here - It will go away. ***
  1010. Purdue
  1011. chmod 0644 maketd/Makefile ||
  1012. echo 'restore of maketd/Makefile failed'
  1013. Wc_c="`wc -c < 'maketd/Makefile'`"
  1014. test 2731 -eq "$Wc_c" ||
  1015.     echo 'maketd/Makefile: original size 2731, current size' "$Wc_c"
  1016. fi
  1017. # ============= maketd/errors.c ==============
  1018. if test -f 'maketd/errors.c' -a X"$1" != X"-c"; then
  1019.     echo 'x - skipping maketd/errors.c (File already exists)'
  1020. else
  1021. echo 'x - extracting maketd/errors.c (Text)'
  1022. sed 's/^X//' << 'Purdue' > 'maketd/errors.c' &&
  1023. /*
  1024. X * this file should handle all the error recovery
  1025. X */
  1026. #include "machine.h"
  1027. X
  1028. #include <stdio.h>
  1029. #include <sys/types.h>
  1030. #include <sys/signal.h>
  1031. X
  1032. #include "maketd.h"
  1033. #include "main.h"
  1034. #include "errors.h"
  1035. X
  1036. /* RestoreFiles
  1037. X * This routine is called whenever there is a fatal error or signal. It
  1038. X * will attempt to restore the origional makefile from the backup if the
  1039. X * file has been backed up. It leaves the backup file sitting around
  1040. X * either way.
  1041. X */
  1042. void
  1043. RestoreFiles()
  1044. {
  1045. X    static char sbNoFiles[] = "%s: No files to save\n";
  1046. X
  1047. X    if (FALSE == backedup) {
  1048. X        fprintf(stderr, sbNoFiles, progname);
  1049. X        exit(3);
  1050. X    } else {
  1051. X        fprintf(stderr, "%s: Restoring %s from %s\n", progname, makename, pchBackup);
  1052. X        (void)unlink(makename);
  1053. X        if (0 != link(pchBackup, makename)) {
  1054. X            fprintf(stderr, "%s: error linking %s to ", progname, pchBackup);
  1055. X            perror(makename);
  1056. X        } else {
  1057. X            (void)unlink(pchBackup);
  1058. X        }
  1059. X        fprintf(stderr, sbNoFiles, progname);
  1060. X        exit(4);
  1061. X    }
  1062. }
  1063. X
  1064. void
  1065. OutOfMemory()
  1066. {
  1067. X    fprintf(stderr, "%s: out of memory\n", progname);
  1068. X    RestoreFiles();
  1069. }
  1070. X
  1071. /*
  1072. X * any signal calls us to clean up (with its name as our argument)
  1073. X */
  1074. int
  1075. sigtrap(pch)
  1076. char *pch;
  1077. {
  1078. X    fprintf(stderr, "%s: SIG%s received\n", progname, pch);
  1079. X    RestoreFiles();
  1080. }
  1081. X
  1082. int
  1083. errhup()
  1084. {
  1085. X    sigtrap("HUP");
  1086. }
  1087. X
  1088. int
  1089. errint()
  1090. {
  1091. X    sigtrap("INT");
  1092. }
  1093. X
  1094. int
  1095. errill()
  1096. {
  1097. X    sigtrap("ILL");
  1098. }
  1099. X
  1100. int
  1101. errtrap()
  1102. {
  1103. X    sigtrap("TRAP");
  1104. }
  1105. X
  1106. int
  1107. erriot()
  1108. {
  1109. X    sigtrap("IOT");
  1110. }
  1111. X
  1112. int
  1113. erremt()
  1114. {
  1115. X    sigtrap("EMT");
  1116. }
  1117. X
  1118. int
  1119. errfpe()
  1120. {
  1121. X    sigtrap("FPE");
  1122. }
  1123. X
  1124. int
  1125. errbus()
  1126. {
  1127. X    sigtrap("BUS");
  1128. }
  1129. X
  1130. int
  1131. errsegv()
  1132. {
  1133. X    sigtrap("SEGV");
  1134. }
  1135. X
  1136. int
  1137. errsys()
  1138. {
  1139. X    sigtrap("SYS");
  1140. }
  1141. X
  1142. int
  1143. errpipe()
  1144. {
  1145. X    sigtrap("PIPE");
  1146. }
  1147. X
  1148. int
  1149. erralrm()
  1150. {
  1151. X    sigtrap("ALRM");
  1152. }
  1153. X
  1154. int
  1155. errterm()
  1156. {
  1157. X    sigtrap("TERM");
  1158. }
  1159. X
  1160. /*
  1161. X * Stock 2.9BSD has all the below, but not as many as 4.2BSD: Want
  1162. X * SIGQUIT to drop core. Not worrying about:    SIGXCPU, SIGXFSZ,
  1163. X * SIGVTALRM, SIGPROF cannot be caught: SIGKILL, SIGSTOP Leaving
  1164. X * alone: SIGURG, SIGTSTP, SIGCONT, SIGCHLD, SIGTTIN, SIGTTOU, SIGIO 
  1165. X */
  1166. void
  1167. init_sigs()
  1168. {
  1169. X    signal(SIGHUP, errhup);
  1170. X    signal(SIGINT, errint);
  1171. X    signal(SIGILL, errill);
  1172. X    signal(SIGTRAP, errtrap);
  1173. X    signal(SIGIOT, erriot);
  1174. X    signal(SIGEMT, erremt);
  1175. X    signal(SIGFPE, errfpe);
  1176. #if !defined(DEBUG)
  1177. X    signal(SIGBUS, errbus);
  1178. X    signal(SIGSEGV, errsegv);
  1179. #endif /* !DEBUG */
  1180. X    signal(SIGSYS, errsys);
  1181. X    signal(SIGPIPE, errpipe);
  1182. X    signal(SIGALRM, erralrm);
  1183. X    signal(SIGTERM, errterm);
  1184. }
  1185. Purdue
  1186. chmod 0444 maketd/errors.c ||
  1187. echo 'restore of maketd/errors.c failed'
  1188. Wc_c="`wc -c < 'maketd/errors.c'`"
  1189. test 2359 -eq "$Wc_c" ||
  1190.     echo 'maketd/errors.c: original size 2359, current size' "$Wc_c"
  1191. fi
  1192. # ============= libsrtunq/srtapply.c ==============
  1193. if test -f 'libsrtunq/srtapply.c' -a X"$1" != X"-c"; then
  1194.     echo 'x - skipping libsrtunq/srtapply.c (File already exists)'
  1195. else
  1196. echo 'x - extracting libsrtunq/srtapply.c (Text)'
  1197. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtapply.c' &&
  1198. /* Sorting function that inserts strings one at a time into memory.
  1199. X * Strings are null terminated.
  1200. X * Only uniq strings are stored (no count is kept of how many)
  1201. X * Any memory used is freed on init (or re-init).
  1202. X *
  1203. X * Author: Steve Uitti, PUCC, 1985
  1204. X *
  1205. X * $Log:    srtapply.c,v $
  1206. X * Revision 2.0  90/06/01  14:30:07  ksb
  1207. X * net release June 90
  1208. X * 
  1209. X * Revision 1.1  90/04/13  16:09:57  ksb
  1210. X * Initial revision
  1211. X * 
  1212. X * Revision 1.1  87/12/09  11:11:28  ksb
  1213. X * Initial revision
  1214. X * 
  1215. X * Revision 1.3  87/12/07  15:58:29  ksb
  1216. X * typedef names and a mainline test driver
  1217. X * 
  1218. X * Revision 1.2  87/11/12  14:39:33  ksb
  1219. X * set ENOMEM in srtin
  1220. X * 
  1221. X * Revision 1.1  87/11/11  15:54:26  ksb
  1222. X * Initial revision
  1223. X */
  1224. X
  1225. #include <stdio.h>        /* for NULL                */
  1226. #include <sys/types.h>        /* for void, in V7            */
  1227. #include "srtunq.h"        /* for srtunq structs & functions    */
  1228. X
  1229. /*
  1230. X * apply given function to each string until one returns non-zero
  1231. X * return first non-zero (and stop), or 0 for "no match"
  1232. X */
  1233. int
  1234. srtapply(ent, fnc)
  1235. SRTTABLE *ent;
  1236. int (*fnc)();
  1237. {
  1238. X    register SRTENTRY *s, *top;
  1239. X
  1240. X    if (0 == (top = s = ent->srt_top)) {
  1241. X        return 0;
  1242. X    }
  1243. X    while (s->srt_less != NULL) {
  1244. X        s = s->srt_less;
  1245. X    }
  1246. X
  1247. X    for (;;) {
  1248. X        register int i;
  1249. X        if (0 != (i = (*fnc)(s->srt_str))) {
  1250. X            return i;
  1251. X        }
  1252. X        if (s->srt_more != NULL) {
  1253. X            s = s->srt_more;
  1254. X            while (s->srt_less != NULL)
  1255. X                s = s->srt_less;
  1256. X            continue;
  1257. X        }
  1258. X        for (;;) {
  1259. X            register SRTENTRY *q;
  1260. X            if (s == top)
  1261. X                return 0;
  1262. X            q = s;
  1263. X            s = s->srt_prev;
  1264. X            if (q == s->srt_less)
  1265. X                break;
  1266. X        }
  1267. X    }
  1268. }
  1269. X
  1270. Purdue
  1271. chmod 0444 libsrtunq/srtapply.c ||
  1272. echo 'restore of libsrtunq/srtapply.c failed'
  1273. Wc_c="`wc -c < 'libsrtunq/srtapply.c'`"
  1274. test 1514 -eq "$Wc_c" ||
  1275.     echo 'libsrtunq/srtapply.c: original size 1514, current size' "$Wc_c"
  1276. fi
  1277. # ============= libsrtunq/srtgets.c ==============
  1278. if test -f 'libsrtunq/srtgets.c' -a X"$1" != X"-c"; then
  1279.     echo 'x - skipping libsrtunq/srtgets.c (File already exists)'
  1280. else
  1281. echo 'x - extracting libsrtunq/srtgets.c (Text)'
  1282. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtgets.c' &&
  1283. /* Sorting function that inserts strings one at a time into memory.
  1284. X * Strings are null terminated.
  1285. X * Only uniq strings are stored (no count is kept of how many)
  1286. X * Any memory used is freed on init (or re-init).
  1287. X *
  1288. X * Author: Steve Uitti, PUCC, 1985
  1289. X *
  1290. X * $Log:    srtgets.c,v $
  1291. X * Revision 2.0  90/06/01  14:30:10  ksb
  1292. X * net release June 90
  1293. X * 
  1294. X * Revision 1.1  90/04/13  16:10:05  ksb
  1295. X * Initial revision
  1296. X * 
  1297. X * Revision 1.1  87/12/09  11:12:24  ksb
  1298. X * Initial revision
  1299. X * 
  1300. X * Revision 1.3  87/12/07  15:58:29  ksb
  1301. X * typedef names and a mainline test driver
  1302. X * 
  1303. X * Revision 1.2  87/11/12  14:39:33  ksb
  1304. X * set ENOMEM in srtin
  1305. X * 
  1306. X * Revision 1.1  87/11/11  15:54:26  ksb
  1307. X * Initial revision
  1308. X */
  1309. X
  1310. #include <stdio.h>        /* for NULL                */
  1311. #include <sys/types.h>        /* for void, in V7            */
  1312. #include "srtunq.h"        /* for srtunq structs & functions    */
  1313. X
  1314. /*
  1315. X * srtgets - get next string from sorted list, NULL if none more.
  1316. X */
  1317. char *
  1318. srtgets(ent)
  1319. SRTTABLE *ent;
  1320. {
  1321. X    register SRTENTRY *s;    /* tmp        */
  1322. X    register char *p;    /* ret val        */
  1323. X
  1324. X    if ((s = ent->srt_next) == NULL)
  1325. X        return NULL;
  1326. X
  1327. X    p = s->srt_str;
  1328. X    if (s->srt_more != NULL) {
  1329. X        s = s->srt_more;    /* go one more */
  1330. X        while (s->srt_less != NULL)/* then all the way less */
  1331. X            s = s->srt_less;
  1332. X        ent->srt_next = s;
  1333. X        return p;
  1334. X    }
  1335. X    while (s != ent->srt_top && s->srt_prev->srt_more == s)
  1336. X        s = s->srt_prev;    /* back down any more's */
  1337. X    s = (s == ent->srt_top) ? NULL : s->srt_prev;
  1338. X    ent->srt_next = s;
  1339. X
  1340. X    return p;
  1341. }
  1342. X
  1343. Purdue
  1344. chmod 0444 libsrtunq/srtgets.c ||
  1345. echo 'restore of libsrtunq/srtgets.c failed'
  1346. Wc_c="`wc -c < 'libsrtunq/srtgets.c'`"
  1347. test 1452 -eq "$Wc_c" ||
  1348.     echo 'libsrtunq/srtgets.c: original size 1452, current size' "$Wc_c"
  1349. fi
  1350. # ============= libsrtunq/srtin.c ==============
  1351. if test -f 'libsrtunq/srtin.c' -a X"$1" != X"-c"; then
  1352.     echo 'x - skipping libsrtunq/srtin.c (File already exists)'
  1353. else
  1354. echo 'x - extracting libsrtunq/srtin.c (Text)'
  1355. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtin.c' &&
  1356. /* Sorting function that inserts strings one at a time into memory.
  1357. X * Strings are null terminated.
  1358. X * Only uniq strings are stored (no count is kept of how many)
  1359. X * Any memory used is freed on init (or re-init).
  1360. X *
  1361. X * Author: Steve Uitti, PUCC, 1985
  1362. X *
  1363. X * $Log:    srtin.c,v $
  1364. X * Revision 2.0  90/06/01  14:30:11  ksb
  1365. X * net release June 90
  1366. X * 
  1367. X * Revision 1.1  90/04/13  16:10:09  ksb
  1368. X * Initial revision
  1369. X * 
  1370. X * Revision 1.1  87/12/09  11:12:39  ksb
  1371. X * Initial revision
  1372. X * 
  1373. X * Revision 1.3  87/12/07  15:58:29  ksb
  1374. X * typedef names and a mainline test driver
  1375. X * 
  1376. X * Revision 1.2  87/11/12  14:39:33  ksb
  1377. X * set ENOMEM in srtin
  1378. X * 
  1379. X * Revision 1.1  87/11/11  15:54:26  ksb
  1380. X * Initial revision
  1381. X */
  1382. X
  1383. #include <stdio.h>        /* for NULL                */
  1384. #include <sys/types.h>        /* for void, in V7            */
  1385. #include "srtunq.h"        /* for srtunq structs & functions    */
  1386. X
  1387. #include <errno.h>
  1388. extern int errno, strcmp();
  1389. extern char *malloc(), *strcpy();
  1390. X
  1391. /*
  1392. X * srtin - insert string in the sorted & unique list.
  1393. X * returns the string, else (char *)0 and sets errno
  1394. X */
  1395. char *
  1396. srtin(ent, str, compar)
  1397. SRTTABLE *ent;
  1398. char *str;
  1399. int (*compar)();
  1400. {
  1401. X    register char *p;        /* temp string pointer        */
  1402. X    register int i;            /* string compare result    */
  1403. X    register SRTENTRY *s, *os;    /* temp                */
  1404. X    register SRTENTRY **pps;    /* where            */
  1405. X
  1406. X    pps = & ent->srt_top;
  1407. X    os = NULL;
  1408. X    while (NULL != (s = *pps)) {
  1409. X        if (0 == (i = (*compar)(str, s->srt_str)))
  1410. X            return s->srt_str;
  1411. X        os = s;
  1412. X        pps = (i > 0) ? & s->srt_more : & s->srt_less;
  1413. X    }
  1414. X    if (NULL == (p = malloc((unsigned) (strlen(str) + sizeof(SRTENTRY))))) {
  1415. X        errno = ENOMEM;
  1416. X        return (char *)0;
  1417. X    }
  1418. X    s = (SRTENTRY *) p;
  1419. X
  1420. X    *pps = s;
  1421. X    s->srt_prev = os;
  1422. X    s->srt_less = s->srt_more = NULL;
  1423. X
  1424. X    return strcpy(s->srt_str, str);
  1425. }
  1426. X
  1427. Purdue
  1428. chmod 0444 libsrtunq/srtin.c ||
  1429. echo 'restore of libsrtunq/srtin.c failed'
  1430. Wc_c="`wc -c < 'libsrtunq/srtin.c'`"
  1431. test 1723 -eq "$Wc_c" ||
  1432.     echo 'libsrtunq/srtin.c: original size 1723, current size' "$Wc_c"
  1433. fi
  1434. # ============= libsrtunq/srtdtree.c ==============
  1435. if test -f 'libsrtunq/srtdtree.c' -a X"$1" != X"-c"; then
  1436.     echo 'x - skipping libsrtunq/srtdtree.c (File already exists)'
  1437. else
  1438. echo 'x - extracting libsrtunq/srtdtree.c (Text)'
  1439. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtdtree.c' &&
  1440. /* Sorting function that inserts strings one at a time into memory.
  1441. X * Strings are null terminated.
  1442. X * Only uniq strings are stored (no count is kept of how many)
  1443. X * Any memory used is freed on init (or re-init).
  1444. X *
  1445. X * Author: Steve Uitti, PUCC, 1985
  1446. X *
  1447. X * $Log:    srtdtree.c,v $
  1448. X * Revision 2.0  90/06/01  14:30:08  ksb
  1449. X * net release June 90
  1450. X * 
  1451. X * Revision 1.1  90/04/13  16:10:02  ksb
  1452. X * Initial revision
  1453. X * 
  1454. X * Revision 1.1  87/12/09  11:11:46  ksb
  1455. X * Initial revision
  1456. X * 
  1457. X * Revision 1.3  87/12/07  15:58:29  ksb
  1458. X * typedef names and a mainline test driver
  1459. X * 
  1460. X * Revision 1.2  87/11/12  14:39:33  ksb
  1461. X * set ENOMEM in srtin
  1462. X * 
  1463. X * Revision 1.1  87/11/11  15:54:26  ksb
  1464. X * Initial revision
  1465. X */
  1466. X
  1467. #include <stdio.h>        /* for NULL                */
  1468. #include <sys/types.h>        /* for void, in V7            */
  1469. #include "srtunq.h"        /* for srtunq structs & functions    */
  1470. X
  1471. /* srtdtree - recursive tree delete
  1472. X * frees all less & more entries pointed to by the srt struct
  1473. X */
  1474. void
  1475. srtdtree(srt)
  1476. register SRTENTRY *srt;
  1477. {
  1478. X    if (srt->srt_less != NULL) {
  1479. X        srtdtree(srt->srt_less);
  1480. X        free((char *) srt->srt_less);
  1481. X        srt->srt_less = NULL;
  1482. X    }
  1483. X    if (srt->srt_more != NULL) {
  1484. X        srtdtree(srt->srt_more);
  1485. X        free((char *) srt->srt_more);
  1486. X        srt->srt_more = NULL;
  1487. X    }
  1488. }
  1489. X
  1490. Purdue
  1491. chmod 0444 libsrtunq/srtdtree.c ||
  1492. echo 'restore of libsrtunq/srtdtree.c failed'
  1493. Wc_c="`wc -c < 'libsrtunq/srtdtree.c'`"
  1494. test 1226 -eq "$Wc_c" ||
  1495.     echo 'libsrtunq/srtdtree.c: original size 1226, current size' "$Wc_c"
  1496. fi
  1497. # ============= libsrtunq/srtmem.c ==============
  1498. if test -f 'libsrtunq/srtmem.c' -a X"$1" != X"-c"; then
  1499.     echo 'x - skipping libsrtunq/srtmem.c (File already exists)'
  1500. else
  1501. echo 'x - extracting libsrtunq/srtmem.c (Text)'
  1502. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtmem.c' &&
  1503. /* Sorting function that inserts strings one at a time into memory.
  1504. X * Strings are null terminated.
  1505. X * Only uniq strings are stored (no count is kept of how many)
  1506. X * Any memory used is freed on init (or re-init).
  1507. X *
  1508. X * Author: Steve Uitti, PUCC, 1985  (+ ksb 1990)
  1509. X *
  1510. X * $Log:    srtmem.c,v $
  1511. X * Revision 2.0  90/06/01  14:30:13  ksb
  1512. X * net release June 90
  1513. X * 
  1514. X * Revision 1.1  90/04/13  16:24:03  ksb
  1515. X * Initial revision
  1516. X * 
  1517. X */
  1518. X
  1519. #include <stdio.h>        /* for NULL                */
  1520. #include <sys/types.h>        /* for void, in V7            */
  1521. #include "srtunq.h"        /* for srtunq structs & functions    */
  1522. X
  1523. #include <errno.h>
  1524. extern int errno, strcmp();
  1525. extern char *malloc(), *strcpy();
  1526. X
  1527. /*
  1528. X * srtmem - is a string in the sorted & unique list.
  1529. X * returns the string, else (char *)0
  1530. X */
  1531. char *
  1532. srtmem(ent, str, compar)
  1533. SRTTABLE *ent;
  1534. char *str;
  1535. int (*compar)();
  1536. {
  1537. X    register char *p;        /* temp string pointer        */
  1538. X    register int i;            /* string compare result    */
  1539. X    register SRTENTRY *s, *os;    /* temp                */
  1540. X    register SRTENTRY **pps;    /* where            */
  1541. X
  1542. X    pps = & ent->srt_top;
  1543. X    os = NULL;
  1544. X    while (NULL != (s = *pps)) {
  1545. X        if (0 == (i = (*compar)(str, s->srt_str)))
  1546. X            return s->srt_str;
  1547. X        os = s;
  1548. X        pps = (i > 0) ? & s->srt_more : & s->srt_less;
  1549. X    }
  1550. X    errno = ENOENT;
  1551. X    return (char *)0;
  1552. }
  1553. X
  1554. Purdue
  1555. chmod 0444 libsrtunq/srtmem.c ||
  1556. echo 'restore of libsrtunq/srtmem.c failed'
  1557. Wc_c="`wc -c < 'libsrtunq/srtmem.c'`"
  1558. test 1240 -eq "$Wc_c" ||
  1559.     echo 'libsrtunq/srtmem.c: original size 1240, current size' "$Wc_c"
  1560. fi
  1561. # ============= maketd/machine.h ==============
  1562. if test -f 'maketd/machine.h' -a X"$1" != X"-c"; then
  1563.     echo 'x - skipping maketd/machine.h (File already exists)'
  1564. else
  1565. echo 'x - extracting maketd/machine.h (Text)'
  1566. sed 's/^X//' << 'Purdue' > 'maketd/machine.h' &&
  1567. /*
  1568. X * the macros below are used to port maketd to variaous hosts
  1569. X * fill in the ones you know.
  1570. X */
  1571. X
  1572. /* your system may define one of these by default
  1573. X * (if not set one)
  1574. X */
  1575. /* pdp11     compile for a BSD2_9 or greater pdp11 OS        */
  1576. /*#define pdp11                        /**/
  1577. X
  1578. /* SYSV        compile for system V                    */
  1579. /*#define SYSV                        /**/
  1580. X
  1581. /* bsd        compile for system V                    */
  1582. #define bsd                        /**/
  1583. X
  1584. X
  1585. /* DEBUG    include more debug code for -v option            */
  1586. #undef DEBUG                        /**/
  1587. /*#define DEBUG                        /**/
  1588. X
  1589. X
  1590. /* CPP_M    C preprocessor has a -M                    */
  1591. #define CPP_M                        /**/
  1592. /* CPP        location of C preprocessor
  1593. X * (default "/lib/cpp ")
  1594. X */
  1595. X
  1596. /* M4_M        m4 has a -M, this is currently the only way to use m4    */
  1597. #define M4_M
  1598. /* M4        location of m4 macro preprocessor
  1599. X * (default "/usr/bin/m4 ")
  1600. X */
  1601. X
  1602. /* INCLD    place where <file.h> files are rooted
  1603. X * (default "/usr/include")
  1604. X */
  1605. X
  1606. /* DEL_BACKUP     delete "Makefile.bak" after each run of maketd        */
  1607. /*#define DEL_BACKUP                    /**/
  1608. X
  1609. /* here we deduce some things about the system from the info above
  1610. X * (some of these may need special cases for your strange systems)
  1611. X */
  1612. X
  1613. /* DUP2        this UNIX has Berk dup2 syscall                */
  1614. #if defined(bsd)
  1615. #define DUP2
  1616. #endif
  1617. X
  1618. #if defined(bsd)
  1619. #define    strrchr    rindex
  1620. #define    strchr    index
  1621. #endif
  1622. X
  1623. #if !defined(bsd)
  1624. #define vfork    fork
  1625. #endif
  1626. Purdue
  1627. chmod 0644 maketd/machine.h ||
  1628. echo 'restore of maketd/machine.h failed'
  1629. Wc_c="`wc -c < 'maketd/machine.h'`"
  1630. test 1278 -eq "$Wc_c" ||
  1631.     echo 'maketd/machine.h: original size 1278, current size' "$Wc_c"
  1632. fi
  1633. # ============= libopt/getopt.h ==============
  1634. if test -f 'libopt/getopt.h' -a X"$1" != X"-c"; then
  1635.     echo 'x - skipping libopt/getopt.h (File already exists)'
  1636. else
  1637. echo 'x - extracting libopt/getopt.h (Text)'
  1638. sed 's/^X//' << 'Purdue' > 'libopt/getopt.h' &&
  1639. /*
  1640. X * get option letters from argument vector
  1641. X * then get arguemnts from vector
  1642. X * legale options passed with ':' indicating where an optarg can be
  1643. X *
  1644. X *    -- example usage --
  1645. X *
  1646. X *    static char sbOpts[] = "vnD:A:";
  1647. X *    register int curopt;
  1648. X *    register char *pch;
  1649. X *    extern char *getenv();
  1650. X *    
  1651. X *    if ((char *)0 != (pch = getenv("TESTIT")))
  1652. X *        envopt(pch);
  1653. X *
  1654. X *    optsil = 1;
  1655. X *    while (EOF != (curopt = getopt(argc, argv, sbOpts))) {
  1656. X *        switch (curopt) {
  1657. X *        case 'v': ....
  1658. X *        case 'D':
  1659. X *            addbag(optarg);
  1660. X *            break;
  1661. X *        case BADARG:
  1662. X *            fprintf(stderr, "`%c' is need an argument\n", optopt);
  1663. X *            exit(2);
  1664. X *        case BADCH:
  1665. X *            fprintf(stderr, "`%c' is not an option\n", optopt);
  1666. X *            exit(1);
  1667. X *        }
  1668. X *    }
  1669. X *    ...
  1670. X *    while (EOF != getarg(argc, argv)) {
  1671. X *        f(optarg);
  1672. X *    }
  1673. X *    -- see mkcmd(1L) --
  1674. X */
  1675. extern int
  1676. X    optopt,            /* character checked for validity    */
  1677. X    optind,            /* gross, old kludge            */
  1678. X    optsil;            /* 1 == be silent, 0 = print errors    */
  1679. extern char
  1680. X    *optarg;        /* argument associated with option    */
  1681. X
  1682. #define BADCH    ('?')
  1683. #define BADOPT    BADCH
  1684. #define BADARG    ('*')
  1685. extern int getopt(), getarg(), rescan(), envopt();
  1686. #define rescan()    optind = 1
  1687. Purdue
  1688. chmod 0444 libopt/getopt.h ||
  1689. echo 'restore of libopt/getopt.h failed'
  1690. Wc_c="`wc -c < 'libopt/getopt.h'`"
  1691. test 1148 -eq "$Wc_c" ||
  1692.     echo 'libopt/getopt.h: original size 1148, current size' "$Wc_c"
  1693. fi
  1694. # ============= libsrtunq/srtfree.c ==============
  1695. if test -f 'libsrtunq/srtfree.c' -a X"$1" != X"-c"; then
  1696.     echo 'x - skipping libsrtunq/srtfree.c (File already exists)'
  1697. else
  1698. echo 'x - extracting libsrtunq/srtfree.c (Text)'
  1699. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtfree.c' &&
  1700. /* Sorting function that inserts strings one at a time into memory.
  1701. X * Strings are null terminated.
  1702. X * Only uniq strings are stored (no count is kept of how many)
  1703. X * Any memory used is freed on init (or re-init).
  1704. X *
  1705. X * Author: Steve Uitti, PUCC, 1985
  1706. X *
  1707. X * $Log:    srtfree.c,v $
  1708. X * Revision 2.0  90/06/01  14:30:09  ksb
  1709. X * net release June 90
  1710. X * 
  1711. X * Revision 1.1  90/04/13  16:10:04  ksb
  1712. X * Initial revision
  1713. X * 
  1714. X * Revision 1.1  87/12/09  11:12:02  ksb
  1715. X * Initial revision
  1716. X * 
  1717. X * Revision 1.3  87/12/07  15:58:29  ksb
  1718. X * typedef names and a mainline test driver
  1719. X * 
  1720. X * Revision 1.2  87/11/12  14:39:33  ksb
  1721. X * set ENOMEM in srtin
  1722. X * 
  1723. X * Revision 1.1  87/11/11  15:54:26  ksb
  1724. X * Initial revision
  1725. X */
  1726. X
  1727. #include <stdio.h>        /* for NULL                */
  1728. #include <sys/types.h>        /* for void, in V7            */
  1729. #include "srtunq.h"        /* for srtunq structs & functions    */
  1730. X
  1731. /*
  1732. X * srtfree - delete all the data, init the tag
  1733. X * is the structure empty?
  1734. X */
  1735. void
  1736. srtfree(ent)
  1737. SRTTABLE *ent;
  1738. {
  1739. X    if (ent->srt_top != NULL) {
  1740. X        srtdtree(ent->srt_top);
  1741. X        free((char *) ent->srt_top);
  1742. X        srtinit(ent);
  1743. X    }
  1744. }
  1745. X
  1746. Purdue
  1747. chmod 0444 libsrtunq/srtfree.c ||
  1748. echo 'restore of libsrtunq/srtfree.c failed'
  1749. Wc_c="`wc -c < 'libsrtunq/srtfree.c'`"
  1750. test 1067 -eq "$Wc_c" ||
  1751.     echo 'libsrtunq/srtfree.c: original size 1067, current size' "$Wc_c"
  1752. fi
  1753. # ============= libsrtunq/srtgti.c ==============
  1754. if test -f 'libsrtunq/srtgti.c' -a X"$1" != X"-c"; then
  1755.     echo 'x - skipping libsrtunq/srtgti.c (File already exists)'
  1756. else
  1757. echo 'x - extracting libsrtunq/srtgti.c (Text)'
  1758. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtgti.c' &&
  1759. /* Sorting function that inserts strings one at a time into memory.
  1760. X * Strings are null terminated.
  1761. X * Only uniq strings are stored (no count is kept of how many)
  1762. X * Any memory used is freed on init (or re-init).
  1763. X *
  1764. X * Author: Steve Uitti, PUCC, 1985
  1765. X *
  1766. X * $Log:    srtgti.c,v $
  1767. X * Revision 2.0  90/06/01  14:30:10  ksb
  1768. X * net release June 90
  1769. X * 
  1770. X * Revision 1.1  90/04/13  16:10:07  ksb
  1771. X * Initial revision
  1772. X * 
  1773. X * Revision 1.1  87/12/09  11:12:34  ksb
  1774. X * Initial revision
  1775. X * 
  1776. X * Revision 1.3  87/12/07  15:58:29  ksb
  1777. X * typedef names and a mainline test driver
  1778. X * 
  1779. X * Revision 1.2  87/11/12  14:39:33  ksb
  1780. X * set ENOMEM in srtin
  1781. X * 
  1782. X * Revision 1.1  87/11/11  15:54:26  ksb
  1783. X * Initial revision
  1784. X */
  1785. X
  1786. #include <stdio.h>        /* for NULL                */
  1787. #include <sys/types.h>        /* for void, in V7            */
  1788. #include "srtunq.h"        /* for srtunq structs & functions    */
  1789. X
  1790. /*
  1791. X * srtgti - init get string function
  1792. X */
  1793. void
  1794. srtgti(ent)
  1795. SRTTABLE *ent;
  1796. {
  1797. X    register SRTENTRY *pSE;
  1798. X
  1799. X    if (NULL != (pSE = ent->srt_top)) {
  1800. X        while (pSE->srt_less != NULL)
  1801. X            pSE = pSE->srt_less;
  1802. X    }
  1803. X    ent->srt_next = pSE;
  1804. }
  1805. X
  1806. Purdue
  1807. chmod 0444 libsrtunq/srtgti.c ||
  1808. echo 'restore of libsrtunq/srtgti.c failed'
  1809. Wc_c="`wc -c < 'libsrtunq/srtgti.c'`"
  1810. test 1067 -eq "$Wc_c" ||
  1811.     echo 'libsrtunq/srtgti.c: original size 1067, current size' "$Wc_c"
  1812. fi
  1813. # ============= libsrtunq/srtinit.c ==============
  1814. if test -f 'libsrtunq/srtinit.c' -a X"$1" != X"-c"; then
  1815.     echo 'x - skipping libsrtunq/srtinit.c (File already exists)'
  1816. else
  1817. echo 'x - extracting libsrtunq/srtinit.c (Text)'
  1818. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtinit.c' &&
  1819. /* Sorting function that inserts strings one at a time into memory.
  1820. X * Strings are null terminated.
  1821. X * Only uniq strings are stored (no count is kept of how many)
  1822. X * Any memory used is freed on init (or re-init).
  1823. X *
  1824. X * Author: Steve Uitti, PUCC, 1985
  1825. X *
  1826. X * $Log:    srtinit.c,v $
  1827. X * Revision 2.0  90/06/01  14:30:12  ksb
  1828. X * net release June 90
  1829. X * 
  1830. X * Revision 1.1  90/04/13  16:10:11  ksb
  1831. X * Initial revision
  1832. X * 
  1833. X * Revision 1.1  87/12/09  11:12:50  ksb
  1834. X * Initial revision
  1835. X * 
  1836. X * Revision 1.3  87/12/07  15:58:29  ksb
  1837. X * typedef names and a mainline test driver
  1838. X * 
  1839. X * Revision 1.2  87/11/12  14:39:33  ksb
  1840. X * set ENOMEM in srtin
  1841. X * 
  1842. X * Revision 1.1  87/11/11  15:54:26  ksb
  1843. X * Initial revision
  1844. X */
  1845. X
  1846. #include <stdio.h>        /* for NULL                */
  1847. #include <sys/types.h>        /* for void, in V7            */
  1848. #include "srtunq.h"        /* for srtunq structs & functions    */
  1849. X
  1850. /* srtinit - init the database tags
  1851. X * erase any knowledge, extractions at the begining
  1852. X */
  1853. void
  1854. srtinit(ent)
  1855. SRTTABLE *ent;
  1856. {
  1857. X    ent->srt_top = ent->srt_next = NULL;
  1858. }
  1859. X
  1860. Purdue
  1861. chmod 0444 libsrtunq/srtinit.c ||
  1862. echo 'restore of libsrtunq/srtinit.c failed'
  1863. Wc_c="`wc -c < 'libsrtunq/srtinit.c'`"
  1864. test 1011 -eq "$Wc_c" ||
  1865.     echo 'libsrtunq/srtinit.c: original size 1011, current size' "$Wc_c"
  1866. fi
  1867. # ============= maketd/maketd.h ==============
  1868. if test -f 'maketd/maketd.h' -a X"$1" != X"-c"; then
  1869.     echo 'x - skipping maketd/maketd.h (File already exists)'
  1870. else
  1871. echo 'x - extracting maketd/maketd.h (Text)'
  1872. sed 's/^X//' << 'Purdue' > 'maketd/maketd.h' &&
  1873. /*
  1874. X * here is the real brains of maketd
  1875. X *
  1876. X * a DependInfo node contains all the info we need to generate depends
  1877. X * for a target.
  1878. X */
  1879. #define FALSE    (0)
  1880. #define TRUE    (1)
  1881. #define BUFSIZE    256
  1882. #define MAXCOL    78
  1883. X
  1884. typedef struct DInode {
  1885. X    int
  1886. X        localo,        /* 0 == local o, 1 == non-local o    */
  1887. X        binarydep;    /* 0 == not binary, 1 == binary        */
  1888. X    char
  1889. X        *filename,    /* The filename to process (optarg)    */
  1890. X        *inlib,        /* The library in which we live        */
  1891. X        *cppflags,    /* The CPP flags for this file (-CDIU)    */
  1892. X        *destdir,    /* The destination directory (-o)    */
  1893. X        *suffix,    /* The suffix for the dest file (-s)    */
  1894. X        *explicit,    /* the explicit rule to use, if any    */
  1895. X        *basename,    /* The basename for the dest file (-t)    */
  1896. X        *preprocessor;    /* The preprocessor to use (-c, -4, -f)    */
  1897. X    struct DInode
  1898. X        *next;        /* The next structure in the linked list*/
  1899. } DependInfo;
  1900. X
  1901. extern int strlen();
  1902. extern char *malloc(), *strcpy();
  1903. #define    STRSAVE(Mpch)    strcpy(malloc((unsigned)strlen(Mpch)+1),Mpch)
  1904. X
  1905. extern char
  1906. X    *pchBackup;    /* the backup file name                */
  1907. extern FILE
  1908. X    *makefp;    /* file pointer to the dest makefile        */
  1909. extern int
  1910. X    backedup;    /* is the backup file is done            */
  1911. Purdue
  1912. chmod 0444 maketd/maketd.h ||
  1913. echo 'restore of maketd/maketd.h failed'
  1914. Wc_c="`wc -c < 'maketd/maketd.h'`"
  1915. test 1144 -eq "$Wc_c" ||
  1916.     echo 'maketd/maketd.h: original size 1144, current size' "$Wc_c"
  1917. fi
  1918. # ============= libsrtunq/srtunq.h ==============
  1919. if test -f 'libsrtunq/srtunq.h' -a X"$1" != X"-c"; then
  1920.     echo 'x - skipping libsrtunq/srtunq.h (File already exists)'
  1921. else
  1922. echo 'x - extracting libsrtunq/srtunq.h (Text)'
  1923. sed 's/^X//' << 'Purdue' > 'libsrtunq/srtunq.h' &&
  1924. /* include file for memory resident unique sorting routines. */
  1925. X
  1926. /* database entry */
  1927. typedef struct srtbl {
  1928. X    struct srtbl *srt_prev;        /* parent            */
  1929. X    struct srtbl *srt_less;        /* something < srt_str        */
  1930. X    struct srtbl *srt_more;        /* something > srt_str        */
  1931. X    char srt_str[1];        /* dynamic: 1 for null at EOS    */
  1932. } SRTENTRY;
  1933. X
  1934. /* database tag */
  1935. typedef struct srtent {
  1936. X    SRTENTRY *srt_top;        /* root of the tree        */
  1937. X    SRTENTRY *srt_next;        /* pointer for srtget        */
  1938. } SRTTABLE;
  1939. X
  1940. void
  1941. X    srtinit(),            /* init for srtin        */
  1942. X    srtfree(),            /* free a database        */
  1943. X    srtdtree(),            /* recursive delete of subtree    */
  1944. X    srtgti();            /* init for srtgets        */
  1945. char
  1946. X    *srtin(),            /* insert string - return err    */
  1947. X    *srtmem(),            /* string is a member of tree    */
  1948. X    *srtgets();            /* get next string        */
  1949. int
  1950. X    srtdel();            /* delete from a unique list    */
  1951. Purdue
  1952. chmod 0444 libsrtunq/srtunq.h ||
  1953. echo 'restore of libsrtunq/srtunq.h failed'
  1954. Wc_c="`wc -c < 'libsrtunq/srtunq.h'`"
  1955. test 819 -eq "$Wc_c" ||
  1956.     echo 'libsrtunq/srtunq.h: original size 819, current size' "$Wc_c"
  1957. fi
  1958. # ============= maketd/abrv.h ==============
  1959. if test -f 'maketd/abrv.h' -a X"$1" != X"-c"; then
  1960.     echo 'x - skipping maketd/abrv.h (File already exists)'
  1961. else
  1962. echo 'x - extracting maketd/abrv.h (Text)'
  1963. sed 's/^X//' << 'Purdue' > 'maketd/abrv.h' &&
  1964. /*
  1965. X * abbreviation fucntions, maintain a unique list of strings that are
  1966. X * compressed
  1967. X * 
  1968. X * include srtunq.h first
  1969. X */
  1970. X
  1971. #define MXABR 26        /* upper case chars used        */
  1972. extern char *abrvtbl[];        /* translation table strings        */
  1973. extern int abrvlen[];        /* string lengths (for speed)        */
  1974. extern struct srtent abrv;    /* include file abrevs            */
  1975. X
  1976. extern int lngsrt();        /* compare function for abrevs        */
  1977. extern char *hincl();        /* optimizer for include paths        */
  1978. extern void srchincl();        /* find [A-Z] makefile defines        */
  1979. extern void abrvsetup();    /* create abrvs, write them        */
  1980. extern int findabr();        /* find longest abrv            */
  1981. Purdue
  1982. chmod 0444 maketd/abrv.h ||
  1983. echo 'restore of maketd/abrv.h failed'
  1984. Wc_c="`wc -c < 'maketd/abrv.h'`"
  1985. test 621 -eq "$Wc_c" ||
  1986.     echo 'maketd/abrv.h: original size 621, current size' "$Wc_c"
  1987. fi
  1988. # ============= libopt/getarg.c ==============
  1989. if test -f 'libopt/getarg.c' -a X"$1" != X"-c"; then
  1990.     echo 'x - skipping libopt/getarg.c (File already exists)'
  1991. else
  1992. echo 'x - extracting libopt/getarg.c (Text)'
  1993. sed 's/^X//' << 'Purdue' > 'libopt/getarg.c' &&
  1994. /*
  1995. X * aux function to return arguments
  1996. X */
  1997. #include <stdio.h>
  1998. #include "getopt.h"
  1999. X
  2000. extern int _eargc;
  2001. extern char **_eargv;
  2002. X
  2003. /*
  2004. X * return each non-option argument one at a time, EOF for end of list
  2005. X */
  2006. int
  2007. getarg(nargc, nargv)
  2008. int nargc;
  2009. char **nargv;
  2010. {
  2011. X    if ((char **)0 != _eargv) {
  2012. X        if (optind < _eargc) {
  2013. X            nargv = _eargv;
  2014. X            nargc = _eargc;
  2015. X        } else {
  2016. X            _eargv = (char **)0;
  2017. X            optind = 1;
  2018. X        }
  2019. X    }
  2020. X    if (nargc <= optind) {
  2021. X        optarg = (char *) 0;
  2022. X        return EOF;
  2023. X    } else {
  2024. X        optarg = nargv[optind++];
  2025. X        return 0;
  2026. X    }
  2027. }
  2028. Purdue
  2029. chmod 0444 libopt/getarg.c ||
  2030. echo 'restore of libopt/getarg.c failed'
  2031. Wc_c="`wc -c < 'libopt/getarg.c'`"
  2032. test 519 -eq "$Wc_c" ||
  2033.     echo 'libopt/getarg.c: original size 519, current size' "$Wc_c"
  2034. fi
  2035. # ============= libsrtunq/README ==============
  2036. if test -f 'libsrtunq/README' -a X"$1" != X"-c"; then
  2037.     echo 'x - skipping libsrtunq/README (File already exists)'
  2038. else
  2039. echo 'x - extracting libsrtunq/README (Text)'
  2040. sed 's/^X//' << 'Purdue' > 'libsrtunq/README' &&
  2041. # $Id: README,v 1.1 90/11/29 07:57:03 ksb Exp $
  2042. X
  2043. These routines are used in a few PUCC tools to implement a `list of strings'
  2044. that we can add values to on the fly.  After accumulating the strings we
  2045. traverse the list (in some order) to do a final output.  Maketd(1L) is a prime
  2046. example of a fair use of these.
  2047. X
  2048. No one said they had to be beautiful.  They just work.
  2049. X
  2050. Stephen Uitti write these a long time ago, Kevin Braunsdorf added `delete'
  2051. when it was needed for another project in 1990.
  2052. Purdue
  2053. chmod 0444 libsrtunq/README ||
  2054. echo 'restore of libsrtunq/README failed'
  2055. Wc_c="`wc -c < 'libsrtunq/README'`"
  2056. test 490 -eq "$Wc_c" ||
  2057.     echo 'libsrtunq/README: original size 490, current size' "$Wc_c"
  2058. fi
  2059. # ============= maketd/GCC.awk ==============
  2060. if test -f 'maketd/GCC.awk' -a X"$1" != X"-c"; then
  2061.     echo 'x - skipping maketd/GCC.awk (File already exists)'
  2062. else
  2063. echo 'x - extracting maketd/GCC.awk (Binary)'
  2064. sed 's/^X//' << 'Purdue' | uudecode &&
  2065. begin 600 maketd/GCC.awk
  2066. M(R$O=7-R+V)I;B]N87=K"B,@5&AI<R!F:6QE(&UA>2!B92!U<V5D('=I=&@@
  2067. M5C@@87=K('1O(&9I;'1E<B!G8V,M8W!P(&]U='!U="!I;G1O"B,@<V]M971H
  2068. M:6YG(&UA:V5T9"!W:6QL('5S92X@(%1H92!L:6YE(&)E;&]W('-H;W5L9"!B
  2069. M92!P=70@:6X@=&AE"B,@<')E<')O8V5S<V]R<R!A<G)A>2!I;B!S;&]T(#`N
  2070. M"B,@(B]U<W(O=6YS=7`O;&EB+V=C8R]G8V,M8W!P("U-("5)("5&('PO=7-R
  2071. M+W5N<W5P+V)I;B]V.&%W:R`M9B`O=7-R+VQO8V%L+VQI8B]'0T,N87=K("TB
  2072. M"B,@*&EN('-O;64@<&QA8V5S(%8X(&%W:R!I<R!N87=K*0I"14=)3B!["@D@
  2073. M1E,@/2`B6R!<=%Q<7%Q=*B(["@D@:&5A9"`]("(B.PI]"@I["@D@<R`](#$[
  2074. M"GT*"B\Z+R!["@D@:&5A9"`]("0Q("0R.PH)(',@/2`S.PI]"@I["@EF;W(@
  2075. M*&L@/2!S.R!K(#P@3D8[(&LK*RD*"0EI9B`H)&L@(7X@(EY;(%QT72HD(BD*
  2076. 5"0D)<')I;G0@:&5A9"P@)&L["GT*
  2077. `
  2078. end
  2079. Purdue
  2080. chmod 0444 maketd/GCC.awk ||
  2081. echo 'restore of maketd/GCC.awk failed'
  2082. Wc_c="`wc -c < 'maketd/GCC.awk'`"
  2083. test 471 -eq "$Wc_c" ||
  2084.     echo 'maketd/GCC.awk: original size 471, current size' "$Wc_c"
  2085. fi
  2086. # ============= maketd/errors.h ==============
  2087. if test -f 'maketd/errors.h' -a X"$1" != X"-c"; then
  2088.     echo 'x - skipping maketd/errors.h (File already exists)'
  2089. else
  2090. echo 'x - extracting maketd/errors.h (Text)'
  2091. sed 's/^X//' << 'Purdue' > 'maketd/errors.h' &&
  2092. /*
  2093. X * this file should handle all of our errors
  2094. X * it restores the original file and prints error messages
  2095. X * if problems are found backing out
  2096. X */
  2097. extern void
  2098. X    init_sigs(),        /* set up to handle signals to restore    */
  2099. X    RestoreFiles(),        /* clean up files on errors        */
  2100. X    OutOfMemory();        /* ran out of memory            */
  2101. Purdue
  2102. chmod 0444 maketd/errors.h ||
  2103. echo 'restore of maketd/errors.h failed'
  2104. Wc_c="`wc -c < 'maketd/errors.h'`"
  2105. test 310 -eq "$Wc_c" ||
  2106.     echo 'maketd/errors.h: original size 310, current size' "$Wc_c"
  2107. fi
  2108. # ============= libopt/rescan.c ==============
  2109. if test -f 'libopt/rescan.c' -a X"$1" != X"-c"; then
  2110.     echo 'x - skipping libopt/rescan.c (File already exists)'
  2111. else
  2112. echo 'x - extracting libopt/rescan.c (Text)'
  2113. sed 's/^X//' << 'Purdue' > 'libopt/rescan.c' &&
  2114. /*
  2115. X * aux function to rescan arguemnts
  2116. X */
  2117. #include <stdio.h>
  2118. #include "getopt.h"
  2119. X
  2120. #undef rescan
  2121. X
  2122. /*
  2123. X * this function resets optind (a variable the user should not touch)
  2124. X * so the user can scan the arguments another time
  2125. X */
  2126. int
  2127. rescan()
  2128. {
  2129. X    optind = 1;
  2130. }
  2131. Purdue
  2132. chmod 0444 libopt/rescan.c ||
  2133. echo 'restore of libopt/rescan.c failed'
  2134. Wc_c="`wc -c < 'libopt/rescan.c'`"
  2135. test 256 -eq "$Wc_c" ||
  2136.     echo 'libopt/rescan.c: original size 256, current size' "$Wc_c"
  2137. fi
  2138. # ============= maketd/README ==============
  2139. if test -f 'maketd/README' -a X"$1" != X"-c"; then
  2140.     echo 'x - skipping maketd/README (File already exists)'
  2141. else
  2142. echo 'x - extracting maketd/README (Text)'
  2143. sed 's/^X//' << 'Purdue' > 'maketd/README' &&
  2144. Maketd is kinda like mkmf, it is older (here at PUCC) and we
  2145. still use it quite a bit.  The compressed output makes it neat,
  2146. and the options are nice.
  2147. X
  2148. So give it a try.
  2149. X
  2150. kayessbee,
  2151. --
  2152. Kevin Braunsdorf, ksb@cc.purdue.edu, pur-ee!ksb, purdue!ksb
  2153. Purdue
  2154. chmod 0444 maketd/README ||
  2155. echo 'restore of maketd/README failed'
  2156. Wc_c="`wc -c < 'maketd/README'`"
  2157. test 245 -eq "$Wc_c" ||
  2158.     echo 'maketd/README: original size 245, current size' "$Wc_c"
  2159. fi
  2160. # ============= maketd/main.h ==============
  2161. if test -f 'maketd/main.h' -a X"$1" != X"-c"; then
  2162.     echo 'x - skipping maketd/main.h (File already exists)'
  2163. else
  2164. echo 'x - extracting maketd/main.h (Text)'
  2165. sed 's/^X//' << 'Purdue' > 'maketd/main.h' &&
  2166. /*
  2167. X * parse options
  2168. X */
  2169. X
  2170. extern char *progname, uline[], *help[];
  2171. extern int main(), usage();
  2172. extern int alldep, use_stdout, force_head, replace, verbose, shortincl;
  2173. extern char *explicit, *exten, *inlib, *makename;
  2174. Purdue
  2175. chmod 0444 maketd/main.h ||
  2176. echo 'restore of maketd/main.h failed'
  2177. Wc_c="`wc -c < 'maketd/main.h'`"
  2178. test 216 -eq "$Wc_c" ||
  2179.     echo 'maketd/main.h: original size 216, current size' "$Wc_c"
  2180. fi
  2181. exit 0
  2182.