home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume23 / lome / part01 next >
Internet Message Format  |  1991-01-08  |  64KB

  1. Path: j.cc.purdue.edu!mentor.cc.purdue.edu!noose.ecn.purdue.edu!samsung!zaphod.mps.ohio-state.edu!wuarchive!uunet!papaya.bbn.com!rsalz
  2. From: rsalz@bbn.com (Rich Salz)
  3. Newsgroups: comp.sources.unix
  4. Subject: v23i051:  Line oriented macro processor, Part01/09
  5. Message-ID: <3025@litchi.bbn.com>
  6. Date: 29 Nov 90 17:40:45 GMT
  7. Organization: BBN Systems and Technologies, Cambridge MA
  8. Lines: 1928
  9. Approved: rsalz@uunet.UU.NET
  10.  
  11. Submitted-by: Darren New <new@ee.udel.edu>
  12. Posting-number: Volume 23, Issue 51
  13. Archive-name: lome/part01
  14.  
  15. This set of sources contains three general purpose line-oriented macro
  16. processors. They currently run on the Commodore Amiga and under
  17. SunOS4.x.  They will probably port with little or no effort to most
  18. machines.
  19.  
  20. LOME (Line Oriented Macro Expander) is a relatively sophiticated macro
  21. expander. It is designed to be compiled by Comp1 or interpreted by
  22. Interp, and as such is very portable. The syntax and semantics are
  23. described herein.
  24.  
  25. A second version of LOME, for those with PPL, is available. This
  26. version is written in C but otherwise behaves like the version in SCM.
  27. This version is also somewhat more flexible internally, allowing
  28. expansion of the macro list during execution and so forth.
  29.  
  30. A LOME program consists of two files. The first file is the macro
  31. definition file. This file defines the translation between lines in
  32. the source file(s) and lines in the output file(s). The source file
  33. contains text which is matched against the macros, with each matching
  34. line being replaced by the body of the macro with certain parameters
  35. begin replaced. Each so-expanded line is then matched again against
  36. the macros until no more matches can be performed, at which point the
  37. lines are output to the output file. Text in the bodies of the macros
  38. can redirect input from and output to various files, allowing multiple
  39. source or output files.
  40.  
  41. The LOME macro definition file (MDF) consists of a sequence of
  42. arbitrary non-blank lines serving as comments, a single blank line, a
  43. parameter line, and then a sequence of macro definitions. Each macro
  44. definition consists of a header line to be matched against a source
  45. line, followed by a set of lines known as the macro body. Each macro
  46. definition (including the final one) is terminated by a line starting
  47. with two BEOL characters (see below). The overall sequence of macro
  48. definitions is termated by an end-of-file condition. Each macro header
  49. line may be preceeded by any number of empty lines (not even
  50. containing a HEOL). Each macro body contains mixtures of literal text
  51. and specially-flagged escape sequences. The escape sequences can be
  52. classified into one of three groups: parameter operations, which
  53. affect individual parameters matched in the macro header; file
  54. operations, which manipulate files; and control operations, which do
  55. things which would be difficult to specify as macro-expansion
  56. operations.
  57.  
  58. To install the Portable Programmer's Library, please see the bottom of
  59. the PPL.doc file. Thank you.          -- Darren New
  60.  
  61. #! /bin/sh
  62. # This is a shell archive.  Remove anything before this line, then unpack
  63. # it by saving it into a file and typing "sh file".  To overwrite existing
  64. # files, type "sh file -c".  You can also feed this as standard input via
  65. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  66. # will see the following message at the end:
  67. #        "End of archive 1 (of 9)."
  68. # Contents:  LOME LOME/Comp1.doc LOME/DESCRIPTION LOME/FixMake.Amiga
  69. #   LOME/FixMake.Unix LOME/Interp.c LOME/Interp.h LOME/LOME.inp
  70. #   LOME/LOME2.out LOME/LOME4.c LOME/LOME9.out LOME/MIOtest.inp
  71. #   LOME/MIOtest1.inp LOME/MIOtest2.out LOME/MIOtest3.out
  72. #   LOME/MIOtest8.out LOME/README LOME/Rubin.inp LOME/SCMTestD.out
  73. #   MANIFEST PPL PPL/AExitAmiga.c PPL/AExitUnix.c PPL/BExitAmiga.c
  74. #   PPL/BExitUnix.c PPL/Debug.Amiga PPL/Debug.Unix PPL/FExitAmiga.c
  75. #   PPL/FExitUnix.c PPL/Fault.doc PPL/Fault.h PPL/FaultAmiga.h
  76. #   PPL/FaultUnix.h PPL/FixMake.Amiga PPL/FixMake.Unix
  77. #   PPL/MakeHead.Amiga PPL/MakeHead.Unix PPL/MakeTail PPL/README
  78. #   PPL/ShiftLeft.c PPL/TestHost.c PPL/ld.Amiga PPL/ld.Unix TFS
  79. #   TFS/FixMake.Amiga TFS/FixMake.Unix TFS/MakeTail TFS/README
  80. #   TFS/TestTFS.c TFS/TestTFS1.out
  81. # Wrapped by new@estelle.ee.udel.edu on Tue Aug 14 16:09:53 1990
  82. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  83. if test ! -d 'LOME' ; then
  84.     echo shar: Creating directory \"'LOME'\"
  85.     mkdir 'LOME'
  86. fi
  87. if test -f 'LOME/Comp1.doc' -a "${1}" != "-c" ; then 
  88.   echo shar: Will not clobber existing file \"'LOME/Comp1.doc'\"
  89. else
  90. echo shar: Extracting \"'LOME/Comp1.doc'\" \(1778 characters\)
  91. sed "s/^X//" >'LOME/Comp1.doc' <<'END_OF_FILE'
  92. X
  93. XComp1 will read a set of macro definitions from stream one and a
  94. Xprogram to be expanded from stream two. It will write the expansion of
  95. Xthe program on stream three and any erroneous lines to both to stream
  96. Xthree and stream four.
  97. X
  98. XBoth streams one and two are read until a blank line is encountered.
  99. XThen a single line is read from stream one containing the characters
  100. Xthat will be considered special. The single line should contain these
  101. Xfive characters in this order: the character to be used as zero, the
  102. Xcharacter to be used as the parameter flag in macro headers, the
  103. Xcharacter to be used as the end-of-line character in macro headers,
  104. Xthe character to be used as the parameter flag in macro bodies, and
  105. Xthe character to be used as the end-of-line character in macro bodies.
  106. X
  107. XThe parameter flags in the macro headers match one character each. The
  108. Xcharacters matched are stored when matched. The character may be
  109. Xinserted into the macro body by putting into the body the body
  110. Xparameter flag followed by the parameter number (1-9) followed by the
  111. Xconversion number (0, 1, or 2). Conversion zero causes the character
  112. Xto be inserted, while conversion one causes the decimal equivalent of
  113. Xthe character to be inserted without leading zeros and conversion two
  114. Xcauses the decimal equivalent of the character to be inserted with
  115. Xleading zeros to fill three characters.
  116. X
  117. XErrors are indicated by writing the program line to both streams three
  118. Xand four, preceeded by a digit representing the error number. Error
  119. Xzero is issued when the line is not matched. Error one is issued when
  120. Xthe parameter number is out of range. Error two is issued when the
  121. Xcharacter after a parameter zero request is not a digit. Error three
  122. Xis issued when the conversion number is not zero, one, or two.
  123. X
  124. X
  125. X
  126. END_OF_FILE
  127. if test 1778 -ne `wc -c <'LOME/Comp1.doc'`; then
  128.     echo shar: \"'LOME/Comp1.doc'\" unpacked with wrong size!
  129. fi
  130. # end of 'LOME/Comp1.doc'
  131. fi
  132. if test -f 'LOME/DESCRIPTION' -a "${1}" != "-c" ; then 
  133.   echo shar: Will not clobber existing file \"'LOME/DESCRIPTION'\"
  134. else
  135. echo shar: Extracting \"'LOME/DESCRIPTION'\" \(1638 characters\)
  136. sed "s/^X//" >'LOME/DESCRIPTION' <<'END_OF_FILE'
  137. XThis set of sources contains three general purpose macro processors.
  138. X
  139. XThe first program is LOME, the Line Oriented Macro Assembler. This
  140. Xis based on ideas from the Stage2 processor described in
  141. X
  142. X    author = "William M. Waite",
  143. X    title = "Implementing Software for Non-Numeric Applications",
  144. X    publisher = "Prentice-Hall, Inc.",
  145. X    year = 1973,
  146. X    comment = "isbn = 0-13-45898-5, lib of cong num 72-1768"
  147. X
  148. XHowever, it has been expanded to handle simpler loop construction
  149. Xand more flexible mathematical expression.  Full documentation is
  150. Xprovided in LOME.doc and LOME.cat.
  151. X
  152. XThe second program is Comp1, the lowest level compiler. It is a very
  153. Xsimple macro expander and is roughly equivalent to Waite's program
  154. Xcalled SIMCMP. Also supplied are a set of macros for Comp1 to
  155. Xtranslate SCM (Simple Character Manipulator language) into C.
  156. XSCM is equivalent to Waite's FLUB language.
  157. X
  158. XThe third and final (for now) program is Interp. This program
  159. Xinterprets files of SCM macros without the need to compile them into
  160. Xany other language. This is often faster than Comp1ing into another
  161. Xlanguage and then compiling the result, especially during testing.
  162. X
  163. XThis set of sources contains three programs in the C programming language.
  164. XIt requires PPL (the Portable Programmer's Library) and the TFS (Text File
  165. XSubsystem) to be *easily* portable, although it could be ported to
  166. Xmost any machine with a C compiler without too much trouble. Note that
  167. Xit does not rely on any kind of character-set information and should
  168. Xwork on EBCDIC machines and in Europe with non-USA keymaps; however,
  169. Xeach of these might need minor changes to mapping routines in
  170. XMacroIO.c.
  171. X
  172. X
  173. END_OF_FILE
  174. if test 1638 -ne `wc -c <'LOME/DESCRIPTION'`; then
  175.     echo shar: \"'LOME/DESCRIPTION'\" unpacked with wrong size!
  176. fi
  177. # end of 'LOME/DESCRIPTION'
  178. fi
  179. if test -f 'LOME/FixMake.Amiga' -a "${1}" != "-c" ; then 
  180.   echo shar: Will not clobber existing file \"'LOME/FixMake.Amiga'\"
  181. else
  182. echo shar: Extracting \"'LOME/FixMake.Amiga'\" \(115 characters\)
  183. sed "s/^X//" >'LOME/FixMake.Amiga' <<'END_OF_FILE'
  184. Xjoin PPLDIR:PPL/MakeHead.Amiga MakeTail as Makefile.Amiga
  185. Xjoin PPLDIR:PPL/MakeHead.Unix MakeTail as Makefile.Unix
  186. X
  187. END_OF_FILE
  188. if test 115 -ne `wc -c <'LOME/FixMake.Amiga'`; then
  189.     echo shar: \"'LOME/FixMake.Amiga'\" unpacked with wrong size!
  190. fi
  191. # end of 'LOME/FixMake.Amiga'
  192. fi
  193. if test -f 'LOME/FixMake.Unix' -a "${1}" != "-c" ; then 
  194.   echo shar: Will not clobber existing file \"'LOME/FixMake.Unix'\"
  195. else
  196. echo shar: Extracting \"'LOME/FixMake.Unix'\" \(111 characters\)
  197. sed "s/^X//" >'LOME/FixMake.Unix' <<'END_OF_FILE'
  198. Xcat $PPLDIR/PPL/MakeHead.Amiga MakeTail >Makefile.Amiga
  199. Xcat $PPLDIR/PPL/MakeHead.Unix MakeTail >Makefile.Unix
  200. X
  201. END_OF_FILE
  202. if test 111 -ne `wc -c <'LOME/FixMake.Unix'`; then
  203.     echo shar: \"'LOME/FixMake.Unix'\" unpacked with wrong size!
  204. fi
  205. # end of 'LOME/FixMake.Unix'
  206. fi
  207. if test -f 'LOME/Interp.c' -a "${1}" != "-c" ; then 
  208.   echo shar: Will not clobber existing file \"'LOME/Interp.c'\"
  209. else
  210. echo shar: Extracting \"'LOME/Interp.c'\" \(548 characters\)
  211. sed "s/^X//" >'LOME/Interp.c' <<'END_OF_FILE'
  212. X/*
  213. X * Interp.c
  214. X * SCM Interpreter data file
  215. X * Copyright 1988 Darren New.
  216. X * All rights reserved.
  217. X */
  218. X
  219. X#include "Interp.h"
  220. X
  221. Xshort param[11];     /* parsed parameters */
  222. X
  223. Xshort startLine;     /* where to start executing */
  224. X
  225. Xunsigned short f['Z'];          /* values of FLG registers */
  226. Xunsigned short v['Z'];          /* values of VAL registers */
  227. X     short p['Z'];          /* values of PTR registers */
  228. Xshort subr['Z'];                /* line of BEGIN SUBROUTINE */
  229. Xshort labl[100];        /* line of LABEL */
  230. X
  231. Xlong mem[MAXMEM];        /* memory locations */
  232. X
  233. X
  234. END_OF_FILE
  235. if test 548 -ne `wc -c <'LOME/Interp.c'`; then
  236.     echo shar: \"'LOME/Interp.c'\" unpacked with wrong size!
  237. fi
  238. # end of 'LOME/Interp.c'
  239. fi
  240. if test -f 'LOME/Interp.h' -a "${1}" != "-c" ; then 
  241.   echo shar: Will not clobber existing file \"'LOME/Interp.h'\"
  242. else
  243. echo shar: Extracting \"'LOME/Interp.h'\" \(1131 characters\)
  244. sed "s/^X//" >'LOME/Interp.h' <<'END_OF_FILE'
  245. X/*
  246. X * Interp.h
  247. X * SCM Interpreter header file
  248. X * Copyright 1988 Darren New.
  249. X * All rights reserved.
  250. X */
  251. X
  252. X
  253. Xextern short zero, HeadParm, HeadEOL;
  254. X
  255. Xextern short param[11];     /* parsed parameters */
  256. X
  257. Xextern short startLine;     /* where to start executing */
  258. X
  259. Xtypedef int func(int);
  260. Xtypedef func * funcpnt;
  261. X
  262. X#define MAXSRC 5000 /* max number of lines in source file */
  263. X#define MAXMEM 5000 /* max number of memory locations */
  264. X
  265. Xextern unsigned short f['Z'];           /* values of FLG registers */
  266. Xextern unsigned short v['Z'];           /* values of VAL registers */
  267. Xextern        short p['Z'];           /* values of PTR registers */
  268. Xextern short subr['Z'];                 /* subroutine starting lines */
  269. Xextern short labl[100];         /* labels */
  270. X
  271. Xextern long mem[MAXMEM];        /* memory locations */
  272. X
  273. X/* defined in Ifuncs?.c */
  274. X
  275. Xextern func Ebp, Ibp, Eep, Iep, Ebmr, Ibmr, Eemr, Iemr;
  276. Xextern func Ebs, Ibs, Ees, Ies, El, Il, Ecd, Icd, End, Ind;
  277. Xextern func Es, Ec, Egm, Epm, Ef, Epv, Evp, Eva, Evs, Epa;
  278. Xextern func Eps, Ept, Epd, Empb, Et, Etife, Etifn, Etive, Etivn;
  279. Xextern func Etipe, Etipn, Etipl, Er, Egb, Epb, Evi, Eov, Edebug, Emt;
  280. X
  281. X
  282. X
  283. X
  284. END_OF_FILE
  285. if test 1131 -ne `wc -c <'LOME/Interp.h'`; then
  286.     echo shar: \"'LOME/Interp.h'\" unpacked with wrong size!
  287. fi
  288. # end of 'LOME/Interp.h'
  289. fi
  290. if test -f 'LOME/LOME.inp' -a "${1}" != "-c" ; then 
  291.   echo shar: Will not clobber existing file \"'LOME/LOME.inp'\"
  292. else
  293. echo shar: Extracting \"'LOME/LOME.inp'\" \(492 characters\)
  294. sed "s/^X//" >'LOME/LOME.inp' <<'END_OF_FILE'
  295. XThis line should come out unchanged.
  296. XTest1.
  297. XTest2.                Test some parameter substitution ops
  298. XTest3.                Test some control ops.
  299. XTest4.                Test input skips
  300. XXX - If this appears, input skips not skipping.
  301. XXX - If this appears, input skips not skipping.
  302. XIf this does not appear, input skips skipping too much.
  303. XTest5.                Decimal Loop constructs
  304. XTest6.                String Loop constructs
  305. XTest7a.             Test some file ops
  306. XTest7b.             Test some more file ops
  307. XTestMath.            Test mathematical conversions
  308. XEnd of Tests!.
  309. END_OF_FILE
  310. if test 492 -ne `wc -c <'LOME/LOME.inp'`; then
  311.     echo shar: \"'LOME/LOME.inp'\" unpacked with wrong size!
  312. fi
  313. # end of 'LOME/LOME.inp'
  314. fi
  315. if test -f 'LOME/LOME2.out' -a "${1}" != "-c" ; then 
  316.   echo shar: Will not clobber existing file \"'LOME/LOME2.out'\"
  317. else
  318. echo shar: Extracting \"'LOME/LOME2.out'\" \(196 characters\)
  319. sed "s/^X//" >'LOME/LOME2.out' <<'END_OF_FILE'
  320. XFish Fish Fish
  321. XThis line should go onto stream 4 and then be copied to output.
  322. XThis should also go to stream 4 and be copied to output also.
  323. XOnce more this goes to stream 4 and back.
  324. XEND OF INPUT
  325. END_OF_FILE
  326. if test 196 -ne `wc -c <'LOME/LOME2.out'`; then
  327.     echo shar: \"'LOME/LOME2.out'\" unpacked with wrong size!
  328. fi
  329. # end of 'LOME/LOME2.out'
  330. fi
  331. if test -f 'LOME/LOME4.c' -a "${1}" != "-c" ; then 
  332.   echo shar: Will not clobber existing file \"'LOME/LOME4.c'\"
  333. else
  334. echo shar: Extracting \"'LOME/LOME4.c'\" \(1790 characters\)
  335. sed "s/^X//" >'LOME/LOME4.c' <<'END_OF_FILE'
  336. X/*
  337. X * LOME4.c
  338. X * Line Oriented Macro Expander - ExpandLine()
  339. X * Copyright 1989 Darren New
  340. X *
  341. X */
  342. X
  343. X#include "LOME.h"
  344. X
  345. X/* This will build an output line and push it on the stack */
  346. X
  347. Xvoid ExpandLine()
  348. X{
  349. X    bool done;
  350. X
  351. X    assert(0 < tstacksize);
  352. X    assert(0 <= Sretoffs && Sretoffs < macrosize);
  353. X
  354. X    conslinesize = 0;
  355. X    done = FALSE;
  356. X
  357. X    while (! done && ! quitting && skipping == 0 && 0 <= Sretoffs) {
  358. X    switch (macroflag[Sretoffs]) {
  359. X        case 0: {    /* normal character to insert */
  360. X        consline[conslinesize++] = macrochar[Sretoffs++];
  361. X        break;
  362. X        }
  363. X        case 1: {    /* substitution */
  364. X        assert(macroflag[Sretoffs+1] == 1);
  365. X        consline[conslinesize] = 0;
  366. X        if (macrochar[Sretoffs] == params[O_CTRLOP]) {
  367. X            Sretoffs += 1;
  368. X            DoCtrlOp(macrochar[Sretoffs++] - params[O_ZERO]);
  369. X            }
  370. X        else if (macrochar[Sretoffs] == params[O_FILEOP]) {
  371. X            Sretoffs += 1;
  372. X            DoFileOp(macrochar[Sretoffs++] - params[O_ZERO]);
  373. X            }
  374. X        else {
  375. X            int p;
  376. X            p = macrochar[Sretoffs++] - params[O_ZERO];
  377. X            assert(0 <= p && p <= 9);
  378. X            DoSubsOp(p, macrochar[Sretoffs++] - params[O_ZERO]);
  379. X            }
  380. X        break;
  381. X        }
  382. X        case 2: {    /* BEOL */
  383. X        consline[conslinesize] = 0;
  384. X        Sretoffs += 1;
  385. X        if (0 < conslinesize || params[O_ZERO] != params[O_FBLANK]) {
  386. X            tstacksize += 1;
  387. X            assert(Sinp == NULL && Sp0 == NULL && Sp1 == NULL);
  388. X            assert(Sp2 == NULL && Sp3 == NULL && Sp4 == NULL);
  389. X            assert(Sp5 == NULL && Sp6 == NULL && Sp7 == NULL);
  390. X            assert(Sp8 == NULL && Sp9 == NULL);
  391. X            Sinp = PLStrDup(consline);
  392. X            Sretoffs = -1;
  393. X            done = TRUE;
  394. X            }
  395. X        break;
  396. X        }
  397. X        case 3: {    /* end of macro body */
  398. X        consline[conslinesize = 0] = 0;
  399. X        PopTStack();
  400. X        done = TRUE;
  401. X        break;
  402. X        }
  403. X        default : { /* mistake in program! */
  404. X        bomb("Bad MacroFlag byte!");
  405. X        }
  406. X        }
  407. X    }
  408. X    }
  409. X
  410. X
  411. END_OF_FILE
  412. if test 1790 -ne `wc -c <'LOME/LOME4.c'`; then
  413.     echo shar: \"'LOME/LOME4.c'\" unpacked with wrong size!
  414. fi
  415. # end of 'LOME/LOME4.c'
  416. fi
  417. if test -f 'LOME/LOME9.out' -a "${1}" != "-c" ; then 
  418.   echo shar: Will not clobber existing file \"'LOME/LOME9.out'\"
  419. else
  420. echo shar: Extracting \"'LOME/LOME9.out'\" \(35 characters\)
  421. sed "s/^X//" >'LOME/LOME9.out' <<'END_OF_FILE'
  422. XThis should go only to t:LOME9.out
  423. END_OF_FILE
  424. if test 35 -ne `wc -c <'LOME/LOME9.out'`; then
  425.     echo shar: \"'LOME/LOME9.out'\" unpacked with wrong size!
  426. fi
  427. # end of 'LOME/LOME9.out'
  428. fi
  429. if test -f 'LOME/MIOtest.inp' -a "${1}" != "-c" ; then 
  430.   echo shar: Will not clobber existing file \"'LOME/MIOtest.inp'\"
  431. else
  432. echo shar: Extracting \"'LOME/MIOtest.inp'\" \(509 characters\)
  433. sed "s/^X//" >'LOME/MIOtest.inp' <<'END_OF_FILE'
  434. X1)  This should appear on stream 2.
  435. X2)  This too should appear on stream 2.
  436. XX)  This should not appear at all.
  437. X3)  If this is not followed by a totally blank line, buffer not clearing.
  438. X4)  Lines 4 - 6 should appear twice.
  439. X5)  If not, rewind may not be working.
  440. X6)  This is the last duplicated line.
  441. X7)  Line 8 should be next and contain all ten digits.
  442. X9)  Line 9 is followed by a maximum-length line of zeros.
  443. X10) The next line should contain only a single zero - test one item lines.
  444. X11) Last line for now.
  445. END_OF_FILE
  446. if test 509 -ne `wc -c <'LOME/MIOtest.inp'`; then
  447.     echo shar: \"'LOME/MIOtest.inp'\" unpacked with wrong size!
  448. fi
  449. # end of 'LOME/MIOtest.inp'
  450. fi
  451. if test -f 'LOME/MIOtest1.inp' -a "${1}" != "-c" ; then 
  452.   echo shar: Will not clobber existing file \"'LOME/MIOtest1.inp'\"
  453. else
  454. echo shar: Extracting \"'LOME/MIOtest1.inp'\" \(590 characters\)
  455. sed "s/^X//" >'LOME/MIOtest1.inp' <<'END_OF_FILE'
  456. X1)  This should appear on stream 2.
  457. X2)  This too should appear on stream 2.
  458. XX)  This should not appear at all.
  459. X3)  If this is not followed by a totally blank line, buffer not clearing.
  460. X4)  Lines 4 - 6 should appear twice.
  461. X5)  If not, rewind may not be working.
  462. X6)  This is the last duplicated line.
  463. X7)  Line 8 should be next and contain all ten digits.
  464. X9)  Line 9 is followed by a maximum-length line of zeros.
  465. X10) The next line should contain only a single zero - test one item lines.
  466. X11) Last line on stream 2 for now.
  467. X12) This should go to stream 3.
  468. X13) This should go to stream 3 also.
  469. END_OF_FILE
  470. if test 590 -ne `wc -c <'LOME/MIOtest1.inp'`; then
  471.     echo shar: \"'LOME/MIOtest1.inp'\" unpacked with wrong size!
  472. fi
  473. # end of 'LOME/MIOtest1.inp'
  474. fi
  475. if test -f 'LOME/MIOtest2.out' -a "${1}" != "-c" ; then 
  476.   echo shar: Will not clobber existing file \"'LOME/MIOtest2.out'\"
  477. else
  478. echo shar: Extracting \"'LOME/MIOtest2.out'\" \(867 characters\)
  479. sed "s/^X//" >'LOME/MIOtest2.out' <<'END_OF_FILE'
  480. X1)  This should appear on stream 2.
  481. X2)  This too should appear on stream 2.
  482. X3)  If this is not followed by a totally blank line, buffer not clearing.
  483. X
  484. X4)  Lines 4 - 6 should appear twice.
  485. X5)  If not, rewind may not be working.
  486. X6)  This is the last duplicated line.
  487. X4)  Lines 4 - 6 should appear twice.
  488. X5)  If not, rewind may not be working.
  489. X6)  This is the last duplicated line.
  490. X7)  Line 8 should be next and contain all ten digits.
  491. X8) 0123456789
  492. X9)  Line 9 is followed by a maximum-length line of zeros.
  493. X000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  494. X10) The next line should contain only a single zero - test one item lines.
  495. X0
  496. X11) Last line on stream 2 for now.
  497. END_OF_FILE
  498. if test 867 -ne `wc -c <'LOME/MIOtest2.out'`; then
  499.     echo shar: \"'LOME/MIOtest2.out'\" unpacked with wrong size!
  500. fi
  501. # end of 'LOME/MIOtest2.out'
  502. fi
  503. if test -f 'LOME/MIOtest3.out' -a "${1}" != "-c" ; then 
  504.   echo shar: Will not clobber existing file \"'LOME/MIOtest3.out'\"
  505. else
  506. echo shar: Extracting \"'LOME/MIOtest3.out'\" \(69 characters\)
  507. sed "s/^X//" >'LOME/MIOtest3.out' <<'END_OF_FILE'
  508. X12) This should go to stream 3.
  509. X13) This should go to stream 3 also.
  510. END_OF_FILE
  511. if test 69 -ne `wc -c <'LOME/MIOtest3.out'`; then
  512.     echo shar: \"'LOME/MIOtest3.out'\" unpacked with wrong size!
  513. fi
  514. # end of 'LOME/MIOtest3.out'
  515. fi
  516. if test -f 'LOME/MIOtest8.out' -a "${1}" != "-c" ; then 
  517.   echo shar: Will not clobber existing file \"'LOME/MIOtest8.out'\"
  518. else
  519. echo shar: Extracting \"'LOME/MIOtest8.out'\" \(37 characters\)
  520. sed "s/^X//" >'LOME/MIOtest8.out' <<'END_OF_FILE'
  521. X13) This should go to stream 3 also.
  522. END_OF_FILE
  523. if test 37 -ne `wc -c <'LOME/MIOtest8.out'`; then
  524.     echo shar: \"'LOME/MIOtest8.out'\" unpacked with wrong size!
  525. fi
  526. # end of 'LOME/MIOtest8.out'
  527. fi
  528. if test -f 'LOME/README' -a "${1}" != "-c" ; then 
  529.   echo shar: Will not clobber existing file \"'LOME/README'\"
  530. else
  531. echo shar: Extracting \"'LOME/README'\" \(2156 characters\)
  532. sed "s/^X//" >'LOME/README' <<'END_OF_FILE'
  533. X
  534. XThese programs and all derivative works are copyright 1990 by
  535. XDarren New. All Rights Reserved.
  536. X
  537. XPermission to use, copy, modify, and distribute this software and its
  538. Xdocumentation for any purpose and without fee is hereby granted, provided
  539. Xthat the above copyright notice appear in all copies and that both that
  540. Xcopyright notice and this permission notice appear in supporting
  541. Xdocumentation, and that the names of the copyright holder or author not be
  542. Xused in advertising or publicity pertaining to distribution of the software
  543. Xwithout specific, written prior permission.
  544. X
  545. XBOTH THE AUTHOR AND THE COPYRIGHT HOLDER DISCLAIM ALL WARRANTIES WITH
  546. XREGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
  547. XMERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDER OR THE
  548. XAUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
  549. XDAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
  550. XAN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  551. XOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  552. X
  553. XThe author can currently be reached in the USA by phone at
  554. X(302) 451-8013, by electronic mail at "new@udel.edu", or by
  555. Xphysical mail at 151 Thorn Lane #12, Newark, DE 19711.
  556. X
  557. XIf you find this program (or the included libraries) useful, a
  558. Xdonation would be welcome. Questions, comments, improvements, and
  559. Xports are also welcome and will be redistributed with thanks and
  560. Xattribution.
  561. X
  562. X
  563. X----------------------------------------------------------------------
  564. X
  565. X
  566. XPlease note that neither the TFS nor the BFS (nor the UIS or VMS, for
  567. Xthat matter) are actually complete yet. However, they do seem to be
  568. Xsufficiently complete to get LOME, Comp1, and Interp working. I
  569. Xrelease them only for the compilation of the files in the LOME
  570. Xdistribution.
  571. X
  572. XExpect a new distribution of the lower-level routines along with new
  573. Xprograms in the not-so-near future. One such program is a state-based
  574. Xmacro expander with the capability of outputting binary (via bypassing
  575. Xof MacroIO).
  576. X
  577. XTo install the Portable Programmer's Library, please see the bottom of
  578. Xthe PPL.doc file. Thank you.          -- Darren New
  579. X
  580. X
  581. X
  582. END_OF_FILE
  583. if test 2156 -ne `wc -c <'LOME/README'`; then
  584.     echo shar: \"'LOME/README'\" unpacked with wrong size!
  585. fi
  586. # end of 'LOME/README'
  587. fi
  588. if test -f 'LOME/Rubin.inp' -a "${1}" != "-c" ; then 
  589.   echo shar: Will not clobber existing file \"'LOME/Rubin.inp'\"
  590. else
  591. echo shar: Extracting \"'LOME/Rubin.inp'\" \(1184 characters\)
  592. sed "s/^X//" >'LOME/Rubin.inp' <<'END_OF_FILE'
  593. XFILE: Rubin&.inp
  594. XThis is a test file for Rubin.mac.
  595. XIt really doesn't do anything except test a few options.
  596. XThis is by no means an exhaustive test.
  597. X
  598. XThis should come out unchanged
  599. Xbecause it does not start with an asterisk.
  600. X
  601. XTest simple cases:
  602. X* gamma = alpha + beta
  603. X* gamma = alpha - beta
  604. X* gamma = alpha * beta
  605. X* gamma = alpha / beta
  606. X
  607. XTest simple cases with modifiers:
  608. X* gamma = alpha +x beta
  609. X* gamma = alpha -h beta
  610. X* gamma = alpha *f beta
  611. X* gamma = alpha /u beta
  612. X
  613. XTest negations
  614. X* gamma = -alpha + beta
  615. X
  616. XTest absolute values
  617. X* gamma = |alpha - beta
  618. X* gamma = |alpha - |beta
  619. X* gamma = alpha - |beta
  620. X* gamma = -|alpha - |beta
  621. X
  622. XTest a w field
  623. X* gamma = alpha + beta /\omega
  624. X* gamma = alpha + beta /\~omega
  625. X
  626. XTry the type casts
  627. X* gamma =(half) alpha + beta
  628. X* gamma =(full) alpha + beta
  629. X* gamma = (scalar)alpha + beta
  630. X* gamma = alpha + (scalar)beta
  631. X* gamma = (scalar)alpha + (scalar)beta
  632. X* gamma =(half) (scalar)alpha + (scalar)beta
  633. X
  634. XTry x, y, and z
  635. X* gamma'gift = alpha + beta
  636. X* gamma = alpha'apple + beta
  637. X* gamma = alpha + beta'book
  638. X* gamma'gift = alpha'apple + beta'book
  639. X
  640. XTry a line with everything on it
  641. X* gamma'gift =(half) -|(scalar)alpha'apple *big |(scalar)beta'book /\~omega
  642. X
  643. END_OF_FILE
  644. if test 1184 -ne `wc -c <'LOME/Rubin.inp'`; then
  645.     echo shar: \"'LOME/Rubin.inp'\" unpacked with wrong size!
  646. fi
  647. # end of 'LOME/Rubin.inp'
  648. fi
  649. if test -f 'LOME/SCMTestD.out' -a "${1}" != "-c" ; then 
  650.   echo shar: Will not clobber existing file \"'LOME/SCMTestD.out'\"
  651. else
  652. echo shar: Extracting \"'LOME/SCMTestD.out'\" \(531 characters\)
  653. sed "s/^X//" >'LOME/SCMTestD.out' <<'END_OF_FILE'
  654. X1. IF SCM MACROS ARE CORRECT, OUTPUT CONTAINS NO LINES STARTING WITH X
  655. X2. Lines starting with X indicate errors in macros or I/O.
  656. X3. First three lines rely on VAL B = 1 + 0, VAL W = 2 + 0, GET BUFF B, PUT BUFF W.
  657. X4. If this works, CALL F seems to work.
  658. X5. Next line contains "6. GOOD" - anything else is wrong
  659. X6. GOOD
  660. X7. Next line contains "8. 0 1 2 3 4 5 6 7 8 9" from VAL fields
  661. X8. 0 1 2 3 4 5 6 7 8 9
  662. X9. Next line contains "10. 0 1 2 3" from PTR fields
  663. X10. 0 1 2 3
  664. X99. This should be printed as the last line. - END OF TEST ONE
  665. END_OF_FILE
  666. if test 531 -ne `wc -c <'LOME/SCMTestD.out'`; then
  667.     echo shar: \"'LOME/SCMTestD.out'\" unpacked with wrong size!
  668. fi
  669. # end of 'LOME/SCMTestD.out'
  670. fi
  671. if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  672.   echo shar: Will not clobber existing file \"'MANIFEST'\"
  673. else
  674. echo shar: Extracting \"'MANIFEST'\" \(3223 characters\)
  675. sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
  676. X   File Name        Archive #    Description
  677. X-----------------------------------------------------------
  678. X LOME                       1    The Line Oriented Macro Expanders
  679. X LOME/Comp1.c               5    
  680. X LOME/Comp1.doc             1    
  681. X LOME/DESCRIPTION           1    This is the DESCRIPTION you want to read 1st
  682. X LOME/FixMake.Amiga         1    
  683. X LOME/FixMake.Unix          1    
  684. X LOME/Ifuncs1.c             2    
  685. X LOME/Ifuncs2.c             2    
  686. X LOME/Ifuncs3.c             2    
  687. X LOME/Ifuncs4.c             2    
  688. X LOME/Interp.c              1    
  689. X LOME/Interp.h              1    
  690. X LOME/Iparse.c              3    
  691. X LOME/LOME.c                2    
  692. X LOME/LOME.doc              9    
  693. X LOME/LOME.h                4    
  694. X LOME/LOME.inp              1    
  695. X LOME/LOME.mac              4    
  696. X LOME/LOME.scm              6    
  697. X LOME/LOME0.c               3    
  698. X LOME/LOME1.c               3    
  699. X LOME/LOME1.out             4    
  700. X LOME/LOME2.c               2    
  701. X LOME/LOME2.out             1    
  702. X LOME/LOME3.c               3    
  703. X LOME/LOME4.c               1    
  704. X LOME/LOME5.c               4    
  705. X LOME/LOME6.c               3    
  706. X LOME/LOME7.c               2    
  707. X LOME/LOME8.c               5    
  708. X LOME/LOME9.out             1    
  709. X LOME/MIOtest.c             3    
  710. X LOME/MIOtest.inp           1    
  711. X LOME/MIOtest1.inp          1    
  712. X LOME/MIOtest2.out          1    
  713. X LOME/MIOtest3.out          1    
  714. X LOME/MIOtest8.out          1    
  715. X LOME/MacroIO.c             2    
  716. X LOME/MacroIO.doc           3    
  717. X LOME/MacroIO.h             3    
  718. X LOME/MakeTail              2    
  719. X LOME/README                1    
  720. X LOME/Rubin.inp             1    
  721. X LOME/Rubin.mac             5    
  722. X LOME/Rubin.out             2    
  723. X LOME/SCM.doc               7    
  724. X LOME/SCM.mac               3    
  725. X LOME/SCMTestC.out          7    
  726. X LOME/SCMTestD.inp          2    
  727. X LOME/SCMTestD.out          1    
  728. X LOME/SCMTestP.scm          6    
  729. X LOME/SCMdebug.mac          4    
  730. X MANIFEST                   1    This shipping list
  731. X PPL                        1    The Programmer's Portable Library
  732. X PPL/AExitAmiga.c           1    
  733. X PPL/AExitUnix.c            1    
  734. X PPL/BExitAmiga.c           1    
  735. X PPL/BExitUnix.c            1    
  736. X PPL/Debug.Amiga            1    
  737. X PPL/Debug.Unix             1    
  738. X PPL/FExitAmiga.c           1    
  739. X PPL/FExitUnix.c            1    
  740. X PPL/Fault.doc              1    
  741. X PPL/Fault.h                1    
  742. X PPL/FaultAmiga.c           2    
  743. X PPL/FaultAmiga.h           1    
  744. X PPL/FaultUnix.c            2    
  745. X PPL/FaultUnix.h            1    
  746. X PPL/FixMake.Amiga          1    
  747. X PPL/FixMake.Unix           1    
  748. X PPL/MakeHead.Amiga         1    
  749. X PPL/MakeHead.Unix          1    
  750. X PPL/MakeTail               1    
  751. X PPL/PPL.doc                6    
  752. X PPL/PPLAmiga.c             5    
  753. X PPL/PPLAmiga.h             7    
  754. X PPL/PPLUnix.c              4    
  755. X PPL/PPLUnix.h              8    
  756. X PPL/README                 1    
  757. X PPL/ShiftLeft.c            1    
  758. X PPL/TestHost.c             1    
  759. X PPL/ld.Amiga               1    
  760. X PPL/ld.Unix                1    
  761. X TFS                        1    The Text File Subsystem
  762. X TFS/FixMake.Amiga          1    
  763. X TFS/FixMake.Unix           1    
  764. X TFS/MakeTail               1    
  765. X TFS/README                 1    
  766. X TFS/TFS.doc                2    
  767. X TFS/TFS.h                  4    
  768. X TFS/TFSAmiga.c             5    
  769. X TFS/TFSUnix.c              6    
  770. X TFS/TestTFS.c              1    
  771. X TFS/TestTFS.inp            2    
  772. X TFS/TestTFS1.out           1    
  773. X TFS/TestTFS2.out           2    
  774. END_OF_FILE
  775. if test 3223 -ne `wc -c <'MANIFEST'`; then
  776.     echo shar: \"'MANIFEST'\" unpacked with wrong size!
  777. fi
  778. # end of 'MANIFEST'
  779. fi
  780. if test ! -d 'PPL' ; then
  781.     echo shar: Creating directory \"'PPL'\"
  782.     mkdir 'PPL'
  783. fi
  784. if test -f 'PPL/AExitAmiga.c' -a "${1}" != "-c" ; then 
  785.   echo shar: Will not clobber existing file \"'PPL/AExitAmiga.c'\"
  786. else
  787. echo shar: Extracting \"'PPL/AExitAmiga.c'\" \(177 characters\)
  788. sed "s/^X//" >'PPL/AExitAmiga.c' <<'END_OF_FILE'
  789. X/*
  790. X    AExit.c
  791. X    This is the default AssertExit functions for AssertBomb.
  792. X*/
  793. X
  794. X#include <proto/dos.h>
  795. X
  796. Xint AssertExit(void);
  797. Xint AssertExit()
  798. X{
  799. X    Exit(200);
  800. X    return 0;
  801. X    }
  802. X
  803. X
  804. X
  805. END_OF_FILE
  806. if test 177 -ne `wc -c <'PPL/AExitAmiga.c'`; then
  807.     echo shar: \"'PPL/AExitAmiga.c'\" unpacked with wrong size!
  808. fi
  809. # end of 'PPL/AExitAmiga.c'
  810. fi
  811. if test -f 'PPL/AExitUnix.c' -a "${1}" != "-c" ; then 
  812.   echo shar: Will not clobber existing file \"'PPL/AExitUnix.c'\"
  813. else
  814. echo shar: Extracting \"'PPL/AExitUnix.c'\" \(222 characters\)
  815. sed "s/^X//" >'PPL/AExitUnix.c' <<'END_OF_FILE'
  816. X/*
  817. X    AExit$(MACHINE).c
  818. X    This is the default AssertExit functions for AssertBomb.
  819. X*/
  820. X
  821. X#include "PPL.h"
  822. X
  823. Xint AssertExit ARGS((void));
  824. Xint AssertExit()
  825. X{
  826. X    extern void abort ARGS((void));
  827. X    abort();
  828. X    return 0;
  829. X    }
  830. X
  831. X
  832. X
  833. END_OF_FILE
  834. if test 222 -ne `wc -c <'PPL/AExitUnix.c'`; then
  835.     echo shar: \"'PPL/AExitUnix.c'\" unpacked with wrong size!
  836. fi
  837. # end of 'PPL/AExitUnix.c'
  838. fi
  839. if test -f 'PPL/BExitAmiga.c' -a "${1}" != "-c" ; then 
  840.   echo shar: Will not clobber existing file \"'PPL/BExitAmiga.c'\"
  841. else
  842. echo shar: Extracting \"'PPL/BExitAmiga.c'\" \(171 characters\)
  843. sed "s/^X//" >'PPL/BExitAmiga.c' <<'END_OF_FILE'
  844. X/*
  845. X    BExit.c
  846. X    This is the default BombExit functions for AssertBomb.
  847. X*/
  848. X
  849. X#include <proto/dos.h>
  850. X
  851. Xint BombExit(void);
  852. Xint BombExit()
  853. X{
  854. X    Exit(200);
  855. X    return 0;
  856. X    }
  857. X
  858. X
  859. X
  860. END_OF_FILE
  861. if test 171 -ne `wc -c <'PPL/BExitAmiga.c'`; then
  862.     echo shar: \"'PPL/BExitAmiga.c'\" unpacked with wrong size!
  863. fi
  864. # end of 'PPL/BExitAmiga.c'
  865. fi
  866. if test -f 'PPL/BExitUnix.c' -a "${1}" != "-c" ; then 
  867.   echo shar: Will not clobber existing file \"'PPL/BExitUnix.c'\"
  868. else
  869. echo shar: Extracting \"'PPL/BExitUnix.c'\" \(216 characters\)
  870. sed "s/^X//" >'PPL/BExitUnix.c' <<'END_OF_FILE'
  871. X/*
  872. X    BExit$(MACHINE).c
  873. X    This is the default BombExit functions for AssertBomb.
  874. X*/
  875. X
  876. X#include "PPL.h"
  877. X
  878. Xint BombExit ARGS((void));
  879. Xint BombExit()
  880. X{
  881. X    extern void abort ARGS((void));
  882. X    abort();
  883. X    return 0;
  884. X    }
  885. X
  886. X
  887. X
  888. END_OF_FILE
  889. if test 216 -ne `wc -c <'PPL/BExitUnix.c'`; then
  890.     echo shar: \"'PPL/BExitUnix.c'\" unpacked with wrong size!
  891. fi
  892. # end of 'PPL/BExitUnix.c'
  893. fi
  894. if test -f 'PPL/Debug.Amiga' -a "${1}" != "-c" ; then 
  895.   echo shar: Will not clobber existing file \"'PPL/Debug.Amiga'\"
  896. else
  897. echo shar: Extracting \"'PPL/Debug.Amiga'\" \(71 characters\)
  898. sed "s/^X//" >'PPL/Debug.Amiga' <<'END_OF_FILE'
  899. X/* startup-sequence for codeprobe */
  900. X/* set echo on */
  901. Xset autoswap on
  902. END_OF_FILE
  903. if test 71 -ne `wc -c <'PPL/Debug.Amiga'`; then
  904.     echo shar: \"'PPL/Debug.Amiga'\" unpacked with wrong size!
  905. fi
  906. # end of 'PPL/Debug.Amiga'
  907. fi
  908. if test -f 'PPL/Debug.Unix' -a "${1}" != "-c" ; then 
  909.   echo shar: Will not clobber existing file \"'PPL/Debug.Unix'\"
  910. else
  911. echo shar: Extracting \"'PPL/Debug.Unix'\" \(56 characters\)
  912. sed "s/^X//" >'PPL/Debug.Unix' <<'END_OF_FILE'
  913. Xdir ../PPL
  914. Xdir ../TFS
  915. Xdir ../BFS
  916. Xdir ../VMS
  917. Xdir ../LOME
  918. END_OF_FILE
  919. if test 56 -ne `wc -c <'PPL/Debug.Unix'`; then
  920.     echo shar: \"'PPL/Debug.Unix'\" unpacked with wrong size!
  921. fi
  922. # end of 'PPL/Debug.Unix'
  923. fi
  924. if test -f 'PPL/FExitAmiga.c' -a "${1}" != "-c" ; then 
  925.   echo shar: Will not clobber existing file \"'PPL/FExitAmiga.c'\"
  926. else
  927. echo shar: Extracting \"'PPL/FExitAmiga.c'\" \(174 characters\)
  928. sed "s/^X//" >'PPL/FExitAmiga.c' <<'END_OF_FILE'
  929. X/*
  930. X    FExit.c
  931. X    This is the default FaultExit functions for AssertBomb.
  932. X*/
  933. X
  934. X#include <proto/dos.h>
  935. X
  936. Xint FaultExit(void);
  937. Xint FaultExit()
  938. X{
  939. X    Exit(200);
  940. X    return 0;
  941. X    }
  942. X
  943. X
  944. X
  945. END_OF_FILE
  946. if test 174 -ne `wc -c <'PPL/FExitAmiga.c'`; then
  947.     echo shar: \"'PPL/FExitAmiga.c'\" unpacked with wrong size!
  948. fi
  949. # end of 'PPL/FExitAmiga.c'
  950. fi
  951. if test -f 'PPL/FExitUnix.c' -a "${1}" != "-c" ; then 
  952.   echo shar: Will not clobber existing file \"'PPL/FExitUnix.c'\"
  953. else
  954. echo shar: Extracting \"'PPL/FExitUnix.c'\" \(219 characters\)
  955. sed "s/^X//" >'PPL/FExitUnix.c' <<'END_OF_FILE'
  956. X/*
  957. X    FExit$(MACHINE).c
  958. X    This is the default FaultExit functions for AssertBomb.
  959. X*/
  960. X
  961. X#include "PPL.h"
  962. X
  963. Xint FaultExit ARGS((void));
  964. Xint FaultExit()
  965. X{
  966. X    extern void abort ARGS((void));
  967. X    abort();
  968. X    return 0;
  969. X    }
  970. X
  971. X
  972. X
  973. END_OF_FILE
  974. if test 219 -ne `wc -c <'PPL/FExitUnix.c'`; then
  975.     echo shar: \"'PPL/FExitUnix.c'\" unpacked with wrong size!
  976. fi
  977. # end of 'PPL/FExitUnix.c'
  978. fi
  979. if test -f 'PPL/Fault.doc' -a "${1}" != "-c" ; then 
  980.   echo shar: Will not clobber existing file \"'PPL/Fault.doc'\"
  981. else
  982. echo shar: Extracting \"'PPL/Fault.doc'\" \(1602 characters\)
  983. sed "s/^X//" >'PPL/Fault.doc' <<'END_OF_FILE'
  984. XFault Handler routines and documentation
  985. XCopyright 1986, 1990 Darren New.
  986. X
  987. XA function and three macros are defined:
  988. X    AssertBomb(char * s, char * f, int l, int i, int (*exitfunc)() );
  989. X        Builds an alert with the string S as the first line,
  990. X        F (for file name) followed by L (line number) as
  991. X        the second line, possibly as modified by I being 1 or 2.
  992. X        Also displays "left mouse to retry, right mouse to abort."
  993. X        returns the result of DisplayAlert().
  994. X        If I is 1, "Assert:" is prepended to S.
  995. X        If I is 2, "Fault:" is prepended to S.
  996. X        If I is 3, "Bomb:" is prepended to S.
  997. X        If (I & 0x80) then pressing the right mouse will
  998. X        call exitfunc with no parameters.
  999. X        Otherwise, the result of DisplayAlert is returned.
  1000. X    fault(s)
  1001. X        calls AssertBomb(s,__FILE__,__LINE__,2, FaultExit);
  1002. X    bomb(s)
  1003. X        calls AssertBomb(s,__FILE__,__LINE__,0x83, BombExit);
  1004. X    assert(exp)
  1005. X        If EXP is false, calls AssertBomb with the text of
  1006. X        EXP as S, I as 1, and EXITFUNC as AssertExit.
  1007. X        Thus, this may return without visible effect.
  1008. X        You may have problems if you put quotes or '\0' in
  1009. X        the expression exp, as it winds up between quotes (at
  1010. X        least in Lattice it does).
  1011. X        If USE_ASSERT is 0, this is macroed out of the program.
  1012. X        If USE_ASSERT is 1, this stays in the program.
  1013. X        If USE_ASSERT is undefined when <Fault.h> is included,
  1014. X            USE_ASSERT will be 1 is DEBUG is defined or
  1015. X            USE_ASSERT will be 0 if DEBUG is undefined.
  1016. X
  1017. X    If the user does not include definitions for FaultExit, BombExit, and
  1018. X    AssertExit in the program, the ones from the library will be pulled
  1019. X    in, which do no cleanup and simply call Exit(200).
  1020. X
  1021. END_OF_FILE
  1022. if test 1602 -ne `wc -c <'PPL/Fault.doc'`; then
  1023.     echo shar: \"'PPL/Fault.doc'\" unpacked with wrong size!
  1024. fi
  1025. # end of 'PPL/Fault.doc'
  1026. fi
  1027. if test -f 'PPL/Fault.h' -a "${1}" != "-c" ; then 
  1028.   echo shar: Will not clobber existing file \"'PPL/Fault.h'\"
  1029. else
  1030. echo shar: Extracting \"'PPL/Fault.h'\" \(1197 characters\)
  1031. sed "s/^X//" >'PPL/Fault.h' <<'END_OF_FILE'
  1032. X/*
  1033. X    FaultUnix.h
  1034. X    This will handle various faulting situations.
  1035. X    assert and fault and bomb are included here.
  1036. X
  1037. X    Copyright 1987 Darren New.
  1038. X
  1039. X*/
  1040. X
  1041. X#ifndef FAULT_H
  1042. X#define FAULT_H 1
  1043. X
  1044. X#ifndef USE_ASSERT
  1045. X#ifdef DEBUG
  1046. X#define USE_ASSERT 1
  1047. X#else
  1048. X#define USE_ASSERT 0
  1049. X#endif /* debug */
  1050. X#endif /* use_assert */
  1051. X
  1052. Xextern int FaultExit(void), BombExit(void), AssertExit(void);
  1053. Xextern int AssertBomb(char *,char *,int,int,int (*)(void));
  1054. Xextern int AssertBombDB(char *,char *,int,int,int (*)(void));
  1055. X
  1056. X#if USE_DBUGLIB==1
  1057. X
  1058. X#define fault(s) AssertBombDB(s,__FILE__,__LINE__,2,FaultExit)
  1059. X#define bomb(s) AssertBombDB(s,__FILE__,__LINE__,0x83,BombExit)
  1060. X
  1061. X#else
  1062. X
  1063. X#define fault(s) AssertBomb(s,__FILE__,__LINE__,2,FaultExit)
  1064. X#define bomb(s) AssertBomb(s,__FILE__,__LINE__,0x83,BombExit)
  1065. X
  1066. X#endif /* use_dbuglib */
  1067. X
  1068. X#if USE_ASSERT==1
  1069. X#if USE_DBUGLIB==1
  1070. X
  1071. X#define assert(exp) {if(!(exp)){\
  1072. XDEBUGF(1,"Assert failed:\"%s\",%s,%d" C #exp C __FILE__ C __LINE__);\
  1073. X(void)AssertBomb(#exp,__FILE__,__LINE__,0x81,AssertExit);}}
  1074. X
  1075. X#else
  1076. X
  1077. X#define assert(exp) {if(!(exp))(void)AssertBomb(#exp,__FILE__,__LINE__,0x81,AssertExit);}
  1078. X
  1079. X#endif /* use_dbuglib */
  1080. X
  1081. X#else
  1082. X
  1083. X#define assert(exp) {}
  1084. X
  1085. X#endif /* use_assert */
  1086. X
  1087. X#endif    /* FAULT_H */
  1088. X
  1089. END_OF_FILE
  1090. if test 1197 -ne `wc -c <'PPL/Fault.h'`; then
  1091.     echo shar: \"'PPL/Fault.h'\" unpacked with wrong size!
  1092. fi
  1093. # end of 'PPL/Fault.h'
  1094. fi
  1095. if test -f 'PPL/FaultAmiga.h' -a "${1}" != "-c" ; then 
  1096.   echo shar: Will not clobber existing file \"'PPL/FaultAmiga.h'\"
  1097. else
  1098. echo shar: Extracting \"'PPL/FaultAmiga.h'\" \(1190 characters\)
  1099. sed "s/^X//" >'PPL/FaultAmiga.h' <<'END_OF_FILE'
  1100. X/*
  1101. X    FaultAmiga.h
  1102. X    This will handle various faulting situations.
  1103. X    assert and fault and bomb are included here.
  1104. X
  1105. X    Copyright 1987 Darren New.
  1106. X
  1107. X*/
  1108. X
  1109. X#ifndef FAULT_H
  1110. X#define FAULT_H 1
  1111. X
  1112. X#ifndef USE_ASSERT
  1113. X#ifdef DEBUG
  1114. X#define USE_ASSERT 1
  1115. X#else
  1116. X#define USE_ASSERT 0
  1117. X#endif /* debug */
  1118. X#endif /* use_assert */
  1119. X
  1120. Xextern int FaultExit(void), BombExit(void), AssertExit(void);
  1121. Xextern int AssertBomb(char *,char *,int,int,int (*)());
  1122. Xextern int AssertBombDB(char *,char *,int,int,int (*)());
  1123. X
  1124. X#if USE_DBUGLIB==1
  1125. X
  1126. X#define fault(s) AssertBombDB(s,__FILE__,__LINE__,2,FaultExit)
  1127. X#define bomb(s) AssertBombDB(s,__FILE__,__LINE__,0x83,BombExit)
  1128. X
  1129. X#else
  1130. X
  1131. X#define fault(s) AssertBomb(s,__FILE__,__LINE__,2,FaultExit)
  1132. X#define bomb(s) AssertBomb(s,__FILE__,__LINE__,0x83,BombExit)
  1133. X
  1134. X#endif /* use_dbuglib */
  1135. X
  1136. X#if USE_ASSERT==1
  1137. X#if USE_DBUGLIB==1
  1138. X
  1139. X#define assert(exp) {if(!(exp)){\
  1140. XDEBUGF(1,"Assert failed:\"%s\",%s,%d" C #exp C __FILE__ C __LINE__);\
  1141. X(void)AssertBomb(#exp,__FILE__,__LINE__,0x81,AssertExit);}}
  1142. X
  1143. X#else
  1144. X
  1145. X#define assert(exp) {if(!(exp))(void)AssertBomb(#exp,__FILE__,__LINE__,0x81,AssertExit);}
  1146. X
  1147. X#endif /* use_dbuglib */
  1148. X
  1149. X#else
  1150. X
  1151. X#define assert(exp) {}
  1152. X
  1153. X#endif /* use_assert */
  1154. X
  1155. X#endif    /* FAULT_H */
  1156. X
  1157. END_OF_FILE
  1158. if test 1190 -ne `wc -c <'PPL/FaultAmiga.h'`; then
  1159.     echo shar: \"'PPL/FaultAmiga.h'\" unpacked with wrong size!
  1160. fi
  1161. # end of 'PPL/FaultAmiga.h'
  1162. fi
  1163. if test -f 'PPL/FaultUnix.h' -a "${1}" != "-c" ; then 
  1164.   echo shar: Will not clobber existing file \"'PPL/FaultUnix.h'\"
  1165. else
  1166. echo shar: Extracting \"'PPL/FaultUnix.h'\" \(1197 characters\)
  1167. sed "s/^X//" >'PPL/FaultUnix.h' <<'END_OF_FILE'
  1168. X/*
  1169. X    FaultUnix.h
  1170. X    This will handle various faulting situations.
  1171. X    assert and fault and bomb are included here.
  1172. X
  1173. X    Copyright 1987 Darren New.
  1174. X
  1175. X*/
  1176. X
  1177. X#ifndef FAULT_H
  1178. X#define FAULT_H 1
  1179. X
  1180. X#ifndef USE_ASSERT
  1181. X#ifdef DEBUG
  1182. X#define USE_ASSERT 1
  1183. X#else
  1184. X#define USE_ASSERT 0
  1185. X#endif /* debug */
  1186. X#endif /* use_assert */
  1187. X
  1188. Xextern int FaultExit(void), BombExit(void), AssertExit(void);
  1189. Xextern int AssertBomb(char *,char *,int,int,int (*)(void));
  1190. Xextern int AssertBombDB(char *,char *,int,int,int (*)(void));
  1191. X
  1192. X#if USE_DBUGLIB==1
  1193. X
  1194. X#define fault(s) AssertBombDB(s,__FILE__,__LINE__,2,FaultExit)
  1195. X#define bomb(s) AssertBombDB(s,__FILE__,__LINE__,0x83,BombExit)
  1196. X
  1197. X#else
  1198. X
  1199. X#define fault(s) AssertBomb(s,__FILE__,__LINE__,2,FaultExit)
  1200. X#define bomb(s) AssertBomb(s,__FILE__,__LINE__,0x83,BombExit)
  1201. X
  1202. X#endif /* use_dbuglib */
  1203. X
  1204. X#if USE_ASSERT==1
  1205. X#if USE_DBUGLIB==1
  1206. X
  1207. X#define assert(exp) {if(!(exp)){\
  1208. XDEBUGF(1,"Assert failed:\"%s\",%s,%d" C #exp C __FILE__ C __LINE__);\
  1209. X(void)AssertBomb(#exp,__FILE__,__LINE__,0x81,AssertExit);}}
  1210. X
  1211. X#else
  1212. X
  1213. X#define assert(exp) {if(!(exp))(void)AssertBomb(#exp,__FILE__,__LINE__,0x81,AssertExit);}
  1214. X
  1215. X#endif /* use_dbuglib */
  1216. X
  1217. X#else
  1218. X
  1219. X#define assert(exp) {}
  1220. X
  1221. X#endif /* use_assert */
  1222. X
  1223. X#endif    /* FAULT_H */
  1224. X
  1225. END_OF_FILE
  1226. if test 1197 -ne `wc -c <'PPL/FaultUnix.h'`; then
  1227.     echo shar: \"'PPL/FaultUnix.h'\" unpacked with wrong size!
  1228. fi
  1229. # end of 'PPL/FaultUnix.h'
  1230. fi
  1231. if test -f 'PPL/FixMake.Amiga' -a "${1}" != "-c" ; then 
  1232.   echo shar: Will not clobber existing file \"'PPL/FixMake.Amiga'\"
  1233. else
  1234. echo shar: Extracting \"'PPL/FixMake.Amiga'\" \(93 characters\)
  1235. sed "s/^X//" >'PPL/FixMake.Amiga' <<'END_OF_FILE'
  1236. Xjoin MakeHead.Amiga MakeTail as Makefile.Amiga
  1237. Xjoin MakeHead.Unix MakeTail as Makefile.Unix
  1238. X
  1239. END_OF_FILE
  1240. if test 93 -ne `wc -c <'PPL/FixMake.Amiga'`; then
  1241.     echo shar: \"'PPL/FixMake.Amiga'\" unpacked with wrong size!
  1242. fi
  1243. # end of 'PPL/FixMake.Amiga'
  1244. fi
  1245. if test -f 'PPL/FixMake.Unix' -a "${1}" != "-c" ; then 
  1246.   echo shar: Will not clobber existing file \"'PPL/FixMake.Unix'\"
  1247. else
  1248. echo shar: Extracting \"'PPL/FixMake.Unix'\" \(87 characters\)
  1249. sed "s/^X//" >'PPL/FixMake.Unix' <<'END_OF_FILE'
  1250. Xcat MakeHead.Amiga MakeTail >Makefile.Amiga
  1251. Xcat MakeHead.Unix MakeTail >Makefile.Unix
  1252. X
  1253. END_OF_FILE
  1254. if test 87 -ne `wc -c <'PPL/FixMake.Unix'`; then
  1255.     echo shar: \"'PPL/FixMake.Unix'\" unpacked with wrong size!
  1256. fi
  1257. # end of 'PPL/FixMake.Unix'
  1258. fi
  1259. if test -f 'PPL/MakeHead.Amiga' -a "${1}" != "-c" ; then 
  1260.   echo shar: Will not clobber existing file \"'PPL/MakeHead.Amiga'\"
  1261. else
  1262. echo shar: Extracting \"'PPL/MakeHead.Amiga'\" \(1376 characters\)
  1263. sed "s/^X//" >'PPL/MakeHead.Amiga' <<'END_OF_FILE'
  1264. X#Makefile headers for Commodore Amiga with Lattice 5.04 C compiler
  1265. X
  1266. X    # These may change from user to user
  1267. XEXECDIR=sys:bin/    #executables will be found here (in path)
  1268. XPPLDIR=PPLDIR:        #root of the PPL tree (also should be assigned)
  1269. X
  1270. X    # These should be the same for all users
  1271. XMACHINE=Amiga            #host .h to use
  1272. XPPLHOST=$(PPLDIR)PPL            #where various host files are stored
  1273. XLIB=LIB:            #destination for libraries
  1274. XCH=CH:                #compiler headers, uncompressed
  1275. XINC=INCLUDE:            #possibly compressed compiler headers
  1276. XDATECMD=date            #command to print date on stdout
  1277. XCOMPACT=lcompact        #command to copy and compress headers
  1278. XCOPY=copy            #command to copy files
  1279. XDELETE=delete            #command to delete files
  1280. XDIFF=diff -q            #command to compare text files
  1281. XCC=LC                #command to run compiler
  1282. XLIBEXT=.lib            #extension of a library file
  1283. XPPLLIB=$(LIB)PPL$(LIBEXT)       #where the library file is stored
  1284. XLIBPRG=OML            #command to manipulate libs
  1285. XLIBAFLGS=$(PPLLIB) r            #flags to replace in PPLLIB
  1286. XLIBDFLGS=$(PPLLIB) d            #flags to delete in PPLLIB
  1287. XLIBIEXT=.c            #library item extension
  1288. XWILDCARD=\#?            #wildcard character
  1289. XTTY=*                #the TTY file name
  1290. XCFLAGS=-i$(INC) -cafkrsu -rr -q1w1e -d3     #LC5.04 flags -- debugging
  1291. XCFLAGS=-i$(INC) -cafkrsu -rr -q1w1e -v -O   #LC5.04 flags -- optimizing
  1292. XFIXPROT1=protect        #patch prot bits on scripts
  1293. XFIXPROT2=+res            #patch prot bits on scripts
  1294. X
  1295. X
  1296. END_OF_FILE
  1297. if test 1376 -ne `wc -c <'PPL/MakeHead.Amiga'`; then
  1298.     echo shar: \"'PPL/MakeHead.Amiga'\" unpacked with wrong size!
  1299. fi
  1300. # end of 'PPL/MakeHead.Amiga'
  1301. fi
  1302. if test -f 'PPL/MakeHead.Unix' -a "${1}" != "-c" ; then 
  1303.   echo shar: Will not clobber existing file \"'PPL/MakeHead.Unix'\"
  1304. else
  1305. echo shar: Extracting \"'PPL/MakeHead.Unix'\" \(1454 characters\)
  1306. sed "s/^X//" >'PPL/MakeHead.Unix' <<'END_OF_FILE'
  1307. X#Makefile headers for SunOS4.x with GNU C compiler
  1308. X
  1309. X    # These may change from user to user
  1310. XEXECDIR=$(HOME)/bin/        #executables will be found here (in path)
  1311. XPPLDIR=$(HOME)/PPLstuff/    #this is the root of the PPL dir tree (should be set)
  1312. X
  1313. X    # These should be the same for all users
  1314. XMACHINE=Unix            #host .h to use
  1315. XPPLHOST=$(PPLDIR)PPL            #where various host files are stored
  1316. XLIB=$(PPLDIR)                   #destination for libraries
  1317. XCH=$(PPLDIR)CH/                 #compiler headers, uncompressed
  1318. XINC=$(PPLDIR)Headers/           #possibly compressed compiler headers
  1319. XDATECMD=date            #command to print date on stdout
  1320. XCOMPACT=cat            #command to copy and compress headers
  1321. XCOPY=cp             #command to copy files
  1322. XDELETE=rm -f            #command to delete files
  1323. XDIFF=diff -c            #command to compare text files
  1324. XCC=gcc                #command to run compiler
  1325. XLIBEXT=.a            #extension of a library file
  1326. XPPLLIB=$(LIB)libPPL$(LIBEXT)    #where the library file is stored
  1327. XLIBPRG=/usr/5bin/ar        #command to manipulate libs
  1328. XLIBAFLGS=rvs $(PPLLIB)          #flags to replace in PPLLIB
  1329. XLIBDFLGS=dvs $(PPLLIB)          #flags to delete in PPLLIB
  1330. XLIBIEXT=.o            #library item extension
  1331. XWILDCARD=*            #wildcard character
  1332. XTTY=/dev/tty            #the TTY file name
  1333. XCFLAGS=-Wall -I$(INC) -c -g -Bstatic  #compiler flags for GCC -- debugging
  1334. XCFLAGS=-Wall -I$(INC) -c -O     #compiler flags for GCC -- optimizing
  1335. XFIXPROT1=chmod u+rx        #patch prot bits on scripts
  1336. XFIXPROT2=            #patch prot bits on scripts
  1337. X
  1338. X
  1339. END_OF_FILE
  1340. if test 1454 -ne `wc -c <'PPL/MakeHead.Unix'`; then
  1341.     echo shar: \"'PPL/MakeHead.Unix'\" unpacked with wrong size!
  1342. fi
  1343. # end of 'PPL/MakeHead.Unix'
  1344. fi
  1345. if test -f 'PPL/MakeTail' -a "${1}" != "-c" ; then 
  1346.   echo shar: Will not clobber existing file \"'PPL/MakeTail'\"
  1347. else
  1348. echo shar: Extracting \"'PPL/MakeTail'\" \(2100 characters\)
  1349. sed "s/^X//" >'PPL/MakeTail' <<'END_OF_FILE'
  1350. X# Makefile for PPL HOST routines
  1351. X
  1352. X$(MACHINE) : $(EXECDIR)ld.$(MACHINE)
  1353. X$(MACHINE) : $(CH)PPL.h $(INC)PPL.h
  1354. X$(MACHINE) : $(CH)Fault.h $(INC)Fault.h Fault$(MACHINE).o
  1355. X$(MACHINE) : AExit$(MACHINE).o BExit$(MACHINE).o FExit$(MACHINE).o
  1356. X$(MACHINE) : PPL$(MACHINE).o
  1357. X    date >$(MACHINE)
  1358. X
  1359. X$(CH)PPL.h : PPL$(MACHINE).h
  1360. X    $(COPY) PPL$(MACHINE).h $(CH)PPL.h
  1361. X
  1362. X$(INC)PPL.h : $(CH)PPL.h $(INC)Fault.h
  1363. X    $(COMPACT) <$(CH)PPL.h >$(INC)PPL.h
  1364. X
  1365. X$(CH)Fault.h : Fault$(MACHINE).h
  1366. X    $(COPY) Fault$(MACHINE).h $(CH)Fault.h
  1367. X
  1368. X$(INC)Fault.h : $(CH)Fault.h
  1369. X    $(COMPACT) <$(CH)Fault.h >$(INC)Fault.h
  1370. X
  1371. XPPL$(MACHINE).o : PPL$(MACHINE).c PPL$(MACHINE).h $(INC)Fault.h
  1372. X    $(CC) $(CFLAGS) PPL$(MACHINE).c
  1373. X    $(LIBPRG) $(LIBAFLGS) PPL$(MACHINE).o
  1374. X
  1375. XFault$(MACHINE).o : Fault$(MACHINE).c
  1376. X    $(CC) $(CFLAGS) Fault$(MACHINE).c
  1377. X    $(LIBPRG) $(LIBAFLGS) Fault$(MACHINE).o
  1378. X
  1379. XAExit$(MACHINE).o : AExit$(MACHINE).c
  1380. X    $(CC) $(CFLAGS) AExit$(MACHINE).c
  1381. X    $(LIBPRG) $(LIBAFLGS) AExit$(MACHINE).o
  1382. X
  1383. XBExit$(MACHINE).o : BExit$(MACHINE).c
  1384. X    $(CC) $(CFLAGS) BExit$(MACHINE).c
  1385. X    $(LIBPRG) $(LIBAFLGS) BExit$(MACHINE).o
  1386. X
  1387. XFExit$(MACHINE).o : FExit$(MACHINE).c
  1388. X    $(CC) $(CFLAGS) FExit$(MACHINE).c
  1389. X    $(LIBPRG) $(LIBAFLGS) FExit$(MACHINE).o
  1390. X
  1391. X$(EXECDIR)ld.$(MACHINE) : ld.$(MACHINE)
  1392. X    $(FIXPROT1) ld.$(MACHINE) $(FIXPROT2)
  1393. X    $(COPY) ld.$(MACHINE) $(EXECDIR)ld.$(MACHINE)
  1394. X    $(FIXPROT1) $(EXECDIR)ld.$(MACHINE) $(FIXPROT2)
  1395. X
  1396. Xtags : Fault$(MACHINE).h Fault$(MACHINE).c
  1397. Xtags : AExit$(MACHINE).c BExit$(MACHINE).c FExit$(MACHINE).c
  1398. Xtags : PPL$(MACHINE).h PPL$(MACHINE).c
  1399. X    ctags Fault$(MACHINE).h Fault$(MACHINE).c
  1400. X    ctags -a AExit$(MACHINE).c BExit$(MACHINE).c FExit$(MACHINE).c
  1401. X    ctags -a PPL$(MACHINE).h PPL$(MACHINE).c
  1402. X
  1403. Xtest : $(MACHINE)
  1404. X    $(CC) $(CFLAGS) TestHost.c
  1405. X    ld.$(MACHINE) TestHost TestHost.o
  1406. X    TestHost
  1407. X
  1408. Xzap : clean
  1409. X    -$(DELETE) $(MACHINE)
  1410. X    -$(DELETE) tags
  1411. X    -$(DELETE) $(CH)PPL.h
  1412. X    -$(DELETE) $(INC)PPL.h
  1413. X    -$(DELETE) $(CH)Fault.h
  1414. X    -$(DELETE) $(INC)Fault.h
  1415. X    -$(DELETE) $(PPLLIB)
  1416. X    -$(DELETE) TestHost
  1417. X
  1418. Xclean :
  1419. X    -$(DELETE) $(WILDCARD).tmp
  1420. X    -$(DELETE) $(WILDCARD).o
  1421. X    -$(DELETE) $(WILDCARD).err
  1422. X    -$(DELETE) t:$(WILDCARD)
  1423. X    -$(DELETE) $(WILDCARD).lnk
  1424. X    -$(DELETE) core
  1425. X
  1426. X#end of Makefile
  1427. X
  1428. END_OF_FILE
  1429. if test 2100 -ne `wc -c <'PPL/MakeTail'`; then
  1430.     echo shar: \"'PPL/MakeTail'\" unpacked with wrong size!
  1431. fi
  1432. # end of 'PPL/MakeTail'
  1433. fi
  1434. if test -f 'PPL/README' -a "${1}" != "-c" ; then 
  1435.   echo shar: Will not clobber existing file \"'PPL/README'\"
  1436. else
  1437. echo shar: Extracting \"'PPL/README'\" \(2040 characters\)
  1438. sed "s/^X//" >'PPL/README' <<'END_OF_FILE'
  1439. X
  1440. XThese programs and all derivative works are copyright 1990 by
  1441. XDarren New. All Rights Reserved.
  1442. X
  1443. XPermission to use, copy, modify, and distribute this software and its
  1444. Xdocumentation for any purpose and without fee is hereby granted, provided
  1445. Xthat the above copyright notice appear in all copies and that both that
  1446. Xcopyright notice and this permission notice appear in supporting
  1447. Xdocumentation, and that the names of the copyright holder or author not be
  1448. Xused in advertising or publicity pertaining to distribution of the software
  1449. Xwithout specific, written prior permission.
  1450. X
  1451. XBOTH THE AUTHOR AND THE COPYRIGHT HOLDER DISCLAIM ALL WARRANTIES WITH
  1452. XREGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
  1453. XMERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDER OR THE
  1454. XAUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
  1455. XDAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
  1456. XAN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  1457. XOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  1458. X
  1459. XThe author can currently be reached in the USA by phone at
  1460. X(302) 451-8013, by electronic mail at "new@udel.edu", or by
  1461. Xphysical mail at 151 Thorn Lane #12, Newark, DE 19711.
  1462. X
  1463. XIf you find this program (or the included libraries) useful, a
  1464. Xdonation would be welcome. Questions, comments, improvements, and
  1465. Xports are also welcome and will be redistributed with thanks and
  1466. Xattribution.
  1467. X
  1468. X
  1469. X----------------------------------------------------------------------
  1470. X
  1471. X
  1472. XPlease note that neither the TFS nor the BFS (nor the UIS or VMS, for
  1473. Xthat matter) are actually complete yet. However, they do seem to be
  1474. Xsufficiently complete to get LOME, Comp1, and Interp working. I
  1475. Xrelease them only for the recompilation of the files in the LOME
  1476. Xdistribution.
  1477. X
  1478. XExpect a new distribution of the lower-level routines along with new
  1479. Xprograms in the not-so-near future.
  1480. X
  1481. XTo install the Portable Programmer's Library, please see the bottom of
  1482. Xthe PPL.doc file. Thank you.          -- Darren New
  1483. X
  1484. X
  1485. X
  1486. END_OF_FILE
  1487. if test 2040 -ne `wc -c <'PPL/README'`; then
  1488.     echo shar: \"'PPL/README'\" unpacked with wrong size!
  1489. fi
  1490. # end of 'PPL/README'
  1491. fi
  1492. if test -f 'PPL/ShiftLeft.c' -a "${1}" != "-c" ; then 
  1493.   echo shar: Will not clobber existing file \"'PPL/ShiftLeft.c'\"
  1494. else
  1495. echo shar: Extracting \"'PPL/ShiftLeft.c'\" \(790 characters\)
  1496. sed "s/^X//" >'PPL/ShiftLeft.c' <<'END_OF_FILE'
  1497. X/*
  1498. X * ShiftLeft.c
  1499. X * This program reads stdin and writes stdout.
  1500. X * If it sees a line starting with a multiple of eight spaces,
  1501. X * it outputs the same line starting with half as many spaces.
  1502. X * This essentially changes tabs to four spaces.
  1503. X * Started: 24-Feb-88 DHN
  1504. X */
  1505. X
  1506. X#include <stdio.h>
  1507. X#include <stdlib.h>
  1508. X#include <ctype.h>
  1509. X
  1510. Xvoid main()
  1511. X{
  1512. X    extern int errno;
  1513. X    int ls;            /* number of leading spaces */
  1514. X    char ib[500];        /* input buffer */
  1515. X    int err;            /* error while writing */
  1516. X
  1517. X    while (NULL != gets(ib)) {
  1518. X    for (ls = 0; isspace(ib[ls]); ls++)
  1519. X        ;
  1520. X    if ((0 < ls) && ((ls % 8) == 0))
  1521. X        err = puts(&ib[ls / 2]);
  1522. X    else
  1523. X        err = puts(ib);
  1524. X    if (errno != 0) {
  1525. X        fprintf(stderr, "Error=%d, errno=%d\n", err, errno);
  1526. X        exit(99);
  1527. X        }
  1528. X    }
  1529. X
  1530. X    exit(0);
  1531. X    }
  1532. X
  1533. X
  1534. END_OF_FILE
  1535. if test 790 -ne `wc -c <'PPL/ShiftLeft.c'`; then
  1536.     echo shar: \"'PPL/ShiftLeft.c'\" unpacked with wrong size!
  1537. fi
  1538. # end of 'PPL/ShiftLeft.c'
  1539. fi
  1540. if test -f 'PPL/TestHost.c' -a "${1}" != "-c" ; then 
  1541.   echo shar: Will not clobber existing file \"'PPL/TestHost.c'\"
  1542. else
  1543. echo shar: Extracting \"'PPL/TestHost.c'\" \(809 characters\)
  1544. sed "s/^X//" >'PPL/TestHost.c' <<'END_OF_FILE'
  1545. X/* TestFault.c -- Test the Fault function */
  1546. X
  1547. X#include "PPL.h"
  1548. X
  1549. Xshort DoIt()
  1550. X{
  1551. X    short i;
  1552. X    char * s = "Fault returned ";
  1553. X    char * t;
  1554. X    char r[50];
  1555. X
  1556. X    do {
  1557. X    i = fault("Well, here I am!");
  1558. X    for (t = s; *t; t++)
  1559. X        PLPutChar((short) *t);
  1560. X    PLPutChar((short) PLToDig(i));
  1561. X    PLPutChar((short) '\n');
  1562. X    PLDelay(10);
  1563. X    PLResetInput();
  1564. X    PLResetOutput();
  1565. X    } while (i == 1);
  1566. X
  1567. X    strcpy(r, "Z Message X");
  1568. X
  1569. X    r[0] = PLToDig(PLstatuslevel);
  1570. X    for (i = 0; i < 10; i++) {
  1571. X    r[10] = PLToDig(i);
  1572. X    PLStatus(i, r);
  1573. X    PLDelay(1);
  1574. X    }
  1575. X
  1576. X    PLstatuslevel = 9;
  1577. X    r[0] = '9';
  1578. X    for (i = 0; i < 10; i++) {
  1579. X    r[10] = PLToDig(i);
  1580. X    PLStatus(i, r);
  1581. X    PLDelay(1);
  1582. X    }
  1583. X
  1584. X    PLstatuslevel = 0;
  1585. X    r[0] = '0';
  1586. X    for (i = 0; i < 10; i++) {
  1587. X    r[10] = PLToDig(i);
  1588. X    PLStatus(i, r);
  1589. X    PLDelay(1);
  1590. X    }
  1591. X
  1592. X    return PLsev_normal;
  1593. X    }
  1594. X
  1595. END_OF_FILE
  1596. if test 809 -ne `wc -c <'PPL/TestHost.c'`; then
  1597.     echo shar: \"'PPL/TestHost.c'\" unpacked with wrong size!
  1598. fi
  1599. # end of 'PPL/TestHost.c'
  1600. fi
  1601. if test -f 'PPL/ld.Amiga' -a "${1}" != "-c" ; then 
  1602.   echo shar: Will not clobber existing file \"'PPL/ld.Amiga'\"
  1603. else
  1604. echo shar: Extracting \"'PPL/ld.Amiga'\" \(635 characters\)
  1605. sed "s/^X//" >'PPL/ld.Amiga' <<'END_OF_FILE'
  1606. X.key out/a,f1/a,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15
  1607. X. This will link together all the indicated .o files.
  1608. X. The first argument must be the name of the executable (w/o extension)
  1609. X. It will also link in the PPL library.
  1610. X.bra {
  1611. X.ket }
  1612. X
  1613. X. First, build the .lnk file
  1614. X.   execute >{out}.lnk ld1.Amiga {f1} {f2} {f3} {f4} {f5} {f6} {f7} {f8} {f9} {f10} {f11} {f12} {f13} {f14} {f15}
  1615. Xjoin {f1} {f2} {f3} {f4} {f5} {f6} {f7} {f8} {f9} as t:obj1.lnk
  1616. Xjoin t:obj1.lnk {f10} {f11} {f12} {f13} {f14} {f15} as t:obj2.lnk
  1617. XBLINK to {out} from LIB:c.o+t:obj2.lnk LIB LIB:PPL.lib+LIB:lcr.lib+LIB:amiga.lib ADDSYM
  1618. Xdelete t:obj(1|2).lnk quiet
  1619. X
  1620. END_OF_FILE
  1621. if test 635 -ne `wc -c <'PPL/ld.Amiga'`; then
  1622.     echo shar: \"'PPL/ld.Amiga'\" unpacked with wrong size!
  1623. fi
  1624. # end of 'PPL/ld.Amiga'
  1625. fi
  1626. if test -f 'PPL/ld.Unix' -a "${1}" != "-c" ; then 
  1627.   echo shar: Will not clobber existing file \"'PPL/ld.Unix'\"
  1628. else
  1629. echo shar: Extracting \"'PPL/ld.Unix'\" \(280 characters\)
  1630. sed "s/^X//" >'PPL/ld.Unix' <<'END_OF_FILE'
  1631. X#!/bin/csh
  1632. X# This will link together all the indicated .o files.
  1633. X# It will also link the PPL library in and will generate an
  1634. X# output file named after the first .o file on the line.
  1635. X#    -Bstatic for debugging
  1636. X
  1637. Xgcc -L$PPLDIR -g -o $* -lPPL -Bstatic
  1638. X#gcc -L$PPLDIR -O -o $* -lPPL
  1639. X
  1640. END_OF_FILE
  1641. if test 280 -ne `wc -c <'PPL/ld.Unix'`; then
  1642.     echo shar: \"'PPL/ld.Unix'\" unpacked with wrong size!
  1643. fi
  1644. # end of 'PPL/ld.Unix'
  1645. fi
  1646. if test ! -d 'TFS' ; then
  1647.     echo shar: Creating directory \"'TFS'\"
  1648.     mkdir 'TFS'
  1649. fi
  1650. if test -f 'TFS/FixMake.Amiga' -a "${1}" != "-c" ; then 
  1651.   echo shar: Will not clobber existing file \"'TFS/FixMake.Amiga'\"
  1652. else
  1653. echo shar: Extracting \"'TFS/FixMake.Amiga'\" \(115 characters\)
  1654. sed "s/^X//" >'TFS/FixMake.Amiga' <<'END_OF_FILE'
  1655. Xjoin PPLDIR:PPL/MakeHead.Amiga MakeTail as Makefile.Amiga
  1656. Xjoin PPLDIR:PPL/MakeHead.Unix MakeTail as Makefile.Unix
  1657. X
  1658. END_OF_FILE
  1659. if test 115 -ne `wc -c <'TFS/FixMake.Amiga'`; then
  1660.     echo shar: \"'TFS/FixMake.Amiga'\" unpacked with wrong size!
  1661. fi
  1662. # end of 'TFS/FixMake.Amiga'
  1663. fi
  1664. if test -f 'TFS/FixMake.Unix' -a "${1}" != "-c" ; then 
  1665.   echo shar: Will not clobber existing file \"'TFS/FixMake.Unix'\"
  1666. else
  1667. echo shar: Extracting \"'TFS/FixMake.Unix'\" \(111 characters\)
  1668. sed "s/^X//" >'TFS/FixMake.Unix' <<'END_OF_FILE'
  1669. Xcat $PPLDIR/PPL/MakeHead.Amiga MakeTail >Makefile.Amiga
  1670. Xcat $PPLDIR/PPL/MakeHead.Unix MakeTail >Makefile.Unix
  1671. X
  1672. END_OF_FILE
  1673. if test 111 -ne `wc -c <'TFS/FixMake.Unix'`; then
  1674.     echo shar: \"'TFS/FixMake.Unix'\" unpacked with wrong size!
  1675. fi
  1676. # end of 'TFS/FixMake.Unix'
  1677. fi
  1678. if test -f 'TFS/MakeTail' -a "${1}" != "-c" ; then 
  1679.   echo shar: Will not clobber existing file \"'TFS/MakeTail'\"
  1680. else
  1681. echo shar: Extracting \"'TFS/MakeTail'\" \(1109 characters\)
  1682. sed "s/^X//" >'TFS/MakeTail' <<'END_OF_FILE'
  1683. X# Makefile for PPL TFS routines
  1684. X
  1685. X$(MACHINE) : $(CH)TFS.h $(INC)TFS.h TFS$(MACHINE).o
  1686. X    date >$(MACHINE)
  1687. X
  1688. X$(CH)TFS.h : TFS.h
  1689. X    $(COPY) TFS.h $(CH)TFS.h
  1690. X
  1691. X$(INC)TFS.h : $(CH)TFS.h
  1692. X    $(COMPACT) <$(CH)TFS.h >$(INC)TFS.h
  1693. X
  1694. XTFS$(MACHINE).o : TFS$(MACHINE).c $(INC)TFS.h $(INC)PPL.h
  1695. X    $(CC) $(CFLAGS) TFS$(MACHINE).c
  1696. X    $(LIBPRG) $(LIBAFLGS) TFS$(MACHINE).o
  1697. X
  1698. Xtest : $(MACHINE) TestTFS TestTFS.inp
  1699. X    $(DELETE) t:$(WILDCARD)
  1700. X    $(COPY) TestTFS.inp t:file-a
  1701. X    $(COPY) TestTFS.inp t:file-c
  1702. X    TestTFS >t:TestTFS1.out
  1703. X    $(DIFF) t:TestTFS1.out TestTFS1.out
  1704. X    $(DIFF) t:file-b TestTFS2.out
  1705. X#    t:file-c should remain, t:file-a should be gone
  1706. X
  1707. XTestTFS : TestTFS.c $(PPLLIB)
  1708. X    $(CC) $(CFLAGS) TestTFS.c
  1709. X    ld.$(MACHINE) TestTFS TestTFS.o
  1710. X
  1711. Xtags : TFS.h TFS$(MACHINE).c
  1712. X    ctags TFS.h TFS$(MACHINE).c
  1713. X
  1714. Xzap : clean
  1715. X    -$(DELETE) $(MACHINE)
  1716. X    -$(DELETE) tags
  1717. X    -$(DELETE) $(CH)TFS.h
  1718. X    -$(DELETE) $(INC)TFS.h
  1719. X    -$(DELETE) TestTFS
  1720. X    -$(LIBPRG) $(LIBDFLGS) TFS$(MACHINE)$(LIBIEXT)
  1721. X
  1722. Xclean :
  1723. X    -$(DELETE) $(WILDCARD).tmp
  1724. X    -$(DELETE) $(WILDCARD).o
  1725. X    -$(DELETE) $(WILDCARD).lnk
  1726. X    -$(DELETE) t:$(WILDCARD)
  1727. X    -$(DELETE) $(WILDCARD).err
  1728. X    -$(DELETE) core
  1729. X
  1730. X#end of Makefile
  1731. X
  1732. END_OF_FILE
  1733. if test 1109 -ne `wc -c <'TFS/MakeTail'`; then
  1734.     echo shar: \"'TFS/MakeTail'\" unpacked with wrong size!
  1735. fi
  1736. # end of 'TFS/MakeTail'
  1737. fi
  1738. if test -f 'TFS/README' -a "${1}" != "-c" ; then 
  1739.   echo shar: Will not clobber existing file \"'TFS/README'\"
  1740. else
  1741. echo shar: Extracting \"'TFS/README'\" \(2040 characters\)
  1742. sed "s/^X//" >'TFS/README' <<'END_OF_FILE'
  1743. X
  1744. XThese programs and all derivative works are copyright 1990 by
  1745. XDarren New. All Rights Reserved.
  1746. X
  1747. XPermission to use, copy, modify, and distribute this software and its
  1748. Xdocumentation for any purpose and without fee is hereby granted, provided
  1749. Xthat the above copyright notice appear in all copies and that both that
  1750. Xcopyright notice and this permission notice appear in supporting
  1751. Xdocumentation, and that the names of the copyright holder or author not be
  1752. Xused in advertising or publicity pertaining to distribution of the software
  1753. Xwithout specific, written prior permission.
  1754. X
  1755. XBOTH THE AUTHOR AND THE COPYRIGHT HOLDER DISCLAIM ALL WARRANTIES WITH
  1756. XREGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
  1757. XMERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDER OR THE
  1758. XAUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
  1759. XDAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
  1760. XAN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  1761. XOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  1762. X
  1763. XThe author can currently be reached in the USA by phone at
  1764. X(302) 451-8013, by electronic mail at "new@udel.edu", or by
  1765. Xphysical mail at 151 Thorn Lane #12, Newark, DE 19711.
  1766. X
  1767. XIf you find this program (or the included libraries) useful, a
  1768. Xdonation would be welcome. Questions, comments, improvements, and
  1769. Xports are also welcome and will be redistributed with thanks and
  1770. Xattribution.
  1771. X
  1772. X
  1773. X----------------------------------------------------------------------
  1774. X
  1775. X
  1776. XPlease note that neither the TFS nor the BFS (nor the UIS or VMS, for
  1777. Xthat matter) are actually complete yet. However, they do seem to be
  1778. Xsufficiently complete to get LOME, Comp1, and Interp working. I
  1779. Xrelease them only for the recompilation of the files in the LOME
  1780. Xdistribution.
  1781. X
  1782. XExpect a new distribution of the lower-level routines along with new
  1783. Xprograms in the not-so-near future.
  1784. X
  1785. XTo install the Portable Programmer's Library, please see the bottom of
  1786. Xthe PPL.doc file. Thank you.          -- Darren New
  1787. X
  1788. X
  1789. X
  1790. END_OF_FILE
  1791. if test 2040 -ne `wc -c <'TFS/README'`; then
  1792.     echo shar: \"'TFS/README'\" unpacked with wrong size!
  1793. fi
  1794. # end of 'TFS/README'
  1795. fi
  1796. if test -f 'TFS/TestTFS.c' -a "${1}" != "-c" ; then 
  1797.   echo shar: Will not clobber existing file \"'TFS/TestTFS.c'\"
  1798. else
  1799. echo shar: Extracting \"'TFS/TestTFS.c'\" \(1831 characters\)
  1800. sed "s/^X//" >'TFS/TestTFS.c' <<'END_OF_FILE'
  1801. X/*
  1802. X * TestTFS.c
  1803. X * Copyright 1987 Darren New.
  1804. X * TEST VERSION!
  1805. X */
  1806. X
  1807. X#include "PPL.h"
  1808. X#include "TFS.h"
  1809. X
  1810. X#include <stdio.h>
  1811. X
  1812. X#if HIDPROTS
  1813. XHIDDEN void showerr(int,short,char);
  1814. X#endif
  1815. X
  1816. XHIDDEN void showerr ARGS3(int,progline,short,line,char,fch)
  1817. X{
  1818. X    if (PLerr != PLerr_none) {
  1819. X    /* fprintf(stderr,
  1820. X"LINE=%d, PLErr=%d, OSerr=%ld, errmess=%s, errline=%d, errfile=%s\n",
  1821. X        line, PLerr , OSerr , PLErrText() , PLerr_line , PLerr_file);
  1822. X    */
  1823. X    printf("fileline=%d, progline=%d, fch=%c, PLErr=%d, errmess=%s\n",
  1824. X        line, progline, fch ? fch : '@', PLerr, PLErrText());
  1825. X    PLErrClr();
  1826. X    }
  1827. X    }
  1828. X
  1829. X
  1830. X
  1831. Xshort DoIt()
  1832. X{
  1833. X
  1834. X    TFSfile a, b, c, d, e;
  1835. X    TFSnote a1;
  1836. X    short l, m;
  1837. X    char buf[BIGLINE+1];
  1838. X    short line = 1;
  1839. X
  1840. X    TFSInit();
  1841. X
  1842. X    buf[BIGLINE] = '|';
  1843. X
  1844. X    a = TFSOpen("t:file-a", "RPD");
  1845. X    showerr(__LINE__,0,'a');
  1846. X
  1847. X    b = TFSOpen("t:file-b", "CTW");
  1848. X    showerr(__LINE__,0,'b');
  1849. X
  1850. X    c = TFSOpen("t:file-c", "LD");
  1851. X    showerr(__LINE__,0,'c');
  1852. X
  1853. X    d = TFSOpen("t:file-d", "LR");
  1854. X    showerr(__LINE__,0,'d');
  1855. X
  1856. X    e = TFSOpen("t:file-e", "LWCT");
  1857. X    showerr(__LINE__,0,'e');
  1858. X
  1859. X    loop {
  1860. X    long holderr;
  1861. X    a1 = TFSNote(a); showerr(__LINE__,line,'N');
  1862. X    l = TFSRead(a, buf); holderr = PLerr; showerr(__LINE__,line,buf[0]);
  1863. X    if (l < 0 && holderr != PLerr_overflow) break;
  1864. X    if (holderr != PLerr_overflow)
  1865. X        assert(l <= 0 ? 0 == buf[0] : 0 == buf[l]);
  1866. X    assert(l <= 0 || !isspace(buf[l-1]));
  1867. X    m = TFSWrite(b, buf); showerr(__LINE__,line,buf[0]);
  1868. X    if (buf[BIGLINE] != '|') {
  1869. X        if (fault("buf[BIGLINE] trashed!")) {
  1870. X        break;
  1871. X        }
  1872. X        }
  1873. X    line++;
  1874. X    }
  1875. X    if (l != -1 || PLerr != PLerr_eod) showerr(__LINE__,line,buf[0]);
  1876. X
  1877. X    if (!TFSWrite(b, "3 Trailing spaces:   ")) {
  1878. X    showerr(__LINE__,0,' ');
  1879. X    }
  1880. X
  1881. X    if (!TFSClose(b)) {
  1882. X    showerr(__LINE__,0,'C');
  1883. X    }
  1884. X
  1885. X    if (!TFSDestroy(a)) {
  1886. X    showerr(__LINE__,0,'D');
  1887. X    }
  1888. X
  1889. X    return PLsev_normal;
  1890. X    }
  1891. X
  1892. END_OF_FILE
  1893. if test 1831 -ne `wc -c <'TFS/TestTFS.c'`; then
  1894.     echo shar: \"'TFS/TestTFS.c'\" unpacked with wrong size!
  1895. fi
  1896. # end of 'TFS/TestTFS.c'
  1897. fi
  1898. if test -f 'TFS/TestTFS1.out' -a "${1}" != "-c" ; then 
  1899.   echo shar: Will not clobber existing file \"'TFS/TestTFS1.out'\"
  1900. else
  1901. echo shar: Extracting \"'TFS/TestTFS1.out'\" \(408 characters\)
  1902. sed "s/^X//" >'TFS/TestTFS1.out' <<'END_OF_FILE'
  1903. Xfileline=0, progline=54, fch=d, PLErr=9, errmess=Item does not exist
  1904. Xfileline=22, progline=62, fch=d, PLErr=18, errmess=Overflow error
  1905. Xfileline=23, progline=62, fch=e, PLErr=18, errmess=Overflow error
  1906. Xfileline=24, progline=62, fch=f, PLErr=18, errmess=Overflow error
  1907. Xfileline=25, progline=62, fch=g, PLErr=18, errmess=Overflow error
  1908. Xfileline=28, progline=62, fch=@, PLErr=6, errmess=End of data during input
  1909. END_OF_FILE
  1910. if test 408 -ne `wc -c <'TFS/TestTFS1.out'`; then
  1911.     echo shar: \"'TFS/TestTFS1.out'\" unpacked with wrong size!
  1912. fi
  1913. # end of 'TFS/TestTFS1.out'
  1914. fi
  1915. echo shar: End of archive 1 \(of 9\).
  1916. cp /dev/null ark1isdone
  1917. MISSING=""
  1918. for I in 1 2 3 4 5 6 7 8 9 ; do
  1919.     if test ! -f ark${I}isdone ; then
  1920.     MISSING="${MISSING} ${I}"
  1921.     fi
  1922. done
  1923. if test "${MISSING}" = "" ; then
  1924.     echo You have unpacked all 9 archives.
  1925.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1926. else
  1927.     echo You still need to unpack the following archives:
  1928.     echo "        " ${MISSING}
  1929. fi
  1930. ##  End of shell archive.
  1931. exit 0
  1932. -- 
  1933. --- Darren New --- Grad Student --- CIS --- Univ. of Delaware ---
  1934.  
  1935. exit 0 # Just in case...
  1936. -- 
  1937. Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.
  1938. Use a domain-based address or give alternate paths, or you may lose out.
  1939.