home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / unix / volume26 / funnlweb / part13 < prev    next >
Encoding:
Text File  |  1993-04-10  |  126.4 KB  |  3,689 lines

  1. Newsgroups: comp.sources.unix
  2. From: ross@spam.adelaide.edu.au (Ross Williams)
  3. Subject: v26i133: funnelweb - a tool for literate programming in C, Part13/20
  4. Sender: unix-sources-moderator@vix.com
  5. Approved: paul@vix.com
  6.  
  7. Submitted-By: ross@spam.adelaide.edu.au (Ross Williams)
  8. Posting-Number: Volume 26, Issue 133
  9. Archive-Name: funnelweb/part13
  10.  
  11. #! /bin/sh
  12. # This is a shell archive.  Remove anything before this line, then unpack
  13. # it by saving it into a file and typing "sh file".  To overwrite existing
  14. # files, type "sh file -c".  You can also feed this as standard input via
  15. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  16. # will see the following message at the end:
  17. #        "End of archive 13 (of 20)."
  18. # Contents:  answers/pr05.lis sources/help.c sources/weave.c
  19. #   userman/u_manual.sin
  20. # Wrapped by vixie@gw.home.vix.com on Sun Apr 11 11:00:28 1993
  21. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  22. if test -f 'answers/pr05.lis' -a "${1}" != "-c" ; then 
  23.   echo shar: Will not clobber existing file \"'answers/pr05.lis'\"
  24. else
  25. echo shar: Extracting \"'answers/pr05.lis'\" \(28430 characters\)
  26. sed "s/^X//" >'answers/pr05.lis' <<'END_OF_FILE'
  27. XFUNNELWEB LISTING FILE
  28. X======================
  29. X
  30. Dump of mapped file "<<Suppressed>>".
  31. X
  32. MEMORY DUMP OF MAPPED FILE
  33. X==========================
  34. X
  35. X+-------------------------------------------------+------------------+
  36. X| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | 0123456789ABCDEF |
  37. X+-------------------------------------------------+------------------+
  38. X| 50 52 30 35 3A 20 54 65 73 74 20 74 68 65 20 70 | PR05: Test the p |
  39. X| 61 72 73 69 6E 67 20 6F 66 20 66 6F 72 6D 61 6C | arsing of formal |
  40. X| 20 70 61 72 61 6D 65 74 65 72 20 6C 69 73 74 73 |  parameter lists |
  41. X| 2E 0A 0A 46 69 72 73 74 20 74 72 69 70 20 74 68 | ...First trip th |
  42. X| 65 20 70 61 72 73 65 72 20 73 6F 20 77 65 20 64 | e parser so we d |
  43. X| 6F 6E 27 74 20 67 65 74 20 70 61 73 74 20 74 68 | on't get past th |
  44. X| 65 20 70 61 72 73 65 72 2E 0A 40 3E 0A 0A 31 2E | e parser..@>..1. |
  45. X| 20 54 65 73 74 20 6D 61 63 72 6F 20 64 65 66 69 |  Test macro defi |
  46. X| 6E 69 74 69 6F 6E 20 77 69 74 68 20 6E 6F 20 66 | nition with no f |
  47. X| 6F 72 6D 61 6C 20 70 61 72 61 6D 65 74 65 72 73 | ormal parameters |
  48. X| 2E 0A 40 24 40 3C 53 6C 6F 74 68 40 3E 40 7B 53 | ..@$@<Sloth@>@{S |
  49. X| 6C 6F 74 68 74 65 78 74 40 7D 0A 0A 32 2E 20 54 | lothtext@}..2. T |
  50. X| 65 73 74 20 6D 61 63 72 6F 20 64 65 66 69 6E 69 | est macro defini |
  51. X| 74 69 6F 6E 20 77 69 74 68 20 6F 6E 65 20 66 6F | tion with one fo |
  52. X| 72 6D 61 6C 20 70 61 72 61 6D 65 74 65 72 2E 0A | rmal parameter.. |
  53. X| 40 24 40 3C 53 6C 6F 74 68 20 77 69 74 68 20 6F | @$@<Sloth with o |
  54. X| 6E 65 40 3E 40 28 40 31 40 29 40 7B 53 6C 6F 74 | ne@>@(@1@)@{Slot |
  55. X| 68 74 65 78 74 40 7D 0A 0A 33 2E 20 54 65 73 74 | htext@}..3. Test |
  56. X| 20 6D 61 63 72 6F 20 64 65 66 69 6E 69 74 69 6F |  macro definitio |
  57. X| 6E 20 77 69 74 68 20 6D 61 6E 79 20 66 6F 72 6D | n with many form |
  58. X| 61 6C 20 70 61 72 61 6D 65 74 65 72 73 2E 0A 40 | al parameters..@ |
  59. X| 24 40 3C 53 6C 6F 74 68 20 77 69 74 68 20 32 40 | $@<Sloth with 2@ |
  60. X| 3E 40 28 40 32 40 29 40 7B 53 6C 6F 74 68 74 65 | >@(@2@)@{Slothte |
  61. X| 78 74 40 7D 0A 40 24 40 3C 53 6C 6F 74 68 20 77 | xt@}.@$@<Sloth w |
  62. X| 69 74 68 20 33 40 3E 40 28 40 33 40 29 40 7B 53 | ith 3@>@(@3@)@{S |
  63. X| 6C 6F 74 68 74 65 78 74 40 7D 0A 40 24 40 3C 53 | lothtext@}.@$@<S |
  64. X| 6C 6F 74 68 20 77 69 74 68 20 34 40 3E 40 28 40 | loth with 4@>@(@ |
  65. X| 34 40 29 40 7B 53 6C 6F 74 68 74 65 78 74 40 7D | 4@)@{Slothtext@} |
  66. X| 0A 40 24 40 3C 53 6C 6F 74 68 20 77 69 74 68 20 | .@$@<Sloth with  |
  67. X| 35 40 3E 40 28 40 35 40 29 40 7B 53 6C 6F 74 68 | 5@>@(@5@)@{Sloth |
  68. X| 74 65 78 74 40 7D 0A 40 24 40 3C 53 6C 6F 74 68 | text@}.@$@<Sloth |
  69. X| 20 77 69 74 68 20 36 40 3E 40 28 40 36 40 29 40 |  with 6@>@(@6@)@ |
  70. X| 7B 53 6C 6F 74 68 74 65 78 74 40 7D 0A 40 24 40 | {Slothtext@}.@$@ |
  71. X| 3C 53 6C 6F 74 68 20 77 69 74 68 20 37 40 3E 40 | <Sloth with 7@>@ |
  72. X| 28 40 37 40 29 40 7B 53 6C 6F 74 68 74 65 78 74 | (@7@)@{Slothtext |
  73. X| 40 7D 0A 40 24 40 3C 53 6C 6F 74 68 20 77 69 74 | @}.@$@<Sloth wit |
  74. X| 68 20 38 40 3E 40 28 40 38 40 29 40 7B 53 6C 6F | h 8@>@(@8@)@{Slo |
  75. X| 74 68 74 65 78 74 40 7D 0A 40 24 40 3C 53 6C 6F | thtext@}.@$@<Slo |
  76. X| 74 68 20 77 69 74 68 20 39 40 3E 40 28 40 39 40 | th with 9@>@(@9@ |
  77. X| 29 40 7B 53 6C 6F 74 68 74 65 78 74 40 7D 0A 0A | )@{Slothtext@}.. |
  78. X| 34 2E 20 54 65 73 74 20 77 69 74 68 20 73 79 6E | 4. Test with syn |
  79. X| 74 61 78 20 65 72 72 6F 72 73 20 69 6E 20 74 68 | tax errors in th |
  80. X| 65 20 70 61 72 61 6D 65 74 65 72 20 6C 69 73 74 | e parameter list |
  81. X| 2E 0A 0A 40 24 40 3C 53 6C 6F 74 68 20 61 40 3E | ...@$@<Sloth a@> |
  82. X| 40 28 40 2B 40 39 40 29 40 7B 53 6C 6F 74 68 74 | @(@+@9@)@{Slotht |
  83. X| 65 78 74 40 7D 0A 40 41 40 3C 45 72 72 6F 72 20 | ext@}.@A@<Error  |
  84. X| 72 65 63 6F 76 65 72 79 20 70 6F 69 6E 74 40 3E | recovery point@> |
  85. X| 0A 0A 40 24 40 3C 53 6C 6F 74 68 20 62 40 3E 40 | ..@$@<Sloth b@>@ |
  86. X| 39 40 29 40 7B 53 6C 6F 74 68 74 65 78 74 40 7D | 9@)@{Slothtext@} |
  87. X| 0A 40 41 40 3C 45 72 72 6F 72 20 72 65 63 6F 76 | .@A@<Error recov |
  88. X| 65 72 79 20 70 6F 69 6E 74 40 3E 0A 0A 40 24 40 | ery point@>..@$@ |
  89. X| 3C 53 6C 6F 74 68 20 63 40 3E 40 28 39 40 29 40 | <Sloth c@>@(9@)@ |
  90. X| 7B 53 6C 6F 74 68 74 65 78 74 40 7D 0A 40 41 40 | {Slothtext@}.@A@ |
  91. X| 3C 45 72 72 6F 72 20 72 65 63 6F 76 65 72 79 20 | <Error recovery  |
  92. X| 70 6F 69 6E 74 40 3E 0A 0A 40 24 40 3C 53 6C 6F | point@>..@$@<Slo |
  93. X| 74 68 20 64 40 3E 40 39 40 29 40 7B 53 6C 6F 74 | th d@>@9@)@{Slot |
  94. X| 68 74 65 78 74 40 7D 0A 40 41 40 3C 45 72 72 6F | htext@}.@A@<Erro |
  95. X| 72 20 72 65 63 6F 76 65 72 79 20 70 6F 69 6E 74 | r recovery point |
  96. X| 40 3E 0A 0A 40 24 40 3C 53 6C 6F 74 68 20 65 40 | @>..@$@<Sloth e@ |
  97. X| 3E 40 28 40 39 40 29 40 29 40 7B 53 6C 6F 74 68 | >@(@9@)@)@{Sloth |
  98. X| 74 65 78 74 40 7D 0A 40 41 40 3C 45 72 72 6F 72 | text@}.@A@<Error |
  99. X| 20 72 65 63 6F 76 65 72 79 20 70 6F 69 6E 74 40 |  recovery point@ |
  100. X| 3E 0A 0A 0A 0A                                  | >....            |
  101. X+-------------------------------------------------+------------------+
  102. X
  103. X
  104. X=========================== Start of LINE LIST DUMP ============================
  105. X
  106. Globl Local| Text
  107. X-----------+--------------------------------------------------------------------
  108. X00001 00001| PR05: Test the parsing of formal parameter lists.<010>
  109. X00002 00002| <010>
  110. X00003 00003| First trip the parser so we don't get past the parser.<010>
  111. X00004 00004| @><010>
  112. X00005 00005| <010>
  113. X00006 00006| 1. Test macro definition with no formal parameters.<010>
  114. X00007 00007| @$@<Sloth@>@{Slothtext@}<010>
  115. X00008 00008| <010>
  116. X00009 00009| 2. Test macro definition with one formal parameter.<010>
  117. X00010 00010| @$@<Sloth with one@>@(@1@)@{Slothtext@}<010>
  118. X00011 00011| <010>
  119. X00012 00012| 3. Test macro definition with many formal parameters.<010>
  120. X00013 00013| @$@<Sloth with 2@>@(@2@)@{Slothtext@}<010>
  121. X00014 00014| @$@<Sloth with 3@>@(@3@)@{Slothtext@}<010>
  122. X00015 00015| @$@<Sloth with 4@>@(@4@)@{Slothtext@}<010>
  123. X00016 00016| @$@<Sloth with 5@>@(@5@)@{Slothtext@}<010>
  124. X00017 00017| @$@<Sloth with 6@>@(@6@)@{Slothtext@}<010>
  125. X00018 00018| @$@<Sloth with 7@>@(@7@)@{Slothtext@}<010>
  126. X00019 00019| @$@<Sloth with 8@>@(@8@)@{Slothtext@}<010>
  127. X00020 00020| @$@<Sloth with 9@>@(@9@)@{Slothtext@}<010>
  128. X00021 00021| <010>
  129. X00022 00022| 4. Test with syntax errors in the parameter list.<010>
  130. X00023 00023| <010>
  131. X00024 00024| @$@<Sloth a@>@(@+@9@)@{Slothtext@}<010>
  132. X00025 00025| @A@<Error recovery point@><010>
  133. X00026 00026| <010>
  134. X00027 00027| @$@<Sloth b@>@9@)@{Slothtext@}<010>
  135. X00028 00028| @A@<Error recovery point@><010>
  136. X00029 00029| <010>
  137. X00030 00030| @$@<Sloth c@>@(9@)@{Slothtext@}<010>
  138. X00031 00031| @A@<Error recovery point@><010>
  139. X00032 00032| <010>
  140. X00033 00033| @$@<Sloth d@>@9@)@{Slothtext@}<010>
  141. X00034 00034| @A@<Error recovery point@><010>
  142. X00035 00035| <010>
  143. X00036 00036| @$@<Sloth e@>@(@9@)@)@{Slothtext@}<010>
  144. X00037 00037| @A@<Error recovery point@><010>
  145. X00038 00038| <010>
  146. X00039 00039| <010>
  147. X00040 00040| <010>
  148. X00041 00041| <End-Of-File><010>
  149. X-----------+--------------------------------------------------------------------
  150. Globl Local| Text
  151. X
  152. X============================ End of LINE LIST DUMP =============================
  153. X
  154. X
  155. X=========================== Start of TOKEN LIST DUMP ===========================
  156. X
  157. Summary: There are 191 tokens in the token list.
  158. X
  159. Line[Column]: Token Description
  160. X-------------------------------
  161. X
  162. X0001[01]: Text. Text scrap[Grey]="PR05: Test the parsing of formal parameter lists.<010>
  163. X<010>
  164. XFirst trip the parser so we don't get past the parser.<010>
  165. X"
  166. X0004[01]: @> Close name. 
  167. X0004[03]: Text. Text scrap[Grey]="<010>
  168. X<010>
  169. X1. Test macro definition with no formal parameters.<010>
  170. X"
  171. X0007[01]: @$ Macro defn. 
  172. X0007[03]: @< Open name. 
  173. X0007[05]: Text. Text scrap[Grey]="Sloth"
  174. X0007[10]: @> Close name. 
  175. X0007[12]: @{ Open defn. 
  176. X0007[14]: Text. Text scrap[Grey]="Slothtext"
  177. X0007[23]: @} Close defn. 
  178. X0007[25]: Text. Text scrap[Grey]="<010>
  179. X<010>
  180. X2. Test macro definition with one formal parameter.<010>
  181. X"
  182. X0010[01]: @$ Macro defn. 
  183. X0010[03]: @< Open name. 
  184. X0010[05]: Text. Text scrap[Grey]="Sloth with one"
  185. X0010[19]: @> Close name. 
  186. X0010[21]: @( Open param. 
  187. X0010[23]: @n Parameter. Parameterno=1.
  188. X0010[25]: @} Close param. 
  189. X0010[27]: @{ Open defn. 
  190. X0010[29]: Text. Text scrap[Grey]="Slothtext"
  191. X0010[38]: @} Close defn. 
  192. X0010[40]: Text. Text scrap[Grey]="<010>
  193. X<010>
  194. X3. Test macro definition with many formal parameters.<010>
  195. X"
  196. X0013[01]: @$ Macro defn. 
  197. X0013[03]: @< Open name. 
  198. X0013[05]: Text. Text scrap[Grey]="Sloth with 2"
  199. X0013[17]: @> Close name. 
  200. X0013[19]: @( Open param. 
  201. X0013[21]: @n Parameter. Parameterno=2.
  202. X0013[23]: @} Close param. 
  203. X0013[25]: @{ Open defn. 
  204. X0013[27]: Text. Text scrap[Grey]="Slothtext"
  205. X0013[36]: @} Close defn. 
  206. X0013[38]: Text. Text scrap[White]="<010>
  207. X"
  208. X0014[01]: @$ Macro defn. 
  209. X0014[03]: @< Open name. 
  210. X0014[05]: Text. Text scrap[Grey]="Sloth with 3"
  211. X0014[17]: @> Close name. 
  212. X0014[19]: @( Open param. 
  213. X0014[21]: @n Parameter. Parameterno=3.
  214. X0014[23]: @} Close param. 
  215. X0014[25]: @{ Open defn. 
  216. X0014[27]: Text. Text scrap[Grey]="Slothtext"
  217. X0014[36]: @} Close defn. 
  218. X0014[38]: Text. Text scrap[White]="<010>
  219. X"
  220. X0015[01]: @$ Macro defn. 
  221. X0015[03]: @< Open name. 
  222. X0015[05]: Text. Text scrap[Grey]="Sloth with 4"
  223. X0015[17]: @> Close name. 
  224. X0015[19]: @( Open param. 
  225. X0015[21]: @n Parameter. Parameterno=4.
  226. X0015[23]: @} Close param. 
  227. X0015[25]: @{ Open defn. 
  228. X0015[27]: Text. Text scrap[Grey]="Slothtext"
  229. X0015[36]: @} Close defn. 
  230. X0015[38]: Text. Text scrap[White]="<010>
  231. X"
  232. X0016[01]: @$ Macro defn. 
  233. X0016[03]: @< Open name. 
  234. X0016[05]: Text. Text scrap[Grey]="Sloth with 5"
  235. X0016[17]: @> Close name. 
  236. X0016[19]: @( Open param. 
  237. X0016[21]: @n Parameter. Parameterno=5.
  238. X0016[23]: @} Close param. 
  239. X0016[25]: @{ Open defn. 
  240. X0016[27]: Text. Text scrap[Grey]="Slothtext"
  241. X0016[36]: @} Close defn. 
  242. X0016[38]: Text. Text scrap[White]="<010>
  243. X"
  244. X0017[01]: @$ Macro defn. 
  245. X0017[03]: @< Open name. 
  246. X0017[05]: Text. Text scrap[Grey]="Sloth with 6"
  247. X0017[17]: @> Close name. 
  248. X0017[19]: @( Open param. 
  249. X0017[21]: @n Parameter. Parameterno=6.
  250. X0017[23]: @} Close param. 
  251. X0017[25]: @{ Open defn. 
  252. X0017[27]: Text. Text scrap[Grey]="Slothtext"
  253. X0017[36]: @} Close defn. 
  254. X0017[38]: Text. Text scrap[White]="<010>
  255. X"
  256. X0018[01]: @$ Macro defn. 
  257. X0018[03]: @< Open name. 
  258. X0018[05]: Text. Text scrap[Grey]="Sloth with 7"
  259. X0018[17]: @> Close name. 
  260. X0018[19]: @( Open param. 
  261. X0018[21]: @n Parameter. Parameterno=7.
  262. X0018[23]: @} Close param. 
  263. X0018[25]: @{ Open defn. 
  264. X0018[27]: Text. Text scrap[Grey]="Slothtext"
  265. X0018[36]: @} Close defn. 
  266. X0018[38]: Text. Text scrap[White]="<010>
  267. X"
  268. X0019[01]: @$ Macro defn. 
  269. X0019[03]: @< Open name. 
  270. X0019[05]: Text. Text scrap[Grey]="Sloth with 8"
  271. X0019[17]: @> Close name. 
  272. X0019[19]: @( Open param. 
  273. X0019[21]: @n Parameter. Parameterno=8.
  274. X0019[23]: @} Close param. 
  275. X0019[25]: @{ Open defn. 
  276. X0019[27]: Text. Text scrap[Grey]="Slothtext"
  277. X0019[36]: @} Close defn. 
  278. X0019[38]: Text. Text scrap[White]="<010>
  279. X"
  280. X0020[01]: @$ Macro defn. 
  281. X0020[03]: @< Open name. 
  282. X0020[05]: Text. Text scrap[Grey]="Sloth with 9"
  283. X0020[17]: @> Close name. 
  284. X0020[19]: @( Open param. 
  285. X0020[21]: @n Parameter. Parameterno=9.
  286. X0020[23]: @} Close param. 
  287. X0020[25]: @{ Open defn. 
  288. X0020[27]: Text. Text scrap[Grey]="Slothtext"
  289. X0020[36]: @} Close defn. 
  290. X0020[38]: Text. Text scrap[Grey]="<010>
  291. X<010>
  292. X4. Test with syntax errors in the parameter list.<010>
  293. X<010>
  294. X"
  295. X0024[01]: @$ Macro defn. 
  296. X0024[03]: @< Open name. 
  297. X0024[05]: Text. Text scrap[Grey]="Sloth a"
  298. X0024[12]: @> Close name. 
  299. X0024[14]: @( Open param. 
  300. X0024[16]: Text. Text scrap[White]="<010>
  301. X"
  302. X0024[18]: @n Parameter. Parameterno=9.
  303. X0024[20]: @} Close param. 
  304. X0024[22]: @{ Open defn. 
  305. X0024[24]: Text. Text scrap[Grey]="Slothtext"
  306. X0024[33]: @} Close defn. 
  307. X0024[35]: Text. Text scrap[White]="<010>
  308. X"
  309. X0025[01]: @A New section (Level 1). 
  310. X0025[03]: @< Open name. 
  311. X0025[05]: Text. Text scrap[Grey]="Error recovery point"
  312. X0025[25]: @> Close name. 
  313. X0025[27]: Text. Text scrap[White]="<010>
  314. X<010>
  315. X"
  316. X0027[01]: @$ Macro defn. 
  317. X0027[03]: @< Open name. 
  318. X0027[05]: Text. Text scrap[Grey]="Sloth b"
  319. X0027[12]: @> Close name. 
  320. X0027[14]: @n Parameter. Parameterno=9.
  321. X0027[16]: @} Close param. 
  322. X0027[18]: @{ Open defn. 
  323. X0027[20]: Text. Text scrap[Grey]="Slothtext"
  324. X0027[29]: @} Close defn. 
  325. X0027[31]: Text. Text scrap[White]="<010>
  326. X"
  327. X0028[01]: @A New section (Level 1). 
  328. X0028[03]: @< Open name. 
  329. X0028[05]: Text. Text scrap[Grey]="Error recovery point"
  330. X0028[25]: @> Close name. 
  331. X0028[27]: Text. Text scrap[White]="<010>
  332. X<010>
  333. X"
  334. X0030[01]: @$ Macro defn. 
  335. X0030[03]: @< Open name. 
  336. X0030[05]: Text. Text scrap[Grey]="Sloth c"
  337. X0030[12]: @> Close name. 
  338. X0030[14]: @( Open param. 
  339. X0030[16]: Text. Text scrap[Grey]="9"
  340. X0030[17]: @} Close param. 
  341. X0030[19]: @{ Open defn. 
  342. X0030[21]: Text. Text scrap[Grey]="Slothtext"
  343. X0030[30]: @} Close defn. 
  344. X0030[32]: Text. Text scrap[White]="<010>
  345. X"
  346. X0031[01]: @A New section (Level 1). 
  347. X0031[03]: @< Open name. 
  348. X0031[05]: Text. Text scrap[Grey]="Error recovery point"
  349. X0031[25]: @> Close name. 
  350. X0031[27]: Text. Text scrap[White]="<010>
  351. X<010>
  352. X"
  353. X0033[01]: @$ Macro defn. 
  354. X0033[03]: @< Open name. 
  355. X0033[05]: Text. Text scrap[Grey]="Sloth d"
  356. X0033[12]: @> Close name. 
  357. X0033[14]: @n Parameter. Parameterno=9.
  358. X0033[16]: @} Close param. 
  359. X0033[18]: @{ Open defn. 
  360. X0033[20]: Text. Text scrap[Grey]="Slothtext"
  361. X0033[29]: @} Close defn. 
  362. X0033[31]: Text. Text scrap[White]="<010>
  363. X"
  364. X0034[01]: @A New section (Level 1). 
  365. X0034[03]: @< Open name. 
  366. X0034[05]: Text. Text scrap[Grey]="Error recovery point"
  367. X0034[25]: @> Close name. 
  368. X0034[27]: Text. Text scrap[White]="<010>
  369. X<010>
  370. X"
  371. X0036[01]: @$ Macro defn. 
  372. X0036[03]: @< Open name. 
  373. X0036[05]: Text. Text scrap[Grey]="Sloth e"
  374. X0036[12]: @> Close name. 
  375. X0036[14]: @( Open param. 
  376. X0036[16]: @n Parameter. Parameterno=9.
  377. X0036[18]: @} Close param. 
  378. X0036[20]: @} Close param. 
  379. X0036[22]: @{ Open defn. 
  380. X0036[24]: Text. Text scrap[Grey]="Slothtext"
  381. X0036[33]: @} Close defn. 
  382. X0036[35]: Text. Text scrap[White]="<010>
  383. X"
  384. X0037[01]: @A New section (Level 1). 
  385. X0037[03]: @< Open name. 
  386. X0037[05]: Text. Text scrap[Grey]="Error recovery point"
  387. X0037[25]: @> Close name. 
  388. X0037[27]: Text. Text scrap[White]="<010>
  389. X<010>
  390. X<010>
  391. X<010>
  392. X"
  393. X0041[01]: End Of File. 
  394. X============================ End of TOKEN LIST DUMP ============================
  395. X
  396. X
  397. X========================== Start of MACRO TABLE DUMP ===========================
  398. X
  399. X
  400. X------------------- Start of Macro Dump --------------------
  401. Macro Name  : "Sloth"
  402. Defined?    : Yes.
  403. Parameters  : 0
  404. Additive?   : No.
  405. Zero Calls? : No.
  406. Many Calls? : No.
  407. Output File?: No.
  408. Call list   :
  409. Macro body  :
  410. X
  411. X--Start of List of Body Parts--
  412. This macro has 1 body part.
  413. Body part 1: Seqnum=1, Pos(L,C)=(7,3), Expression follows:
  414. X
  415. X---- Start of Expression ----
  416. X
  417. X----- Start Text Element -----
  418. Text scrap[Grey]="Slothtext"
  419. X------ End Text Element ------
  420. X
  421. X----- End of Expression -----
  422. X
  423. X---End of List of Body Parts---
  424. X
  425. X-------------------- End of Macro Dump ---------------------
  426. X
  427. X
  428. X
  429. X------------------- Start of Macro Dump --------------------
  430. Macro Name  : "Sloth a"
  431. Defined?    : No.
  432. X-------------------- End of Macro Dump ---------------------
  433. X
  434. X
  435. X
  436. X------------------- Start of Macro Dump --------------------
  437. Macro Name  : "Sloth b"
  438. Defined?    : Yes.
  439. Parameters  : 0
  440. Additive?   : No.
  441. Zero Calls? : No.
  442. Many Calls? : No.
  443. Output File?: No.
  444. Call list   :
  445. Macro body  :
  446. X
  447. X--Start of List of Body Parts--
  448. This macro has 0 body parts.
  449. X---End of List of Body Parts---
  450. X
  451. X-------------------- End of Macro Dump ---------------------
  452. X
  453. X
  454. X
  455. X------------------- Start of Macro Dump --------------------
  456. Macro Name  : "Sloth c"
  457. Defined?    : No.
  458. X-------------------- End of Macro Dump ---------------------
  459. X
  460. X
  461. X
  462. X------------------- Start of Macro Dump --------------------
  463. Macro Name  : "Sloth d"
  464. Defined?    : Yes.
  465. Parameters  : 0
  466. Additive?   : No.
  467. Zero Calls? : No.
  468. Many Calls? : No.
  469. Output File?: No.
  470. Call list   :
  471. Macro body  :
  472. X
  473. X--Start of List of Body Parts--
  474. This macro has 0 body parts.
  475. X---End of List of Body Parts---
  476. X
  477. X-------------------- End of Macro Dump ---------------------
  478. X
  479. X
  480. X
  481. X------------------- Start of Macro Dump --------------------
  482. Macro Name  : "Sloth e"
  483. Defined?    : Yes.
  484. Parameters  : 9
  485. Additive?   : No.
  486. Zero Calls? : No.
  487. Many Calls? : No.
  488. Output File?: No.
  489. Call list   :
  490. Macro body  :
  491. X
  492. X--Start of List of Body Parts--
  493. This macro has 0 body parts.
  494. X---End of List of Body Parts---
  495. X
  496. X-------------------- End of Macro Dump ---------------------
  497. X
  498. X
  499. X
  500. X------------------- Start of Macro Dump --------------------
  501. Macro Name  : "Sloth with 2"
  502. Defined?    : Yes.
  503. Parameters  : 2
  504. Additive?   : No.
  505. Zero Calls? : No.
  506. Many Calls? : No.
  507. Output File?: No.
  508. Call list   :
  509. Macro body  :
  510. X
  511. X--Start of List of Body Parts--
  512. This macro has 1 body part.
  513. Body part 1: Seqnum=3, Pos(L,C)=(13,3), Expression follows:
  514. X
  515. X---- Start of Expression ----
  516. X
  517. X----- Start Text Element -----
  518. Text scrap[Grey]="Slothtext"
  519. X------ End Text Element ------
  520. X
  521. X----- End of Expression -----
  522. X
  523. X---End of List of Body Parts---
  524. X
  525. X-------------------- End of Macro Dump ---------------------
  526. X
  527. X
  528. X
  529. X------------------- Start of Macro Dump --------------------
  530. Macro Name  : "Sloth with 3"
  531. Defined?    : Yes.
  532. Parameters  : 3
  533. Additive?   : No.
  534. Zero Calls? : No.
  535. Many Calls? : No.
  536. Output File?: No.
  537. Call list   :
  538. Macro body  :
  539. X
  540. X--Start of List of Body Parts--
  541. This macro has 1 body part.
  542. Body part 1: Seqnum=4, Pos(L,C)=(14,3), Expression follows:
  543. X
  544. X---- Start of Expression ----
  545. X
  546. X----- Start Text Element -----
  547. Text scrap[Grey]="Slothtext"
  548. X------ End Text Element ------
  549. X
  550. X----- End of Expression -----
  551. X
  552. X---End of List of Body Parts---
  553. X
  554. X-------------------- End of Macro Dump ---------------------
  555. X
  556. X
  557. X
  558. X------------------- Start of Macro Dump --------------------
  559. Macro Name  : "Sloth with 4"
  560. Defined?    : Yes.
  561. Parameters  : 4
  562. Additive?   : No.
  563. Zero Calls? : No.
  564. Many Calls? : No.
  565. Output File?: No.
  566. Call list   :
  567. Macro body  :
  568. X
  569. X--Start of List of Body Parts--
  570. This macro has 1 body part.
  571. Body part 1: Seqnum=5, Pos(L,C)=(15,3), Expression follows:
  572. X
  573. X---- Start of Expression ----
  574. X
  575. X----- Start Text Element -----
  576. Text scrap[Grey]="Slothtext"
  577. X------ End Text Element ------
  578. X
  579. X----- End of Expression -----
  580. X
  581. X---End of List of Body Parts---
  582. X
  583. X-------------------- End of Macro Dump ---------------------
  584. X
  585. X
  586. X
  587. X------------------- Start of Macro Dump --------------------
  588. Macro Name  : "Sloth with 5"
  589. Defined?    : Yes.
  590. Parameters  : 5
  591. Additive?   : No.
  592. Zero Calls? : No.
  593. Many Calls? : No.
  594. Output File?: No.
  595. Call list   :
  596. Macro body  :
  597. X
  598. X--Start of List of Body Parts--
  599. This macro has 1 body part.
  600. Body part 1: Seqnum=6, Pos(L,C)=(16,3), Expression follows:
  601. X
  602. X---- Start of Expression ----
  603. X
  604. X----- Start Text Element -----
  605. Text scrap[Grey]="Slothtext"
  606. X------ End Text Element ------
  607. X
  608. X----- End of Expression -----
  609. X
  610. X---End of List of Body Parts---
  611. X
  612. X-------------------- End of Macro Dump ---------------------
  613. X
  614. X
  615. X
  616. X------------------- Start of Macro Dump --------------------
  617. Macro Name  : "Sloth with 6"
  618. Defined?    : Yes.
  619. Parameters  : 6
  620. Additive?   : No.
  621. Zero Calls? : No.
  622. Many Calls? : No.
  623. Output File?: No.
  624. Call list   :
  625. Macro body  :
  626. X
  627. X--Start of List of Body Parts--
  628. This macro has 1 body part.
  629. Body part 1: Seqnum=7, Pos(L,C)=(17,3), Expression follows:
  630. X
  631. X---- Start of Expression ----
  632. X
  633. X----- Start Text Element -----
  634. Text scrap[Grey]="Slothtext"
  635. X------ End Text Element ------
  636. X
  637. X----- End of Expression -----
  638. X
  639. X---End of List of Body Parts---
  640. X
  641. X-------------------- End of Macro Dump ---------------------
  642. X
  643. X
  644. X
  645. X------------------- Start of Macro Dump --------------------
  646. Macro Name  : "Sloth with 7"
  647. Defined?    : Yes.
  648. Parameters  : 7
  649. Additive?   : No.
  650. Zero Calls? : No.
  651. Many Calls? : No.
  652. Output File?: No.
  653. Call list   :
  654. Macro body  :
  655. X
  656. X--Start of List of Body Parts--
  657. This macro has 1 body part.
  658. Body part 1: Seqnum=8, Pos(L,C)=(18,3), Expression follows:
  659. X
  660. X---- Start of Expression ----
  661. X
  662. X----- Start Text Element -----
  663. Text scrap[Grey]="Slothtext"
  664. X------ End Text Element ------
  665. X
  666. X----- End of Expression -----
  667. X
  668. X---End of List of Body Parts---
  669. X
  670. X-------------------- End of Macro Dump ---------------------
  671. X
  672. X
  673. X
  674. X------------------- Start of Macro Dump --------------------
  675. Macro Name  : "Sloth with 8"
  676. Defined?    : Yes.
  677. Parameters  : 8
  678. Additive?   : No.
  679. Zero Calls? : No.
  680. Many Calls? : No.
  681. Output File?: No.
  682. Call list   :
  683. Macro body  :
  684. X
  685. X--Start of List of Body Parts--
  686. This macro has 1 body part.
  687. Body part 1: Seqnum=9, Pos(L,C)=(19,3), Expression follows:
  688. X
  689. X---- Start of Expression ----
  690. X
  691. X----- Start Text Element -----
  692. Text scrap[Grey]="Slothtext"
  693. X------ End Text Element ------
  694. X
  695. X----- End of Expression -----
  696. X
  697. X---End of List of Body Parts---
  698. X
  699. X-------------------- End of Macro Dump ---------------------
  700. X
  701. X
  702. X
  703. X------------------- Start of Macro Dump --------------------
  704. Macro Name  : "Sloth with 9"
  705. Defined?    : Yes.
  706. Parameters  : 9
  707. Additive?   : No.
  708. Zero Calls? : No.
  709. Many Calls? : No.
  710. Output File?: No.
  711. Call list   :
  712. Macro body  :
  713. X
  714. X--Start of List of Body Parts--
  715. This macro has 1 body part.
  716. Body part 1: Seqnum=10, Pos(L,C)=(20,3), Expression follows:
  717. X
  718. X---- Start of Expression ----
  719. X
  720. X----- Start Text Element -----
  721. Text scrap[Grey]="Slothtext"
  722. X------ End Text Element ------
  723. X
  724. X----- End of Expression -----
  725. X
  726. X---End of List of Body Parts---
  727. X
  728. X-------------------- End of Macro Dump ---------------------
  729. X
  730. X
  731. X
  732. X------------------- Start of Macro Dump --------------------
  733. Macro Name  : "Sloth with one"
  734. Defined?    : Yes.
  735. Parameters  : 1
  736. Additive?   : No.
  737. Zero Calls? : No.
  738. Many Calls? : No.
  739. Output File?: No.
  740. Call list   :
  741. Macro body  :
  742. X
  743. X--Start of List of Body Parts--
  744. This macro has 1 body part.
  745. Body part 1: Seqnum=2, Pos(L,C)=(10,3), Expression follows:
  746. X
  747. X---- Start of Expression ----
  748. X
  749. X----- Start Text Element -----
  750. Text scrap[Grey]="Slothtext"
  751. X------ End Text Element ------
  752. X
  753. X----- End of Expression -----
  754. X
  755. X---End of List of Body Parts---
  756. X
  757. X-------------------- End of Macro Dump ---------------------
  758. X
  759. X
  760. X
  761. X=========================== End of MACRO TABLE DUMP ============================
  762. X
  763. X
  764. X========================= Start of DOCUMENT LIST DUMP ==========================
  765. X
  766. X
  767. TEXT COMPONENT: Pos(L,C)=(1,1). 
  768. X
  769. X-- Start of Text Scrap List --
  770. Text scrap[Grey]="PR05: Test the parsing of formal parameter lists.<010>
  771. X<010>
  772. XFirst trip the parser so we don't get past the parser.<010>
  773. X"
  774. X--- End of Text Scrap List ---
  775. X
  776. X
  777. TEXT COMPONENT: Pos(L,C)=(4,3). 
  778. X
  779. X-- Start of Text Scrap List --
  780. Text scrap[Grey]="<010>
  781. X<010>
  782. X1. Test macro definition with no formal parameters.<010>
  783. X"
  784. X--- End of Text Scrap List ---
  785. X
  786. X
  787. MACRO DEFINITION COMPONENT: Pos(L,C)=(7,1). 
  788. Part 1 of macro @<Sloth@>.
  789. X
  790. TEXT COMPONENT: Pos(L,C)=(7,25). 
  791. X
  792. X-- Start of Text Scrap List --
  793. Text scrap[Grey]="<010>
  794. X<010>
  795. X2. Test macro definition with one formal parameter.<010>
  796. X"
  797. X--- End of Text Scrap List ---
  798. X
  799. X
  800. MACRO DEFINITION COMPONENT: Pos(L,C)=(10,1). 
  801. Part 1 of macro @<Sloth with one@>.
  802. X
  803. TEXT COMPONENT: Pos(L,C)=(10,40). 
  804. X
  805. X-- Start of Text Scrap List --
  806. Text scrap[Grey]="<010>
  807. X<010>
  808. X3. Test macro definition with many formal parameters.<010>
  809. X"
  810. X--- End of Text Scrap List ---
  811. X
  812. X
  813. MACRO DEFINITION COMPONENT: Pos(L,C)=(13,1). 
  814. Part 1 of macro @<Sloth with 2@>.
  815. X
  816. TEXT COMPONENT: Pos(L,C)=(13,38). 
  817. X
  818. X-- Start of Text Scrap List --
  819. Text scrap[White]="<010>
  820. X"
  821. X--- End of Text Scrap List ---
  822. X
  823. X
  824. MACRO DEFINITION COMPONENT: Pos(L,C)=(14,1). 
  825. Part 1 of macro @<Sloth with 3@>.
  826. X
  827. TEXT COMPONENT: Pos(L,C)=(14,38). 
  828. X
  829. X-- Start of Text Scrap List --
  830. Text scrap[White]="<010>
  831. X"
  832. X--- End of Text Scrap List ---
  833. X
  834. X
  835. MACRO DEFINITION COMPONENT: Pos(L,C)=(15,1). 
  836. Part 1 of macro @<Sloth with 4@>.
  837. X
  838. TEXT COMPONENT: Pos(L,C)=(15,38). 
  839. X
  840. X-- Start of Text Scrap List --
  841. Text scrap[White]="<010>
  842. X"
  843. X--- End of Text Scrap List ---
  844. X
  845. X
  846. MACRO DEFINITION COMPONENT: Pos(L,C)=(16,1). 
  847. Part 1 of macro @<Sloth with 5@>.
  848. X
  849. TEXT COMPONENT: Pos(L,C)=(16,38). 
  850. X
  851. X-- Start of Text Scrap List --
  852. Text scrap[White]="<010>
  853. X"
  854. X--- End of Text Scrap List ---
  855. X
  856. X
  857. MACRO DEFINITION COMPONENT: Pos(L,C)=(17,1). 
  858. Part 1 of macro @<Sloth with 6@>.
  859. X
  860. TEXT COMPONENT: Pos(L,C)=(17,38). 
  861. X
  862. X-- Start of Text Scrap List --
  863. Text scrap[White]="<010>
  864. X"
  865. X--- End of Text Scrap List ---
  866. X
  867. X
  868. MACRO DEFINITION COMPONENT: Pos(L,C)=(18,1). 
  869. Part 1 of macro @<Sloth with 7@>.
  870. X
  871. TEXT COMPONENT: Pos(L,C)=(18,38). 
  872. X
  873. X-- Start of Text Scrap List --
  874. Text scrap[White]="<010>
  875. X"
  876. X--- End of Text Scrap List ---
  877. X
  878. X
  879. MACRO DEFINITION COMPONENT: Pos(L,C)=(19,1). 
  880. Part 1 of macro @<Sloth with 8@>.
  881. X
  882. TEXT COMPONENT: Pos(L,C)=(19,38). 
  883. X
  884. X-- Start of Text Scrap List --
  885. Text scrap[White]="<010>
  886. X"
  887. X--- End of Text Scrap List ---
  888. X
  889. X
  890. MACRO DEFINITION COMPONENT: Pos(L,C)=(20,1). 
  891. Part 1 of macro @<Sloth with 9@>.
  892. X
  893. TEXT COMPONENT: Pos(L,C)=(20,38). 
  894. X
  895. X-- Start of Text Scrap List --
  896. Text scrap[Grey]="<010>
  897. X<010>
  898. X4. Test with syntax errors in the parameter list.<010>
  899. X<010>
  900. X"
  901. X--- End of Text Scrap List ---
  902. X
  903. X
  904. TYPESETTER DIRECTIVE COMPONENT: 
  905. X   Section "1", Section name="Error recovery point".
  906. X
  907. TEXT COMPONENT: Pos(L,C)=(25,27). 
  908. X
  909. X-- Start of Text Scrap List --
  910. Text scrap[White]="<010>
  911. X<010>
  912. X"
  913. X--- End of Text Scrap List ---
  914. X
  915. X
  916. TYPESETTER DIRECTIVE COMPONENT: 
  917. X   Section "2", Section name="Error recovery point".
  918. X
  919. TEXT COMPONENT: Pos(L,C)=(28,27). 
  920. X
  921. X-- Start of Text Scrap List --
  922. Text scrap[White]="<010>
  923. X<010>
  924. X"
  925. X--- End of Text Scrap List ---
  926. X
  927. X
  928. TYPESETTER DIRECTIVE COMPONENT: 
  929. X   Section "3", Section name="Error recovery point".
  930. X
  931. TEXT COMPONENT: Pos(L,C)=(31,27). 
  932. X
  933. X-- Start of Text Scrap List --
  934. Text scrap[White]="<010>
  935. X<010>
  936. X"
  937. X--- End of Text Scrap List ---
  938. X
  939. X
  940. TYPESETTER DIRECTIVE COMPONENT: 
  941. X   Section "4", Section name="Error recovery point".
  942. X
  943. TEXT COMPONENT: Pos(L,C)=(34,27). 
  944. X
  945. X-- Start of Text Scrap List --
  946. Text scrap[White]="<010>
  947. X<010>
  948. X"
  949. X--- End of Text Scrap List ---
  950. X
  951. X
  952. TYPESETTER DIRECTIVE COMPONENT: 
  953. X   Section "5", Section name="Error recovery point".
  954. X
  955. TEXT COMPONENT: Pos(L,C)=(37,27). 
  956. X
  957. X-- Start of Text Scrap List --
  958. Text scrap[White]="<010>
  959. X<010>
  960. X<010>
  961. X<010>
  962. X"
  963. X--- End of Text Scrap List ---
  964. X
  965. X
  966. X========================== End of DOCUMENT LIST DUMP ===========================
  967. X
  968. X
  969. Global Local| Input File
  970. X------------+-------------------------------------------------------------------
  971. X     1     1| PR05: Test the parsing of formal parameter lists.
  972. X     2     2| 
  973. X     3     3| First trip the parser so we don't get past the parser.
  974. X     4     4| @>
  975. X       Error|.^The parser was at the top level and was expecting
  976. X            |.^one of: {Directive, Text, Macro definition, EOF}.
  977. X     5     5| 
  978. X     6     6| 1. Test macro definition with no formal parameters.
  979. X     7     7| @$@<Sloth@>@{Slothtext@}
  980. X     8     8| 
  981. X     9     9| 2. Test macro definition with one formal parameter.
  982. X    10    10| @$@<Sloth with one@>@(@1@)@{Slothtext@}
  983. X    11    11| 
  984. X    12    12| 3. Test macro definition with many formal parameters.
  985. X    13    13| @$@<Sloth with 2@>@(@2@)@{Slothtext@}
  986. X    14    14| @$@<Sloth with 3@>@(@3@)@{Slothtext@}
  987. X    15    15| @$@<Sloth with 4@>@(@4@)@{Slothtext@}
  988. X    16    16| @$@<Sloth with 5@>@(@5@)@{Slothtext@}
  989. X    17    17| @$@<Sloth with 6@>@(@6@)@{Slothtext@}
  990. X    18    18| @$@<Sloth with 7@>@(@7@)@{Slothtext@}
  991. X    19    19| @$@<Sloth with 8@>@(@8@)@{Slothtext@}
  992. X    20    20| @$@<Sloth with 9@>@(@9@)@{Slothtext@}
  993. X    21    21| 
  994. X    22    22| 4. Test with syntax errors in the parameter list.
  995. X    23    23| 
  996. X    24    24| @$@<Sloth a@>@(@+@9@)@{Slothtext@}
  997. X       Error|................^Expecting one of [@1..@9].
  998. X            |................^Skipping after error to the next major construct...
  999. X    25    25| @A@<Error recovery point@>
  1000. X            |.^...skipped to here after the error.
  1001. X    26    26| 
  1002. X    27    27| @$@<Sloth b@>@9@)@{Slothtext@}
  1003. X       Error|..............^Expecting '@{'.
  1004. X            |..............^Skipping after error to the next major construct...
  1005. X    28    28| @A@<Error recovery point@>
  1006. X            |.^...skipped to here after the error.
  1007. X    29    29| 
  1008. X    30    30| @$@<Sloth c@>@(9@)@{Slothtext@}
  1009. X       Error|................^Expecting one of [@1..@9].
  1010. X            |................^Skipping after error to the next major construct...
  1011. X    31    31| @A@<Error recovery point@>
  1012. X            |.^...skipped to here after the error.
  1013. X    32    32| 
  1014. X    33    33| @$@<Sloth d@>@9@)@{Slothtext@}
  1015. X       Error|..............^Expecting '@{'.
  1016. X            |..............^Skipping after error to the next major construct...
  1017. X    34    34| @A@<Error recovery point@>
  1018. X            |.^...skipped to here after the error.
  1019. X    35    35| 
  1020. X    36    36| @$@<Sloth e@>@(@9@)@)@{Slothtext@}
  1021. X       Error|....................^Expecting '@{'.
  1022. X            |....................^Skipping after error to the next major construct...
  1023. X    37    37| @A@<Error recovery point@>
  1024. X            |.^...skipped to here after the error.
  1025. X    38    38| 
  1026. X    39    39| 
  1027. X    40    40| 
  1028. X            | <End-Of-File>
  1029. X------------+-------------------------------------------------------------------
  1030. X
  1031. There were 6 Errors.
  1032. END_OF_FILE
  1033. if test 28430 -ne `wc -c <'answers/pr05.lis'`; then
  1034.     echo shar: \"'answers/pr05.lis'\" unpacked with wrong size!
  1035. fi
  1036. # end of 'answers/pr05.lis'
  1037. fi
  1038. if test -f 'sources/help.c' -a "${1}" != "-c" ; then 
  1039.   echo shar: Will not clobber existing file \"'sources/help.c'\"
  1040. else
  1041. echo shar: Extracting \"'sources/help.c'\" \(29770 characters\)
  1042. sed "s/^X//" >'sources/help.c' <<'END_OF_FILE'
  1043. X/*##############################################################################
  1044. X
  1045. XFUNNNELWEB COPYRIGHT
  1046. X====================
  1047. XFunnelWeb is a literate-programming macro preprocessor.
  1048. X
  1049. Copyright (C) 1992 Ross N. Williams.
  1050. X
  1051. X   Ross N. Williams
  1052. X   ross@spam.adelaide.edu.au
  1053. X   16 Lerwick Avenue, Hazelwood Park 5066, Australia.
  1054. X
  1055. This program is free software; you can redistribute it and/or modify
  1056. it under the terms of Version 2 of the GNU General Public License as
  1057. published by the Free Software Foundation.
  1058. X
  1059. This program is distributed WITHOUT ANY WARRANTY; without even the implied
  1060. warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  1061. See Version 2 of the GNU General Public License for more details.
  1062. X
  1063. You should have received a copy of Version 2 of the GNU General Public
  1064. License along with this program. If not, you can FTP the license from
  1065. prep.ai.mit.edu/pub/gnu/COPYING-2 or write to the Free Software
  1066. XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1067. X
  1068. Section 2a of the license requires that all changes to this file be
  1069. recorded prominently in this file. Please record all changes here.
  1070. X
  1071. Programmers:
  1072. X   RNW  Ross N. Williams  ross@spam.adelaide.edu.au
  1073. X
  1074. Changes:
  1075. X   07-May-1992  RNW  Program prepared for release under GNU GPL V2.
  1076. X
  1077. X##############################################################################*/
  1078. X
  1079. X
  1080. X/******************************************************************************/
  1081. X/*                                   HELP.C                                   */
  1082. X/******************************************************************************/
  1083. X/*                                                                            */
  1084. X/* REPRESENTING MESSAGES AS C CODE                                            */
  1085. X/* ===============================                                            */
  1086. X/* Experience has shown that it is much more reliable to code text messages   */
  1087. X/* into a program than to expect the program to track down text files         */
  1088. X/* containing the messages at run time. Worthwhile for smallish files (such   */
  1089. X/* as these help messages) at least. For this reason, most the messages in    */
  1090. X/* this module are represented by code (e.g. as in printf statements).        */
  1091. X/*                                                                            */
  1092. X/* The only exception is the 18K Gnu license message which is a bit too big   */
  1093. X/* to be done by hand. It has been moved to the help_gnu module.              */
  1094. X/*                                                                            */
  1095. X/******************************************************************************/
  1096. X
  1097. X#include <ctype.h>
  1098. X#include "style.h"
  1099. X
  1100. X#include "as.h"
  1101. X#include "help.h"
  1102. X#include "help_gnu.h"
  1103. X#include "misc.h"
  1104. X#include "option.h"
  1105. X
  1106. X/******************************************************************************/
  1107. X
  1108. X/* This module contains many many output statements that call an output       */
  1109. X/* function. To neaten up all these calls, we define a global variable to     */
  1110. X/* hold a pointer to the function and simple macro to write output using      */
  1111. X/* the function.                                                              */
  1112. LOCVAR void (*pf) P_((char *));
  1113. X
  1114. X#define WX(STR) (*pf)(STR)
  1115. X
  1116. X/******************************************************************************/
  1117. X
  1118. LOCAL void hel_men P_((void));
  1119. LOCAL void hel_men ()
  1120. X{
  1121. X WX("\n");
  1122. X WX("FunnelWeb Help Messages\n");
  1123. X WX("-----------------------\n");
  1124. X WX("Introduction  - Introduction to FunnelWeb.\n");
  1125. X WX("DOcumentation - How to obtain FunnelWeb documentation.\n");
  1126. X WX("Options       - Command line options.\n");
  1127. X WX("DEfoptions    - Default command line options.\n");
  1128. X WX("COMmands      - Interactive commands.\n");
  1129. X WX("Registration  - How to register as an \"official\" FunnelWeb user.\n");
  1130. X WX("Support       - How you can help support FunnelWeb development.\n");
  1131. X WX("COPyright     - Copyright notice.\n");
  1132. X WX("License       - The license under which this software is distributed (long).\n");
  1133. X WX("Nowarranty    - Extract from the GNU license concerning lack of warranty.\n");
  1134. X WX("DIstribution  - Extract from the GNU license concerning distribution.\n");
  1135. X WX("MOdification  - Read this message if you intend to modify FunnelWeb.\n");
  1136. X WX("Versions      - A list of existing versions of FunnelWeb.\n");
  1137. X WX("Acknowledge   - Thanks to people who helped with FunnelWeb development.\n");
  1138. X WX("MEnu          - The message you are reading (the default help message).\n");
  1139. X WX("\n");
  1140. X WX("To display a message, give its (optionally abbreviated) name in a help command.\n");
  1141. X WX("To capture a message to a file, add +J<filename> to the fw command. Examples:\n");
  1142. X WX("\n");
  1143. X WX("          fw +Hintroduction +Jintro.txt   -- From the operating system level.\n");
  1144. X WX("          help introduction               -- From FunnelWeb interactive mode.\n");
  1145. X}
  1146. X
  1147. X/******************************************************************************/
  1148. X
  1149. LOCAL void hel_int P_((void));
  1150. LOCAL void hel_int ()
  1151. X{
  1152. X WX("\n");
  1153. X WX("FunnelWeb Introduction\n");
  1154. X WX("----------------------\n");
  1155. X WX("Welcome to FunnelWeb, a literate-programming macro preprocessor.\n");
  1156. X WX("\n");
  1157. X WX("Traditional computer programs are primarily written for computers and consist\n");
  1158. X WX("of code laced with comments. In contrast, literate programs are primarily\n");
  1159. X WX("written for humans and consist of comments laced with code.  While simple, the\n");
  1160. X WX("effect of this inversion can be so profound as to change one's whole approach\n");
  1161. X WX("to programming.  The literate programmer focuses on conveying meaning to other\n");
  1162. X WX("intelligent beings rather than merely convincing the computer to behave in a\n");
  1163. X WX("particular way. It is the difference between performing and exposing a magic\n");
  1164. X WX("trick.\n");
  1165. X WX("\n");
  1166. X WX("FunnelWeb is a production-quality literate-programming tool that emphasises\n");
  1167. X WX("simplicity and reliability. It provides a macro facility, and assists in the\n");
  1168. X WX("production of typeset documentation. FunnelWeb runs on most popular machines\n");
  1169. X WX("(Sun, VAX, Mac, PC) and its highly portable source code in C is freely\n");
  1170. X WX("available under a GNU license.\n");
  1171. X WX("\n");
  1172. X WX("To get started with FunnelWeb, obtain a printed copy of the \"FunnelWeb User's\n");
  1173. X WX("Manual\" (see the \"DOCUMENTATION\" help message). Read the introduction and work\n");
  1174. X WX("through the tutorial. The manual contains an overview of FunnelWeb, an\n");
  1175. X WX("introductory tutorial, and a comprehensive reference manual. Try it!\n");
  1176. X}
  1177. X
  1178. X/******************************************************************************/
  1179. X
  1180. LOCAL void hel_opt P_((void));
  1181. LOCAL void hel_opt ()
  1182. X{
  1183. X WX("\n");
  1184. X WX("FunnelWeb Command Line Options\n");
  1185. X WX("------------------------------\n");
  1186. X WX("Options are of the form (\"+\" | \"=\" | \"-\") <letter> [<string>].\n");
  1187. X WX("+ turns on an option. - turns it off. = doesn't affect it's onoffedness.\n");
  1188. X WX("The case (e.g. upper or lower) of <letter> does not matter.\n");
  1189. X WX("<string> is usually a filename or directory, but sometimes a number.\n");
  1190. X WX("Convention: f=filename, n=decimal number, h=help message name.\n");
  1191. X WX("\n");
  1192. X WX("Example: fw sloth +L +Jaardvark.xxx +W80 -Q =Twalrus.tex\n");
  1193. X WX("\n");
  1194. X WX("Action options: (choose at least one when you invoke FunnelWeb from the OS).\n");
  1195. X WX("If you choose more than one, they will be executed in the order given here.\n");
  1196. X WX("   +Xf   Execute specified Funnelweb script.\n");
  1197. X WX("   +Ff   Process specified input file.\n");
  1198. X WX("   +Hh   Display specified help message.\n");
  1199. X WX("   +K    Invoke FunnelWeb's interative mode.\n");
  1200. X WX("\n");
  1201. X WX("Other options:\n");
  1202. X WX("   +B1   Diagnostic: Dump image of input file    to listing file.\n");
  1203. X WX("   +B2   Diagnostic: Dump scanner's line list    to listing file.\n");
  1204. X WX("   +B3   Diagnostic: Dump scanner's token list   to listing file.\n");
  1205. X WX("   +B4   Diagnostic: Dump parser's macro table   to listing file.\n");
  1206. X WX("   +B5   Diagnostic: Dump parser's document list to listing file.\n");
  1207. X WX("   +B6   Diagnostic: Dump time breakdown report  to listing file.\n");
  1208. X WX("   +B7   Diagnostic: Suppress non-deterministic output.\n");
  1209. X WX("   +Cn   Number of lines of context around diagnostics in listing file.\n");
  1210. X WX("   +D    Delete each output file identical to its previous version.\n");
  1211. X WX("   +If   Default file specification for include files.\n");
  1212. X WX("   +Jf   Generate journal file.  Default file specification.\n");
  1213. X WX("   +Lf   Generate listing file.  Default file specification.\n");
  1214. X WX("   +Of   Generate product files. Default file specification.\n");
  1215. X WX("   +Q    Quiet mode. Only really important messages displayed on console.\n");
  1216. X WX("   +Tf   Generate typesetter file. Default file specification.\n");
  1217. X WX("   +Sn   Send errors to console with specified number of lines of context.\n");
  1218. X WX("   +Wn   Set maximum length of lines in product files.\n");
  1219. X WX("\n");
  1220. X WX("If an option appears more than once, the rightmost one dominates.\n");
  1221. X WX("For more detailed information, refer to the FunnelWeb User's Manual.\n");
  1222. X WX("For default values refer to the \"DEFOPTIONS\" help message.\n");
  1223. X}
  1224. X
  1225. X/******************************************************************************/
  1226. X
  1227. LOCAL void hel_dop P_((void));
  1228. LOCAL void hel_dop ()
  1229. X{
  1230. X op_t defop;
  1231. X
  1232. X WX("\n");
  1233. X WX("FunnelWeb Default Option Settings\n");
  1234. X WX("---------------------------------\n");
  1235. X WX("These are the settings FunnelWeb STARTS UP with.\n");
  1236. X op_ini(&defop);
  1237. X WX("\n");
  1238. X op_wri(&defop,pf);
  1239. X WX("\n");
  1240. X WX("See the OPTIONS help message for a brief description of these options.\n");
  1241. X WX("For more detailed information, refer to the FunnelWeb User's Manual.\n");
  1242. X}
  1243. X
  1244. X/******************************************************************************/
  1245. X
  1246. LOCAL void hel_com P_((void));
  1247. LOCAL void hel_com ()
  1248. X{
  1249. X WX("\n");
  1250. X WX("FunnelWeb Interactive Commands\n");
  1251. X WX("------------------------------\n");
  1252. X WX("   !                       - Comment. Ignores the whole line.             \n");
  1253. X WX("   ABSENT fn               - Aborts if specified file exists.             \n");
  1254. X WX("   CODIFY ftext fC         - Convert text file into C code to write text. \n");
  1255. X WX("   COMPARE f1 f2           - Aborts if two files are different.           \n");
  1256. X WX("   DEFINE n \"text\"         - Defines $n to translate to text.             \n");
  1257. X WX("   DIFF f1 f2 logf [ABORT] - Writes differences between f1 and f2 to logf.\n");
  1258. X WX("                           - Severe if different and ABORT is present.    \n");
  1259. X WX("   DIFFSUMMARY             - Summary of differences done since DIFFZERO.  \n");
  1260. X WX("   DIFFZERO                - Zeros differences counters.                  \n");
  1261. X WX("   ENEO fn                 - Establish Non Existence Of file.             \n");
  1262. X WX("   EXECUTE fn              - Execute commands in specified file.          \n");
  1263. X WX("   EXISTS fn               - Aborts if file does not exist.               \n");
  1264. X WX("   FIXEOLS fn [outf]       - Fixes up EOL markers in specified file.      \n");
  1265. X WX("   FW options              - Invoke FunnelWeb-proper once.                \n");
  1266. X WX("   HELP [name]             - Displays specified help message.             \n");
  1267. X WX("   HERE                    - Terminates effect of SKIPTO command.         \n");
  1268. X WX("   QUIT                    - Quits FunnelWeb.                             \n");
  1269. X WX("   SET options             - Sets options.                                \n");
  1270. X WX("   SHOW                    - Displays currently active options.           \n");
  1271. X WX("   SKIPTO                  - Ignore commands until HERE command.          \n");
  1272. X WX("   STATUS                  - Write out status and diagnostic counts.      \n");
  1273. X WX("   STATUS [Sn] [En] [Wn]   - Aborts if status is not as specified.        \n");
  1274. X WX("   TOLERATE                - Don't abort script if next commmand gens err.\n");
  1275. X WX("   TRACE ON | OFF          - Turns command tracing ON or OFF.             \n");
  1276. X WX("   WRITE \"text\"            - Writes specified text to screen and journal. \n");
  1277. X WX("   WRITEU \"text\"           - Same as WRITE but underlines text.           \n");
  1278. X WX("\n");
  1279. X WX("More detailed information can be found in the FunnelWeb User's Manual.\n");
  1280. X WX("\n");
  1281. X WX("Most of these commands were created to support regression testing and\n");
  1282. X WX("can be ignored by most users. In fact most users will never need to invoke\n");
  1283. X WX("FunnelWeb's interactive mode at all. If you are just getting started\n");
  1284. X WX("with FunnelWeb, it's probably best to run FunnelWeb directly from your\n");
  1285. X WX("command interface and ignore the +K command line option for now.\n");
  1286. X}
  1287. X
  1288. X/******************************************************************************/
  1289. X
  1290. LOCAL void hel_doc P_((void));
  1291. LOCAL void hel_doc ()
  1292. X{
  1293. X WX("\n");
  1294. X WX("FunnelWeb Documentation\n");
  1295. X WX("-----------------------\n");
  1296. X WX("The following FunnelWeb documentation is available:\n");
  1297. X WX("\n");
  1298. X WX("   \"FunnelWeb User's   Manual\": Tutorial, Hints, Reference Manual.\n");
  1299. X WX("   \"FunnelWeb Hacker's Manual\": Notes on Design and Implementation.\n");
  1300. X WX("\n");
  1301. X WX("Everyone involved with FunnelWeb should read the User's Manual.\n");
  1302. X WX("It contains everything you need to learn how to use FunnelWeb.\n");
  1303. X WX("\n");
  1304. X WX("The Hacker's Manual is for those who want to install, modify, fix,\n");
  1305. X WX("fiddle with, and generally hack the FunnelWeb C source code.\n");
  1306. X WX("\n");
  1307. X WX("Both of these manuals are shipped with the FunnelWeb distribution\n");
  1308. X WX("kit, and should be available on your machine in the form of LaTeX text\n");
  1309. X WX("files. If you cannot find them, you can obtain them by FTP from:\n");
  1310. X WX("\n");
  1311. X WX("    Machine  : sirius.itd.adelaide.edu.au [IP=129.127.40.3].\n");
  1312. X WX("    Directory: ~pub/funnelweb/   (or a directory of similar name).\n");
  1313. X WX("\n");
  1314. X}
  1315. X
  1316. X/******************************************************************************/
  1317. X
  1318. LOCAL void hel_reg P_((void));
  1319. LOCAL void hel_reg ()
  1320. X{
  1321. X WX("FunnelWeb Registration\n");
  1322. X WX("----------------------\n");
  1323. X WX("If you install or use FunnelWeb, please fill in and return this form:\n");
  1324. X WX("\n");
  1325. X WX("   +----------------------FunnelWeb Registration Form----------------------+\n");
  1326. X WX("   | 1. Date:                                                              |\n");
  1327. X WX("   | 2. Title and name:                                                    |\n");
  1328. X WX("   | 3. Internet email address:                                            |\n");
  1329. X WX("   | 4. Snail mail address:                                                |\n");
  1330. X WX("   | 5. Work phone number (country,area,number):                           |\n");
  1331. X WX("   | 6. Which category of FunnelWeb user best describes you?               |\n");
  1332. X WX("   |       Latent    - Installed FunnelWeb, but don't intend to use it.    |\n");
  1333. X WX("   |       Beginner  - Haven't used FunnelWeb much yet; have an open mind. |\n");
  1334. X WX("   |       Casual    - Use FunnelWeb occasionally.                         |\n");
  1335. X WX("   |       Convert   - Use FunnelWeb to do most programming.               |\n");
  1336. X WX("   |       Fanatic   - FunnelWeb has become a way of life.                 |\n");
  1337. X WX("   | 7. What changes or new features would you like to see in FunnelWeb?   |\n");
  1338. X WX("   | 8. Do you want to be kept informed of new FunnelWeb developments?     |\n");
  1339. X WX("   | 9. Email this form to \"ross@spam.adelaide.edu.au\", OR snail mail to   |\n");
  1340. X WX("   |    Ross Williams, 16 Lerwick Avenue, Hazelwood Park 5066, Australia.  |\n");
  1341. X WX("   +-----------------------------------------------------------------------+\n");
  1342. X WX("To write this form to a file, use \"fw +hreg +jregform.txt\".\n");
  1343. X WX("You may wish to make a contribution when you register. See SUPPORT.\n");
  1344. X}
  1345. X
  1346. X/******************************************************************************/
  1347. X
  1348. LOCAL void hel_cop P_((void));
  1349. LOCAL void hel_cop ()
  1350. X{
  1351. X WX("\n");
  1352. X WX("FunnelWeb Copyright\n");
  1353. X WX("-------------------\n");
  1354. X WX("Copyright (C) 1992 Ross Williams.\n");
  1355. X WX("\n");
  1356. X WX("However, FunnelWeb has been released by the author and copyright owner Ross\n");
  1357. X WX("Williams (ross@spam.adelaide.edu.au) under Version 2 of the GNU General Public\n");
  1358. X WX("License published by the Free Software Foundation. This means that you can\n");
  1359. X WX("redistribute FunnelWeb and/or modify it under the terms of the license.\n");
  1360. X WX("\n");
  1361. X WX("Note: This program is distributed WITHOUT ANY WARRANTY; without even the\n");
  1362. X WX("implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
  1363. X WX("\n");
  1364. X WX("The following help messages provide further information:\n");
  1365. X WX("\n");
  1366. X WX("   License       - The license under which this software is distributed (long).\n");
  1367. X WX("   DIstribution  - Extract from the GNU license concerning distribution.\n");
  1368. X WX("   Nowarranty    - Extract from the GNU license concerning lack of warranty.\n");
  1369. X WX("   MOdification  - Read this message if you intend to modify FunnelWeb.\n");
  1370. X WX("   Registration  - How to register as an \"official\" FunnelWeb user.\n");
  1371. X WX("\n");
  1372. X}
  1373. X
  1374. X/******************************************************************************/
  1375. X
  1376. LOCAL void hel_now P_((void));
  1377. LOCAL void hel_now ()
  1378. X{
  1379. X WX("\n");
  1380. X WX("FunnelWeb Comes With No Warranty\n");
  1381. X WX("--------------------------------\n");
  1382. X WX("Here is an extract from the GNU General Public License Version 2, under which\n");
  1383. X WX("FunnelWeb is distributed. See help message \"LICENSE\" for the full license.\n");
  1384. X WX("\n");
  1385. X WX("     11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n");
  1386. X WX("   FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\n");
  1387. X WX("   OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n");
  1388. X WX("   PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n");
  1389. X WX("   OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n");
  1390. X WX("   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\n");
  1391. X WX("   TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\n");
  1392. X WX("   PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n");
  1393. X WX("   REPAIR OR CORRECTION.\n");
  1394. X WX("\n");
  1395. X WX("     12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n");
  1396. X WX("   WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n");
  1397. X WX("   REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n");
  1398. X WX("   INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n");
  1399. X WX("   OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n");
  1400. X WX("   TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n");
  1401. X WX("   YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n");
  1402. X WX("   PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n");
  1403. X WX("   POSSIBILITY OF SUCH DAMAGES.\n");
  1404. X}
  1405. X
  1406. X/******************************************************************************/
  1407. X
  1408. LOCAL void hel_dis P_((void));
  1409. LOCAL void hel_dis ()
  1410. X{
  1411. X WX("\n");
  1412. X WX("FunnelWeb Distribution\n");
  1413. X WX("----------------------\n");
  1414. X WX("The following is an extract from the GNU General Public License Version 2,\n");
  1415. X WX("under which FunnelWeb is distributed.\n");
  1416. X WX("\n");
  1417. X WX("     1. You may copy and distribute verbatim copies of the Program's\n");
  1418. X WX("   source code as you receive it, in any medium, provided that you\n");
  1419. X WX("   conspicuously and appropriately publish on each copy an appropriate\n");
  1420. X WX("   copyright notice and disclaimer of warranty; keep intact all the\n");
  1421. X WX("   notices that refer to this License and to the absence of any warranty;\n");
  1422. X WX("   and give any other recipients of the Program a copy of this License\n");
  1423. X WX("   along with the Program.\n");
  1424. X WX("\n");
  1425. X WX("   You may charge a fee for the physical act of transferring a copy, and\n");
  1426. X WX("   you may at your option offer warranty protection in exchange for a fee.\n");
  1427. X WX("\n");
  1428. X WX("The license also allows you other freedoms.  For more information refer\n");
  1429. X WX("to the full text of the license in the help message \"LICENSE\".\n");
  1430. X}
  1431. X
  1432. X/******************************************************************************/
  1433. X
  1434. LOCAL void hel_ack P_((void));
  1435. LOCAL void hel_ack ()
  1436. X{
  1437. X WX("\n");
  1438. X WX("FunnelWeb Acknowledgements\n");
  1439. X WX("--------------------------\n");
  1440. X WX("The following people assisted with the preparation of FunnelWeb V3.0.\n");
  1441. X WX("\n");
  1442. X WX("Many thanks go to DAVID HULSE (dave@cs.adelaide.edu.au) who translated the 1986\n");
  1443. X WX("version of FunnelWeb (V1) written in Ada into a public domain C version (V2).\n");
  1444. X WX("The C code written by David formed the basis of V3 of FunnelWeb, but was\n");
  1445. X WX("entirely rewritten during the intensive refinement and feature-injection\n");
  1446. X WX("period leading up to this release (V3 is about 3 times the size of V2).\n");
  1447. X WX("\n");
  1448. X WX("Thanks go to SIMON HACKETT (simon@internode.com.au) of Internode Systems\n");
  1449. X WX("Pty Ltd for the use of his Sun, Mac, and PC, for assistance in porting\n");
  1450. X WX("FunnelWeb to the Sun and PC, and for helpful discussions.\n");
  1451. X WX("\n");
  1452. X WX("Thanks go to JEREMY BEGG (jeremy@vsm.com.au) of VSM Software Services\n");
  1453. X WX("for the use of his VAX, and for assistance with the VMS-specific code.\n");
  1454. X WX("\n");
  1455. X WX("Ross Williams (ross@spam.adelaide.edu.au), 12 May 1992.\n");
  1456. X}
  1457. X
  1458. X/******************************************************************************/
  1459. X
  1460. LOCAL void hel_ver P_((void));
  1461. LOCAL void hel_ver ()
  1462. X{
  1463. X WX("\n");
  1464. X WX("FunnelWeb Versions\n");
  1465. X WX("------------------\n");
  1466. X WX("FunnelWeb was created in 1986 and was used extensively by Ross Williams\n");
  1467. X WX("(ross@spam.adelaide.edu.au) for three years. However, Version 1.0 was written\n");
  1468. X WX("in Ada and was not very portable (it was fairly VAX/VMS specific). David Hulse\n");
  1469. X WX("(dave@cs.adelaide.edu.au) took the first step towards a release by translating\n");
  1470. X WX("the Ada code into C. Ross Williams then extensively reworked the C code, making\n");
  1471. X WX("it robust and portable, adding new features, and polishing it to its current\n");
  1472. X WX("form.\n");
  1473. X WX("\n");
  1474. X WX("Vers  Lang  Created  Released   Author          Copyright      Licensing      \n");
  1475. X WX("----  ----  -------  --------   --------------  -------------  ---------      \n");
  1476. X WX("V1.0  Ada   1986     Never      Ross  Williams  Ross Williams                 \n");
  1477. X WX("V2.0  C     1989     Never      David Hulse     Public domain  No restriction.\n");
  1478. X WX("V3.0  C     1992     May-1992   Ross  Williams  Ross Williams  GNU release.   \n");
  1479. X WX("\n");
  1480. X WX("This is FunnelWeb Version 3.0. Unless otherwise specified, all references\n");
  1481. X WX("in this release to \"FunnelWeb\" refer either to the abstract identity\n");
  1482. X WX("of FunnelWeb, or to this version, FunnelWeb Version 3.0.\n");
  1483. X}
  1484. X
  1485. X/******************************************************************************/
  1486. X
  1487. LOCAL void hel_sup P_((void));
  1488. LOCAL void hel_sup ()
  1489. X{
  1490. X WX("\n");
  1491. X WX("FunnelWeb Support\n");
  1492. X WX("-----------------\n");
  1493. X WX("FunnelWeb is released \"as is\" under a GNU license, and no formal support\n");
  1494. X WX("is available. You have the right to make changes to FunnelWeb and to use\n");
  1495. X WX("the modified versions created by random programmers. However, this is\n");
  1496. X WX("discouraged (see the MODIFICATION help message).\n");
  1497. X WX("\n");
  1498. X WX("In fact the support that is most needed is your financial support for the\n");
  1499. X WX("FunnelWeb developers! It has taken MONTHS of full-time UNPAID work to bring\n");
  1500. X WX("FunnelWeb to you in its current form. I don't want to inconvenience users\n");
  1501. X WX("who install FunnelWeb, play with it, and then hardly ever use it. If you are\n");
  1502. X WX("in this category, please register, but don't bother contributing. However,\n");
  1503. X WX("if you find that FunnelWeb has become a useful programming tool, a contribution\n");
  1504. X WX("of some positive multiple of US$50 would be appreciated.\n");
  1505. X WX("\n");
  1506. X WX("To make a contribution, send payment with a completed registration form\n");
  1507. X WX("(see the REGISTRATION help message) to:\n");
  1508. X WX("\n");
  1509. X WX("   Renaissance Software Pty Ltd\n");
  1510. X WX("   Email: ross@spam.adelaide.edu.au\n");
  1511. X WX("   Snail: 16 Lerwick Avenue, Hazelwood Park 5066, Australia.\n");
  1512. X WX("\n");
  1513. X WX("Payment can be by personal or bank cheque to any bank in the world or by\n");
  1514. X WX("Visa or Mastercard. Please give the card name, number, expiry date, and\n");
  1515. X WX("the amount to be paid in US dollars. All contributions will be appreciated\n");
  1516. X WX("and will encourage further FunnelWeb development. However, no undertaking\n");
  1517. X WX("is made whatsoever about how the money will be used.\n");
  1518. X WX("\n");
  1519. X WX("Ross Williams (ross@spam.adelaide.edu.au), 12 May 1992.\n");
  1520. X}
  1521. X
  1522. X/******************************************************************************/
  1523. X
  1524. LOCAL void hel_mod P_((void));
  1525. LOCAL void hel_mod ()
  1526. X{
  1527. X WX("\n");
  1528. X WX("FunnelWeb Modifications\n");
  1529. X WX("-----------------------\n");
  1530. X WX("FunnelWeb is distributed under a GNU license, and you are free to modify the\n");
  1531. X WX("source code and distribute modified copies (see the help message LICENSE).\n");
  1532. X WX("However, there are good reasons why you should avoid doing this.\n");
  1533. X WX("\n");
  1534. X WX("   1) If you distribute modified versions of FunnelWeb, you run the risk of\n");
  1535. X WX("   creating a version that will diverge from the \"official\" version of\n");
  1536. X WX("   FunnelWeb which I intend to maintain.\n");
  1537. X WX("\n");
  1538. X WX("   2) If you release a version of FunnelWeb with a changed input language,\n");
  1539. X WX("   users of your modified version will create source files that will no\n");
  1540. X WX("   longer work on other versions of FunnelWeb. The result will be chaos.\n");
  1541. X WX("\n");
  1542. X WX("For these reasons I request that you do not distribute modified versions of\n");
  1543. X WX("FunnelWeb, particularly versions with a modified language. However, if you must\n");
  1544. X WX("distribute a version with a modified language, PLEASE CHANGE ITS NAME (i.e.\n");
  1545. X WX("from \"FunnelWeb\" to something else). Please also allocate a new file extension\n");
  1546. X WX("to replace \".fw\" as the extension for source files written in the modified\n");
  1547. X WX("language. For more information, refer to the FunnelWeb Hacker's Manual.\n");
  1548. X WX("\n");
  1549. X WX("Ross Williams (ross@spam.adelaide.edu.au), 12 May 1992.\n");
  1550. X}
  1551. X
  1552. X/******************************************************************************/
  1553. X
  1554. LOCAL bool prefeq P_((char *,char *));
  1555. LOCAL bool prefeq (p_pref,p_target)
  1556. X/* Returns TRUE iff string p_pref is a case insensitive prefix of p_target.   */
  1557. char *p_pref;
  1558. char *p_target;
  1559. X{
  1560. X char *p,*q;
  1561. X
  1562. X if (strlen(p_pref) > strlen(p_target))
  1563. X    return FALSE;
  1564. X
  1565. X p=p_pref;
  1566. X q=p_target;
  1567. X while (*p != EOS)
  1568. X   {
  1569. X    if (toupper(*p) != toupper(*q)) return FALSE;
  1570. X    p++;
  1571. X    q++;
  1572. X   }
  1573. X return TRUE;
  1574. X}
  1575. X
  1576. X/******************************************************************************/
  1577. X
  1578. XEXPORT uword hel_num (p_name)
  1579. char *p_name;
  1580. X{
  1581. X uword matches = 0;
  1582. X uword messnum;
  1583. X
  1584. X /* We want to be fairly lenient on the user here as the user is trying to    */
  1585. X /* obtain help and will probably get annoyed and give up if it doesn't work, */
  1586. X /* so we perform case insensitive prefix matching.  However, we don't want   */
  1587. X /* to match if the user inputs a prefix that matches two message names. This */
  1588. X /* means we can't just return when we find a match; we have to see if there  */
  1589. X /* are any others as well.                                                   */
  1590. X
  1591. X if (prefeq(p_name,"MENU"         )) {messnum=HL_MEN; matches++;}
  1592. X if (prefeq(p_name,"INTRODUCTION" )) {messnum=HL_INT; matches++;}
  1593. X if (prefeq(p_name,"OPTIONS"      )) {messnum=HL_OPT; matches++;}
  1594. X if (prefeq(p_name,"DEFOPTIONS"   )) {messnum=HL_DOP; matches++;}
  1595. X if (prefeq(p_name,"COMMANDS"     )) {messnum=HL_COM; matches++;}
  1596. X if (prefeq(p_name,"DOCUMENTATION")) {messnum=HL_DOC; matches++;}
  1597. X if (prefeq(p_name,"REGISTRATION" )) {messnum=HL_REG; matches++;}
  1598. X if (prefeq(p_name,"LICENSE"      )) {messnum=HL_GNU; matches++;}
  1599. X if (prefeq(p_name,"COPYRIGHT"    )) {messnum=HL_COP; matches++;}
  1600. X if (prefeq(p_name,"NOWARRANTY"   )) {messnum=HL_NOW; matches++;}
  1601. X if (prefeq(p_name,"DISTRIBUTION" )) {messnum=HL_DIS; matches++;}
  1602. X if (prefeq(p_name,"ACKNOWLEDGE"  )) {messnum=HL_ACK; matches++;}
  1603. X if (prefeq(p_name,"VERSIONS"     )) {messnum=HL_VER; matches++;}
  1604. X if (prefeq(p_name,"SUPPORT"      )) {messnum=HL_SUP; matches++;}
  1605. X if (prefeq(p_name,"MODIFICATION" )) {messnum=HL_MOD; matches++;}
  1606. X
  1607. X if (matches != 1) return HL_ERR;
  1608. X
  1609. X return messnum;
  1610. X}
  1611. X
  1612. X/******************************************************************************/
  1613. X
  1614. XEXPORT void hel_wri (p_outf,messno)
  1615. void (*p_outf) P_((char *));
  1616. uword messno;
  1617. X{
  1618. X as_cold(     1 <= messno, "hel_wri: Message number is zero.");
  1619. X as_cold(messno <= HL_MAX, "hel_wri: Message number is greater than HL_MAX.");
  1620. X
  1621. X /* Set the global output function pointer. */
  1622. X pf=p_outf;
  1623. X
  1624. X switch(messno)
  1625. X   {
  1626. X    case HL_MEN: hel_men(); break;
  1627. X    case HL_INT: hel_int(); break;
  1628. X    case HL_OPT: hel_opt(); break;
  1629. X    case HL_DOP: hel_dop(); break;
  1630. X    case HL_COM: hel_com(); break;
  1631. X    case HL_DOC: hel_doc(); break;
  1632. X    case HL_REG: hel_reg(); break;
  1633. X    case HL_GNU: hel_gnu(p_outf); break; /* Calling another module. */
  1634. X    case HL_COP: hel_cop(); break;
  1635. X    case HL_NOW: hel_now(); break;
  1636. X    case HL_DIS: hel_dis(); break;
  1637. X    case HL_ACK: hel_ack(); break;
  1638. X    case HL_VER: hel_ver(); break;
  1639. X    case HL_SUP: hel_sup(); break;
  1640. X    case HL_MOD: hel_mod(); break;
  1641. X    default    : as_bomb("hel_wri: switch defaulted.");
  1642. X   }
  1643. X}
  1644. X
  1645. X/******************************************************************************/
  1646. X/*                               End of HELP.C                                */
  1647. X/******************************************************************************/
  1648. END_OF_FILE
  1649. if test 29770 -ne `wc -c <'sources/help.c'`; then
  1650.     echo shar: \"'sources/help.c'\" unpacked with wrong size!
  1651. fi
  1652. # end of 'sources/help.c'
  1653. fi
  1654. if test -f 'sources/weave.c' -a "${1}" != "-c" ; then 
  1655.   echo shar: Will not clobber existing file \"'sources/weave.c'\"
  1656. else
  1657. echo shar: Extracting \"'sources/weave.c'\" \(31376 characters\)
  1658. sed "s/^X//" >'sources/weave.c' <<'END_OF_FILE'
  1659. X/*##############################################################################
  1660. X
  1661. XFUNNNELWEB COPYRIGHT
  1662. X====================
  1663. XFunnelWeb is a literate-programming macro preprocessor.
  1664. X
  1665. Copyright (C) 1992 Ross N. Williams.
  1666. X
  1667. X   Ross N. Williams
  1668. X   ross@spam.adelaide.edu.au
  1669. X   16 Lerwick Avenue, Hazelwood Park 5066, Australia.
  1670. X
  1671. This program is free software; you can redistribute it and/or modify
  1672. it under the terms of Version 2 of the GNU General Public License as
  1673. published by the Free Software Foundation.
  1674. X
  1675. This program is distributed WITHOUT ANY WARRANTY; without even the implied
  1676. warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  1677. See Version 2 of the GNU General Public License for more details.
  1678. X
  1679. You should have received a copy of Version 2 of the GNU General Public
  1680. License along with this program. If not, you can FTP the license from
  1681. prep.ai.mit.edu/pub/gnu/COPYING-2 or write to the Free Software
  1682. XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1683. X
  1684. Section 2a of the license requires that all changes to this file be
  1685. recorded prominently in this file. Please record all changes here.
  1686. X
  1687. Programmers:
  1688. X   RNW  Ross N. Williams  ross@spam.adelaide.edu.au
  1689. X
  1690. Changes:
  1691. X   07-May-1992  RNW  Program prepared for release under GNU GPL V2.
  1692. X
  1693. X##############################################################################*/
  1694. X
  1695. X
  1696. X/******************************************************************************/
  1697. X/*                                   WEAVE.C                                  */
  1698. X/******************************************************************************/
  1699. X
  1700. X#include <ctype.h>
  1701. X#include "style.h"
  1702. X
  1703. X#include "as.h"
  1704. X#include "data.h"
  1705. X#include "lister.h"
  1706. X#include "machin.h"
  1707. X#include "misc.h"
  1708. X#include "table.h"
  1709. X#include "texhead.h"
  1710. X#include "weave.h"
  1711. X
  1712. X/* IMPORTANT WARNING: The Macintosh THINK C compiler sets up strings that     */
  1713. X/* start with \p or \P as PASCAL strings rather than C strings. So be very    */
  1714. X/* careful not to start any strings with \p or \P.                            */
  1715. X
  1716. X/******************************************************************************/
  1717. X
  1718. LOCVAR wf_t f_t;          /* Variable representing documentation file.        */
  1719. LOCVAR bool literal;      /* True if we are inside a literal @{.              */
  1720. X
  1721. X/******************************************************************************/
  1722. X
  1723. LOCAL void wv_ex P_((p_ells_t));
  1724. X
  1725. X/******************************************************************************/
  1726. X
  1727. LOCAL char * fn_nodir P_((char *));
  1728. LOCAL char * fn_nodir (p)
  1729. X/* Given a pointer to a string, returns a pointer to the character just past  */
  1730. X/* the last occurrance of FN_DELIM, or a pointer to the start of the string   */
  1731. X/* if it does not occur. In other words, given a filename, return a pointer   */
  1732. X/* to the start of the name field.                                            */
  1733. char *p;
  1734. X{
  1735. X char *q = strrchr(p,FN_DELIM);
  1736. X if (q==NULL)
  1737. X    return p;
  1738. X else
  1739. X    return q+1;
  1740. X}
  1741. X
  1742. X/******************************************************************************/
  1743. X
  1744. LOCAL void wf_dec P_((p_wf_t,ulong));
  1745. LOCAL void wf_dec(p_wf,n)
  1746. X/* Writes the unsigned number n to the specified output stream as a decimal.  */
  1747. X/* This function has been named wf_dec so that it can be moved to the wf      */
  1748. X/* package if it turns out to be popular.                                     */
  1749. p_wf_t p_wf;
  1750. ulong  n;
  1751. X{
  1752. X char t[20];
  1753. X sprintf(t,"%lu",n);
  1754. X wf_wr(p_wf,t);
  1755. X}
  1756. X
  1757. X/******************************************************************************/
  1758. X
  1759. LOCAL void wv_ugch P_((int));
  1760. LOCAL void wv_ugch(ch)
  1761. X/* WeaVe UGly CHaracter.                                                      */
  1762. X/* Sometimes it is necessary to output text without causing the typesetting   */
  1763. X/* program (TeX) to interpret it as control sequences and generate errors.    */
  1764. X/* There are two ways of doing this. First, we can get the typesetter to do   */
  1765. X/* the work by making it less sensitive. This has been done with the          */
  1766. X/* typesetting of the main macro text. The other approach is to convert each  */
  1767. X/* offending character into the typesetter control sequence that will simply  */
  1768. X/* output the character. For example, in TeX, "$" becomes "\$". This function */
  1769. X/* accepts a single character and writes out its safe equivalent.             */
  1770. X/* The term "ugly" is used to describe potentially harmful text/characters.   */
  1771. int ch;
  1772. X{
  1773. X /* End of lines are the only non-printable allowed. */
  1774. X if (ch==EOL) {wf_chr(&f_t,EOL); return;}
  1775. X
  1776. X /* All other non-printables result in a bullet. In the absence of bugs, the  */
  1777. X /* only way a non-printable can get to us here is as a result of the user    */
  1778. X /* explicitly inserting one using the scanner's @^ control sequence.         */
  1779. X if (!isascprn(ch))
  1780. X    {
  1781. X     wf_wr(&f_t,"$\\bullet$");
  1782. X     return;
  1783. X    }
  1784. X /* If it IS printable, then print it ... carefully! */
  1785. X switch (ch)
  1786. X   {
  1787. X    /* Go through the printables in ASCII order. */
  1788. X    /*   ' ':  is an ordinary character. */
  1789. X    /*   '!':  is an ordinary character. */
  1790. X    case '\"':  wf_wr(&f_t,"\\char`\\\"");  break;
  1791. X    case '#':  wf_wr(&f_t,"\\#");  break;
  1792. X    case '$':  wf_wr(&f_t,"\\$");  break;
  1793. X    /* Note: The string "\\%" triggers a unknown sequence "\%" in GNUC.       */
  1794. X    case '%':  wf_chr(&f_t,'\\'); wf_chr(&f_t,'%'); break;
  1795. X    case '&':  wf_wr(&f_t,"\\&");  break;
  1796. X    /*   ''': is an ordinary character. */
  1797. X    /*   '(': is an ordinary character. */
  1798. X    /*   ')': is an ordinary character. */
  1799. X    /*   '*': is an ordinary character. */
  1800. X    /*   '+': is an ordinary character. */
  1801. X    /*   ',': is an ordinary character. */
  1802. X    /*   '-': is an ordinary character. */
  1803. X    /*   '.': is an ordinary character. */
  1804. X    /*   '/': is an ordinary character. */
  1805. X    /* '0-9': are   ordinary characters.*/
  1806. X    /*   ':': is an ordinary character. */
  1807. X    /*   ';': is an ordinary character. */
  1808. X              /* Note: Some \chars work well in roman. Others don't. */
  1809. X    case '<': if (literal)
  1810. X                 wf_wr(&f_t,"\\char`\\<");
  1811. X              else
  1812. X                 wf_wr(&f_t,"$<$");
  1813. X              break;
  1814. X    /*   '=': is an ordinary character. */
  1815. X    case '>': if (literal)
  1816. X                 wf_wr(&f_t,"\\char`\\>");
  1817. X              else
  1818. X                 wf_wr(&f_t,"$>$");
  1819. X              break;
  1820. X    /*   '?': is an ordinary character. */
  1821. X    /*   '@': is an ordinary character. */
  1822. X    /* 'A-Z': are   ordinary characters.*/
  1823. X    /*   '[': is an ordinary character. */
  1824. X    case '\\': if (literal)
  1825. X                  wf_wr(&f_t,"\\char`\\\\");
  1826. X               else
  1827. X                  wf_wr(&f_t,"$\\backslash$");
  1828. X               break;
  1829. X    /*   ']': is an ordinary character. */
  1830. X    case '^':  wf_wr(&f_t,"\\char`\\^");  break;
  1831. X    case '_':  wf_wr(&f_t,"\\_");  break;
  1832. X    /*   '`': is an ordinary character. */
  1833. X    /* 'a-z': are   ordinary characters.*/
  1834. X    case '{':  if (literal)
  1835. X                  wf_wr(&f_t,"\\char`\\{");
  1836. X               else
  1837. X                  wf_wr(&f_t,"$\\{$");
  1838. X               break;
  1839. X    case '|':  if (literal)
  1840. X                  wf_wr(&f_t,"\\char`\\|");
  1841. X               else
  1842. X                  wf_wr(&f_t,"$|$");
  1843. X               break;
  1844. X    case '}':  if (literal)
  1845. X                  wf_wr(&f_t,"\\char`\\}");
  1846. X               else
  1847. X                  wf_wr(&f_t,"$\\}$");
  1848. X               break;
  1849. X    case '~':  wf_wr(&f_t,"\\char`\\~");  break;
  1850. X    default:   wf_chr(&f_t,ch);    break;
  1851. X   }
  1852. X}
  1853. X
  1854. X/******************************************************************************/
  1855. X
  1856. LOCAL void wv_ugstr P_((char *));
  1857. LOCAL void wv_ugstr(s)
  1858. X/* Writes out a potentially ugly string. */
  1859. char *s;
  1860. X{
  1861. X while (*s != EOS)
  1862. X    wv_ugch(*s++);
  1863. X}
  1864. X
  1865. X/******************************************************************************/
  1866. X
  1867. LOCAL void wv_ugsc P_((p_sc_t));
  1868. LOCAL void wv_ugsc(p_sc)
  1869. X/* Writes out a potentially ugly text scrap. */
  1870. p_sc_t p_sc;
  1871. X{
  1872. X char *p      = p_sc->sc_first;
  1873. X char *p_last = p_sc->sc_last;
  1874. X
  1875. X while (p<=p_last)
  1876. X    wv_ugch(*p++);
  1877. X}
  1878. X
  1879. X/******************************************************************************/
  1880. X
  1881. LOCAL void wv_ugscls P_((p_scls_t));
  1882. LOCAL void wv_ugscls(p_scls)
  1883. X/* This function writes the specified text list to the output stream. It      */
  1884. X/* writes it cleaning up all ugly characters.                                 */
  1885. p_scls_t p_scls;
  1886. X{
  1887. X ls_fir(p_scls);
  1888. X while (TRUE)
  1889. X   {
  1890. X    p_sc_t p_sc;
  1891. X    ls_nxt(p_scls,PPV &p_sc);
  1892. X    if (p_sc==NULL) break;
  1893. X    wv_ugsc(p_sc);
  1894. X   }
  1895. X}
  1896. X
  1897. X/******************************************************************************/
  1898. X
  1899. LOCAL void wv_manm P_((p_ma_t,ulong));
  1900. LOCAL void wv_manm(p_ma,part)
  1901. X/* This function writes the specified macro name and number. */
  1902. X/* The part number is the part to write out.                 */
  1903. p_ma_t p_ma;
  1904. ulong part;
  1905. X{
  1906. X p_bp_t p_bp;
  1907. X
  1908. X if (p_ma->ma_defn.md_isfil)
  1909. X    wf_wr(&f_t,"\\fwfilename{");
  1910. X else
  1911. X    wf_wr(&f_t,"\\fwmacroname{");
  1912. X wv_ugstr(p_ma->ma_name);
  1913. X wf_wr(&f_t,"}{");
  1914. X ls_loo(p_ma->ma_defn.md_body,part,PPV &p_bp);
  1915. X wf_dec(&f_t,(ulong) p_bp->bp_seq);
  1916. X wf_wr(&f_t,"}");
  1917. X}
  1918. X
  1919. X/******************************************************************************/
  1920. X
  1921. LOCAL void wv_secnn P_((p_ty_t));
  1922. LOCAL void wv_secnn(p_ty)
  1923. X/* Write out the section number and name, each in curly braces. */
  1924. p_ty_t p_ty;
  1925. X{
  1926. X /* Write as arguments the section number and name. */
  1927. X wf_chr(&f_t,'{');
  1928. X sn_str(&p_ty->ty_sn,linet1);
  1929. X wf_wr(&f_t,linet1);
  1930. X wf_wr(&f_t,"}{");
  1931. X wv_ugstr(p_ty->ty_name);
  1932. X wf_chr(&f_t,'}');
  1933. X}
  1934. X
  1935. X/******************************************************************************/
  1936. X
  1937. LOCAL void wv_echo P_((p_scls_t));
  1938. LOCAL void wv_echo(p_scls)
  1939. X/* This function writes the specified text list to the output stream. It      */
  1940. X/* writes it just as it is, with no modifications whatsoever.                 */
  1941. p_scls_t p_scls;
  1942. X{
  1943. X ls_fir(p_scls);
  1944. X while (TRUE)
  1945. X   {
  1946. X    p_sc_t p_sc;
  1947. X    ls_nxt(p_scls,PPV &p_sc);
  1948. X    if (p_sc==NULL) break;
  1949. X    wf_blk(&f_t,p_sc->sc_first,(size_t)
  1950. X   (p_sc->sc_last-p_sc->sc_first+1));
  1951. X   }
  1952. X}
  1953. X
  1954. X/******************************************************************************/
  1955. X
  1956. LOCAL void wv_verb P_((p_scls_t));
  1957. LOCAL void wv_verb(p_scls)
  1958. X/* Writes a text list verbetim, but brackets it with sequences that instruct  */
  1959. X/* the typesetter not to interpret the text in any special way.               */
  1960. p_scls_t p_scls;
  1961. X{
  1962. X if (ls_len(p_scls) > 0)
  1963. X   {
  1964. X    wf_wr(&f_t,"\\fwbtx[");
  1965. X    wv_echo(p_scls);
  1966. X    wf_wl(&f_t,"]fwetx=%");
  1967. X   }
  1968. X}
  1969. X
  1970. X/******************************************************************************/
  1971. X
  1972. LOCAL void wv_head P_((void));
  1973. LOCAL void wv_head()
  1974. X{
  1975. X wf_wl(&f_t,"");
  1976. X wf_wl(&f_t,"%*******************************************************************************");
  1977. X wf_wl(&f_t,"%*                    START OF AUTOMATICALLY GENERATED TEX FILE                *");
  1978. X wf_wl(&f_t,"%*******************************************************************************");
  1979. X wf_wl(&f_t,"%*                                                                             *");
  1980. X wf_wl(&f_t,"%* This TeX file was automatically generated by the FunnelWeb preprocessor.    *");
  1981. X wf_wl(&f_t,"%* You can typeset this file to produce printed documentation by running it    *");
  1982. X wf_wl(&f_t,"%* through the TeX typesetter using a command such as:                         *");
  1983. X wf_wl(&f_t,"%*    tex thisfilename                                                         *");
  1984. X wf_wl(&f_t,"%* The resultant file thisfilename.dvi can be printed using a command such as: *");
  1985. X wf_wl(&f_t,"%*    lpr -Pcslw -d thisfilename.dvi                                           *");
  1986. X wf_wl(&f_t,"%*                                                                             *");
  1987. X wf_wl(&f_t,"%* FunnelWeb is a preprocessor that allows programmers to weave programs and   *");
  1988. X wf_wl(&f_t,"%* their documentation together in a single document. The FunnelWeb program    *");
  1989. X wf_wl(&f_t,"%* analyses such documents producing both program files and typeset            *");
  1990. X wf_wl(&f_t,"%* documentation such as this TeX file.                                        *");
  1991. X wf_wl(&f_t,"%* FunnelWeb was created by Ross Williams.                                     *");
  1992. X wf_wl(&f_t,"%*                                                                             *");
  1993. X wf_wl(&f_t,"%* For more information on FunnelWeb look in the following FTP archive:        *");
  1994. X wf_wl(&f_t,"%*    Machine  : sirius.itd.adelaide.edu.au [IP=129.127.40.3].                 *");
  1995. X wf_wl(&f_t,"%*    Directory: ~pub/funnelweb/                                               *");
  1996. X wf_wl(&f_t,"%*               (or some other appropriately named directory).                *");
  1997. X wf_wl(&f_t,"%* or email Ross Williams at ross@spam.adelaide.edu.au                         *");
  1998. X wf_wl(&f_t,"%*                                                                             *");
  1999. X wf_wl(&f_t,"%*******************************************************************************");
  2000. X wf_wl(&f_t,"");
  2001. X wf_wl(&f_t,"");
  2002. X}
  2003. X
  2004. X/******************************************************************************/
  2005. X
  2006. LOCAL void wv_tail P_((void));
  2007. LOCAL void wv_tail()
  2008. X{
  2009. X wf_wl(&f_t,"");
  2010. X wf_wl(&f_t,"");
  2011. X wf_wl(&f_t,"%*******************************************************************************");
  2012. X wf_wl(&f_t,"%*                    END OF AUTOMATICALLY GENERATED TEX FILE                  *");
  2013. X wf_wl(&f_t,"%*******************************************************************************");
  2014. X wf_wl(&f_t,"");
  2015. X}
  2016. X
  2017. X/******************************************************************************/
  2018. X
  2019. LOCAL void wv_nsec P_((p_ty_t));
  2020. LOCAL void wv_nsec(p_ty)
  2021. X/* Weaves the start of a new section. */
  2022. p_ty_t p_ty;
  2023. X{
  2024. X as_cold(p_ty->ty_kind==TY_NSEC,"wv_nsec: Not a section!");
  2025. X
  2026. X /* Work out what kind of section macro should be used. */
  2027. X switch (sn_lev(&p_ty->ty_sn))
  2028. X   {
  2029. X    case 1: wf_wr(&f_t,"\\fwseca"); break;
  2030. X    case 2: wf_wr(&f_t,"\\fwsecb"); break;
  2031. X    case 3: wf_wr(&f_t,"\\fwsecc"); break;
  2032. X    case 4: wf_wr(&f_t,"\\fwsecd"); break;
  2033. X    case 5: wf_wr(&f_t,"\\fwsece"); break;
  2034. X    default: as_bomb("wv_nsec:case defaulted.");
  2035. X   }
  2036. X
  2037. X /* Write out the section number and name. */
  2038. X wv_secnn(p_ty);
  2039. X}
  2040. X
  2041. X/******************************************************************************/
  2042. X
  2043. LOCAL void wv_olit P_((p_ty_t));
  2044. LOCAL void wv_olit(p_ty)
  2045. p_ty_t p_ty;
  2046. X{
  2047. X as_cold(p_ty->ty_kind==TY_OLIT,"wv_olit: Not an open literal!");
  2048. X wf_wr(&f_t,"\\fwlit{");
  2049. X literal=TRUE;
  2050. X}
  2051. X
  2052. X/******************************************************************************/
  2053. X
  2054. LOCAL void wv_clit P_((p_ty_t));
  2055. LOCAL void wv_clit(p_ty)
  2056. p_ty_t p_ty;
  2057. X{
  2058. X as_cold(p_ty->ty_kind==TY_CLIT,"wv_clit: Not a close literal!");
  2059. X wf_wr(&f_t,"}");
  2060. X literal=FALSE;
  2061. X}
  2062. X
  2063. X/******************************************************************************/
  2064. X
  2065. LOCAL void wv_oemp P_((p_ty_t));
  2066. LOCAL void wv_oemp(p_ty)
  2067. p_ty_t p_ty;
  2068. X{
  2069. X as_cold(p_ty->ty_kind==TY_OEMP,"wv_oemp: Not an open emphasize!");
  2070. X wf_wr(&f_t,"\\fwemp{");
  2071. X}
  2072. X
  2073. X/******************************************************************************/
  2074. X
  2075. LOCAL void wv_cemp P_((p_ty_t));
  2076. LOCAL void wv_cemp(p_ty)
  2077. p_ty_t p_ty;
  2078. X{
  2079. X as_cold(p_ty->ty_kind==TY_CEMP,"wv_cemp: Not a close emphasize!");
  2080. X wf_wr(&f_t,"}");
  2081. X}
  2082. X
  2083. X/******************************************************************************/
  2084. X
  2085. LOCAL void wv_npag P_((p_ty_t));
  2086. LOCAL void wv_npag(p_ty)
  2087. p_ty_t p_ty;
  2088. X{
  2089. X as_cold(p_ty->ty_kind==TY_NPAG,"wv_npag: Not a new page!");
  2090. X wf_wl(&f_t,"");
  2091. X wf_wl(&f_t,"\\fwnewpage");
  2092. X wf_wl(&f_t,"");
  2093. X}
  2094. X
  2095. X/******************************************************************************/
  2096. X
  2097. LOCAL void wv_tocs P_((p_ty_t));
  2098. LOCAL void wv_tocs(p_ty)
  2099. X/* Writes a table of contents to the weave output file. */
  2100. p_ty_t p_ty;
  2101. X{
  2102. X /* We need to save the document list position as the rest of the weaver is   */
  2103. X /* in the process of traversing it!!!                                        */
  2104. X p_void p_mark = ls_mar(document_list);
  2105. X
  2106. X as_cold(p_ty->ty_kind==TY_TOCS,"wv_tocs: Not a table of contents!");
  2107. X
  2108. X wf_wl(&f_t,"");
  2109. X wf_wl(&f_t,"\\fwtocstart{}");
  2110. X ls_fir(document_list);
  2111. X while (TRUE)
  2112. X   {
  2113. X    p_dc_t p_dc;
  2114. X    ls_nxt(document_list,PPV &p_dc);
  2115. X    if (p_dc == NULL) break;
  2116. X    if (p_dc->dc_kind==DC_TYPE && p_dc->dc_ty.ty_kind==TY_NSEC)
  2117. X      {
  2118. X       switch(sn_lev(&p_dc->dc_ty.ty_sn))
  2119. X         {
  2120. X          case 1: wf_wr(&f_t,"\\fwtoca"); break;
  2121. X          case 2: wf_wr(&f_t,"\\fwtocb"); break;
  2122. X          case 3: wf_wr(&f_t,"\\fwtocc"); break;
  2123. X          case 4: wf_wr(&f_t,"\\fwtocd"); break;
  2124. X          case 5: wf_wr(&f_t,"\\fwtoce"); break;
  2125. X          default: as_bomb("wv_toc: switch defaulted.");
  2126. X         }
  2127. X       wv_secnn(&p_dc->dc_ty);
  2128. X       wf_wl(&f_t,"");
  2129. X      }
  2130. X   }
  2131. X wf_wl(&f_t,"\\fwtocfinish{}");
  2132. X wf_wl(&f_t,"");
  2133. X
  2134. X /* Restore the document list position. */
  2135. X ls_set(document_list,p_mark);
  2136. X}
  2137. X
  2138. X/******************************************************************************/
  2139. X
  2140. LOCAL void wv_skip P_((p_ty_t));
  2141. LOCAL void wv_skip(p_ty)
  2142. X/* Writes a vertical space to the output file. */
  2143. p_ty_t p_ty;
  2144. X{
  2145. X as_cold(p_ty->ty_kind==TY_SKIP,"wv_skip: Not a skip directive!");
  2146. X
  2147. X sprintf(linet1,"\\fwvskip{%lu}",(ulong) p_ty->ty_mm);
  2148. X wf_wl(&f_t,linet1);
  2149. X}
  2150. X
  2151. X/******************************************************************************/
  2152. X
  2153. LOCAL void wv_titl P_((p_ty_t));
  2154. LOCAL void wv_titl(p_ty)
  2155. X/* Writes a title line to the output file. */
  2156. p_ty_t p_ty;
  2157. X{
  2158. X as_cold(p_ty->ty_kind==TY_TITL,"wv_titl: Not a title!");
  2159. X
  2160. X switch(p_ty->ty_align)
  2161. X   {
  2162. X    case LR_LEFT: wf_wr(&f_t,"\\fwleftline{");   break;
  2163. X    case LR_RIGH: wf_wr(&f_t,"\\fwrightline{");  break;
  2164. X    case LR_CENT: wf_wr(&f_t,"\\fwcenterline{"); break;
  2165. X    default: as_bomb("wv_title: Alignment switch defaulted.");
  2166. X   }
  2167. X switch(p_ty->ty_font)
  2168. X   {
  2169. X    case FT_NORM: wf_wr(&f_t,"\\fwfontnormal{");     break;
  2170. X    case FT_TITL: wf_wr(&f_t,"\\fwfonttitle{");      break;
  2171. X    case FT_STIT: wf_wr(&f_t,"\\fwfontsmalltitle{"); break;
  2172. X    default: as_bomb("wv_title: Font switch defaulted.");
  2173. X   }
  2174. X wv_ugsc(&p_ty->ty_sc);
  2175. X wf_wl(&f_t,"}}");
  2176. X}
  2177. X
  2178. X/******************************************************************************/
  2179. X
  2180. LOCAL void wv_dcty P_((p_dc_t));
  2181. LOCAL void wv_dcty(p_dc)
  2182. X/* Weaves a document typesetter element. */
  2183. p_dc_t p_dc;
  2184. X{
  2185. X p_ty_t p_ty = &p_dc->dc_ty;
  2186. X
  2187. X as_cold(p_dc->dc_kind==DC_TYPE,"wv_dcty: Not a typesetter component!");
  2188. X
  2189. X switch (p_ty->ty_kind)
  2190. X   {
  2191. X    case TY_NSEC: wv_nsec(p_ty); break;
  2192. X    case TY_OLIT: wv_olit(p_ty); break;
  2193. X    case TY_CLIT: wv_clit(p_ty); break;
  2194. X    case TY_OEMP: wv_oemp(p_ty); break;
  2195. X    case TY_CEMP: wv_cemp(p_ty); break;
  2196. X    case TY_NPAG: wv_npag(p_ty); break;
  2197. X    case TY_TOCS: wv_tocs(p_ty); break;
  2198. X    case TY_SKIP: wv_skip(p_ty); break;
  2199. X    case TY_TITL: wv_titl(p_ty); break;
  2200. X    default     : as_bomb("wv_dcty: Switch defaulted.");
  2201. X   }
  2202. X}
  2203. X
  2204. X/******************************************************************************/
  2205. X
  2206. LOCAL void wv_dctx P_((p_dc_t));
  2207. LOCAL void wv_dctx(p_dc)
  2208. X/* Write out a document text item. */
  2209. p_dc_t p_dc;
  2210. X{
  2211. X as_cold(p_dc->dc_kind==DC_TEXT,"wv_dctx: Not text.");
  2212. X
  2213. X if (literal || tr_codes==TR_NONE)
  2214. X    wv_ugscls(p_dc->dc_text);
  2215. X else
  2216. X    wv_echo(p_dc->dc_text);
  2217. X}
  2218. X
  2219. X/******************************************************************************/
  2220. X
  2221. LOCAL void wv_eltx P_((p_el_t));
  2222. LOCAL void wv_eltx(p_el)
  2223. X/* Weaves a text element. */
  2224. p_el_t p_el;
  2225. X{
  2226. X as_cold(p_el->el_kind==EL_TEXT,"wv_eltx: Not text.");
  2227. X wv_verb(p_el->el_text);
  2228. X}
  2229. X
  2230. X/******************************************************************************/
  2231. X
  2232. LOCAL void wv_elin P_((p_el_t));
  2233. LOCAL void wv_elin(p_el)
  2234. X/* Weaves a invocation element. */
  2235. p_el_t p_el;
  2236. X{
  2237. X as_cold(p_el->el_kind==EL_INVC,"wv_elin: Not an invocation.");
  2238. X
  2239. X /* Write out the macro call proper. */
  2240. X wv_manm(p_el->el_p_mac,1L);
  2241. X
  2242. X /* Write out the actual parameter list, if any. */
  2243. X if (ls_len(p_el->el_parls) > 0)
  2244. X   {
  2245. X    ulong    parnum;
  2246. X    wf_wr(&f_t,"\\fwoparen ");
  2247. X    ls_fir(p_el->el_parls);  /* List of actual parameter expressions. */
  2248. X    ls_fir(p_el->el_pretx);  /* List of crud before each expression.  */
  2249. X    ls_fir(p_el->el_postx);  /* List of crud after  each expression.  */
  2250. X    parnum=1;
  2251. X    while (TRUE)
  2252. X      {
  2253. X       p_ells_t *pp_exp;
  2254. X       p_scls_t *pp_scls1;
  2255. X       p_scls_t *pp_scls2;
  2256. X       ls_nxt(p_el->el_parls,PPV &pp_exp);
  2257. X       ls_nxt(p_el->el_pretx,PPV &pp_scls1);
  2258. X       ls_nxt(p_el->el_postx,PPV &pp_scls2);
  2259. X       if (pp_exp==NULL) break;
  2260. X       if (parnum++>1) wf_wr(&f_t,"\\fwcomma ");
  2261. X       wv_verb(*pp_scls1);
  2262. X       wf_wr(&f_t,"\\fwoquote"); wv_ex(*pp_exp); wf_wr(&f_t,"\\fwcquote");
  2263. X       wv_verb(*pp_scls2);
  2264. X      }
  2265. X    wf_wr(&f_t,"\\fwcparen ");
  2266. X   }
  2267. X}
  2268. X
  2269. X/******************************************************************************/
  2270. X
  2271. LOCAL void wv_elpr P_((p_el_t));
  2272. LOCAL void wv_elpr(p_el)
  2273. X/* Weaves a parameter element. */
  2274. p_el_t p_el;
  2275. X{
  2276. X as_cold(p_el->el_kind==EL_PARM,"wv_elpr: Not a parameter.");
  2277. X wf_wr (&f_t,"\\fwparam{");
  2278. X wf_dec(&f_t,(ulong) p_el->el_parno);
  2279. X wf_wr (&f_t,"}");
  2280. X}
  2281. X
  2282. X
  2283. X/******************************************************************************/
  2284. X
  2285. LOCAL void wv_ex(p_exp)
  2286. X/* Weaves a expression. */
  2287. p_ells_t p_exp;
  2288. X{
  2289. X
  2290. X ls_fir(p_exp);
  2291. X while (TRUE)
  2292. X   {
  2293. X    p_el_t p_el;
  2294. X    ls_nxt(p_exp,PPV &p_el);
  2295. X    if (p_el==NULL) break;
  2296. X    switch (p_el->el_kind)
  2297. X      {
  2298. X       case EL_TEXT: wv_eltx(p_el); break;
  2299. X       case EL_INVC: wv_elin(p_el); break;
  2300. X       case EL_PARM: wv_elpr(p_el); break;
  2301. X       default: as_bomb("wv_ex: Case defaulted.");
  2302. X      }
  2303. X   }
  2304. X}
  2305. X
  2306. X/******************************************************************************/
  2307. X
  2308. LOCAL void wv_usage P_((p_ma_t));
  2309. LOCAL void wv_usage(p_ma)
  2310. X/* Weaves a list of all the sections in which the specified macro is used. */
  2311. p_ma_t p_ma;
  2312. X{
  2313. X ulong  no_calls = ls_len(p_ma->ma_calls);
  2314. X ulong  callno;
  2315. X
  2316. X /* If it is a file macro then it is not allowed to be called. */
  2317. X if (p_ma->ma_defn.md_isfil)
  2318. X   {
  2319. X    wf_wl(&f_t,"\\fwisafile{This macro is attached to an output file.}");
  2320. X    return;
  2321. X   }
  2322. X
  2323. X if (no_calls==0)
  2324. X   {
  2325. X    wf_wl(&f_t,"\\fwusedin{This macro is NEVER invoked.}");
  2326. X    return;
  2327. X   }
  2328. X
  2329. X wf_wr(&f_t,"\\fwusedin{This macro is invoked in definition");
  2330. X if (no_calls>1) wf_chr(&f_t,'s');
  2331. X wf_chr(&f_t,' ');
  2332. X ls_fir(p_ma->ma_calls);
  2333. X for (callno=1;callno<=no_calls;callno++)
  2334. X   {
  2335. X    p_mc_t p_mc;
  2336. X    ls_nxt(p_ma->ma_calls,PPV &p_mc); as_cold(p_mc!=NULL,"wv_usage: Awk!");
  2337. X    wf_dec(&f_t,(ulong) p_mc->mc_seq);
  2338. X    if (callno < no_calls-1)
  2339. X       wf_wr(&f_t,", ");
  2340. X    else
  2341. X       if (callno==no_calls-1)
  2342. X          if (no_calls>2)
  2343. X             wf_wr(&f_t,", and ");
  2344. X          else
  2345. X             wf_wr(&f_t," and ");
  2346. X   }
  2347. X wf_wl(&f_t,".}");
  2348. X}
  2349. X
  2350. X/******************************************************************************/
  2351. X
  2352. LOCAL void wv_defin P_((p_ma_t));
  2353. LOCAL void wv_defin(p_ma)
  2354. X/* Just after each macro body part definition comes a note listing the        */
  2355. X/* containing the macro's body parts. This function weaves that list.         */
  2356. p_ma_t p_ma;
  2357. X{
  2358. X ulong  no_parts = ls_len(p_ma->ma_defn.md_body);
  2359. X ulong  partno;
  2360. X
  2361. X /* If it's not an additive macro, we don't write anything. */
  2362. X if (!p_ma->ma_defn.md_isadd) return;
  2363. X
  2364. X wf_wr(&f_t,"\\fwseealso{This macro is defined in definitions ");
  2365. X ls_fir(p_ma->ma_defn.md_body);
  2366. X for (partno=1;partno<=no_parts;partno++)
  2367. X   {
  2368. X    p_bp_t p_bp;
  2369. X    ls_nxt(p_ma->ma_defn.md_body,PPV &p_bp);
  2370. X    as_cold(p_bp!=NULL,"wv_defin: Awk!");
  2371. X    wf_dec(&f_t,(ulong) p_bp->bp_seq);
  2372. X    if (partno<no_parts-1)
  2373. X       wf_wr(&f_t,", ");
  2374. X    else
  2375. X       if (partno==no_parts-1)
  2376. X          if (no_parts>2)
  2377. X             wf_wr(&f_t,", and ");
  2378. X          else
  2379. X             wf_wr(&f_t," and ");
  2380. X   }
  2381. X wf_wl(&f_t,".}");
  2382. X}
  2383. X
  2384. X/******************************************************************************/
  2385. X
  2386. LOCAL void wv_dcma P_((p_dc_t));
  2387. LOCAL void wv_dcma(p_dc)
  2388. X/* Weaves a macro definition. */
  2389. p_dc_t p_dc;
  2390. X{
  2391. X p_bp_t p_bp;
  2392. X
  2393. X /* Macro calls sandwich the definition itsef. */
  2394. X wf_wl(&f_t,"\\fwbeginmacro");
  2395. X
  2396. X /* Write out the macro's name. */
  2397. X wv_manm(p_dc->dc_p_ma,p_dc->dc_part);
  2398. X
  2399. X /* Write the formal parameter list. */
  2400. X if (p_dc->dc_p_ma->ma_defn.md_npar>0)
  2401. X   {
  2402. X    wf_wr(&f_t,"\\fwparams{");
  2403. X    wf_dec(&f_t,(ulong) p_dc->dc_p_ma->ma_defn.md_npar);
  2404. X    wf_wr(&f_t,"}");
  2405. X   }
  2406. X
  2407. X /* Zero and many options are indicated by bold letters. */
  2408. X if (p_dc->dc_p_ma->ma_defn.md_iszer) wf_wr(&f_t,"\\fwzero{}");
  2409. X if (p_dc->dc_p_ma->ma_defn.md_isman) wf_wr(&f_t,"\\fwmany{}");
  2410. X
  2411. X /* Write the "equals". */
  2412. X if (p_dc->dc_p_ma->ma_defn.md_isadd)
  2413. X    wf_wr(&f_t,"\\fwplusequals ");
  2414. X else
  2415. X    wf_wr(&f_t,"\\fwequals ");
  2416. X
  2417. X /* Write out this particular body part. */
  2418. X ls_loo(p_dc->dc_p_ma->ma_defn.md_body,p_dc->dc_part,PPV &p_bp);
  2419. X wf_wr(&f_t,"\\fwodef ");
  2420. X wv_ex(p_bp->bp_ex);
  2421. X wf_wl(&f_t,"\\fwcdef ");
  2422. X
  2423. X /* After the macro definition, write out notes on the macro. */
  2424. X wf_wl(&f_t,"\\fwbeginmacronotes");
  2425. X wv_defin(p_dc->dc_p_ma);            /* A list of the macro's body parts.  */
  2426. X wv_usage(p_dc->dc_p_ma);            /* A list of where the macro is used. */
  2427. X wf_wl(&f_t,"\\fwendmacronotes");
  2428. X
  2429. X /* The macro definition is sandwiched by macro calls. */
  2430. X wf_wl(&f_t,"\\fwendmacro");
  2431. X}
  2432. X
  2433. X/******************************************************************************/
  2434. X
  2435. LOCAL void wv_dc P_((p_dc_t));
  2436. LOCAL void wv_dc(p_dc)
  2437. X/* Weaves a document component (p_dc). */
  2438. p_dc_t p_dc;
  2439. X{
  2440. X switch (p_dc->dc_kind)
  2441. X   {
  2442. X    case DC_TEXT: wv_dctx(p_dc); break;
  2443. X    case DC_TYPE: wv_dcty(p_dc); break;
  2444. X    case DC_MACR: wv_dcma(p_dc); break;
  2445. X    default     : as_bomb("wv_dc: Case defaulted.");
  2446. X   }
  2447. X}
  2448. X
  2449. X/******************************************************************************/
  2450. X
  2451. LOCAL void wv_docnt P_((void));
  2452. LOCAL void wv_docnt()
  2453. X/* Weaves the entire document. This functions and most functions above assume */
  2454. X/* that the output stream f_t is prepared for writing.                        */
  2455. X{
  2456. X /* Write the typeset header. */
  2457. X wv_head();
  2458. X
  2459. X /* Writes the library macros. */
  2460. X tex_head(&f_t);
  2461. X
  2462. X ls_fir(document_list);
  2463. X literal=FALSE;
  2464. X while (TRUE)
  2465. X   {
  2466. X    p_dc_t p_dc;
  2467. X    ls_nxt(document_list,PPV &p_dc);
  2468. X    if (p_dc == NULL) break;
  2469. X    wv_dc(p_dc);
  2470. X   }
  2471. X wf_wl(&f_t,"\\bye");
  2472. X
  2473. X /* Write the typeset trailer. */
  2474. X wv_tail();
  2475. X}
  2476. X
  2477. X/******************************************************************************/
  2478. X
  2479. XEXPORT void weave()
  2480. X/* Writes out the documentation file. */
  2481. X{
  2482. X fn_t  fn_tmp;   /* Name of temporary file.                                   */
  2483. X fn_t  fn_targ;  /* Name of documentation file.                               */
  2484. X bool  renfil;   /* Do we wish to rename output file?                         */
  2485. X bool  istarg;   /* Does a target file already exist?                         */
  2486. X
  2487. X /* Writing the documentation file differs from some other output files. With */
  2488. X /* non critical files such as the listing file that are really just logs,    */
  2489. X /* generation of half a listing file is acceptable if not desirable. However */
  2490. X /* in the case of the documentation file, it is very bad to generate half an */
  2491. X /* output file; far better to generate none at all. For this reason, and     */
  2492. X /* also because of the presence of the D option (which prevents the writing  */
  2493. X /* of output files identical to existing files (to prevent MAKE              */
  2494. X /* propagations)) it is best to write a temporary file and then rename it.   */
  2495. X
  2496. X /* We shouldn't be here if the weave option is off! */
  2497. X as_cold(option.op_t_b,"weave: option.op_t_b==FALSE!");
  2498. X
  2499. X /* Work out what the typeset file's name should be.                          */
  2500. X strcpy(fn_targ,"");              /* Start with an empty string.              */
  2501. X fn_ins(fn_targ,option.op_f_s);
  2502. X fn_ins(fn_targ,".tex");
  2503. X fn_ins(fn_targ,option.op_t_s);
  2504. X
  2505. X /* The temporary file has to inherit too, because the output directory may   */
  2506. X /* not be the default directory and some computers can't rename across       */
  2507. X /* directories (and we have to rename it later).                             */
  2508. X strcpy(fn_tmp,fn_targ);
  2509. X fn_ins(fn_tmp,fn_temp());
  2510. X
  2511. X /* Expand the macro to the temporary file. */
  2512. X wf_ini(&f_t,TRUE);
  2513. X wf_ope(&f_t,fn_tmp);
  2514. X if (wf_err(&f_t))
  2515. X   {
  2516. X    sprintf(linet1,"Error creating temporary documentation file \"%s\".",&fn_tmp[0]);
  2517. X    wl_sjl(linet1);
  2518. X    (void) remove(fn_tmp);
  2519. X    goto severe;
  2520. X   }
  2521. X
  2522. X wv_docnt();
  2523. X
  2524. X /* Make sure that there weren't any errors writing to the temporary file. */
  2525. X if (wf_err(&f_t))
  2526. X   {
  2527. X    sprintf(linet1,"Error writing to temporary documentation file \"%s\".",&fn_tmp[0]);
  2528. X    wl_sjl(linet1);
  2529. X    (void) remove(fn_tmp);
  2530. X    goto severe;
  2531. X   }
  2532. X
  2533. X /* Close the temporary file. */
  2534. X wf_clo(&f_t);
  2535. X if (wf_err(&f_t))
  2536. X   {
  2537. X    sprintf(linet1,"Error closing temporary documentation file \"%s\".",&fn_tmp[0]);
  2538. X    wl_sjl(linet1);
  2539. X    remove(fn_tmp);
  2540. X    goto severe;
  2541. X   }
  2542. X
  2543. X /* The rest of the code in this function copes with the renaming. */
  2544. X
  2545. X /* By default, we wish to rename the temporary file. */
  2546. X renfil=TRUE;
  2547. X
  2548. X /* Deal with any existing file of the target name. */
  2549. X istarg=fexists(fn_targ);
  2550. X if (istarg && option.op_d_b)
  2551. X   {
  2552. X    /* A target already exists, and the D option is on. If the target is      */
  2553. X    /* identical to the temporary, we can simply delete the temporary!        */
  2554. X    char *errstr;
  2555. X    bool  same;
  2556. X    errstr=eq_files(fn_tmp,fn_targ,&same);
  2557. X    if (errstr != NULL)
  2558. X      {
  2559. X       wl_sjl("Error comparing temporary file with previous documentation file.");
  2560. X       wl_sjl("(A comparison was attempted because the D option was turned on.)");
  2561. X       wl_sjl("Error from comparison routine was as follows (first=temp):");
  2562. X       wr_sjl("   ");wl_sjl(errstr);
  2563. X       sprintf(linet1,"Temporary file name was \"%s\".",&fn_tmp[0]);
  2564. X       wl_sjl(linet1);
  2565. X       sprintf(linet1,"Output    file name was \"%s\".",&fn_targ[0]);
  2566. X       wl_sjl(linet1);
  2567. X       wl_sjl("FunnelWeb will leave both files intact so you can look at them.");
  2568. X       goto severe;
  2569. X      }
  2570. X    /* If the two files are the same, we can simply delete the temporary. */
  2571. X    if (same)
  2572. X      {
  2573. X       int status;
  2574. X       status=remove(fn_tmp);
  2575. X       if (status != REMOVE_S)
  2576. X         {
  2577. X          sprintf(linet1,"Error deleting (under +D option) temporary file \"%s\".",&fn_tmp[0]);
  2578. X          wl_sjl(linet1);
  2579. X          goto severe;
  2580. X         }
  2581. X       sprintf(linet1,"Deleted identical documentation file \"%s\".",&fn_targ[0]);
  2582. X       wl_sjl(linet1);
  2583. X       renfil=FALSE;
  2584. X      }
  2585. X   }
  2586. X
  2587. X if (renfil)
  2588. X   {
  2589. X    int status;
  2590. X    /* We need to delete any existing file of the target name. */
  2591. X    if (istarg)
  2592. X      {
  2593. X       status=remove(fn_targ);
  2594. X       if (status != REMOVE_S)
  2595. X         {
  2596. X          sprintf(linet1,"Error deleting existing documentation file \"%s\".",&fn_targ[0]);
  2597. X          wl_sjl(linet1);
  2598. X          goto severe;
  2599. X         }
  2600. X      }
  2601. X    /* Rename the temporary file to the output file. */
  2602. X    status=rename(fn_tmp,fn_targ);
  2603. X    if (status != RENAME_S)
  2604. X      {
  2605. X       wl_sjl("Error renaming temporary documentation file to documentation file.");
  2606. X       sprintf(linet1,"Temporary file name was \"%s\".",&fn_tmp[0]);
  2607. X       wl_sjl(linet1);
  2608. X       sprintf(linet1,"Output    file name was \"%s\".",&fn_targ[0]);
  2609. X       wl_sjl(linet1);
  2610. X       wl_sjl("FunnelWeb will leave both files intact so you can look at them.");
  2611. X       goto severe;
  2612. X      }
  2613. X   }
  2614. X
  2615. X /* Tell everyone that we have written an output file. */
  2616. X sprintf(linet1,"Weave : Completed %s.",fn_nodir(&fn_targ[0]));
  2617. X wl_s(linet1);
  2618. X if (option.op_b7_b)
  2619. X    sprintf(linet1,"Weave: Completed %s.",SUPPNAME);
  2620. X wl_j(linet1);
  2621. X wl_l(linet1);
  2622. X return;
  2623. X
  2624. X /* Jump here is a nasty file error occurs. */
  2625. X severe:
  2626. X sprintf(linet1,"A problem occurred during the generation of documentation file \"%s\".",&fn_targ[0]);
  2627. X wl_sjl(linet1);
  2628. X wl_sjl("S: Aborting...");
  2629. X num_sev++;
  2630. X return;
  2631. X}
  2632. X
  2633. X/******************************************************************************/
  2634. X
  2635. END_OF_FILE
  2636. if test 31376 -ne `wc -c <'sources/weave.c'`; then
  2637.     echo shar: \"'sources/weave.c'\" unpacked with wrong size!
  2638. fi
  2639. # end of 'sources/weave.c'
  2640. fi
  2641. if test -f 'userman/u_manual.sin' -a "${1}" != "-c" ; then 
  2642.   echo shar: Will not clobber existing file \"'userman/u_manual.sin'\"
  2643. else
  2644. echo shar: Extracting \"'userman/u_manual.sin'\" \(33582 characters\)
  2645. sed "s/^X//" >'userman/u_manual.sin' <<'END_OF_FILE'
  2646. X\indexentry{+= tutorial}{26}
  2647. X\indexentry{+=}{85}
  2648. X\indexentry{2167A}{51}
  2649. X\indexentry{== tutorial}{26}
  2650. X\indexentry{==}{85}
  2651. X\indexentry{@!}{37}
  2652. X\indexentry{@!}{75}
  2653. X\indexentry{@"}{29}
  2654. X\indexentry{@(}{29}
  2655. X\indexentry{@)}{29}
  2656. X\indexentry{@+}{20}
  2657. X\indexentry{@+}{76}
  2658. X\indexentry{@,}{29}
  2659. X\indexentry{@-}{23}
  2660. X\indexentry{@-}{77}
  2661. X\indexentry{@1...}{28}
  2662. X\indexentry{@1...}{86}
  2663. X\indexentry{@<}{20}
  2664. X\indexentry{@=}{20}
  2665. X\indexentry{@>}{20}
  2666. X\indexentry{@A...}{34}
  2667. X\indexentry{@braces}{20}
  2668. X\indexentry{@braces}{37}
  2669. X\indexentry{@circumflex}{74}
  2670. X\indexentry{@dollar}{22}
  2671. X\indexentry{@hash}{76}
  2672. X\indexentry{@i}{30}
  2673. X\indexentry{@i}{77}
  2674. X\indexentry{@M tutorial}{24}
  2675. X\indexentry{@M}{85}
  2676. X\indexentry{@O}{20}
  2677. X\indexentry{@O}{22}
  2678. X\indexentry{@slash}{37}
  2679. X\indexentry{@Z tutorial}{24}
  2680. X\indexentry{@Z}{85}
  2681. X\indexentry{absent command}{93}
  2682. X\indexentry{abstract data type}{55}
  2683. X\indexentry{abstraction code}{56}
  2684. X\indexentry{abstraction data}{26}
  2685. X\indexentry{abstraction set}{59}
  2686. X\indexentry{abuse comments}{57}
  2687. X\indexentry{access random}{50}
  2688. X\indexentry{acknowledgements}{11}
  2689. X\indexentry{action execution order}{71}
  2690. X\indexentry{Action options}{70}
  2691. X\indexentry{actual parameters}{29}
  2692. X\indexentry{Ada}{11}
  2693. X\indexentry{Ada}{44}
  2694. X\indexentry{Ada}{49}
  2695. X\indexentry{Ada}{51}
  2696. X\indexentry{Ada}{55}
  2697. X\indexentry{additive macros}{26}
  2698. X\indexentry{additive macro}{26}
  2699. X\indexentry{additively defined}{85}
  2700. X\indexentry{Adelaide University}{59}
  2701. X\indexentry{admin directory}{102}
  2702. X\indexentry{administration FunnelWeb}{109}
  2703. X\indexentry{ADT}{55}
  2704. X\indexentry{alias}{49}
  2705. X\indexentry{Analyser}{115}
  2706. X\indexentry{analyser}{65}
  2707. X\indexentry{analyser}{88}
  2708. X\indexentry{analysis static}{88}
  2709. X\indexentry{Andrew Trevorrow}{13}
  2710. X\indexentry{animal poem}{30}
  2711. X\indexentry{annual report}{58}
  2712. X\indexentry{anonymous ftp}{101}
  2713. X\indexentry{ANSI}{109}
  2714. X\indexentry{ANSI}{117}
  2715. X\indexentry{answers correct}{102}
  2716. X\indexentry{answers directory}{102}
  2717. X\indexentry{ANZE}{117}
  2718. X\indexentry{ANZE}{19}
  2719. X\indexentry{applications FunnelWeb}{53}
  2720. X\indexentry{arbitrary characters inserting into text}{74}
  2721. X\indexentry{architecture semantic}{64}
  2722. X\indexentry{archive ftp}{114}
  2723. X\indexentry{archive FunnelWeb}{114}
  2724. X\indexentry{argument command line}{67}
  2725. X\indexentry{arguments}{67}
  2726. X\indexentry{Argument}{115}
  2727. X\indexentry{assertion severity}{65}
  2728. X\indexentry{assertion status}{90}
  2729. X\indexentry{Atrax robustus}{19}
  2730. X\indexentry{attributes macro}{85}
  2731. X\indexentry{author contacting}{114}
  2732. X\indexentry{B option}{68}
  2733. X\indexentry{Barry Dwyer}{11}
  2734. X\indexentry{Barry Dwyer}{59}
  2735. X\indexentry{Barry Humphries}{19}
  2736. X\indexentry{BASIC}{57}
  2737. X\indexentry{Begg Jeremy}{11}
  2738. X\indexentry{binding problems}{57}
  2739. X\indexentry{bindings macro}{22}
  2740. X\indexentry{blank indentation}{78}
  2741. X\indexentry{blank indentation}{78}
  2742. X\indexentry{blanks trailing}{42}
  2743. X\indexentry{boring organization}{50}
  2744. X\indexentry{Brissenden Roger}{11}
  2745. X\indexentry{BSI82}{117}
  2746. X\indexentry{BSI82}{15}
  2747. X\indexentry{BSI82}{18}
  2748. X\indexentry{C header}{57}
  2749. X\indexentry{C option}{68}
  2750. X\indexentry{C preprocessor}{20}
  2751. X\indexentry{C preprocessor}{57}
  2752. X\indexentry{calls macro}{86}
  2753. X\indexentry{calls number}{23}
  2754. X\indexentry{camera poem}{30}
  2755. X\indexentry{case dependence}{67}
  2756. X\indexentry{changing special character}{31}
  2757. X\indexentry{characters control}{42}
  2758. X\indexentry{characters non-printable}{96}
  2759. X\indexentry{characters unprintable}{71}
  2760. X\indexentry{checks macro}{88}
  2761. X\indexentry{cheer hacker's}{35}
  2762. X\indexentry{cheer programmer's}{35}
  2763. X\indexentry{code abstraction}{56}
  2764. X\indexentry{code explaining}{17}
  2765. X\indexentry{code gardening}{53}
  2766. X\indexentry{code vs documentation}{32}
  2767. X\indexentry{codify command}{93}
  2768. X\indexentry{command absent}{93}
  2769. X\indexentry{command codify}{93}
  2770. X\indexentry{command compare}{93}
  2771. X\indexentry{command define}{91}
  2772. X\indexentry{command define}{94}
  2773. X\indexentry{command diffsummary}{95}
  2774. X\indexentry{command diffzero}{95}
  2775. X\indexentry{command diff}{94}
  2776. X\indexentry{command eneo}{95}
  2777. X\indexentry{command execute}{96}
  2778. X\indexentry{command exists}{96}
  2779. X\indexentry{command fixeols}{96}
  2780. X\indexentry{command fw}{97}
  2781. X\indexentry{command help}{97}
  2782. X\indexentry{command here}{98}
  2783. X\indexentry{command interpreter}{47}
  2784. X\indexentry{command length}{91}
  2785. X\indexentry{command line argument}{67}
  2786. X\indexentry{command line interface}{66}
  2787. X\indexentry{command line options syntax}{67}
  2788. X\indexentry{command line parsing}{66}
  2789. X\indexentry{command line processing}{66}
  2790. X\indexentry{command line processing}{92}
  2791. X\indexentry{command line syntax}{67}
  2792. X\indexentry{command options}{92}
  2793. X\indexentry{command quit}{98}
  2794. X\indexentry{command set}{48}
  2795. X\indexentry{command set}{98}
  2796. X\indexentry{command shell FunnelWeb}{90}
  2797. X\indexentry{command show}{48}
  2798. X\indexentry{command show}{98}
  2799. X\indexentry{command skipto}{98}
  2800. X\indexentry{command status}{99}
  2801. X\indexentry{command tolerate}{100}
  2802. X\indexentry{command trace on}{48}
  2803. X\indexentry{command trace}{100}
  2804. X\indexentry{command verb fw}{66}
  2805. X\indexentry{command writeu}{100}
  2806. X\indexentry{command write}{100}
  2807. X\indexentry{commands FunnelWeb}{90}
  2808. X\indexentry{commands shell}{93}
  2809. X\indexentry{commands useful}{47}
  2810. X\indexentry{comments abuse}{57}
  2811. X\indexentry{comments eliminating}{57}
  2812. X\indexentry{comments FunnelWeb}{75}
  2813. X\indexentry{comments}{37}
  2814. X\indexentry{commitment FunnelWeb}{109}
  2815. X\indexentry{compare command}{93}
  2816. X\indexentry{compilers Fortran}{42}
  2817. X\indexentry{compiling FunnelWeb}{105}
  2818. X\indexentry{complete example}{38}
  2819. X\indexentry{conditionals fudging}{44}
  2820. X\indexentry{console output suppress}{69}
  2821. X\indexentry{constructs section}{83}
  2822. X\indexentry{contacting author}{114}
  2823. X\indexentry{contents table of}{81}
  2824. X\indexentry{context infinite}{68}
  2825. X\indexentry{context listing file}{68}
  2826. X\indexentry{context}{69}
  2827. X\indexentry{control characters inserting into text}{74}
  2828. X\indexentry{control characters}{42}
  2829. X\indexentry{controllability}{18}
  2830. X\indexentry{copyright FunnelWeb}{112}
  2831. X\indexentry{copyright notice}{1}
  2832. X\indexentry{correct answers}{102}
  2833. X\indexentry{cross reference numbering}{89}
  2834. X\indexentry{cross referencing}{17}
  2835. X\indexentry{cross referencing}{89}
  2836. X\indexentry{cryptic text files}{55}
  2837. X\indexentry{D option}{49}
  2838. X\indexentry{D option}{68}
  2839. X\indexentry{dangers FunnelWeb}{50}
  2840. X\indexentry{data abstraction}{26}
  2841. X\indexentry{David Hulse}{11}
  2842. X\indexentry{debugger}{53}
  2843. X\indexentry{debugging wholistic}{53}
  2844. X\indexentry{default options}{49}
  2845. X\indexentry{default options}{92}
  2846. X\indexentry{default special character}{72}
  2847. X\indexentry{define command}{91}
  2848. X\indexentry{define command}{94}
  2849. X\indexentry{definition FunnelWeb}{63}
  2850. X\indexentry{definition macro}{85}
  2851. X\indexentry{definition macro}{87}
  2852. X\indexentry{delete output files}{49}
  2853. X\indexentry{delete output option}{68}
  2854. X\indexentry{delimiting macro parameter}{87}
  2855. X\indexentry{dependence case}{67}
  2856. X\indexentry{dependencies file}{49}
  2857. X\indexentry{development time}{17}
  2858. X\indexentry{diagnostics levels of}{65}
  2859. X\indexentry{diagnostics}{65}
  2860. X\indexentry{dictionary hacker's}{35}
  2861. X\indexentry{diff command}{94}
  2862. X\indexentry{differences file}{94}
  2863. X\indexentry{diffsummary command}{95}
  2864. X\indexentry{diffzero command}{95}
  2865. X\indexentry{directive emphasis}{85}
  2866. X\indexentry{directive literal}{84}
  2867. X\indexentry{directive newpage}{37}
  2868. X\indexentry{directive table of contents}{37}
  2869. X\indexentry{directive title}{37}
  2870. X\indexentry{directive vskip}{37}
  2871. X\indexentry{directives typesetter}{81}
  2872. X\indexentry{directives}{32}
  2873. X\indexentry{directives}{83}
  2874. X\indexentry{Directive}{115}
  2875. X\indexentry{directory admin}{102}
  2876. X\indexentry{directory answers}{102}
  2877. X\indexentry{directory hackman}{103}
  2878. X\indexentry{directory results}{103}
  2879. X\indexentry{directory scripts}{103}
  2880. X\indexentry{directory sources}{103}
  2881. X\indexentry{directory tests}{104}
  2882. X\indexentry{directory tree}{102}
  2883. X\indexentry{directory userman}{105}
  2884. X\indexentry{directory}{70}
  2885. X\indexentry{Distribution FunnelWeb}{113}
  2886. X\indexentry{document list dump}{68}
  2887. X\indexentry{document list}{64}
  2888. X\indexentry{documentation duplicate}{51}
  2889. X\indexentry{documentation examples}{58}
  2890. X\indexentry{Documentation file}{115}
  2891. X\indexentry{documentation file}{18}
  2892. X\indexentry{documentation FunnelWeb}{110}
  2893. X\indexentry{documentation interdependent}{50}
  2894. X\indexentry{documentation over}{51}
  2895. X\indexentry{documentation pavlov}{51}
  2896. X\indexentry{documentation vs code}{32}
  2897. X\indexentry{Documentation}{115}
  2898. X\indexentry{documentation}{64}
  2899. X\indexentry{DOD83}{55}
  2900. X\indexentry{Donald Knuth}{11}
  2901. X\indexentry{Donald Knuth}{50}
  2902. X\indexentry{Donald Knuth}{9}
  2903. X\indexentry{dump document list}{68}
  2904. X\indexentry{dump global line list}{68}
  2905. X\indexentry{dump macro table}{68}
  2906. X\indexentry{dump mapped file}{68}
  2907. X\indexentry{dump option}{68}
  2908. X\indexentry{dump times}{68}
  2909. X\indexentry{dump token list}{68}
  2910. X\indexentry{duplicate documentation}{51}
  2911. X\indexentry{Dwyer Barry}{11}
  2912. X\indexentry{Dwyer Barry}{59}
  2913. X\indexentry{EBNF syntax}{63}
  2914. X\indexentry{editors text}{42}
  2915. X\indexentry{Edna Everage}{19}
  2916. X\indexentry{efficiency FunnelWeb}{47}
  2917. X\indexentry{efficiency notes}{47}
  2918. X\indexentry{eliminating comments}{57}
  2919. X\indexentry{emphasis construct}{37}
  2920. X\indexentry{emphasis directive}{85}
  2921. X\indexentry{empty name}{42}
  2922. X\indexentry{end-of-line fiddling with}{43}
  2923. X\indexentry{eneo command}{95}
  2924. X\indexentry{EOL fiddling with}{43}
  2925. X\indexentry{EOL markers inserting}{76}
  2926. X\indexentry{EOL markers suppressing}{77}
  2927. X\indexentry{EOL suppression}{23}
  2928. X\indexentry{error severity}{65}
  2929. X\indexentry{error status}{90}
  2930. X\indexentry{errors shell}{90}
  2931. X\indexentry{Everage Edna}{19}
  2932. X\indexentry{example applications FunnelWeb}{53}
  2933. X\indexentry{example complete}{38}
  2934. X\indexentry{example filename inheritance}{70}
  2935. X\indexentry{Example FunnelWeb}{38}
  2936. X\indexentry{examples documentation}{58}
  2937. X\indexentry{executable FunnelWeb}{106}
  2938. X\indexentry{execute command}{96}
  2939. X\indexentry{execute script option}{69}
  2940. X\indexentry{execution phases}{64}
  2941. X\indexentry{exists command}{96}
  2942. X\indexentry{expansion macro}{30}
  2943. X\indexentry{expansion macro}{47}
  2944. X\indexentry{expansion macro}{87}
  2945. X\indexentry{explaining code}{17}
  2946. X\indexentry{expressions macro}{86}
  2947. X\indexentry{expression}{85}
  2948. X\indexentry{extension}{70}
  2949. X\indexentry{F option}{68}
  2950. X\indexentry{fatal severity}{65}
  2951. X\indexentry{fatal status}{90}
  2952. X\indexentry{fiddling with end-of-line}{43}
  2953. X\indexentry{fiddling with EOL}{43}
  2954. X\indexentry{fields filename}{70}
  2955. X\indexentry{file dependencies}{49}
  2956. X\indexentry{file differences}{94}
  2957. X\indexentry{file include}{69}
  2958. X\indexentry{file journal}{69}
  2959. X\indexentry{file listing}{69}
  2960. X\indexentry{file suppression}{49}
  2961. X\indexentry{file termination}{71}
  2962. X\indexentry{file typeset}{69}
  2963. X\indexentry{filename fields}{70}
  2964. X\indexentry{filename inheritance example}{70}
  2965. X\indexentry{filename inheritance}{70}
  2966. X\indexentry{files header}{57}
  2967. X\indexentry{files include}{30}
  2968. X\indexentry{files include}{77}
  2969. X\indexentry{files input}{47}
  2970. X\indexentry{fixeols command}{96}
  2971. X\indexentry{font size}{46}
  2972. X\indexentry{formal parameter lists}{86}
  2973. X\indexentry{formal parameters}{28}
  2974. X\indexentry{formal parameters}{28}
  2975. X\indexentry{formal parameters}{87}
  2976. X\indexentry{Fortran compilers}{42}
  2977. X\indexentry{Free text}{115}
  2978. X\indexentry{free text}{32}
  2979. X\indexentry{Free text}{83}
  2980. X\indexentry{free text}{83}
  2981. X\indexentry{freestanding typesetter directives}{83}
  2982. X\indexentry{freestanding}{81}
  2983. X\indexentry{ftp anonymous}{101}
  2984. X\indexentry{ftp archive}{114}
  2985. X\indexentry{fudging conditionals}{44}
  2986. X\indexentry{fudging generics}{59}
  2987. X\indexentry{functions small}{56}
  2988. X\indexentry{Funnel-web spider}{19}
  2989. X\indexentry{FunnelWeb administration}{109}
  2990. X\indexentry{FunnelWeb applications}{53}
  2991. X\indexentry{FunnelWeb archive}{114}
  2992. X\indexentry{FunnelWeb command shell}{90}
  2993. X\indexentry{FunnelWeb command shell}{90}
  2994. X\indexentry{FunnelWeb commands}{90}
  2995. X\indexentry{FunnelWeb comments}{75}
  2996. X\indexentry{FunnelWeb commitment}{109}
  2997. X\indexentry{FunnelWeb compiling}{105}
  2998. X\indexentry{FunnelWeb copyright}{112}
  2999. X\indexentry{FunnelWeb dangers}{50}
  3000. X\indexentry{FunnelWeb definition}{63}
  3001. X\indexentry{FunnelWeb Distribution}{113}
  3002. X\indexentry{FunnelWeb documentation}{110}
  3003. X\indexentry{FunnelWeb efficiency}{47}
  3004. X\indexentry{FunnelWeb example applications}{53}
  3005. X\indexentry{FunnelWeb Example}{38}
  3006. X\indexentry{FunnelWeb executable}{106}
  3007. X\indexentry{FunnelWeb file}{115}
  3008. X\indexentry{FunnelWeb file}{64}
  3009. X\indexentry{FunnelWeb hints}{41}
  3010. X\indexentry{FunnelWeb initialization}{70}
  3011. X\indexentry{FunnelWeb installation}{101}
  3012. X\indexentry{FunnelWeb installing}{106}
  3013. X\indexentry{FunnelWeb invoking}{66}
  3014. X\indexentry{FunnelWeb language}{115}
  3015. X\indexentry{FunnelWeb license}{112}
  3016. X\indexentry{FunnelWeb martinet}{42}
  3017. X\indexentry{FunnelWeb name}{19}
  3018. X\indexentry{FunnelWeb obtaining}{101}
  3019. X\indexentry{FunnelWeb overview}{18}
  3020. X\indexentry{FunnelWeb overview}{64}
  3021. X\indexentry{FunnelWeb pitfalls}{50}
  3022. X\indexentry{FunnelWeb program}{65}
  3023. X\indexentry{FunnelWeb proper}{115}
  3024. X\indexentry{FunnelWeb proper}{48}
  3025. X\indexentry{FunnelWeb proper}{65}
  3026. X\indexentry{FunnelWeb registration}{110}
  3027. X\indexentry{FunnelWeb rules}{42}
  3028. X\indexentry{FunnelWeb running}{66}
  3029. X\indexentry{FunnelWeb shell}{90}
  3030. X\indexentry{FunnelWeb startup}{70}
  3031. X\indexentry{FunnelWeb support}{110}
  3032. X\indexentry{FunnelWeb testing}{105}
  3033. X\indexentry{FunnelWeb two main aspects}{21}
  3034. X\indexentry{FunnelWeb versions}{114}
  3035. X\indexentry{FunnelWeb}{115}
  3036. X\indexentry{fw command verb}{66}
  3037. X\indexentry{fw command}{97}
  3038. X\indexentry{fwinit.fws}{49}
  3039. X\indexentry{fwinit.fws}{71}
  3040. X\indexentry{FW}{115}
  3041. X\indexentry{gardening code}{53}
  3042. X\indexentry{generics fudging}{59}
  3043. X\indexentry{generics typesafe}{61}
  3044. X\indexentry{global line list dump}{68}
  3045. X\indexentry{glossary}{115}
  3046. X\indexentry{GNU license}{112}
  3047. X\indexentry{GNU license}{18}
  3048. X\indexentry{GNU license}{9}
  3049. X\indexentry{good old days}{57}
  3050. X\indexentry{Gries81}{117}
  3051. X\indexentry{Gries81}{51}
  3052. X\indexentry{H option}{68}
  3053. X\indexentry{hacker's cheer}{35}
  3054. X\indexentry{hacker's dictionary}{35}
  3055. X\indexentry{Hackett Simon}{11}
  3056. X\indexentry{hackman directory}{103}
  3057. X\indexentry{header C}{57}
  3058. X\indexentry{header file postscript}{54}
  3059. X\indexentry{header files}{57}
  3060. X\indexentry{header page}{37}
  3061. X\indexentry{headings section}{34}
  3062. X\indexentry{headings strength}{46}
  3063. X\indexentry{Hello Northern Hemisphere Program}{21}
  3064. X\indexentry{hello world document}{20}
  3065. X\indexentry{help command}{97}
  3066. X\indexentry{help option}{68}
  3067. X\indexentry{here command}{98}
  3068. X\indexentry{hierarchical structure}{34}
  3069. X\indexentry{high level syntax}{82}
  3070. X\indexentry{hints FunnelWeb}{41}
  3071. X\indexentry{Hulse David}{11}
  3072. X\indexentry{Humphries Barry}{19}
  3073. X\indexentry{Humphries91}{117}
  3074. X\indexentry{Humphries91}{19}
  3075. X\indexentry{hypertext}{15}
  3076. X\indexentry{I option}{69}
  3077. X\indexentry{identifiers macro}{41}
  3078. X\indexentry{include file option}{69}
  3079. X\indexentry{include files recursive}{31}
  3080. X\indexentry{include files}{30}
  3081. X\indexentry{include files}{77}
  3082. X\indexentry{include files}{77}
  3083. X\indexentry{Include file}{115}
  3084. X\indexentry{include file}{69}
  3085. X\indexentry{indentation blank}{78}
  3086. X\indexentry{indentation macro calls}{25}
  3087. X\indexentry{indentation macro expansion}{78}
  3088. X\indexentry{indentation none}{78}
  3089. X\indexentry{independence language}{18}
  3090. X\indexentry{independence typesetter}{18}
  3091. X\indexentry{independence typesetter}{34}
  3092. X\indexentry{independence typesetter}{65}
  3093. X\indexentry{independence typesetter}{80}
  3094. X\indexentry{infinite context}{68}
  3095. X\indexentry{inheritance filename}{70}
  3096. X\indexentry{inheritance section name}{35}
  3097. X\indexentry{initialization FunnelWeb}{70}
  3098. X\indexentry{initialization script}{49}
  3099. X\indexentry{initialization script}{71}
  3100. X\indexentry{inline typesetter directives}{83}
  3101. X\indexentry{inline}{81}
  3102. X\indexentry{input file option}{68}
  3103. X\indexentry{input files}{47}
  3104. X\indexentry{Input file}{115}
  3105. X\indexentry{input file}{18}
  3106. X\indexentry{input file}{64}
  3107. X\indexentry{input file}{77}
  3108. X\indexentry{input line length maximum}{79}
  3109. X\indexentry{input line length pragma}{79}
  3110. X\indexentry{input line length}{42}
  3111. X\indexentry{input line length}{79}
  3112. X\indexentry{inserting EOL markers}{76}
  3113. X\indexentry{inserting into text arbitrary characters}{74}
  3114. X\indexentry{inserting into text control characters}{74}
  3115. X\indexentry{inserting into text special character}{74}
  3116. X\indexentry{installation FunnelWeb}{101}
  3117. X\indexentry{installation problems}{107}
  3118. X\indexentry{installing FunnelWeb}{106}
  3119. X\indexentry{interactive mode}{47}
  3120. X\indexentry{interactive option}{69}
  3121. X\indexentry{interdependent documentation}{50}
  3122. X\indexentry{interface command line}{66}
  3123. X\indexentry{interpreter command}{47}
  3124. X\indexentry{introduction tutorial}{19}
  3125. X\indexentry{invisible pragmas}{78}
  3126. X\indexentry{invocation number}{23}
  3127. X\indexentry{invocations number}{42}
  3128. X\indexentry{invoking FunnelWeb}{20}
  3129. X\indexentry{invoking FunnelWeb}{66}
  3130. X\indexentry{J option}{69}
  3131. X\indexentry{Jeremy Begg}{11}
  3132. X\indexentry{journal file option}{69}
  3133. X\indexentry{Journal file}{115}
  3134. X\indexentry{journal file}{64}
  3135. X\indexentry{journal file}{69}
  3136. X\indexentry{K option}{69}
  3137. X\indexentry{Kernighan88}{117}
  3138. X\indexentry{Kernighan88}{65}
  3139. X\indexentry{keyboard mode}{47}
  3140. X\indexentry{keyboard option}{69}
  3141. X\indexentry{Knuth Donald}{11}
  3142. X\indexentry{Knuth Donald}{50}
  3143. X\indexentry{Knuth Donald}{9}
  3144. X\indexentry{Knuth83}{117}
  3145. X\indexentry{Knuth83}{17}
  3146. X\indexentry{Knuth83}{25}
  3147. X\indexentry{Knuth83}{25}
  3148. X\indexentry{Knuth83}{9}
  3149. X\indexentry{Knuth84}{117}
  3150. X\indexentry{Knuth84}{117}
  3151. X\indexentry{Knuth84}{13}
  3152. X\indexentry{Knuth84}{17}
  3153. X\indexentry{Knuth84}{18}
  3154. X\indexentry{L option}{69}
  3155. X\indexentry{Lamport86}{117}
  3156. X\indexentry{Lamport86}{13}
  3157. X\indexentry{language independence}{18}
  3158. X\indexentry{languages multiple}{55}
  3159. X\indexentry{laser printer}{55}
  3160. X\indexentry{LaTeX}{13}
  3161. X\indexentry{LaTeX}{84}
  3162. X\indexentry{layout program}{22}
  3163. X\indexentry{layout program}{28}
  3164. X\indexentry{length command}{91}
  3165. X\indexentry{length input line}{42}
  3166. X\indexentry{length line}{71}
  3167. X\indexentry{length output line}{42}
  3168. X\indexentry{letter}{67}
  3169. X\indexentry{levels of diagnostics}{65}
  3170. X\indexentry{libraries macro}{31}
  3171. X\indexentry{license FunnelWeb}{112}
  3172. X\indexentry{license GNU}{112}
  3173. X\indexentry{license GNU}{18}
  3174. X\indexentry{license GNU}{9}
  3175. X\indexentry{line length input}{79}
  3176. X\indexentry{line length}{71}
  3177. X\indexentry{line termination}{71}
  3178. X\indexentry{list document}{64}
  3179. X\indexentry{list options}{68}
  3180. X\indexentry{list shell commands}{93}
  3181. X\indexentry{listing file context}{68}
  3182. X\indexentry{listing file option}{69}
  3183. X\indexentry{Listing file}{115}
  3184. X\indexentry{listing file}{64}
  3185. X\indexentry{listing file}{69}
  3186. X\indexentry{literal construct}{37}
  3187. X\indexentry{literal directive}{84}
  3188. X\indexentry{literate programming tools}{15}
  3189. X\indexentry{literate programming, facilities}{15}
  3190. X\indexentry{literate programming, most significant benefit}{17}
  3191. X\indexentry{literate programming}{15}
  3192. X\indexentry{literate programming}{15}
  3193. X\indexentry{literate programming}{50}
  3194. X\indexentry{MacDraw}{54}
  3195. X\indexentry{Macintosh}{13}
  3196. X\indexentry{Macintosh}{54}
  3197. X\indexentry{macro attributes}{85}
  3198. X\indexentry{macro bindings}{22}
  3199. X\indexentry{macro body}{85}
  3200. X\indexentry{macro calls indentation}{25}
  3201. X\indexentry{macro calls}{86}
  3202. X\indexentry{macro checks}{88}
  3203. X\indexentry{macro definitions}{32}
  3204. X\indexentry{Macro definition}{116}
  3205. X\indexentry{macro definition}{85}
  3206. X\indexentry{macro definition}{87}
  3207. X\indexentry{macro expansion indentation}{78}
  3208. X\indexentry{macro expansion}{30}
  3209. X\indexentry{macro expansion}{47}
  3210. X\indexentry{macro expansion}{87}
  3211. X\indexentry{macro expressions}{86}
  3212. X\indexentry{macro facilities tutorial}{22}
  3213. X\indexentry{macro identifiers}{41}
  3214. X\indexentry{macro libraries}{31}
  3215. X\indexentry{macro names}{41}
  3216. X\indexentry{macro names}{86}
  3217. X\indexentry{macro name}{85}
  3218. X\indexentry{macro parameter delimiting}{87}
  3219. X\indexentry{macro recursion}{43}
  3220. X\indexentry{macro recursion}{88}
  3221. X\indexentry{macro table dump}{68}
  3222. X\indexentry{macro table}{64}
  3223. X\indexentry{macros additive}{26}
  3224. X\indexentry{macros parameterized}{28}
  3225. X\indexentry{macros simple tutorial}{22}
  3226. X\indexentry{macros static}{87}
  3227. X\indexentry{Macro}{115}
  3228. X\indexentry{magic trick}{15}
  3229. X\indexentry{maintenance programmer}{50}
  3230. X\indexentry{make utility}{49}
  3231. X\indexentry{manuals printing}{107}
  3232. X\indexentry{mapped file dump}{68}
  3233. X\indexentry{Mapper}{116}
  3234. X\indexentry{mapper}{71}
  3235. X\indexentry{martinet FunnelWeb}{42}
  3236. X\indexentry{maximum input line length}{79}
  3237. X\indexentry{maximum output file line length pragma}{79}
  3238. X\indexentry{maximum output file line length}{79}
  3239. X\indexentry{maximum product file line length pragma}{79}
  3240. X\indexentry{maximum product file line length}{79}
  3241. X\indexentry{medicine wholistic}{53}
  3242. X\indexentry{memory use of}{30}
  3243. X\indexentry{memory}{47}
  3244. X\indexentry{MIL-STD-2167A}{51}
  3245. X\indexentry{monster file postscript}{54}
  3246. X\indexentry{multiple languages}{55}
  3247. X\indexentry{name empty}{42}
  3248. X\indexentry{name FunnelWeb}{19}
  3249. X\indexentry{name section}{34}
  3250. X\indexentry{name section}{84}
  3251. X\indexentry{names macro}{41}
  3252. X\indexentry{names macro}{86}
  3253. X\indexentry{names quick}{42}
  3254. X\indexentry{names quick}{76}
  3255. X\indexentry{names section}{86}
  3256. X\indexentry{names}{86}
  3257. X\indexentry{name}{70}
  3258. X\indexentry{new page pragma}{81}
  3259. X\indexentry{new page}{81}
  3260. X\indexentry{newpage directive}{37}
  3261. X\indexentry{no indentation}{78}
  3262. X\indexentry{non-determinism}{68}
  3263. X\indexentry{non-printable characters}{96}
  3264. X\indexentry{none indentation}{78}
  3265. X\indexentry{notation}{63}
  3266. X\indexentry{notes efficiency}{47}
  3267. X\indexentry{notice copyright}{1}
  3268. X\indexentry{novels}{50}
  3269. X\indexentry{number calls}{23}
  3270. X\indexentry{number invocations}{42}
  3271. X\indexentry{number invocation}{23}
  3272. X\indexentry{number of times called}{23}
  3273. X\indexentry{numbering cross reference}{89}
  3274. X\indexentry{numbering section}{89}
  3275. X\indexentry{object code}{26}
  3276. X\indexentry{obtaining FunnelWeb}{101}
  3277. X\indexentry{open systems}{55}
  3278. X\indexentry{option B}{68}
  3279. X\indexentry{option C}{68}
  3280. X\indexentry{option delete output}{68}
  3281. X\indexentry{option dump}{68}
  3282. X\indexentry{option D}{49}
  3283. X\indexentry{option D}{68}
  3284. X\indexentry{option execute script}{69}
  3285. X\indexentry{option F}{68}
  3286. X\indexentry{option help}{68}
  3287. X\indexentry{option H}{68}
  3288. X\indexentry{option include file}{69}
  3289. X\indexentry{option input file}{68}
  3290. X\indexentry{option interactive}{69}
  3291. X\indexentry{option I}{69}
  3292. X\indexentry{option journal file}{69}
  3293. X\indexentry{option J}{69}
  3294. X\indexentry{option keyboard}{69}
  3295. X\indexentry{option K}{69}
  3296. X\indexentry{option listing file}{69}
  3297. X\indexentry{option L}{69}
  3298. X\indexentry{option quiet}{69}
  3299. X\indexentry{option Q}{69}
  3300. X\indexentry{option screen}{69}
  3301. X\indexentry{option S}{69}
  3302. X\indexentry{option typeset}{69}
  3303. X\indexentry{option T}{69}
  3304. X\indexentry{option width}{69}
  3305. X\indexentry{option W}{69}
  3306. X\indexentry{option X}{69}
  3307. X\indexentry{options command}{92}
  3308. X\indexentry{options default}{49}
  3309. X\indexentry{options default}{92}
  3310. X\indexentry{options list}{68}
  3311. X\indexentry{options setting defaults}{49}
  3312. X\indexentry{options syntax}{67}
  3313. X\indexentry{options tracedump}{68}
  3314. X\indexentry{options}{67}
  3315. X\indexentry{options}{68}
  3316. X\indexentry{Option}{116}
  3317. X\indexentry{order action execution}{71}
  3318. X\indexentry{order program}{22}
  3319. X\indexentry{ordering program}{15}
  3320. X\indexentry{Ordinary options}{70}
  3321. X\indexentry{organization boring}{50}
  3322. X\indexentry{organization spaghetti}{50}
  3323. X\indexentry{output file line length maximum}{79}
  3324. X\indexentry{output files delete}{49}
  3325. X\indexentry{output files}{18}
  3326. X\indexentry{output files}{64}
  3327. X\indexentry{Output file}{116}
  3328. X\indexentry{output line length}{42}
  3329. X\indexentry{output WEB}{25}
  3330. X\indexentry{over documentation}{51}
  3331. X\indexentry{overhead procedure call}{57}
  3332. X\indexentry{overview FunnelWeb}{18}
  3333. X\indexentry{overview FunnelWeb}{64}
  3334. X\indexentry{overview typesetting}{32}
  3335. X\indexentry{OzTeX}{13}
  3336. X\indexentry{package}{55}
  3337. X\indexentry{parameter list, absent}{29}
  3338. X\indexentry{parameter lists formal}{86}
  3339. X\indexentry{parameterized macros}{28}
  3340. X\indexentry{parameters actual}{29}
  3341. X\indexentry{parameters formal}{28}
  3342. X\indexentry{parameters formal}{28}
  3343. X\indexentry{parameters formal}{87}
  3344. X\indexentry{Parser}{116}
  3345. X\indexentry{parser}{64}
  3346. X\indexentry{parser}{82}
  3347. X\indexentry{parsing command line}{66}
  3348. X\indexentry{Pascal}{15}
  3349. X\indexentry{Pascal}{25}
  3350. X\indexentry{Pascal}{26}
  3351. X\indexentry{Pascal}{57}
  3352. X\indexentry{Pascal}{59}
  3353. X\indexentry{Pat Scannel}{29}
  3354. X\indexentry{pavlov documentation}{51}
  3355. X\indexentry{phases execution}{64}
  3356. X\indexentry{phases}{64}
  3357. X\indexentry{PhD thesis}{54}
  3358. X\indexentry{pitfalls FunnelWeb}{50}
  3359. X\indexentry{poem animal}{30}
  3360. X\indexentry{poem camera}{30}
  3361. X\indexentry{portability}{18}
  3362. X\indexentry{postscript header file}{54}
  3363. X\indexentry{postscript monster file}{54}
  3364. X\indexentry{PostScript}{54}
  3365. X\indexentry{postscript}{57}
  3366. X\indexentry{pragma input line length}{79}
  3367. X\indexentry{pragma maximum output file line length}{79}
  3368. X\indexentry{pragma maximum product file line length}{79}
  3369. X\indexentry{pragma new page}{81}
  3370. X\indexentry{pragma table of contents}{81}
  3371. X\indexentry{pragma title}{82}
  3372. X\indexentry{pragma typesetter}{80}
  3373. X\indexentry{pragma vskip}{81}
  3374. X\indexentry{pragmas invisible}{78}
  3375. X\indexentry{pragmas visible}{78}
  3376. X\indexentry{pragmas}{78}
  3377. X\indexentry{Pragma}{116}
  3378. X\indexentry{pragma}{25}
  3379. X\indexentry{pragma}{78}
  3380. X\indexentry{preface}{9}
  3381. X\indexentry{preprocessor C}{20}
  3382. X\indexentry{preprocessor C}{57}
  3383. X\indexentry{presentation notes}{13}
  3384. X\indexentry{Printed documentation}{116}
  3385. X\indexentry{printer laser}{55}
  3386. X\indexentry{printing manuals}{107}
  3387. X\indexentry{printing system}{55}
  3388. X\indexentry{problems binding}{57}
  3389. X\indexentry{problems installation}{107}
  3390. X\indexentry{procedure call overhead}{57}
  3391. X\indexentry{processing command line}{66}
  3392. X\indexentry{processing command line}{92}
  3393. X\indexentry{product file line length maximum}{79}
  3394. X\indexentry{product file width}{69}
  3395. X\indexentry{product files}{18}
  3396. X\indexentry{product files}{64}
  3397. X\indexentry{Product file}{116}
  3398. X\indexentry{production tool}{19}
  3399. X\indexentry{program layout}{22}
  3400. X\indexentry{program layout}{28}
  3401. X\indexentry{program ordering}{15}
  3402. X\indexentry{program order}{22}
  3403. X\indexentry{programmer maintenance}{50}
  3404. X\indexentry{programmer's cheer}{35}
  3405. X\indexentry{programming literate}{50}
  3406. X\indexentry{Q option}{69}
  3407. X\indexentry{quick names}{42}
  3408. X\indexentry{quick names}{76}
  3409. X\indexentry{quick name}{42}
  3410. X\indexentry{quick name}{76}
  3411. X\indexentry{quiet option}{69}
  3412. X\indexentry{quit command}{98}
  3413. X\indexentry{random access}{50}
  3414. X\indexentry{rec.humor.funny}{29}
  3415. X\indexentry{recursion macro}{43}
  3416. X\indexentry{recursion macro}{88}
  3417. X\indexentry{recursive include files}{31}
  3418. X\indexentry{references}{117}
  3419. X\indexentry{referencing cross}{89}
  3420. X\indexentry{registration FunnelWeb}{110}
  3421. X\indexentry{regression testing}{103}
  3422. X\indexentry{regression testing}{47}
  3423. X\indexentry{reliability}{18}
  3424. X\indexentry{REM statement}{57}
  3425. X\indexentry{report annual}{58}
  3426. X\indexentry{results directory}{103}
  3427. X\indexentry{return status}{65}
  3428. X\indexentry{Roger Brissenden}{11}
  3429. X\indexentry{Rosovsky90}{117}
  3430. X\indexentry{Rosovsky90}{17}
  3431. X\indexentry{Ross Williams}{1}
  3432. X\indexentry{rule simple}{20}
  3433. X\indexentry{rules FunnelWeb}{42}
  3434. X\indexentry{running FunnelWeb}{66}
  3435. X\indexentry{S option}{69}
  3436. X\indexentry{Scannel Pat}{29}
  3437. X\indexentry{Scanner}{116}
  3438. X\indexentry{scanner}{64}
  3439. X\indexentry{scanner}{71}
  3440. X\indexentry{screen option}{69}
  3441. X\indexentry{script initialization}{49}
  3442. X\indexentry{script initialization}{71}
  3443. X\indexentry{script startup}{49}
  3444. X\indexentry{scripts directory}{103}
  3445. X\indexentry{Script}{116}
  3446. X\indexentry{section constructs}{83}
  3447. X\indexentry{section headings}{34}
  3448. X\indexentry{section name inheritance}{35}
  3449. X\indexentry{section names}{86}
  3450. X\indexentry{section name}{34}
  3451. X\indexentry{section name}{84}
  3452. X\indexentry{section numbering}{89}
  3453. X\indexentry{section strength}{46}
  3454. X\indexentry{semantic architecture}{64}
  3455. X\indexentry{sequences special}{72}
  3456. X\indexentry{set abstraction}{59}
  3457. X\indexentry{set command}{48}
  3458. X\indexentry{set command}{98}
  3459. X\indexentry{setting defaults options}{49}
  3460. X\indexentry{setting special character}{74}
  3461. X\indexentry{severe severity}{65}
  3462. X\indexentry{severe status}{90}
  3463. X\indexentry{severity assertion}{65}
  3464. X\indexentry{severity error}{65}
  3465. X\indexentry{severity fatal}{65}
  3466. X\indexentry{severity severe}{65}
  3467. X\indexentry{severity warning}{65}
  3468. X\indexentry{severity}{65}
  3469. X\indexentry{sharing information}{56}
  3470. X\indexentry{sharing text}{58}
  3471. X\indexentry{shark white pointer}{19}
  3472. X\indexentry{shell commands list}{93}
  3473. X\indexentry{shell commands}{93}
  3474. X\indexentry{shell errors}{90}
  3475. X\indexentry{shell FunnelWeb}{90}
  3476. X\indexentry{shell uses}{90}
  3477. X\indexentry{Shell}{116}
  3478. X\indexentry{shooting}{31}
  3479. X\indexentry{show command}{48}
  3480. X\indexentry{show command}{98}
  3481. X\indexentry{sign}{67}
  3482. X\indexentry{Simon Hackett}{11}
  3483. X\indexentry{simple macros tutorial}{22}
  3484. X\indexentry{simple rule}{20}
  3485. X\indexentry{simple sequence}{72}
  3486. X\indexentry{simplicity}{18}
  3487. X\indexentry{size font}{46}
  3488. X\indexentry{skip vertical}{81}
  3489. X\indexentry{skipto command}{98}
  3490. X\indexentry{small functions}{56}
  3491. X\indexentry{Smith91}{117}
  3492. X\indexentry{Smith91}{17}
  3493. X\indexentry{snake tiger}{19}
  3494. X\indexentry{song}{29}
  3495. X\indexentry{sources directory}{103}
  3496. X\indexentry{spacing}{43}
  3497. X\indexentry{spaghetti organization}{50}
  3498. X\indexentry{special character changing}{31}
  3499. X\indexentry{special character default}{72}
  3500. X\indexentry{special character inserting into text}{74}
  3501. X\indexentry{special character setting}{74}
  3502. X\indexentry{Special character}{116}
  3503. X\indexentry{special character}{20}
  3504. X\indexentry{special character}{72}
  3505. X\indexentry{special sequences}{72}
  3506. X\indexentry{Special sequence}{116}
  3507. X\indexentry{special sequence}{20}
  3508. X\indexentry{special sequence}{72}
  3509. X\indexentry{special tokens}{82}
  3510. X\indexentry{speed}{47}
  3511. X\indexentry{spider Funnel-web}{19}
  3512. X\indexentry{startup FunnelWeb}{70}
  3513. X\indexentry{startup script}{49}
  3514. X\indexentry{statement REM}{57}
  3515. X\indexentry{static analysis}{88}
  3516. X\indexentry{static macros}{87}
  3517. X\indexentry{status assertion}{90}
  3518. X\indexentry{status command}{99}
  3519. X\indexentry{status error}{90}
  3520. X\indexentry{status fatal}{90}
  3521. X\indexentry{status return}{65}
  3522. X\indexentry{status severe}{90}
  3523. X\indexentry{status success}{90}
  3524. X\indexentry{status warning}{90}
  3525. X\indexentry{stream of consciousness}{50}
  3526. X\indexentry{strength headings}{46}
  3527. X\indexentry{strength section}{46}
  3528. X\indexentry{strength typesetting}{46}
  3529. X\indexentry{string substitution}{91}
  3530. X\indexentry{string substitution}{94}
  3531. X\indexentry{string}{67}
  3532. X\indexentry{structure hierarchical}{34}
  3533. X\indexentry{structure tree}{83}
  3534. X\indexentry{Strunk79}{117}
  3535. X\indexentry{Strunk79}{51}
  3536. X\indexentry{substitution string}{91}
  3537. X\indexentry{substitution string}{94}
  3538. X\indexentry{success status}{90}
  3539. X\indexentry{support FunnelWeb}{110}
  3540. X\indexentry{suppress console output}{69}
  3541. X\indexentry{suppressing EOL markers}{77}
  3542. X\indexentry{suppression EOL}{23}
  3543. X\indexentry{suppression file}{49}
  3544. X\indexentry{Sydney}{19}
  3545. X\indexentry{syntax command line options}{67}
  3546. X\indexentry{syntax command line}{67}
  3547. X\indexentry{syntax EBNF}{63}
  3548. X\indexentry{syntax high level}{82}
  3549. X\indexentry{syntax options}{67}
  3550. X\indexentry{system printing}{55}
  3551. X\indexentry{T option}{69}
  3552. X\indexentry{table macro}{64}
  3553. X\indexentry{table of contents directive}{37}
  3554. X\indexentry{table of contents pragma}{81}
  3555. X\indexentry{table of contents}{81}
  3556. X\indexentry{tabs}{42}
  3557. X\indexentry{Tangle}{116}
  3558. X\indexentry{tangle}{65}
  3559. X\indexentry{tangle}{88}
  3560. X\indexentry{Tangling}{21}
  3561. X\indexentry{target typesetter}{89}
  3562. X\indexentry{termination file}{71}
  3563. X\indexentry{termination line}{71}
  3564. X\indexentry{terminology}{63}
  3565. X\indexentry{testing FunnelWeb}{105}
  3566. X\indexentry{testing regression}{103}
  3567. X\indexentry{testing regression}{47}
  3568. X\indexentry{tests directory}{104}
  3569. X\indexentry{text editors}{42}
  3570. X\indexentry{text files cryptic}{55}
  3571. X\indexentry{text free}{83}
  3572. X\indexentry{text sharing}{58}
  3573. X\indexentry{text tokens}{82}
  3574. X\indexentry{TeX}{13}
  3575. X\indexentry{TeX}{18}
  3576. X\indexentry{TeX}{22}
  3577. X\indexentry{TeX}{54}
  3578. X\indexentry{thesis PhD}{54}
  3579. X\indexentry{tiger snake}{19}
  3580. X\indexentry{time development}{17}
  3581. X\indexentry{times dump}{68}
  3582. X\indexentry{title directive}{37}
  3583. X\indexentry{title pragma}{82}
  3584. X\indexentry{title}{82}
  3585. X\indexentry{token list dump}{68}
  3586. X\indexentry{tolerate command}{100}
  3587. X\indexentry{tools literate programming}{15}
  3588. X\indexentry{trace command}{100}
  3589. X\indexentry{trace on command}{48}
  3590. X\indexentry{tracedump options}{68}
  3591. X\indexentry{trailing blanks}{42}
  3592. X\indexentry{tree directory}{102}
  3593. X\indexentry{tree structure}{83}
  3594. X\indexentry{Trevorrow Andrew}{13}
  3595. X\indexentry{tutorial +=}{26}
  3596. X\indexentry{tutorial ==}{26}
  3597. X\indexentry{tutorial @M}{24}
  3598. X\indexentry{tutorial @Z}{24}
  3599. X\indexentry{tutorial introduction}{19}
  3600. X\indexentry{tutorial macro facilities}{22}
  3601. X\indexentry{tutorial macros simple}{22}
  3602. X\indexentry{tutorial simple macros}{22}
  3603. X\indexentry{tutorial typesetting}{32}
  3604. X\indexentry{tutorial}{15}
  3605. X\indexentry{tutorial}{19}
  3606. X\indexentry{twelve bugs of christmas}{29}
  3607. X\indexentry{two main aspects FunnelWeb}{21}
  3608. X\indexentry{typesafe generics}{61}
  3609. X\indexentry{typeset file}{69}
  3610. X\indexentry{typeset option}{69}
  3611. X\indexentry{typesetter directive tokens}{82}
  3612. X\indexentry{typesetter directives}{66}
  3613. X\indexentry{typesetter directives}{81}
  3614. X\indexentry{typesetter independence}{18}
  3615. X\indexentry{typesetter independence}{34}
  3616. X\indexentry{typesetter independence}{65}
  3617. X\indexentry{typesetter independence}{80}
  3618. X\indexentry{typesetter independent}{34}
  3619. X\indexentry{typesetter pragma}{80}
  3620. X\indexentry{typesetter target}{89}
  3621. X\indexentry{Typesetting directive}{116}
  3622. X\indexentry{typesetting overview}{32}
  3623. X\indexentry{typesetting strength}{46}
  3624. X\indexentry{typesetting tutorial}{32}
  3625. X\indexentry{typesetting}{13}
  3626. X\indexentry{typesetting}{89}
  3627. X\indexentry{universities}{17}
  3628. X\indexentry{University Adelaide}{59}
  3629. X\indexentry{Unix newline}{75}
  3630. X\indexentry{Unix}{67}
  3631. X\indexentry{unprintable characters}{71}
  3632. X\indexentry{USDOD83}{117}
  3633. X\indexentry{use of memory}{30}
  3634. X\indexentry{useful commands}{47}
  3635. X\indexentry{userman directory}{105}
  3636. X\indexentry{uses shell}{90}
  3637. X\indexentry{versions FunnelWeb}{114}
  3638. X\indexentry{vertical skip}{81}
  3639. X\indexentry{visible pragmas}{78}
  3640. X\indexentry{vskip directive}{37}
  3641. X\indexentry{vskip pragma}{81}
  3642. X\indexentry{W option}{69}
  3643. X\indexentry{warning severity}{65}
  3644. X\indexentry{warning status}{90}
  3645. X\indexentry{warranty}{112}
  3646. X\indexentry{Weave}{116}
  3647. X\indexentry{weave}{65}
  3648. X\indexentry{weave}{89}
  3649. X\indexentry{Weaving}{21}
  3650. X\indexentry{WEB output}{25}
  3651. X\indexentry{WEB}{21}
  3652. X\indexentry{WEB}{25}
  3653. X\indexentry{Web}{9}
  3654. X\indexentry{white pointer shark}{19}
  3655. X\indexentry{wholistic debugging}{53}
  3656. X\indexentry{wholistic debugging}{53}
  3657. X\indexentry{wholistic medicine}{53}
  3658. X\indexentry{width option}{69}
  3659. X\indexentry{width product file}{69}
  3660. X\indexentry{Williams Ross}{1}
  3661. X\indexentry{workstations}{48}
  3662. X\indexentry{workstation}{90}
  3663. X\indexentry{write command}{100}
  3664. X\indexentry{writeu command}{100}
  3665. X\indexentry{X option}{69}
  3666. END_OF_FILE
  3667. if test 33582 -ne `wc -c <'userman/u_manual.sin'`; then
  3668.     echo shar: \"'userman/u_manual.sin'\" unpacked with wrong size!
  3669. fi
  3670. # end of 'userman/u_manual.sin'
  3671. fi
  3672. echo shar: End of archive 13 \(of 20\).
  3673. cp /dev/null ark13isdone
  3674. MISSING=""
  3675. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ; do
  3676.     if test ! -f ark${I}isdone ; then
  3677.     MISSING="${MISSING} ${I}"
  3678.     fi
  3679. done
  3680. if test "${MISSING}" = "" ; then
  3681.     echo You have unpacked all 20 archives.
  3682.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  3683. else
  3684.     echo You still need to unpack the following archives:
  3685.     echo "        " ${MISSING}
  3686. fi
  3687. ##  End of shell archive.
  3688. exit 0
  3689.