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

  1. Newsgroups: comp.sources.unix
  2. From: ross@spam.adelaide.edu.au (Ross Williams)
  3. Subject: v26i134: funnelweb - a tool for literate programming in C, Part14/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 134
  9. Archive-Name: funnelweb/part14
  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 14 (of 20)."
  18. # Contents:  answers/sc10.lis hackman/h_ch1.tex userman/u_manual.idx
  19. # Wrapped by vixie@gw.home.vix.com on Sun Apr 11 11:00:30 1993
  20. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  21. if test -f 'answers/sc10.lis' -a "${1}" != "-c" ; then 
  22.   echo shar: Will not clobber existing file \"'answers/sc10.lis'\"
  23. else
  24. echo shar: Extracting \"'answers/sc10.lis'\" \(44801 characters\)
  25. sed "s/^X//" >'answers/sc10.lis' <<'END_OF_FILE'
  26. XFUNNELWEB LISTING FILE
  27. X======================
  28. X
  29. Dump of mapped file "<<Suppressed>>".
  30. X
  31. MEMORY DUMP OF MAPPED FILE
  32. X==========================
  33. X
  34. X+-------------------------------------------------+------------------+
  35. X| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | 0123456789ABCDEF |
  36. X+-------------------------------------------------+------------------+
  37. X| 53 63 61 6E 6E 65 72 20 54 65 73 74 3A 20 53 70 | Scanner Test: Sp |
  38. X| 65 63 69 61 6C 20 53 65 71 75 65 6E 63 65 20 52 | ecial Sequence R |
  39. X| 65 63 6F 67 6E 69 74 69 6F 6E 0A 3D 3D 3D 3D 3D | ecognition.===== |
  40. X| 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D | ================ |
  41. X| 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D | ================ |
  42. X| 3D 3D 3D 3D 3D 0A 54 68 69 73 20 74 65 73 74 20 | =====.This test  |
  43. X| 74 65 73 74 73 20 74 6F 20 73 65 65 20 74 68 61 | tests to see tha |
  44. X| 74 20 46 75 6E 6E 65 6C 57 65 62 20 69 73 20 72 | t FunnelWeb is r |
  45. X| 65 63 6F 67 6E 69 73 69 6E 67 20 74 68 65 20 66 | ecognising the f |
  46. X| 75 6C 6C 20 73 65 74 20 6F 66 20 73 70 65 63 69 | ull set of speci |
  47. X| 61 6C 0A 73 65 71 75 65 6E 63 65 73 2E 0A 0A 54 | al.sequences...T |
  48. X| 75 72 6E 20 4F 66 66 20 74 68 65 20 50 61 72 73 | urn Off the Pars |
  49. X| 65 72 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D | er.------------- |
  50. X| 2D 2D 2D 2D 2D 2D 0A 46 69 72 73 74 20 77 65 20 | ------.First we  |
  51. X| 63 61 75 73 65 20 61 20 64 65 6C 69 62 65 72 61 | cause a delibera |
  52. X| 74 65 20 73 63 61 6E 6E 65 72 20 65 72 72 6F 72 | te scanner error |
  53. X| 20 73 6F 20 61 73 20 74 6F 20 70 72 65 76 65 6E |  so as to preven |
  54. X| 74 20 74 68 65 20 70 61 72 73 65 72 20 66 72 6F | t the parser fro |
  55. X| 6D 0A 67 65 6E 65 72 61 74 69 6E 67 20 6C 6F 74 | m.generating lot |
  56. X| 73 20 6F 66 20 65 72 72 6F 72 73 20 6F 76 65 72 | s of errors over |
  57. X| 20 74 68 65 20 73 79 6E 74 61 63 74 69 63 20 72 |  the syntactic r |
  58. X| 75 62 62 69 73 68 20 70 72 65 73 65 6E 74 65 64 | ubbish presented |
  59. X| 20 68 65 72 65 2E 0A 0A 20 20 20 40 20 0A 0A 4C |  here...   @ ..L |
  60. X| 69 73 74 20 6F 66 20 41 6C 6C 20 50 6F 73 73 69 | ist of All Possi |
  61. X| 62 6C 65 20 53 70 65 63 69 61 6C 20 53 65 71 75 | ble Special Sequ |
  62. X| 65 6E 63 65 73 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D | ences.---------- |
  63. X| 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D | ---------------- |
  64. X| 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0A 54 68 65 | ------------.The |
  65. X| 20 66 6F 6C 6C 6F 77 69 6E 67 20 69 73 20 61 20 |  following is a  |
  66. X| 6C 69 73 74 20 6F 66 20 74 68 65 20 64 65 66 61 | list of the defa |
  67. X| 75 6C 74 20 73 70 65 63 69 61 6C 20 63 68 61 72 | ult special char |
  68. X| 61 63 74 65 72 20 66 6F 6C 6C 6F 77 65 64 20 62 | acter followed b |
  69. X| 79 20 65 61 63 68 20 6F 66 0A 74 68 65 20 41 53 | y each of.the AS |
  70. X| 43 49 49 20 70 72 69 6E 74 61 62 6C 65 73 2E 0A | CII printables.. |
  71. X| 30 30 30 20 74 6F 20 30 33 31 20 61 72 65 20 75 | 000 to 031 are u |
  72. X| 6E 70 72 69 6E 74 61 62 6C 65 20 63 6F 6E 74 72 | nprintable contr |
  73. X| 6F 6C 20 63 68 61 72 61 63 74 65 72 73 2E 0A 0A | ol characters... |
  74. X| 30 33 32 20 20 40 20 20 20 20 2D 20 49 4C 4C 45 | 032  @    - ILLE |
  75. X| 47 41 4C 2E 20 20 28 4E 6F 74 65 3A 20 48 79 70 | GAL.  (Note: Hyp |
  76. X| 68 65 6E 20 69 73 20 6E 65 65 64 65 64 20 74 6F | hen is needed to |
  77. X| 20 61 76 6F 69 64 20 74 72 61 69 6C 69 6E 67 20 |  avoid trailing  |
  78. X| 62 6C 61 6E 6B 73 20 65 72 72 6F 72 2E 29 0A 30 | blanks error.).0 |
  79. X| 33 33 20 20 40 21 20 20 20 2D 20 43 6F 6D 6D 65 | 33  @!   - Comme |
  80. X| 6E 74 2E 0A 30 33 34 20 20 40 22 20 20 20 2D 20 | nt..034  @"   -  |
  81. X| 50 61 72 61 6D 65 74 65 72 20 64 65 6C 69 6D 65 | Parameter delime |
  82. X| 74 65 72 2E 0A 30 33 35 20 20 40 23 58 20 20 2D | ter..035  @#X  - |
  83. X| 20 53 68 6F 72 74 20 6E 61 6D 65 20 73 65 71 75 |  Short name sequ |
  84. X| 65 6E 63 65 2E 0A 40 24 20 20 20 30 33 36 20 20 | ence..@$   036   |
  85. X| 2D 20 44 65 66 69 6E 65 20 6D 61 63 72 6F 2E 20 | - Define macro.  |
  86. X| 48 61 73 20 74 6F 20 62 65 20 61 74 20 73 74 61 | Has to be at sta |
  87. X| 72 74 20 6F 66 20 6C 69 6E 65 2E 0A 30 33 37 20 | rt of line..037  |
  88. X| 20 40 25 20 20 20 2D 20 49 4C 4C 45 47 41 4C 2E |  @%   - ILLEGAL. |
  89. X| 0A 30 33 38 20 20 40 26 20 20 20 2D 20 49 4C 4C | .038  @&   - ILL |
  90. X| 45 47 41 4C 2E 0A 30 33 39 20 20 40 27 20 20 20 | EGAL..039  @'    |
  91. X| 2D 20 49 4C 4C 45 47 41 4C 2E 0A 30 34 30 20 20 | - ILLEGAL..040   |
  92. X| 40 28 20 20 20 2D 20 4F 70 65 6E 20 70 61 72 61 | @(   - Open para |
  93. X| 6D 65 74 65 72 20 6C 69 73 74 2E 0A 30 34 31 20 | meter list..041  |
  94. X| 20 40 29 20 20 20 2D 20 43 6C 6F 73 65 20 70 61 |  @)   - Close pa |
  95. X| 72 61 6D 65 74 65 72 20 6C 69 73 74 2E 0A 30 34 | rameter list..04 |
  96. X| 32 0A 40 2A 20 20 20 20 20 20 20 20 2D 20 4F 6C | 2.@*        - Ol |
  97. X| 64 20 66 61 73 68 69 6F 6E 65 64 20 73 65 63 74 | d fashioned sect |
  98. X| 69 6F 6E 20 6D 61 72 6B 65 72 20 28 68 61 73 20 | ion marker (has  |
  99. X| 74 6F 20 62 65 20 61 74 20 73 74 61 72 74 20 6F | to be at start o |
  100. X| 66 20 61 20 6C 69 6E 65 2E 29 2E 0A 30 34 33 20 | f a line.)..043  |
  101. X| 20 40 2B 20 20 20 2D 20 49 6E 73 65 72 74 20 6E |  @+   - Insert n |
  102. X| 65 77 6C 69 6E 65 2E 0A 30 34 34 20 20 40 2C 20 | ewline..044  @,  |
  103. X| 20 20 2D 20 50 61 72 61 6D 65 74 65 72 20 73 65 |   - Parameter se |
  104. X| 70 61 72 61 74 6F 72 2E 0A 30 34 35 20 20 40 2D | parator..045  @- |
  105. X| 0A 20 20 20 20 20 20 20 20 20 20 2D 20 49 67 6E | .          - Ign |
  106. X| 6F 72 65 20 65 6E 64 20 6F 66 20 6C 69 6E 65 20 | ore end of line  |
  107. X| 6D 61 72 6B 65 72 20 28 68 61 73 20 74 6F 20 62 | marker (has to b |
  108. X| 65 20 61 74 20 65 6E 64 20 6F 66 20 6C 69 6E 65 | e at end of line |
  109. X| 29 2E 0A 30 34 36 20 20 40 2E 20 20 20 2D 20 49 | )..046  @.   - I |
  110. X| 4C 4C 45 47 41 4C 2E 0A 30 34 37 20 20 40 2F 20 | LLEGAL..047  @/  |
  111. X| 20 20 2D 20 45 6D 70 68 61 73 69 73 65 64 20 74 |   - Emphasised t |
  112. X| 65 78 74 2E 0A 30 34 38 20 20 40 30 20 20 20 2D | ext..048  @0   - |
  113. X| 20 49 4C 4C 45 47 41 4C 2E 0A 30 34 39 20 20 40 |  ILLEGAL..049  @ |
  114. X| 31 20 20 20 2D 20 46 6F 72 6D 61 6C 20 70 61 72 | 1   - Formal par |
  115. X| 61 6D 65 74 65 72 20 31 2E 0A 30 35 30 20 20 40 | ameter 1..050  @ |
  116. X| 32 20 20 20 2D 20 46 6F 72 6D 61 6C 20 70 61 72 | 2   - Formal par |
  117. X| 61 6D 65 74 65 72 20 32 2E 0A 30 35 31 20 20 40 | ameter 2..051  @ |
  118. X| 33 20 20 20 2D 20 46 6F 72 6D 61 6C 20 70 61 72 | 3   - Formal par |
  119. X| 61 6D 65 74 65 72 20 33 2E 0A 30 35 32 20 20 40 | ameter 3..052  @ |
  120. X| 34 20 20 20 2D 20 46 6F 72 6D 61 6C 20 70 61 72 | 4   - Formal par |
  121. X| 61 6D 65 74 65 72 20 34 2E 0A 30 35 33 20 20 40 | ameter 4..053  @ |
  122. X| 35 20 20 20 2D 20 46 6F 72 6D 61 6C 20 70 61 72 | 5   - Formal par |
  123. X| 61 6D 65 74 65 72 20 35 2E 0A 30 35 34 20 20 40 | ameter 5..054  @ |
  124. X| 36 20 20 20 2D 20 46 6F 72 6D 61 6C 20 70 61 72 | 6   - Formal par |
  125. X| 61 6D 65 74 65 72 20 36 2E 0A 30 35 35 20 20 40 | ameter 6..055  @ |
  126. X| 37 20 20 20 2D 20 46 6F 72 6D 61 6C 20 70 61 72 | 7   - Formal par |
  127. X| 61 6D 65 74 65 72 20 37 2E 0A 30 35 36 20 20 40 | ameter 7..056  @ |
  128. X| 38 20 20 20 2D 20 46 6F 72 6D 61 6C 20 70 61 72 | 8   - Formal par |
  129. X| 61 6D 65 74 65 72 20 38 2E 0A 30 35 37 20 20 40 | ameter 8..057  @ |
  130. X| 39 20 20 20 2D 20 46 6F 72 6D 61 6C 20 70 61 72 | 9   - Formal par |
  131. X| 61 6D 65 74 65 72 20 39 2E 0A 30 35 38 20 20 40 | ameter 9..058  @ |
  132. X| 3A 20 20 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 30 | :   - ILLEGAL..0 |
  133. X| 35 39 20 20 40 3B 20 20 20 2D 20 49 4C 4C 45 47 | 59  @;   - ILLEG |
  134. X| 41 4C 2E 0A 30 36 30 20 20 40 3C 20 20 20 2D 20 | AL..060  @<   -  |
  135. X| 4F 70 65 6E 20 6D 61 63 72 6F 20 6E 61 6D 65 2E | Open macro name. |
  136. X| 0A 30 36 31 20 20 40 3D 40 20 20 2D 20 53 65 74 | .061  @=@  - Set |
  137. X| 20 73 70 65 63 69 61 6C 20 63 68 61 72 61 63 74 |  special charact |
  138. X| 65 72 2E 0A 30 36 32 20 20 40 3E 20 20 20 2D 20 | er..062  @>   -  |
  139. X| 43 6C 6F 73 65 20 6D 61 63 72 6F 20 6E 61 6D 65 | Close macro name |
  140. X| 2E 0A 30 36 33 20 20 40 3F 20 20 20 2D 20 49 4C | ..063  @?   - IL |
  141. X| 4C 45 47 41 4C 2E 0A 30 36 34 20 20 40 40 20 20 | LEGAL..064  @@   |
  142. X| 20 2D 20 49 6E 73 65 72 74 20 73 70 65 63 69 61 |  - Insert specia |
  143. X| 6C 20 63 68 61 72 61 63 74 65 72 20 69 6E 74 6F | l character into |
  144. X| 20 74 65 78 74 2E 0A 40 41 20 20 30 36 35 20 20 |  text..@A  065   |
  145. X| 20 2D 20 4E 65 77 20 73 65 63 74 69 6F 6E 20 28 |  - New section ( |
  146. X| 6C 65 76 65 6C 20 31 29 2E 20 4D 75 73 74 20 62 | level 1). Must b |
  147. X| 65 20 61 74 20 73 74 61 72 74 20 6F 66 20 61 20 | e at start of a  |
  148. X| 6C 69 6E 65 2E 0A 40 42 20 20 30 36 36 20 20 20 | line..@B  066    |
  149. X| 2D 20 4E 65 77 20 73 65 63 74 69 6F 6E 20 28 6C | - New section (l |
  150. X| 65 76 65 6C 20 32 29 2E 20 4D 75 73 74 20 62 65 | evel 2). Must be |
  151. X| 20 61 74 20 73 74 61 72 74 20 6F 66 20 61 20 6C |  at start of a l |
  152. X| 69 6E 65 2E 0A 40 43 20 20 30 36 37 20 20 20 2D | ine..@C  067   - |
  153. X| 20 4E 65 77 20 73 65 63 74 69 6F 6E 20 28 6C 65 |  New section (le |
  154. X| 76 65 6C 20 33 29 2E 20 4D 75 73 74 20 62 65 20 | vel 3). Must be  |
  155. X| 61 74 20 73 74 61 72 74 20 6F 66 20 61 20 6C 69 | at start of a li |
  156. X| 6E 65 2E 0A 40 44 20 20 30 36 38 20 20 20 2D 20 | ne..@D  068   -  |
  157. X| 4E 65 77 20 73 65 63 74 69 6F 6E 20 28 6C 65 76 | New section (lev |
  158. X| 65 6C 20 34 29 2E 20 4D 75 73 74 20 62 65 20 61 | el 4). Must be a |
  159. X| 74 20 73 74 61 72 74 20 6F 66 20 61 20 6C 69 6E | t start of a lin |
  160. X| 65 2E 0A 40 45 20 20 30 36 39 20 20 20 2D 20 4E | e..@E  069   - N |
  161. X| 65 77 20 73 65 63 74 69 6F 6E 20 28 6C 65 76 65 | ew section (leve |
  162. X| 6C 20 35 29 2E 20 4D 75 73 74 20 62 65 20 61 74 | l 5). Must be at |
  163. X| 20 73 74 61 72 74 20 6F 66 20 61 20 6C 69 6E 65 |  start of a line |
  164. X| 2E 0A 30 37 30 20 20 40 46 20 20 20 2D 20 49 4C | ..070  @F   - IL |
  165. X| 4C 45 47 41 4C 2E 0A 30 37 31 20 20 40 47 20 20 | LEGAL..071  @G   |
  166. X| 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 30 37 32 20 |  - ILLEGAL..072  |
  167. X| 20 40 48 20 20 20 2D 20 49 4C 4C 45 47 41 4C 2E |  @H   - ILLEGAL. |
  168. X| 0A 30 37 33 20 20 40 49 20 20 20 2D 20 49 6E 63 | .073  @I   - Inc |
  169. X| 6C 75 64 65 20 66 69 6C 65 2E 20 57 69 6C 6C 20 | lude file. Will  |
  170. X| 70 72 6F 76 6F 6B 65 20 61 6E 20 65 72 72 6F 72 | provoke an error |
  171. X| 20 68 65 72 65 20 74 68 6F 75 67 68 2E 0A 30 37 |  here though..07 |
  172. X| 34 20 20 40 4A 20 20 20 2D 20 49 4C 4C 45 47 41 | 4  @J   - ILLEGA |
  173. X| 4C 2E 0A 30 37 35 20 20 40 4B 20 20 20 2D 20 49 | L..075  @K   - I |
  174. X| 4C 4C 45 47 41 4C 2E 0A 30 37 36 20 20 40 4C 20 | LLEGAL..076  @L  |
  175. X| 20 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 30 37 37 |   - ILLEGAL..077 |
  176. X| 20 20 40 4D 20 20 20 2D 20 54 61 67 73 20 6D 61 |   @M   - Tags ma |
  177. X| 63 72 6F 20 61 73 20 62 65 69 6E 67 20 61 6C 6C | cro as being all |
  178. X| 6F 77 65 64 20 74 6F 20 62 65 20 63 61 6C 6C 65 | owed to be calle |
  179. X| 64 20 6D 61 6E 79 20 74 69 6D 65 73 2E 0A 30 37 | d many times..07 |
  180. X| 38 20 20 40 4E 20 20 20 2D 20 49 4C 4C 45 47 41 | 8  @N   - ILLEGA |
  181. X| 4C 2E 0A 40 4F 20 20 20 30 37 39 20 20 2D 20 4E | L..@O   079  - N |
  182. X| 65 77 20 6D 61 63 72 6F 20 61 74 74 61 63 68 65 | ew macro attache |
  183. X| 64 20 74 6F 20 6F 75 74 70 75 74 20 66 69 6C 65 | d to output file |
  184. X| 2E 20 48 61 73 20 74 6F 20 62 65 20 61 74 20 73 | . Has to be at s |
  185. X| 74 61 72 74 20 6F 66 20 6C 69 6E 65 2E 0A 30 38 | tart of line..08 |
  186. X| 30 20 20 40 50 20 20 20 2D 20 50 72 61 67 6D 61 | 0  @P   - Pragma |
  187. X| 2E 20 57 69 6C 6C 20 63 61 75 73 65 20 65 72 72 | . Will cause err |
  188. X| 6F 72 20 68 65 72 65 20 74 68 6F 75 67 68 2E 0A | or here though.. |
  189. X| 30 38 31 20 20 40 51 20 20 20 2D 20 49 4C 4C 45 | 081  @Q   - ILLE |
  190. X| 47 41 4C 2E 0A 30 38 32 20 20 40 52 20 20 20 2D | GAL..082  @R   - |
  191. X| 20 49 4C 4C 45 47 41 4C 2E 0A 30 38 33 20 20 40 |  ILLEGAL..083  @ |
  192. X| 53 20 20 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 30 | S   - ILLEGAL..0 |
  193. X| 38 34 20 20 40 54 20 20 20 2D 20 54 79 70 65 73 | 84  @T   - Types |
  194. X| 65 74 74 65 72 20 64 69 72 65 63 74 69 76 65 2E | etter directive. |
  195. X| 20 57 69 6C 6C 20 63 61 75 73 65 20 61 6E 20 65 |  Will cause an e |
  196. X| 72 72 6F 72 20 68 65 72 65 20 74 68 6F 75 67 68 | rror here though |
  197. X| 2E 0A 30 38 35 20 20 40 55 20 20 20 2D 20 49 4C | ..085  @U   - IL |
  198. X| 4C 45 47 41 4C 2E 0A 30 38 36 20 20 40 56 20 20 | LEGAL..086  @V   |
  199. X| 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 30 38 37 20 |  - ILLEGAL..087  |
  200. X| 20 40 57 20 20 20 2D 20 49 4C 4C 45 47 41 4C 2E |  @W   - ILLEGAL. |
  201. X| 0A 30 38 38 20 20 40 58 20 20 20 2D 20 49 4C 4C | .088  @X   - ILL |
  202. X| 45 47 41 4C 2E 0A 30 38 39 20 20 40 59 20 20 20 | EGAL..089  @Y    |
  203. X| 2D 20 49 4C 4C 45 47 41 4C 2E 0A 30 39 30 20 20 | - ILLEGAL..090   |
  204. X| 40 5A 20 20 20 2D 20 54 61 67 73 20 6D 61 63 72 | @Z   - Tags macr |
  205. X| 6F 20 61 73 20 62 65 69 6E 67 20 61 6C 6C 6F 77 | o as being allow |
  206. X| 65 64 20 74 6F 20 62 65 20 63 61 6C 6C 65 64 20 | ed to be called  |
  207. X| 7A 65 72 6F 20 74 69 6D 65 73 2E 0A 30 39 31 20 | zero times..091  |
  208. X| 20 40 5B 20 20 20 2D 20 49 4C 4C 45 47 41 4C 2E |  @[   - ILLEGAL. |
  209. X| 0A 30 39 32 20 20 40 5C 20 20 20 2D 20 49 4C 4C | .092  @\   - ILL |
  210. X| 45 47 41 4C 2E 0A 30 39 33 20 20 40 5D 20 20 20 | EGAL..093  @]    |
  211. X| 2D 20 49 4C 4C 45 47 41 4C 2E 0A 30 39 34 20 20 | - ILLEGAL..094   |
  212. X| 40 5E 44 28 30 36 35 29 20 2D 20 49 6E 73 65 72 | @^D(065) - Inser |
  213. X| 74 20 63 6F 6E 74 72 6F 6C 20 63 68 61 72 61 63 | t control charac |
  214. X| 74 65 72 20 69 6E 74 6F 20 74 65 78 74 0A 30 39 | ter into text.09 |
  215. X| 35 20 20 40 5F 20 20 20 2D 20 49 4C 4C 45 47 41 | 5  @_   - ILLEGA |
  216. X| 4C 2E 0A 30 39 36 20 20 40 60 20 20 20 2D 20 49 | L..096  @`   - I |
  217. X| 4C 4C 45 47 41 4C 2E 0A 40 61 20 20 20 30 39 37 | LLEGAL..@a   097 |
  218. X| 20 20 2D 20 4E 65 77 20 73 65 63 74 69 6F 6E 20 |   - New section  |
  219. X| 28 6C 65 76 65 6C 20 31 29 2E 20 4D 75 73 74 20 | (level 1). Must  |
  220. X| 62 65 20 61 74 20 73 74 61 72 74 20 6F 66 20 61 | be at start of a |
  221. X| 20 6C 69 6E 65 2E 0A 40 62 20 20 20 30 39 38 20 |  line..@b   098  |
  222. X| 20 2D 20 4E 65 77 20 73 65 63 74 69 6F 6E 20 28 |  - New section ( |
  223. X| 6C 65 76 65 6C 20 31 29 2E 20 4D 75 73 74 20 62 | level 1). Must b |
  224. X| 65 20 61 74 20 73 74 61 72 74 20 6F 66 20 61 20 | e at start of a  |
  225. X| 6C 69 6E 65 2E 0A 40 63 20 20 20 30 39 39 20 20 | line..@c   099   |
  226. X| 2D 20 4E 65 77 20 73 65 63 74 69 6F 6E 20 28 6C | - New section (l |
  227. X| 65 76 65 6C 20 31 29 2E 20 4D 75 73 74 20 62 65 | evel 1). Must be |
  228. X| 20 61 74 20 73 74 61 72 74 20 6F 66 20 61 20 6C |  at start of a l |
  229. X| 69 6E 65 2E 0A 40 64 20 20 20 31 30 30 20 20 2D | ine..@d   100  - |
  230. X| 20 4E 65 77 20 73 65 63 74 69 6F 6E 20 28 6C 65 |  New section (le |
  231. X| 76 65 6C 20 31 29 2E 20 4D 75 73 74 20 62 65 20 | vel 1). Must be  |
  232. X| 61 74 20 73 74 61 72 74 20 6F 66 20 61 20 6C 69 | at start of a li |
  233. X| 6E 65 2E 0A 40 65 20 20 20 31 30 31 20 20 2D 20 | ne..@e   101  -  |
  234. X| 4E 65 77 20 73 65 63 74 69 6F 6E 20 28 6C 65 76 | New section (lev |
  235. X| 65 6C 20 31 29 2E 20 4D 75 73 74 20 62 65 20 61 | el 1). Must be a |
  236. X| 74 20 73 74 61 72 74 20 6F 66 20 61 20 6C 69 6E | t start of a lin |
  237. X| 65 2E 0A 31 30 32 20 20 40 66 20 20 20 2D 20 49 | e..102  @f   - I |
  238. X| 4C 4C 45 47 41 4C 2E 0A 31 30 33 20 20 40 67 20 | LLEGAL..103  @g  |
  239. X| 20 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 31 30 34 |   - ILLEGAL..104 |
  240. X| 20 20 40 68 20 20 20 2D 20 49 4C 4C 45 47 41 4C |   @h   - ILLEGAL |
  241. X| 2E 0A 31 30 35 20 20 40 69 20 20 20 2D 20 49 6E | ..105  @i   - In |
  242. X| 63 6C 75 64 65 20 66 69 6C 65 2E 20 57 69 6C 6C | clude file. Will |
  243. X| 20 70 72 6F 76 6F 6B 65 20 61 6E 20 65 72 72 6F |  provoke an erro |
  244. X| 72 20 68 65 72 65 20 74 68 6F 75 67 68 2E 0A 31 | r here though..1 |
  245. X| 30 36 20 20 40 6A 20 20 20 2D 20 49 4C 4C 45 47 | 06  @j   - ILLEG |
  246. X| 41 4C 2E 0A 31 30 37 20 20 40 6B 20 20 20 2D 20 | AL..107  @k   -  |
  247. X| 49 4C 4C 45 47 41 4C 2E 0A 31 30 38 20 20 40 6C | ILLEGAL..108  @l |
  248. X| 20 20 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 31 30 |    - ILLEGAL..10 |
  249. X| 39 20 20 40 6D 20 20 20 2D 20 54 61 67 73 20 6D | 9  @m   - Tags m |
  250. X| 61 63 72 6F 20 61 73 20 62 65 69 6E 67 20 61 6C | acro as being al |
  251. X| 6C 6F 77 65 64 20 74 6F 20 62 65 20 63 61 6C 6C | lowed to be call |
  252. X| 65 64 20 6D 61 6E 79 20 74 69 6D 65 73 2E 0A 31 | ed many times..1 |
  253. X| 31 30 20 20 40 6E 20 20 20 2D 20 49 4C 4C 45 47 | 10  @n   - ILLEG |
  254. X| 41 4C 2E 0A 40 4F 20 20 20 31 31 31 20 20 2D 20 | AL..@O   111  -  |
  255. X| 4E 65 77 20 6D 61 63 72 6F 20 61 74 74 61 63 68 | New macro attach |
  256. X| 65 64 20 74 6F 20 6F 75 74 70 75 74 20 66 69 6C | ed to output fil |
  257. X| 65 2E 20 48 61 73 20 74 6F 20 62 65 20 61 74 20 | e. Has to be at  |
  258. X| 73 74 61 72 74 20 6F 66 20 6C 69 6E 65 2E 0A 31 | start of line..1 |
  259. X| 31 32 20 20 40 70 20 20 20 2D 20 50 72 61 67 6D | 12  @p   - Pragm |
  260. X| 61 2E 20 57 69 6C 6C 20 63 61 75 73 65 20 65 72 | a. Will cause er |
  261. X| 72 6F 72 20 68 65 72 65 20 74 68 6F 75 67 68 2E | ror here though. |
  262. X| 0A 31 31 33 20 20 40 71 20 20 20 2D 20 49 4C 4C | .113  @q   - ILL |
  263. X| 45 47 41 4C 2E 0A 31 31 34 20 20 40 72 20 20 20 | EGAL..114  @r    |
  264. X| 2D 20 49 4C 4C 45 47 41 4C 2E 0A 31 31 35 20 20 | - ILLEGAL..115   |
  265. X| 40 73 20 20 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A | @s   - ILLEGAL.. |
  266. X| 31 31 36 20 20 40 74 20 20 20 2D 20 54 79 70 65 | 116  @t   - Type |
  267. X| 73 65 74 74 65 72 20 64 69 72 65 63 74 69 76 65 | setter directive |
  268. X| 2E 20 57 69 6C 6C 20 63 61 75 73 65 20 61 6E 20 | . Will cause an  |
  269. X| 65 72 72 6F 72 20 68 65 72 65 20 74 68 6F 75 67 | error here thoug |
  270. X| 68 2E 0A 31 31 37 20 20 40 75 20 20 20 2D 20 49 | h..117  @u   - I |
  271. X| 4C 4C 45 47 41 4C 2E 0A 31 31 38 20 20 40 76 20 | LLEGAL..118  @v  |
  272. X| 20 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 31 31 39 |   - ILLEGAL..119 |
  273. X| 20 20 40 77 20 20 20 2D 20 49 4C 4C 45 47 41 4C |   @w   - ILLEGAL |
  274. X| 2E 0A 31 32 30 20 20 40 78 20 20 20 2D 20 49 4C | ..120  @x   - IL |
  275. X| 4C 45 47 41 4C 2E 0A 31 32 31 20 20 40 79 20 20 | LEGAL..121  @y   |
  276. X| 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 31 32 32 20 |  - ILLEGAL..122  |
  277. X| 20 40 7A 20 20 20 2D 20 54 61 67 73 20 6D 61 63 |  @z   - Tags mac |
  278. X| 72 6F 20 61 73 20 62 65 69 6E 67 20 61 6C 6C 6F | ro as being allo |
  279. X| 77 65 64 20 74 6F 20 62 65 20 63 61 6C 6C 65 64 | wed to be called |
  280. X| 20 7A 65 72 6F 20 74 69 6D 65 73 2E 0A 31 32 33 |  zero times..123 |
  281. X| 20 20 40 7B 20 20 20 2D 20 4F 70 65 6E 20 6D 61 |   @{   - Open ma |
  282. X| 63 72 6F 20 62 6F 64 79 2E 0A 31 32 34 20 20 40 | cro body..124  @ |
  283. X| 7C 20 20 20 2D 20 49 4C 4C 45 47 41 4C 2E 0A 31 | |   - ILLEGAL..1 |
  284. X| 32 35 20 20 40 7D 20 20 20 2D 20 43 6C 6F 73 65 | 25  @}   - Close |
  285. X| 20 6D 61 63 72 6F 20 62 6F 64 79 2E 0A 31 32 36 |  macro body..126 |
  286. X| 20 20 40 7E 20 20 20 2D 20 49 4C 4C 45 47 41 4C |   @~   - ILLEGAL |
  287. X| 2E 0A 31 32 37 20 74 6F 20 32 35 35 20 61 72 65 | ..127 to 255 are |
  288. X| 20 6E 6F 74 20 73 74 61 6E 64 61 72 64 20 70 72 |  not standard pr |
  289. X| 69 6E 74 61 62 6C 65 20 41 53 43 49 49 20 63 68 | intable ASCII ch |
  290. X| 61 72 61 63 74 65 72 73 2E 0A                   | aracters..       |
  291. X+-------------------------------------------------+------------------+
  292. X
  293. X
  294. X=========================== Start of LINE LIST DUMP ============================
  295. X
  296. Globl Local| Text
  297. X-----------+--------------------------------------------------------------------
  298. X00001 00001| Scanner Test: Special Sequence Recognition<010>
  299. X00002 00002| ==========================================<010>
  300. X00003 00003| This test tests to see that FunnelWeb is recognising the full set of special<010>
  301. X00004 00004| sequences.<010>
  302. X00005 00005| <010>
  303. X00006 00006| Turn Off the Parser<010>
  304. X00007 00007| -------------------<010>
  305. X00008 00008| First we cause a deliberate scanner error so as to prevent the parser from<010>
  306. X00009 00009| generating lots of errors over the syntactic rubbish presented here.<010>
  307. X00010 00010| <010>
  308. X00011 00011|    @ <010>
  309. X00012 00012| <010>
  310. X00013 00013| List of All Possible Special Sequences<010>
  311. X00014 00014| --------------------------------------<010>
  312. X00015 00015| The following is a list of the default special character followed by each of<010>
  313. X00016 00016| the ASCII printables.<010>
  314. X00017 00017| 000 to 031 are unprintable control characters.<010>
  315. X00018 00018| <010>
  316. X00019 00019| 032  @    - ILLEGAL.  (Note: Hyphen is needed to avoid trailing blanks error.)<010>
  317. X00020 00020| 033  @!   - Comment.<010>
  318. X00021 00021| 034  @"   - Parameter delimeter.<010>
  319. X00022 00022| 035  @#X  - Short name sequence.<010>
  320. X00023 00023| @$   036  - Define macro. Has to be at start of line.<010>
  321. X00024 00024| 037  @%   - ILLEGAL.<010>
  322. X00025 00025| 038  @&   - ILLEGAL.<010>
  323. X00026 00026| 039  @'   - ILLEGAL.<010>
  324. X00027 00027| 040  @(   - Open parameter list.<010>
  325. X00028 00028| 041  @)   - Close parameter list.<010>
  326. X00029 00029| 042<010>
  327. X00030 00030| @*        - Old fashioned section marker (has to be at start of a line.).<010>
  328. X00031 00031| 043  @+   - Insert newline.<010>
  329. X00032 00032| 044  @,   - Parameter separator.<010>
  330. X00033 00033| 045  @-<010>
  331. X00034 00034|           - Ignore end of line marker (has to be at end of line).<010>
  332. X00035 00035| 046  @.   - ILLEGAL.<010>
  333. X00036 00036| 047  @/   - Emphasised text.<010>
  334. X00037 00037| 048  @0   - ILLEGAL.<010>
  335. X00038 00038| 049  @1   - Formal parameter 1.<010>
  336. X00039 00039| 050  @2   - Formal parameter 2.<010>
  337. X00040 00040| 051  @3   - Formal parameter 3.<010>
  338. X00041 00041| 052  @4   - Formal parameter 4.<010>
  339. X00042 00042| 053  @5   - Formal parameter 5.<010>
  340. X00043 00043| 054  @6   - Formal parameter 6.<010>
  341. X00044 00044| 055  @7   - Formal parameter 7.<010>
  342. X00045 00045| 056  @8   - Formal parameter 8.<010>
  343. X00046 00046| 057  @9   - Formal parameter 9.<010>
  344. X00047 00047| 058  @:   - ILLEGAL.<010>
  345. X00048 00048| 059  @;   - ILLEGAL.<010>
  346. X00049 00049| 060  @<   - Open macro name.<010>
  347. X00050 00050| 061  @=@  - Set special character.<010>
  348. X00051 00051| 062  @>   - Close macro name.<010>
  349. X00052 00052| 063  @?   - ILLEGAL.<010>
  350. X00053 00053| 064  @@   - Insert special character into text.<010>
  351. X00054 00054| @A  065   - New section (level 1). Must be at start of a line.<010>
  352. X00055 00055| @B  066   - New section (level 2). Must be at start of a line.<010>
  353. X00056 00056| @C  067   - New section (level 3). Must be at start of a line.<010>
  354. X00057 00057| @D  068   - New section (level 4). Must be at start of a line.<010>
  355. X00058 00058| @E  069   - New section (level 5). Must be at start of a line.<010>
  356. X00059 00059| 070  @F   - ILLEGAL.<010>
  357. X00060 00060| 071  @G   - ILLEGAL.<010>
  358. X00061 00061| 072  @H   - ILLEGAL.<010>
  359. X00062 00062| 073  @I   - Include file. Will provoke an error here though.<010>
  360. X00063 00063| 074  @J   - ILLEGAL.<010>
  361. X00064 00064| 075  @K   - ILLEGAL.<010>
  362. X00065 00065| 076  @L   - ILLEGAL.<010>
  363. X00066 00066| 077  @M   - Tags macro as being allowed to be called many times.<010>
  364. X00067 00067| 078  @N   - ILLEGAL.<010>
  365. X00068 00068| @O   079  - New macro attached to output file. Has to be at start of line.<010>
  366. X00069 00069| 080  @P   - Pragma. Will cause error here though.<010>
  367. X00070 00070| 081  @Q   - ILLEGAL.<010>
  368. X00071 00071| 082  @R   - ILLEGAL.<010>
  369. X00072 00072| 083  @S   - ILLEGAL.<010>
  370. X00073 00073| 084  @T   - Typesetter directive. Will cause an error here though.<010>
  371. X00074 00074| 085  @U   - ILLEGAL.<010>
  372. X00075 00075| 086  @V   - ILLEGAL.<010>
  373. X00076 00076| 087  @W   - ILLEGAL.<010>
  374. X00077 00077| 088  @X   - ILLEGAL.<010>
  375. X00078 00078| 089  @Y   - ILLEGAL.<010>
  376. X00079 00079| 090  @Z   - Tags macro as being allowed to be called zero times.<010>
  377. X00080 00080| 091  @[   - ILLEGAL.<010>
  378. X00081 00081| 092  @\   - ILLEGAL.<010>
  379. X00082 00082| 093  @]   - ILLEGAL.<010>
  380. X00083 00083| 094  @^D(065) - Insert control character into text<010>
  381. X00084 00084| 095  @_   - ILLEGAL.<010>
  382. X00085 00085| 096  @`   - ILLEGAL.<010>
  383. X00086 00086| @a   097  - New section (level 1). Must be at start of a line.<010>
  384. X00087 00087| @b   098  - New section (level 1). Must be at start of a line.<010>
  385. X00088 00088| @c   099  - New section (level 1). Must be at start of a line.<010>
  386. X00089 00089| @d   100  - New section (level 1). Must be at start of a line.<010>
  387. X00090 00090| @e   101  - New section (level 1). Must be at start of a line.<010>
  388. X00091 00091| 102  @f   - ILLEGAL.<010>
  389. X00092 00092| 103  @g   - ILLEGAL.<010>
  390. X00093 00093| 104  @h   - ILLEGAL.<010>
  391. X00094 00094| 105  @i   - Include file. Will provoke an error here though.<010>
  392. X00095 00095| 106  @j   - ILLEGAL.<010>
  393. X00096 00096| 107  @k   - ILLEGAL.<010>
  394. X00097 00097| 108  @l   - ILLEGAL.<010>
  395. X00098 00098| 109  @m   - Tags macro as being allowed to be called many times.<010>
  396. X00099 00099| 110  @n   - ILLEGAL.<010>
  397. X00100 00100| @O   111  - New macro attached to output file. Has to be at start of line.<010>
  398. X00101 00101| 112  @p   - Pragma. Will cause error here though.<010>
  399. X00102 00102| 113  @q   - ILLEGAL.<010>
  400. X00103 00103| 114  @r   - ILLEGAL.<010>
  401. X00104 00104| 115  @s   - ILLEGAL.<010>
  402. X00105 00105| 116  @t   - Typesetter directive. Will cause an error here though.<010>
  403. X00106 00106| 117  @u   - ILLEGAL.<010>
  404. X00107 00107| 118  @v   - ILLEGAL.<010>
  405. X00108 00108| 119  @w   - ILLEGAL.<010>
  406. X00109 00109| 120  @x   - ILLEGAL.<010>
  407. X00110 00110| 121  @y   - ILLEGAL.<010>
  408. X00111 00111| 122  @z   - Tags macro as being allowed to be called zero times.<010>
  409. X00112 00112| 123  @{   - Open macro body.<010>
  410. X00113 00113| 124  @|   - ILLEGAL.<010>
  411. X00114 00114| 125  @}   - Close macro body.<010>
  412. X00115 00115| 126  @~   - ILLEGAL.<010>
  413. X00116 00116| 127 to 255 are not standard printable ASCII characters.<010>
  414. X00117 00117| <End-Of-File><010>
  415. X-----------+--------------------------------------------------------------------
  416. Globl Local| Text
  417. X
  418. X============================ End of LINE LIST DUMP =============================
  419. X
  420. X
  421. X=========================== Start of TOKEN LIST DUMP ===========================
  422. X
  423. Summary: There are 137 tokens in the token list.
  424. X
  425. Line[Column]: Token Description
  426. X-------------------------------
  427. X
  428. X0001[01]: Text. Text scrap[Grey]="Scanner Test: Special Sequence Recognition<010>
  429. X==========================================<010>
  430. This test tests to see that FunnelWeb is recognising the full set of special<010>
  431. sequences.<010>
  432. X<010>
  433. Turn Off the Parser<010>
  434. X-------------------<010>
  435. XFirst we cause a deliberate scanner error so as to prevent the parser from<010>
  436. generating lots of errors over the syntactic rubbish presented here.<010>
  437. X<010>
  438. X   "
  439. X0011[06]: Text. Text scrap[Grey]="<010>
  440. X<010>
  441. List of All Possible Special Sequences<010>
  442. X--------------------------------------<010>
  443. The following is a list of the default special character followed by each of<010>
  444. the ASCII printables.<010>
  445. X000 to 031 are unprintable control characters.<010>
  446. X<010>
  447. X032  "
  448. X0019[08]: Text. Text scrap[Grey]="   - ILLEGAL.  (Note: Hyphen is needed to avoid trailing blanks error.)<010>
  449. X033  "
  450. X0021[01]: Text. Text scrap[Grey]="034  "
  451. X0021[06]: @" Quote. 
  452. X0021[08]: Text. Text scrap[Grey]="   - Parameter delimeter.<010>
  453. X035  "
  454. X0022[06]: @# Name. Character='X'.
  455. X0022[09]: Text. Text scrap[Grey]="  - Short name sequence.<010>
  456. X"
  457. X0023[01]: @$ Macro defn. 
  458. X0023[03]: Text. Text scrap[Grey]="   036  - Define macro. Has to be at start of line.<010>
  459. X037  "
  460. X0024[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  461. X038  "
  462. X0025[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  463. X039  "
  464. X0026[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  465. X040  "
  466. X0027[06]: @( Open param. 
  467. X0027[08]: Text. Text scrap[Grey]="   - Open parameter list.<010>
  468. X041  "
  469. X0028[06]: @} Close param. 
  470. X0028[08]: Text. Text scrap[Grey]="   - Close parameter list.<010>
  471. X042<010>
  472. X"
  473. X0030[03]: Text. Text scrap[Grey]="        - Old fashioned section marker (has to be at start of a line.).<010>
  474. X043  "
  475. X0031[06]: Text. Text scrap[White]="<010>
  476. X"
  477. X0031[08]: Text. Text scrap[Grey]="   - Insert newline.<010>
  478. X044  "
  479. X0032[06]: @, Comma. 
  480. X0032[08]: Text. Text scrap[Grey]="   - Parameter separator.<010>
  481. X045  "
  482. X0034[01]: Text. Text scrap[Grey]="          - Ignore end of line marker (has to be at end of line).<010>
  483. X046  "
  484. X0035[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  485. X047  "
  486. X0036[06]: @/ Emphasise. 
  487. X0036[08]: Text. Text scrap[Grey]="   - Emphasised text.<010>
  488. X048  "
  489. X0037[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  490. X049  "
  491. X0038[06]: @n Parameter. Parameterno=1.
  492. X0038[08]: Text. Text scrap[Grey]="   - Formal parameter 1.<010>
  493. X050  "
  494. X0039[06]: @n Parameter. Parameterno=2.
  495. X0039[08]: Text. Text scrap[Grey]="   - Formal parameter 2.<010>
  496. X051  "
  497. X0040[06]: @n Parameter. Parameterno=3.
  498. X0040[08]: Text. Text scrap[Grey]="   - Formal parameter 3.<010>
  499. X052  "
  500. X0041[06]: @n Parameter. Parameterno=4.
  501. X0041[08]: Text. Text scrap[Grey]="   - Formal parameter 4.<010>
  502. X053  "
  503. X0042[06]: @n Parameter. Parameterno=5.
  504. X0042[08]: Text. Text scrap[Grey]="   - Formal parameter 5.<010>
  505. X054  "
  506. X0043[06]: @n Parameter. Parameterno=6.
  507. X0043[08]: Text. Text scrap[Grey]="   - Formal parameter 6.<010>
  508. X055  "
  509. X0044[06]: @n Parameter. Parameterno=7.
  510. X0044[08]: Text. Text scrap[Grey]="   - Formal parameter 7.<010>
  511. X056  "
  512. X0045[06]: @n Parameter. Parameterno=8.
  513. X0045[08]: Text. Text scrap[Grey]="   - Formal parameter 8.<010>
  514. X057  "
  515. X0046[06]: @n Parameter. Parameterno=9.
  516. X0046[08]: Text. Text scrap[Grey]="   - Formal parameter 9.<010>
  517. X058  "
  518. X0047[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  519. X059  "
  520. X0048[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  521. X060  "
  522. X0049[06]: @< Open name. 
  523. X0049[08]: Text. Text scrap[Grey]="   - Open macro name.<010>
  524. X061  "
  525. X0050[09]: Text. Text scrap[Grey]="  - Set special character.<010>
  526. X062  "
  527. X0051[06]: @> Close name. 
  528. X0051[08]: Text. Text scrap[Grey]="   - Close macro name.<010>
  529. X063  "
  530. X0052[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  531. X064  "
  532. X0053[06]: Text. Text scrap[Grey]="@"
  533. X0053[08]: Text. Text scrap[Grey]="   - Insert special character into text.<010>
  534. X"
  535. X0054[01]: @A New section (Level 1). 
  536. X0054[03]: Text. Text scrap[Grey]="  065   - New section (level 1). Must be at start of a line.<010>
  537. X"
  538. X0055[01]: @B New section (Level 2). 
  539. X0055[03]: Text. Text scrap[Grey]="  066   - New section (level 2). Must be at start of a line.<010>
  540. X"
  541. X0056[01]: @C New section (Level 3). 
  542. X0056[03]: Text. Text scrap[Grey]="  067   - New section (level 3). Must be at start of a line.<010>
  543. X"
  544. X0057[01]: @D New section (Level 4). 
  545. X0057[03]: Text. Text scrap[Grey]="  068   - New section (level 4). Must be at start of a line.<010>
  546. X"
  547. X0058[01]: @E New section (Level 5). 
  548. X0058[03]: Text. Text scrap[Grey]="  069   - New section (level 5). Must be at start of a line.<010>
  549. X070  "
  550. X0059[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  551. X071  "
  552. X0060[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  553. X072  "
  554. X0061[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  555. X073  "
  556. X0063[01]: Text. Text scrap[Grey]="074  "
  557. X0063[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  558. X075  "
  559. X0064[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  560. X076  "
  561. X0065[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  562. X077  "
  563. X0066[06]: @M Many calls. 
  564. X0066[08]: Text. Text scrap[Grey]="   - Tags macro as being allowed to be called many times.<010>
  565. X078  "
  566. X0067[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  567. X"
  568. X0068[01]: @F File defn. 
  569. X0068[03]: Text. Text scrap[Grey]="   079  - New macro attached to output file. Has to be at start of line.<010>
  570. X080  "
  571. X0070[01]: Text. Text scrap[Grey]="081  "
  572. X0070[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  573. X082  "
  574. X0071[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  575. X083  "
  576. X0072[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  577. X084  "
  578. X0074[01]: Text. Text scrap[Grey]="085  "
  579. X0074[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  580. X086  "
  581. X0075[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  582. X087  "
  583. X0076[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  584. X088  "
  585. X0077[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  586. X089  "
  587. X0078[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  588. X090  "
  589. X0079[06]: @Z Zero calls. 
  590. X0079[08]: Text. Text scrap[Grey]="   - Tags macro as being allowed to be called zero times.<010>
  591. X091  "
  592. X0080[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  593. X092  "
  594. X0081[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  595. X093  "
  596. X0082[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  597. X094  "
  598. X0083[06]: Text. Text scrap[Grey]="A"
  599. X0083[14]: Text. Text scrap[Grey]=" - Insert control character into text<010>
  600. X095  "
  601. X0084[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  602. X096  "
  603. X0085[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  604. X"
  605. X0086[01]: @A New section (Level 1). 
  606. X0086[03]: Text. Text scrap[Grey]="   097  - New section (level 1). Must be at start of a line.<010>
  607. X"
  608. X0087[01]: @B New section (Level 2). 
  609. X0087[03]: Text. Text scrap[Grey]="   098  - New section (level 1). Must be at start of a line.<010>
  610. X"
  611. X0088[01]: @C New section (Level 3). 
  612. X0088[03]: Text. Text scrap[Grey]="   099  - New section (level 1). Must be at start of a line.<010>
  613. X"
  614. X0089[01]: @D New section (Level 4). 
  615. X0089[03]: Text. Text scrap[Grey]="   100  - New section (level 1). Must be at start of a line.<010>
  616. X"
  617. X0090[01]: @E New section (Level 5). 
  618. X0090[03]: Text. Text scrap[Grey]="   101  - New section (level 1). Must be at start of a line.<010>
  619. X102  "
  620. X0091[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  621. X103  "
  622. X0092[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  623. X104  "
  624. X0093[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  625. X105  "
  626. X0095[01]: Text. Text scrap[Grey]="106  "
  627. X0095[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  628. X107  "
  629. X0096[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  630. X108  "
  631. X0097[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  632. X109  "
  633. X0098[06]: @M Many calls. 
  634. X0098[08]: Text. Text scrap[Grey]="   - Tags macro as being allowed to be called many times.<010>
  635. X110  "
  636. X0099[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  637. X"
  638. X0100[01]: @F File defn. 
  639. X0100[03]: Text. Text scrap[Grey]="   111  - New macro attached to output file. Has to be at start of line.<010>
  640. X112  "
  641. X0102[01]: Text. Text scrap[Grey]="113  "
  642. X0102[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  643. X114  "
  644. X0103[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  645. X115  "
  646. X0104[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  647. X116  "
  648. X0106[01]: Text. Text scrap[Grey]="117  "
  649. X0106[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  650. X118  "
  651. X0107[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  652. X119  "
  653. X0108[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  654. X120  "
  655. X0109[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  656. X121  "
  657. X0110[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  658. X122  "
  659. X0111[06]: @Z Zero calls. 
  660. X0111[08]: Text. Text scrap[Grey]="   - Tags macro as being allowed to be called zero times.<010>
  661. X123  "
  662. X0112[06]: @{ Open defn. 
  663. X0112[08]: Text. Text scrap[Grey]="   - Open macro body.<010>
  664. X124  "
  665. X0113[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  666. X125  "
  667. X0114[06]: @} Close defn. 
  668. X0114[08]: Text. Text scrap[Grey]="   - Close macro body.<010>
  669. X126  "
  670. X0115[08]: Text. Text scrap[Grey]="   - ILLEGAL.<010>
  671. X127 to 255 are not standard printable ASCII characters.<010>
  672. X"
  673. X0117[01]: End Of File. 
  674. X============================ End of TOKEN LIST DUMP ============================
  675. X
  676. Macro table dump skipped (Parser was not invoked).
  677. Document list dump skipped (Parser was not invoked).
  678. X
  679. Global Local| Input File
  680. X------------+-------------------------------------------------------------------
  681. X     1     1| Scanner Test: Special Sequence Recognition
  682. X     2     2| ==========================================
  683. X     3     3| This test tests to see that FunnelWeb is recognising the full set of special
  684. X     4     4| sequences.
  685. X     5     5| 
  686. X     6     6| Turn Off the Parser
  687. X     7     7| -------------------
  688. X     8     8| First we cause a deliberate scanner error so as to prevent the parser from
  689. X     9     9| generating lots of errors over the syntactic rubbish presented here.
  690. X    10    10| 
  691. X    11    11|    @ 
  692. X       Error|....^<special><space> is not a legal special sequence.
  693. X     Warning|.....^Line has trailing spaces up to and including this space.
  694. X    12    12| 
  695. X    13    13| List of All Possible Special Sequences
  696. X    14    14| --------------------------------------
  697. X    15    15| The following is a list of the default special character followed by each of
  698. X    16    16| the ASCII printables.
  699. X    17    17| 000 to 031 are unprintable control characters.
  700. X    18    18| 
  701. X    19    19| 032  @    - ILLEGAL.  (Note: Hyphen is needed to avoid trailing blanks error.)
  702. X       Error|......^<special><space> is not a legal special sequence.
  703. X    20    20| 033  @!   - Comment.
  704. X    21    21| 034  @"   - Parameter delimeter.
  705. X    22    22| 035  @#X  - Short name sequence.
  706. X    23    23| @$   036  - Define macro. Has to be at start of line.
  707. X    24    24| 037  @%   - ILLEGAL.
  708. X       Error|......^Unknown special sequence.
  709. X    25    25| 038  @&   - ILLEGAL.
  710. X       Error|......^Unknown special sequence.
  711. X    26    26| 039  @'   - ILLEGAL.
  712. X       Error|......^Unknown special sequence.
  713. X    27    27| 040  @(   - Open parameter list.
  714. X    28    28| 041  @)   - Close parameter list.
  715. X    29    29| 042
  716. X    30    30| @*        - Old fashioned section marker (has to be at start of a line.).
  717. X       Error|.^Unknown special sequence.
  718. X    31    31| 043  @+   - Insert newline.
  719. X    32    32| 044  @,   - Parameter separator.
  720. X    33    33| 045  @-
  721. X    34    34|           - Ignore end of line marker (has to be at end of line).
  722. X    35    35| 046  @.   - ILLEGAL.
  723. X       Error|......^Unknown special sequence.
  724. X    36    36| 047  @/   - Emphasised text.
  725. X    37    37| 048  @0   - ILLEGAL.
  726. X       Error|......^Unknown special sequence.
  727. X    38    38| 049  @1   - Formal parameter 1.
  728. X    39    39| 050  @2   - Formal parameter 2.
  729. X    40    40| 051  @3   - Formal parameter 3.
  730. X    41    41| 052  @4   - Formal parameter 4.
  731. X    42    42| 053  @5   - Formal parameter 5.
  732. X    43    43| 054  @6   - Formal parameter 6.
  733. X    44    44| 055  @7   - Formal parameter 7.
  734. X    45    45| 056  @8   - Formal parameter 8.
  735. X    46    46| 057  @9   - Formal parameter 9.
  736. X    47    47| 058  @:   - ILLEGAL.
  737. X       Error|......^Unknown special sequence.
  738. X    48    48| 059  @;   - ILLEGAL.
  739. X       Error|......^Unknown special sequence.
  740. X    49    49| 060  @<   - Open macro name.
  741. X    50    50| 061  @=@  - Set special character.
  742. X    51    51| 062  @>   - Close macro name.
  743. X    52    52| 063  @?   - ILLEGAL.
  744. X       Error|......^Unknown special sequence.
  745. X    53    53| 064  @@   - Insert special character into text.
  746. X    54    54| @A  065   - New section (level 1). Must be at start of a line.
  747. X    55    55| @B  066   - New section (level 2). Must be at start of a line.
  748. X    56    56| @C  067   - New section (level 3). Must be at start of a line.
  749. X    57    57| @D  068   - New section (level 4). Must be at start of a line.
  750. X    58    58| @E  069   - New section (level 5). Must be at start of a line.
  751. X    59    59| 070  @F   - ILLEGAL.
  752. X       Error|......^Unknown special sequence.
  753. X    60    60| 071  @G   - ILLEGAL.
  754. X       Error|......^Unknown special sequence.
  755. X    61    61| 072  @H   - ILLEGAL.
  756. X       Error|......^Unknown special sequence.
  757. X    62    62| 073  @I   - Include file. Will provoke an error here though.
  758. X       Error|......^Include sequence must be at the beginning of a line.
  759. X            |......^Include ignored.
  760. X    63    63| 074  @J   - ILLEGAL.
  761. X       Error|......^Unknown special sequence.
  762. X    64    64| 075  @K   - ILLEGAL.
  763. X       Error|......^Unknown special sequence.
  764. X    65    65| 076  @L   - ILLEGAL.
  765. X       Error|......^Unknown special sequence.
  766. X    66    66| 077  @M   - Tags macro as being allowed to be called many times.
  767. X    67    67| 078  @N   - ILLEGAL.
  768. X       Error|......^Unknown special sequence.
  769. X    68    68| @O   079  - New macro attached to output file. Has to be at start of line.
  770. X    69    69| 080  @P   - Pragma. Will cause error here though.
  771. X       Error|......^Pragma sequence @p must be at the start of a line.
  772. X            |......^The rest of this line will be ignored.
  773. X       Error|......^Unrecognised pragma. Possible legal pragmas are:
  774. X            |......^   @p indentation = none | blank
  775. X            |......^   @p maximum_input_line_length  = <num>|infinity
  776. X            |......^   @p maximum_output_line_length = <num>|infinity
  777. X            |......^   @p typesetter = none | tex
  778. X            |......^The blanks between arguments are important.
  779. X            |......^Pragma ignored.
  780. X    70    70| 081  @Q   - ILLEGAL.
  781. X       Error|......^Unknown special sequence.
  782. X    71    71| 082  @R   - ILLEGAL.
  783. X       Error|......^Unknown special sequence.
  784. X    72    72| 083  @S   - ILLEGAL.
  785. X       Error|......^Unknown special sequence.
  786. X    73    73| 084  @T   - Typesetter directive. Will cause an error here though.
  787. X       Error|......^Typesetter directive @t must be at the start of a line.
  788. X            |......^The rest of this line will be ignored.
  789. X       Error|......^Unrecognised typesetter directive. Legal ones are:
  790. X            |......^   @t new_page
  791. X            |......^   @t table_of_contents
  792. X            |......^   @t title <font> <align> <string>
  793. X            |......^   @t vskip <num> mm
  794. X            |......^The blanks between arguments are important.
  795. X            |......^Typesetter directive ignored.
  796. X    74    74| 085  @U   - ILLEGAL.
  797. X       Error|......^Unknown special sequence.
  798. X    75    75| 086  @V   - ILLEGAL.
  799. X       Error|......^Unknown special sequence.
  800. X    76    76| 087  @W   - ILLEGAL.
  801. X       Error|......^Unknown special sequence.
  802. X    77    77| 088  @X   - ILLEGAL.
  803. X       Error|......^Unknown special sequence.
  804. X    78    78| 089  @Y   - ILLEGAL.
  805. X       Error|......^Unknown special sequence.
  806. X    79    79| 090  @Z   - Tags macro as being allowed to be called zero times.
  807. X    80    80| 091  @[   - ILLEGAL.
  808. X       Error|......^Unknown special sequence.
  809. X    81    81| 092  @\   - ILLEGAL.
  810. X       Error|......^Unknown special sequence.
  811. X    82    82| 093  @]   - ILLEGAL.
  812. X       Error|......^Unknown special sequence.
  813. X    83    83| 094  @^D(065) - Insert control character into text
  814. X    84    84| 095  @_   - ILLEGAL.
  815. X       Error|......^Unknown special sequence.
  816. X    85    85| 096  @`   - ILLEGAL.
  817. X       Error|......^Unknown special sequence.
  818. X    86    86| @a   097  - New section (level 1). Must be at start of a line.
  819. X    87    87| @b   098  - New section (level 1). Must be at start of a line.
  820. X    88    88| @c   099  - New section (level 1). Must be at start of a line.
  821. X    89    89| @d   100  - New section (level 1). Must be at start of a line.
  822. X    90    90| @e   101  - New section (level 1). Must be at start of a line.
  823. X    91    91| 102  @f   - ILLEGAL.
  824. X       Error|......^Unknown special sequence.
  825. X    92    92| 103  @g   - ILLEGAL.
  826. X       Error|......^Unknown special sequence.
  827. X    93    93| 104  @h   - ILLEGAL.
  828. X       Error|......^Unknown special sequence.
  829. X    94    94| 105  @i   - Include file. Will provoke an error here though.
  830. X       Error|......^Include sequence must be at the beginning of a line.
  831. X            |......^Include ignored.
  832. X    95    95| 106  @j   - ILLEGAL.
  833. X       Error|......^Unknown special sequence.
  834. X    96    96| 107  @k   - ILLEGAL.
  835. X       Error|......^Unknown special sequence.
  836. X    97    97| 108  @l   - ILLEGAL.
  837. X       Error|......^Unknown special sequence.
  838. X    98    98| 109  @m   - Tags macro as being allowed to be called many times.
  839. X    99    99| 110  @n   - ILLEGAL.
  840. X       Error|......^Unknown special sequence.
  841. X   100   100| @O   111  - New macro attached to output file. Has to be at start of line.
  842. X   101   101| 112  @p   - Pragma. Will cause error here though.
  843. X       Error|......^Pragma sequence @p must be at the start of a line.
  844. X            |......^The rest of this line will be ignored.
  845. X       Error|......^Unrecognised pragma. Possible legal pragmas are:
  846. X            |......^   @p indentation = none | blank
  847. X            |......^   @p maximum_input_line_length  = <num>|infinity
  848. X            |......^   @p maximum_output_line_length = <num>|infinity
  849. X            |......^   @p typesetter = none | tex
  850. X            |......^The blanks between arguments are important.
  851. X            |......^Pragma ignored.
  852. X   102   102| 113  @q   - ILLEGAL.
  853. X       Error|......^Unknown special sequence.
  854. X   103   103| 114  @r   - ILLEGAL.
  855. X       Error|......^Unknown special sequence.
  856. X   104   104| 115  @s   - ILLEGAL.
  857. X       Error|......^Unknown special sequence.
  858. X   105   105| 116  @t   - Typesetter directive. Will cause an error here though.
  859. X       Error|......^Typesetter directive @t must be at the start of a line.
  860. X            |......^The rest of this line will be ignored.
  861. X       Error|......^Unrecognised typesetter directive. Legal ones are:
  862. X            |......^   @t new_page
  863. X            |......^   @t table_of_contents
  864. X            |......^   @t title <font> <align> <string>
  865. X            |......^   @t vskip <num> mm
  866. X            |......^The blanks between arguments are important.
  867. X            |......^Typesetter directive ignored.
  868. X   106   106| 117  @u   - ILLEGAL.
  869. X       Error|......^Unknown special sequence.
  870. X   107   107| 118  @v   - ILLEGAL.
  871. X       Error|......^Unknown special sequence.
  872. X   108   108| 119  @w   - ILLEGAL.
  873. X       Error|......^Unknown special sequence.
  874. X   109   109| 120  @x   - ILLEGAL.
  875. X       Error|......^Unknown special sequence.
  876. X   110   110| 121  @y   - ILLEGAL.
  877. X       Error|......^Unknown special sequence.
  878. X   111   111| 122  @z   - Tags macro as being allowed to be called zero times.
  879. X   112   112| 123  @{   - Open macro body.
  880. X   113   113| 124  @|   - ILLEGAL.
  881. X       Error|......^Unknown special sequence.
  882. X   114   114| 125  @}   - Close macro body.
  883. X   115   115| 126  @~   - ILLEGAL.
  884. X       Error|......^Unknown special sequence.
  885. X   116   116| 127 to 255 are not standard printable ASCII characters.
  886. X            | <End-Of-File>
  887. X------------+-------------------------------------------------------------------
  888. X
  889. There were 58 Errors and 1 Warning.
  890. END_OF_FILE
  891. if test 44801 -ne `wc -c <'answers/sc10.lis'`; then
  892.     echo shar: \"'answers/sc10.lis'\" unpacked with wrong size!
  893. fi
  894. # end of 'answers/sc10.lis'
  895. fi
  896. if test -f 'hackman/h_ch1.tex' -a "${1}" != "-c" ; then 
  897.   echo shar: Will not clobber existing file \"'hackman/h_ch1.tex'\"
  898. else
  899. echo shar: Extracting \"'hackman/h_ch1.tex'\" \(40771 characters\)
  900. sed "s/^X//" >'hackman/h_ch1.tex' <<'END_OF_FILE'
  901. X%==============================================================================%
  902. X%                              Start of Ch1.tex                                %
  903. X%==============================================================================%
  904. X%
  905. X% Copyright
  906. X% ---------
  907. X% Copyright (C) 1992 Ross N. Williams.
  908. X% This file contains a chapter of the FunnelWeb Hacker's Manual.
  909. X% See the main TeX file for this manual for further information.
  910. X%
  911. X%==============================================================================%
  912. X
  913. X\chapter{FunnelWeb Design}
  914. X\label{chapdesign}\xx{FunnelWeb}{design}
  915. X
  916. This chapter contains notes on the design of FunnelWeb. These notes were
  917. not created \dq{from scratch}, as the original
  918. version of FunnelWeb (\newterm{FunnelWeb V1}) was designed
  919. and constructed in a hurry late in 1986, and no design notes were ever
  920. recorded.
  921. These notes are in fact the result of a complete review of the
  922. XFunnelWeb design that took place in late 1991 as part
  923. of the process of upgrading it for public release.
  924. X
  925. Throughout the design process I tried to stick to the principles of
  926. simplicity and clarity. As a rule, it was considered more important
  927. that a feature be simple and not allow the user to outsmart himself than it
  928. was for the feature to be particularly crisp. For example, the FunnelWeb
  929. macro calling syntax is not as crisp as the C syntax, but is
  930. more visible.
  931. X
  932. To some extent the design review was influenced by the requirements of
  933. backward compatibility.\xx{backwards}{compatibility}
  934. During the review it was hard not to think about
  935. all the source files in FunnelWeb~V1 format that I have written over the
  936. years that would have to be
  937. converted were I to significantly deviate from the old input language.
  938. Luckily it turned out that there was little clash between these
  939. interests, and the resulting design is both clean and does not require
  940. much conversion of old source files.
  941. The main revision is in the document structuring facility.
  942. XFunnelWeb~V1 had just two levels of heading indicated by \p{@*@*}
  943. X(for major headings) and
  944. X\p{@*} (for minor headings). This scheme (which was copied from Knuth's
  945. Web) has been replaced by a hierarchical scheme of five heading levels
  946. levels (\p{@A}$\ldots$\p{@E}).
  947. X
  948. This chapter is rather unstructured, acting as it has, mainly as a
  949. dumping ground for random ideas about FunnelWeb.
  950. X
  951. X\section{Motivation for FunnelWeb}
  952. X\xx{FunnelWeb}{motivation}
  953. X
  954. During 1986, I was exposed to Donald Knuth's\xn{Donald}{Knuth}
  955. X\p{WEB} literate
  956. programming system in the
  957. form of Jon Bentley's\xn{Jon}{Bentley}
  958. X\i{Programming  Pearls}\x{programming pearls}
  959. column in \i{Communications\x{Communications of the ACM} of
  960. the ACM}\/\paper{Bentley86}.\footnote{As it happens, this was somewhat of a
  961. lucky encounter. I had only just joined the ACM and
  962. the May 1986 issue of CACM in which the column appeared was the first
  963. issue I received.} This  prompted me to obtain  a copy of the
  964. report on the Web system\paper{Knuth83}
  965. and to try out the program which had been installed on the local Vaxen.
  966. X
  967. Web was  the best system that I had seen  for producing printed and
  968. online, inline  documentation. To me
  969. the most  extraordinary aspect of the  system was
  970. its success despite the fact that it had been built into the horribly antiquated
  971. file/batch processing systems that we all know  and love (and use). I had
  972. imagined sophisticated documentation systems before this time, but had always
  973. assumed that they would be parts of complex programming environments.
  974. Knuth showed that, to some extent, it can be done using 1960s
  975. software technology (excluding the 1980s typesetting technology).
  976. This was exciting.
  977. X
  978. The Web  system was  enticing and promising  but to me suffered  from many
  979. drawbacks, many of which Knuth had  promoted as advantages. The following highly
  980. subjective list  of disadvantages formed  a springboard for the  construction of
  981. XFunnelWeb.
  982. X
  983. X\begin{itemize}
  984. X
  985. X\item Web can only process Pascal\x{Pascal} programs.
  986. X
  987. X\item Web can produce only one output file. In many instances it is
  988. desirable to generate  more than one output file. For  example, when programming
  989. in Ada,  it is  desirable to write  a package specification  and a  package body
  990. together in the same file.\xx{number}{output files}
  991. X
  992. X\item  Web  enforces  Knuth's  individual style  of  indentation.  Web  supplies
  993. commands to over-ride  the automatic indentation but it is  an uphill battle and
  994. the code becomes clogged up with format directives.\x{indentation}
  995. X
  996. X\item Web  does not cater for  non-standard Pascal programs. In  particular, all
  997. identifiers are truncated to about eight characters.
  998. X
  999. X\item Web  formats the  program output file  into a form  that is  unreadable to
  1000. humans.
  1001. X
  1002. X\item  Web does  not  provide an include facility.
  1003. This  was considered a feature essential for supporting macro libraries.
  1004. X
  1005. X\item Web provides macros with at most one parameter. Knuth
  1006. describes a hack that can
  1007. extract a multiple parameter macro facility  from a single parameter one,
  1008. but it is hardly satisfactory.
  1009. X
  1010. X\item Web does not provide conditionals.
  1011. X
  1012. X\end{itemize}
  1013. X
  1014. Most  of these  objections boiled  down  to two points:
  1015. that Web  is far  too
  1016. specialized, and that Knuth's \dq{Occam's Razor}\x{Occam's razor}
  1017. had cut too far.
  1018. What I wanted was
  1019. a documentation system that employed  all the same principles as Web
  1020. but was far
  1021. more  general. The  result  was FunnelWeb~V1,  which can
  1022. process  programs in  any
  1023. language or any combination of languages at  the cost of typesetting the text in
  1024. X\p{tt font}.
  1025. X
  1026. Originally, it  was intended that  FunnelWeb would be typesetter  independent as
  1027. well as language independent. It was intended that a format file consisting of a
  1028. set of productions describing how the document file was to be formatted would be
  1029. handed to FunnelWeb along with the input file. In the end, time pressures forced
  1030. me to take the back door and hack up a \TeX{} document file generator. This
  1031. compromise has found its way into FunnelWeb~V3.0 which is still reliant
  1032. on \TeX{}, although V3.0 at least encourages input files to be typesetter
  1033. independent. It is hoped that future versions of FunnelWeb will include
  1034. more sophisticated typesetting facilities.
  1035. X
  1036. X\section{Indentation}
  1037. X\x{indentation}\xx{indentation}{no}%
  1038. X\xx{indentation}{blank}\xx{indentation}{text}
  1039. X
  1040. A macro call that does not appear at the left margin is called an
  1041. X\newterm{indented macro call} and seems to lead to three different
  1042. alternatives for its expansion: \newterm{no indentation}, \newterm{blank
  1043. indentation}, and \newterm{text indentation}. Here are examples of each kind
  1044. of indentation. First the example problem.
  1045. X
  1046. X\begin{verbatim}
  1047. X@$@<Sloth@>==@{@-
  1048. Aardvark
  1049. Walrus@}
  1050. X
  1051. X@O@<Output@>==@{@-
  1052. Zebra@<Sloth@>
  1053. Giraffe
  1054. X@}
  1055. X\end{verbatim}
  1056. X
  1057. There are three ways that the second line of the \p{Sloth} macro
  1058. can be indented.
  1059. X
  1060. X\thing{No indentation:}
  1061. X\begin{verbatim}
  1062. X     ZebraAardvark
  1063. X     Walrus
  1064. X     Giraffe
  1065. X\end{verbatim}
  1066. X
  1067. X\thing{Blank indentation:}
  1068. X\begin{verbatim}
  1069. X     ZebraAardvark
  1070. X          Walrus
  1071. X     Giraffe
  1072. X\end{verbatim}
  1073. X
  1074. X\thing{Text indentation:}
  1075. X\begin{verbatim}
  1076. X     ZebraAardvark
  1077. X     ZebraWalrus
  1078. X     Giraffe
  1079. X\end{verbatim}
  1080. X
  1081. No indentation is useful where the user wishes to deal with the output
  1082. stream as a pure output stream. Blank indentation is useful when the user
  1083. wishes to generate indented computer programs.
  1084. Text indentation is useful where the user wishes to prefix each line of an
  1085. entire macro invocation with a string. This can be useful for
  1086. commenting out code (\eg{}in Ada using \p{--}), and for prepending things
  1087. like a dollar sign at the start of each line an a VAX VMS DCL script
  1088. command file.\x{DCL}
  1089. X
  1090. XFunnelWeb~V1 provided a choice of no indentation or blank indentation.
  1091. The choice was made in the command line and could not be overridden.
  1092. X
  1093. The design questions are as follows:
  1094. X
  1095. X\begin{enumerate}
  1096. X\item Which of the three kinds of indentation should FunnelWeb support?
  1097. X\item What should be the granularity of swapping between indentation modes?
  1098. X\item Are particular indentation modes dangerous?
  1099. X\item Is the presence of particular combinations of indentation modes
  1100. X      confusing to the user?
  1101. X\item How and when should the choice of indentation be specified?
  1102. X\end{enumerate}
  1103. X
  1104. All sorts of schemes were considered, including a finely grained system in
  1105. which the user could specify at the point of call which indentation mode
  1106. should be used for the called macro expansion.
  1107. X
  1108. After a lot of thought, the dominant factor that should affect the design
  1109. was decided to be the \i{clarity} in the user's mind of the indentation facility
  1110. and the \i{danger} associated with misunderstanding it. Here are two 
  1111. examples that show how easily a confusion or
  1112. misunderstanding of the indenting being used can cause danger.
  1113. The first example shows how blank or no indentation might be
  1114. misused.
  1115. X
  1116. X\begin{verbatim}
  1117. X--Misuse of blank (and no) indentation.
  1118. X--@<Sloth@>
  1119. X\end{verbatim}
  1120. X
  1121. Here the user has assumed that text indentation is in action and has
  1122. placed an Ada comment symbol \dqp{--} before the invocation of the macro
  1123. X\p{@<Sloth@>} in the hope that the entire text of the macro would be prefixed by
  1124. X\dqp{--}. The result could be passed by the compiler which would activate all
  1125. but the first statement in the expansion of macro \p{@<Sloth@>}.
  1126. X
  1127. The next example demonstrates how text indentation could be
  1128. misused.\xx{indentation}{dangers}
  1129. X
  1130. X\begin{verbatim}
  1131. X--Misuse of text indentation:
  1132. a++; @<Sloth@>
  1133. X\end{verbatim}
  1134. X
  1135. Here the user has placed the call to \p{@<Sloth@>} after the incrementing of
  1136. variable
  1137. X\p{a}. The result is that there is a good chance that the \dqp{a++;}
  1138. prepended to
  1139. each line of the expansion of \p{@<Sloth@>} will be passed by the compiler and
  1140. will cause \p{a} to be overincremented.
  1141. X
  1142. These examples are not to be laughed at. It is possible that FunnelWeb will
  1143. be used widely, and the problems above may cause problems in critical systems.
  1144. The examples above are particularly scary because they are reflexive. One cannot
  1145. simply pin the blame on one particular indentation form. A little thought
  1146. reveals that the greatest danger lies in \i{confusion} in the user's mind.
  1147. If the
  1148. user is confused between text or blank indenting, problems will arise.
  1149. X
  1150. There seem to be two ways to solve the problem. The first is to ban all
  1151. macro calls that are preceded by non-blank text. This is not a good option
  1152. because there are so many cases where it is desirable to expand more than one
  1153. single line macros on the same line. A second option is to eliminate one of
  1154. the two forms so as to reduce the potential for ambiguity in the user's
  1155. mind. I choose the latter option. Of the two forms, the clear choice for
  1156. elimination is text indenting for the following reasons:
  1157. X
  1158. X\begin{enumerate}
  1159. X\item It actually introduces extra text which gives it an a priori
  1160. X      potential for problems.
  1161. X\item It is harder to implement and would slow down Tangle.
  1162. X\item It would not be compatible with FunnelWeb~V1 which uses blank
  1163. X      indentation.
  1164. X\end{enumerate}
  1165. X
  1166. The only other decision is the level of granularity of choice between the
  1167. remaining options: no indentation and blank indentation. FunnelWeb~V1
  1168. allowed this choice to be made in the command line. In retrospect, this
  1169. was bad design because the user might unwittingly code certain macro calls
  1170. relying on one or the other mode. A better system is to allow the user
  1171. to specify which mode in the input file itself. This has been done in
  1172. XFunnelWeb~V3.
  1173. X
  1174. Again, to avoid confusion, it seems sensible to allow the user only
  1175. one indentation mode per FunnelWeb input file. In most cases, the user
  1176. will be happy with blank indentation (the default) and there will be
  1177. no need for change anyway.
  1178. X
  1179. X\thing{Decision:} Implement only \dq{no indentation} and \dq{blank indentation}.
  1180. Make the
  1181. choice of indentation a static attribute of a particular FunnelWeb run
  1182. that is specified in the input file. This solution is the same as FunnelWeb~V1
  1183. except that the choice has been moved from the command line to the
  1184. input file.
  1185. X
  1186. X\section{Review of FunnelWeb Syntax}
  1187. X\xx{FunnelWeb}{syntax}
  1188. X
  1189. One of the distressing aspects of FunnelWeb~V1 was its clumsy macro
  1190. definition and calling syntax.
  1191. Compared to (say) the C preprocessor, FunnelWeb's macro call syntax is
  1192. like a freight train in a china show.
  1193. During the FunnelWeb redesign, a complete review of this syntax took place to
  1194. try to neaten it up. Surprisingly, the V1 syntax survived unscathed
  1195. with the exception that \dqp{==}\x{==} in macro definitions was made optional.
  1196. The survival of this clumsy syntax was a product of the design goal of
  1197. making everything simple, explicit, and not subject to subtle errors.
  1198. X
  1199. X\subsection{Review of Macro Definition Syntax}
  1200. X\xx{macro definition}{syntax}
  1201. X
  1202. XFunnelWeb~V1 used a macro definition syntax that resulted in macro
  1203. definitions such as the following.
  1204. X
  1205. X\begin{verbatim}
  1206. X@$@<Put out the cat@>==@{@-
  1207. Open the door
  1208. Say out
  1209. Close the door@}
  1210. X\end{verbatim}
  1211. X
  1212. This is messy, but I couldn't think of anything better at the time.
  1213. The \p{@\$} is necessary to cue a definition. Without it, the definition
  1214. might somehow be mistaken for an invocation.
  1215. The \p{@<} and \p{@>} delimit the name.
  1216. The \p{@$\{$} and \p{@$\}$} delimit the text.
  1217. The \p{@-} is a product of the rule
  1218. X\dq{exactly the text between the \p{@$\{$} and \p{@$\}$}}.
  1219. X
  1220. The only real target is the \dqp{+=} and \dqp{==} which really break all
  1221. the rules
  1222. and should be changed. Unfortunately I couldn't
  1223. think of anything to change them
  1224. to. If there was no \p{+=} mechanism, we could use:
  1225. X
  1226. X\begin{verbatim}
  1227. X@$@<Put out the cat@>@{
  1228. Open the door
  1229. Say out
  1230. Close the door@}
  1231. X\end{verbatim}
  1232. X
  1233. In fact, eliminating \p{+=} is thinkable because it does not appear in
  1234. many of my existing FunnelWeb source files. This indicates at least that
  1235. it was not needed much by myself.
  1236. X
  1237. A minimalist construct could be
  1238. X
  1239. X\begin{verbatim}
  1240. X@<Put out the cat@>
  1241. Open the door
  1242. Say out
  1243. Close the door@}
  1244. X\end{verbatim}
  1245. X
  1246. but this is too dangerous for my tastes.
  1247. X
  1248. X\thing{Decision:} For compatibility reasons,
  1249. retain the old \p{+=} and \p{==} constructs, but make them optional.
  1250. The new syntax for defining macros is:
  1251. X
  1252. X\begin{verbatim}
  1253. X@$@<Put out the cat@>@{
  1254. Open the door
  1255. Say out
  1256. Close the door@}
  1257. X\end{verbatim}
  1258. X
  1259. Next we turn to parameterized macro
  1260. definitions.\xx{parameterized macro definitions}{syntax}
  1261. A conventional FunnelWeb parameterized macro definition looks like this:
  1262. X
  1263. X\begin{verbatim}
  1264. X@$@<Put out the cat@>@(@3@)==@{@-
  1265. Open the door
  1266. Say out
  1267. Close the door@}
  1268. X\end{verbatim}
  1269. X
  1270. which is a bit messy. The natural alternative is even worse:
  1271. X
  1272. X\begin{verbatim}
  1273. X@$@<Put out the cat@>@(@1@,@2@,@3@)==@{@-
  1274. Open the door
  1275. Say out
  1276. Close the door@}
  1277. X\end{verbatim}
  1278. X
  1279. Thus, just specifying the number of parameters seems sensible. However,
  1280. perhaps the syntax could be trimmed to
  1281. X
  1282. X\begin{verbatim}
  1283. X@$@<Put out the cat@>@3==@{@-
  1284. Open the door
  1285. Say out
  1286. Close the door@}
  1287. X\end{verbatim}
  1288. X
  1289. I decided to reject this in favour of the old syntax.
  1290. X
  1291. X\thing{Decision:} Retain the old syntax of $\ldots$\p{@(@3@)}$\ldots$
  1292. X
  1293. X\subsection{Review of Macro Call Syntax}
  1294. X\xx{macro call}{syntax}
  1295. X
  1296. Here are some ideas for alternatives to the FunnelWeb~V1 macro call syntax.
  1297. X
  1298. X\begin{verbatim}
  1299. Open the door
  1300. X@<Say Out@>         @! FunnelWeb~V1 style.
  1301. Close the door
  1302. X
  1303. Open the door
  1304. X@<Say out>@
  1305. Close the door
  1306. X
  1307. Open the door
  1308. X@"Say out@"
  1309. Close the door
  1310. X
  1311. Open the door
  1312. X@(Say out@)
  1313. Close the door
  1314. X
  1315. Open the door
  1316. X@<Say out>
  1317. Close the door
  1318. X\end{verbatim}
  1319. X
  1320. X\thing{Decision:} Continue with the old notation. It may not be neat, but at
  1321. least it is clear and consistent. The main temptation is the format
  1322. X\p{@<say out>@}
  1323. which looks rather good. However, it breaks the special sequence
  1324. rational and hence is too confusing.
  1325. X
  1326. X\subsection{Review of Parameterized Macro Call Syntax}
  1327. X\xx{parameterized macro call}{syntax}
  1328. X
  1329. XFunnelWeb~V1 provided a messy parameterized macro call syntax:
  1330. X
  1331. X\begin{verbatim}
  1332. X@<Say Out@>@(@"firstparam@" @, @"Secondparam@" @, @"thirdparam@" @)
  1333. X\end{verbatim}
  1334. X
  1335. This syntax can be cleaned up considerably by making the \p{@"} symbols
  1336. optional. This results in calls such as the following:
  1337. X
  1338. X\begin{verbatim}
  1339. X@<Say Out@>@(firstparam@,Secondparam@,thirdparam@)
  1340. X\end{verbatim}
  1341. X
  1342. As the first form allows the alignment of complicated parameters by
  1343. allowing white space to be inserted outside the \p{@"}, and the second
  1344. form is cleaner, both are retained simply by making the quotes optional.
  1345. X
  1346. X\thing{Decision:} Make the double quotes optional.
  1347. X
  1348. X\section{Document Structuring}
  1349. X\xx{document}{structure}\x{headings}\x{sections}
  1350. X
  1351. XExperience with FunnelWeb~V1, which provided only two levels of
  1352. headings (major and minor)
  1353. proved that there was a strong need for fully hierarchical
  1354. multiple-level headings.
  1355. The only question was how it should be done.
  1356. X
  1357. Here are some ideas that were considered.
  1358. X
  1359. X\begin{verbatim}
  1360. X@*@<Main Program@>
  1361. X@**@<Read the Message@>
  1362. X@***@<Encrypt the Buffer@>
  1363. X
  1364. X@*@<Main Program@>
  1365. X@*@*@<Read the Message@>
  1366. X@*@*@*@<Encrypt the Buffer@>
  1367. X
  1368. X@s@<Main Program@>
  1369. X@ss@<Read the Message@>
  1370. X@sss@<Encrypt the Buffer@>
  1371. X
  1372. X@s@<Main Program@>
  1373. X@s@s@<Read the Message@>
  1374. X@s@s@s@<Encrypt the Buffer@>
  1375. X
  1376. X@S@<Main Program@>
  1377. X@SS@<Read the Message@>
  1378. X@SSS@<Encrypt the Buffer@>
  1379. X
  1380. X@S@<Main Program@>
  1381. X@S@S@<Read the Message@>
  1382. X@S@S@S@<Encrypt the Buffer@>
  1383. X
  1384. X@A@<Main Program@>           -- The syntax finally chosen.
  1385. X@B@<Read the Message@>
  1386. X@C@<Encrypt the Buffer@>
  1387. X
  1388. X@A Main Program
  1389. X@B Read the Message
  1390. X@C Encrypt the Buffer
  1391. X
  1392. X@*A Main Program
  1393. X@*B Read the Message
  1394. X@*C Encrypt the Buffer
  1395. X
  1396. X@1@<Main Program@>
  1397. X@2@<Read the Message@>
  1398. X@3@<Encrypt the Buffer@>
  1399. X(using @A..@I@ as macro parameters or overload @1..@9)
  1400. X
  1401. X@*@1@<Main Program@>
  1402. X@*@2@<Read the Message@>
  1403. X@*@3@<Encrypt the Buffer@>
  1404. X(using @A..@I@ as macro parameters or overload @1..@9)
  1405. X\end{verbatim}
  1406. X
  1407. Choosing between these alternatives was not easy. The following thoughts
  1408. contributed to the decision.
  1409. X
  1410. X\begin{itemize}
  1411. X
  1412. X\item Syntaxes that require visual counting are probably not a good idea.
  1413. X
  1414. X\item Syntaxes that do not delimit the heading name somehow are likely
  1415. to cause problems where heading names are omitted. Users will be
  1416. tempted to start paragraphs after the start of heading symbol and the
  1417. result is that the first line of the paragraph will be sucked into the
  1418. heading.
  1419. X
  1420. X\item Overloading the \p{@1}, $\ldots$, \p{@9} sequences is undesirable.
  1421. X
  1422. X
  1423. X\end{itemize}
  1424. X
  1425. X\thing{Decision:} Use \p{@A}$\ldots$\p{@E} with optional following
  1426. macro name syntax for the section name.
  1427. Note: We stop at \p{@E} because five levels is probably sufficient, and we
  1428. may wish later to use \p{@F} for \b{F}ile (to augment or replace \p{@O}).
  1429. X
  1430. X
  1431. X\section{Discussion of Some Miscellaneous Issues}
  1432. X\xx{miscellaneous}{issues}
  1433. X
  1434. X\thing{Comment duplication:} If\xx{comment}{duplication}
  1435. the FunnelWeb user inserts
  1436. comments into the target code (in the \p{.fw} file) as well as into the
  1437. documentation (free text)
  1438. part of the \p{.fw} file, then it is possible for the
  1439. situation to get a bit silly. \b{Decision:} This is a problem for the
  1440. programmer, not for FunnelWeb.
  1441. X
  1442. X\thing{Out-of-date documentation:} Sometimes\xx{out of date}{documentation}
  1443. it is all too easy for the
  1444. programmer to modify the code without updating the surrounding documentation.
  1445. X\b{Decision:} This is a serious and major problem. In an automated environment,
  1446. it may be possible to create a system of dependencies between scraps of
  1447. code and scraps of documentation. However, it is hard to see how a tool
  1448. such as FunnelWeb could provide support for prevention of this sort of error.
  1449. X
  1450. X\thing{Meta-macro-level parameterization:} Sometimes, when using FunnelWeb,
  1451. the facility to use one macro to construct the name of another has been
  1452. needed. \b{Decision:} Allowing macro names
  1453. to be constructed would lose the simple
  1454. nature of the preprocessor and so this suggestion is rejected.
  1455. X
  1456. X\thing{Clumsy notation:} The \p{@} notation can be clumsy.
  1457. X\b{Decision:} This is necessary to maintain the simplicity of the translation.
  1458. X
  1459. X\section{Automated Regression Testing}
  1460. X\xx{regression}{testing}
  1461. X
  1462. Automated regression testing is extremely important for two reasons:
  1463. X
  1464. X\begin{enumerate}
  1465. X
  1466. X\item It provides confidence that changes made to the program have
  1467. not introduced bugs.
  1468. X
  1469. X\item It allows portability problems to be pinpointed when the program is
  1470. moved to a new machine.
  1471. X
  1472. X\end{enumerate}
  1473. X
  1474. The simplest way to set up automated regression testing is to construct
  1475. a suite of test cases (and their solutions) and then write a
  1476. script in the target machine's command language to run through the suite.
  1477. Unfortunately, there is no command language that is shared among the
  1478. machines to which FunnelWeb must be ported. These machines are at least:
  1479. Macintosh, IBM-PC, Sun, VMS Vax.
  1480. X
  1481. One option is simply to rewrite the script in each machine's particular
  1482. command language. This would be a feasible option were it not for the fact
  1483. that the Macintosh (the machine upon which FunnelWeb was developed) does
  1484. not have a command language!
  1485. X
  1486. After some thought, I decided that the best solution to the problem was
  1487. to create a command language \i{within FunnelWeb}. FunnelWeb could then
  1488. be invoked in two modes, one-shot command line or interactive/script. This
  1489. approach had the benefit of providing total control over the command
  1490. language and its complete portability.
  1491. X
  1492. The result is described in the \i{FunnelWeb User's Manual}.
  1493. X
  1494. X\section{Command Line Interface}
  1495. X\xx{command line}{interface}
  1496. X
  1497. XFunnelWeb~V1 was implemented in Ada\x{Ada} and runs on a VMS VAX.\xx{vms}{vax}
  1498. As such it
  1499. has a full VMS DCL command line interface. Here is the \dqp{.CLD}
  1500. file\xx{.cld}{file} for the
  1501. DCL command line interface.
  1502. X
  1503. X\beginsmall
  1504. X\begin{verbatim}
  1505. X! FUNNELWEB Command Definition
  1506. X! ============================
  1507. X! Ross Williams. 28 April 1987.
  1508. X
  1509. module command_table
  1510. X   define verb dummy_command
  1511. X   parameter p1           , label=input_file   ,value(required,type=$file)
  1512. X   qualifier include_files, label=include_files,value(type=$file) ,default
  1513. X   qualifier output_files , label=output_files ,value(type=$file) ,default
  1514. X   qualifier delete       , label=delete                          ,default
  1515. X   qualifier tex_file     , label=tex_file     ,value(type=$file) ,default
  1516. X   qualifier listing_file , label=listing_file ,value(type=$file) ,default
  1517. X   qualifier brief        , label=brief,value(type=$number,default=5),default
  1518. X   qualifier screen       , label=screen       ,value(type=$number,default=0)
  1519. X   qualifier trace        , label=trace
  1520. X   qualifier file_spec    , label=file_spec
  1521. X   qualifier compare
  1522. X\end{verbatim}
  1523. X\endsmall
  1524. X
  1525. As portability was a key goal of FunnelWeb~V3, it was obvious that the
  1526. command line interface would have to be redesigned. The design goals for the
  1527. new command line interface were:\xx{design goals}{command line interface}
  1528. X
  1529. X\begin{enumerate}
  1530. X
  1531. X\item The interface should not \i{depend} on case. However, it must allow
  1532. X      case-sensitive filenames to be transmitted on systems that have
  1533. X      case-sensitive filenames.
  1534. X
  1535. X\item Each option must have a symmetric positive and negative form. For
  1536. X      example, it is confusing for \p{-X} to turn on a feature and \p{-Q}
  1537. X      to turn it off.
  1538. X
  1539. X\item The interface must be extensible to allow inclusion of more features
  1540. X      at a later date.
  1541. X
  1542. X\item Options should be consistent and memorable.
  1543. X
  1544. X\end{enumerate}
  1545. X
  1546. The result is described in the \i{FunnelWeb User's Manual}.
  1547. X
  1548. X\section{File Name Management}
  1549. X\xx{file}{names}
  1550. X
  1551. XFile names present a host of problems for a program like FunnelWeb.
  1552. XFirst, FunnelWeb can generate so many different kinds of files that
  1553. conventions must be adopted to prevent them from becoming unmanageable.
  1554. Second, the constraints on file names, and even the structure of file
  1555. names themselves varies considerably from machine to machine. These two
  1556. problems have combined to result in the sophisticated and
  1557. rather complicated way in which FunnelWeb~V3 handles filenames.
  1558. X
  1559. To summarize, the three problems are:
  1560. X
  1561. X\begin{enumerate}
  1562. X\item What filename extensions should be chosen for various kinds of file?
  1563. X\item What filename inheritance should take place?
  1564. X\item How should FunnelWeb cope with the variations in filename structure
  1565. between machines?
  1566. X\end{enumerate}
  1567. X
  1568. The following three sections address these questions.
  1569. X
  1570. X\subsection{Filename Extensions}
  1571. X\xx{filename}{extensions}
  1572. X
  1573. XFunnelWeb is capable of reading and writing a variety of different kinds
  1574. of files. In particular, FunnelWeb must often operates in an environment where
  1575. the same information is stored in many forms (\eg{}prog.fw, prog.c, proc.exe).
  1576. XFile extensions are an essential tool in managing this situation.
  1577. The filename extensions chosen for FunnelWeb are:
  1578. X
  1579. X\begin{verbatim}
  1580. XFunnelWeb     : .fw
  1581. Product       : None.
  1582. Documentation : .tex
  1583. Listing       : .lis
  1584. Journal       : .jrn
  1585. X\end{verbatim}
  1586. X
  1587. Lowercase will be used in systems that are case sensitive.
  1588. X
  1589. Readers who are wondering how FunnelWeb copes in environments such as UNIX
  1590. where there are no file extensions should refer to
  1591. Section~\ref{portablefilenames}.
  1592. X
  1593. X\subsection{Filename Inheritance}
  1594. X\xx{filename}{inheritance}
  1595. X
  1596. Inheritance in filenames refers to how input and output files inherit parts
  1597. of their name from other filenames and their environment. For example if
  1598. the command
  1599. X
  1600. X\begin{verbatim}
  1601. X   fw sloth +J +L +T
  1602. X\end{verbatim}
  1603. X
  1604. was issued,
  1605. you would expect to see output files \p{sloth.jrn}, \p{sloth.lis}, and
  1606. X\p{sloth.tex}.
  1607. The output file names have inherited the \dqp{sloth}. The following table
  1608. gives the hierarchy devised for FunnelWeb.
  1609. X
  1610. X\begin{center}
  1611. X\begin{tabular}{|l|l|l|l|l|l|l|l|}                                             \hline
  1612. X  & Script     & Input     &  Include   &  Journal   &  List      &  Document  & Product \\ \hline
  1613. X1 &            &           & \p{@i}     &            &            &            & \p{@o}  \\
  1614. X2 & \p{+x}     & \p{+f}    & \p{+i}     & \p{+j}     & \p{+l}     & \p{+t}     & \p{+o}  \\
  1615. X3 & \dqp{.fws} & \dqp{.fw} & \dqp{.fwi} & \dqp{.jrn} & \dqp{.lis} & \dqp{.tex} &         \\
  1616. X4 &            &           & \p{+f}     & \p{+f}     & \p{+f}     & \p{+f}     &         \\
  1617. X5 & DefDir     & Defdir    & Defdir     & Defdir     & Defdir     & Defdir     & Defdir  \\ \hline
  1618. X\end{tabular}
  1619. X\end{center}
  1620. X
  1621. The following notes explain the table.
  1622. X
  1623. X\begin{enumerate}
  1624. X
  1625. X\item This scheme is similar to that used in FunnelWeb~V1.
  1626. X
  1627. X\item The journal, list, and documentation
  1628. files all fall in the same pattern and
  1629. can be considered as a single case.
  1630. X
  1631. X\item Level~1 has the highest priority because it is a direct specification
  1632. by the user in the input file.
  1633. X
  1634. X\item Level~2 comes next because this is also a direct specification
  1635. from the user on the command line.
  1636. X
  1637. X\item Level~3 provides the default file extensions.
  1638. Product files do not inherit an
  1639. extension as they could be of any type.
  1640. X
  1641. X\item Level~5 is built into most operating systems' file specification systems.
  1642. If I specify file \dqp{x.y}, it is taken to mean on the default disk in the
  1643. default directory.
  1644. X
  1645. X\item Level~4 looks straightforward, but secretly conceals a difficult design
  1646. decision. By the time we get down to this level of inheritance, we know for
  1647. sure that the filename has already picked up a file extension. So all that
  1648. is left to inherit is the path and the filename proper. Obviously we
  1649. have to inherit the filename proper (e.g. \p{sloth} in \p{sloth.tex}), but
  1650. should we inherit the input file path? If we do inherit the input file
  1651. path, files will be placed in the same directory as the input file. If we
  1652. don't inherit the input file path, files will be placed in the current
  1653. directory. The choice I have made is to send all the logging type files
  1654. into the same directory as the input file. This means, for example,
  1655. that \p{sloth.lis} and \p{sloth.tex} will generally land in the same directory
  1656. as \p{sloth.fw}. However, I have decided that output files should be sent to
  1657. the default directory (if not earlier specified) as this is where the
  1658. action is. In normal use, the main product of FunnelWeb will be product files
  1659. and so the user will expect them to appear in the current directory by
  1660. default.
  1661. X
  1662. X\end{enumerate}
  1663. X
  1664. X\subsection{Portable Structure of File Names}
  1665. X\label{portablefilenames}\xx{file}{names}\xx{portable}{filenames}
  1666. X
  1667. Another problem with file names is the variation of their structure
  1668. between environments. Here are examples of some of the formats that prevail:
  1669. X
  1670. X\begin{verbatim}
  1671. X   UNIX   /device/dir1/dir2/name
  1672. X   VMS    node::device:[dir1.dir2]name.ext;vn
  1673. X   MSDOS  device:\dir1\dir2\name.ext
  1674. X   MAC    device:dir1:dir2:name
  1675. X\end{verbatim}
  1676. X
  1677. Isn't it amazing that none of these popular systems use the same format?
  1678. X
  1679. The solution to dealing with these different formats is to classify them
  1680. as non-portable and hide the functions that manipulate them
  1681. in the machine-specific module of FunnelWeb.
  1682. Luckily there are not many such functions.
  1683. X
  1684. The main problem is coping with
  1685. file systems that do not
  1686. explicitly support file extensions.
  1687. With so many possible input and output files, FunnelWeb all but
  1688. needs such extensions. Machines that do not support them pose difficult
  1689. design decisions.
  1690. If the user specifies \dqp{sloth} as an input file on such
  1691. a non-extension-supporting system,
  1692. should FunnelWeb look for \p{sloth}
  1693. or \p{sloth.fw}? If the user specifies \p{walrus} as a listing file, should
  1694. it generate \p{walrus} or \p{walrus.lis}?
  1695. X
  1696. Some possible solutions are:
  1697. X
  1698. X\begin{enumerate}
  1699. X
  1700. X\item Regard the filename \p{sloth} as having an empty extension. It will then
  1701. default to \p{sloth.fw}.
  1702. X
  1703. X\item Regard the filename \p{sloth} as having a blank but full extension.
  1704. That is, it cannot be overwritten by inheritance, but it remains blank.
  1705. X
  1706. X\item Provide an extra syntactic mechanism to allow the user to specify one or
  1707. other of the two options above.
  1708. X
  1709. X\end{enumerate}
  1710. X
  1711. My solution was to choose the first option. Use of FunnelWeb
  1712. results in lots of files lying around (\eg{}\p{sloth.lis}) and it is hard
  1713. to see how
  1714. the user will cope with them all
  1715. without some kind of naming discipline. If a naming discipline
  1716. has to be used, it might as well be the FunnelWeb one.
  1717. X
  1718. Thus the names of all files read and written by FunnelWeb will have a file
  1719. extension of from zero to three letters separated from the rest of the filename
  1720. by a \dqp{.}.
  1721. X
  1722. The only exception is product files whose extension is left
  1723. undefined. Product files need not
  1724. contain a \dqp{.} and a file extension,
  1725. although they can inherit one if the user wishes.
  1726. X
  1727. X\section{Specifying Constraints on the Number of Instantiations}
  1728. X\xx{invocations}{number}
  1729. X
  1730. XExperience with FunnelWeb~V1 demonstrated
  1731. the need to be able to specify in
  1732. macro definitions how many times it was expected that the macro would
  1733. be used. FunnelWeb~V1 generates an error if a macro is not used, but
  1734. permits macros to be called more than once. This caused problems for macro
  1735. libraries, which would be included, but whose macros were often not called.
  1736. X
  1737. By default, FunnelWeb~V3 requires that each macro (except for the ones
  1738. attached to output files) be called exactly once.
  1739. However, it also provides
  1740. syntax that allows the user to specify that a macro be allowed
  1741. to be called zero times or many times.
  1742. This allows a macro to be specified with the following permissible ranges
  1743. of numbers of calls depending on the presence or absence of \dqp{@Z} and
  1744. X\dqp{@M}:
  1745. X
  1746. X\begin{verbatim}
  1747. X   0..1          @$@<Sloth@>@Z==...
  1748. X      1          @$@<Sloth@>==...
  1749. X      1..n       @$@<Sloth@>@M==...
  1750. X   0.....n       @$@<Sloth@>@Z@M==...
  1751. X\end{verbatim}
  1752. X
  1753. The only two problems with this scheme are:
  1754. X
  1755. X\begin{enumerate}
  1756. X
  1757. X\item It is incompatible with
  1758. XFunnelWeb~V1 files, as the default in FunnelWeb~V1 is $1 \ldots n$
  1759. whereas the default in new FunnelWeb is $1$. This is not a big problem because
  1760. most macros in the old files were used exactly once. Only a few macros will
  1761. have to be changed.
  1762. X
  1763. X\item What should the syntax be? (above is a sneak preview only!)
  1764. X
  1765. X\end{enumerate}
  1766. X
  1767. The initial proposal for syntax was to allow the user to insert zero, one,
  1768. or both of \p{@?} and \p{@M} just after the \p{@\$} of a macro definition.
  1769. However, this has the following drawbacks:
  1770. X
  1771. X\begin{enumerate}
  1772. X
  1773. X\item It uses two sequences that are desirable to reserve
  1774. X      (\p{@?} for conditionals and \p{@M} for macro).
  1775. X
  1776. X\item It stops the user from searching for the string \p{@\$@<name} to find
  1777. X      the definition of a macro.
  1778. X      
  1779. X\end{enumerate}
  1780. X
  1781. These are significant problems.
  1782. Here are some alternative
  1783. ideas for where to position the modifiers in the macro definition:
  1784. X
  1785. X\begin{verbatim}
  1786. X@?@M@$@<Slothy dogs@>@(@5@)==@{@-
  1787. This is a short macro.
  1788. With only a line or two@}
  1789. X
  1790. X@$@<Slothy dogs@>@?@M@(@5@)==@{@-
  1791. This is a short macro.
  1792. With only a line or two@}
  1793. X
  1794. X@$@<Slothy dogs@>@(@5@)@?@M==@{@-
  1795. This is a short macro.
  1796. With only a line or two@
  1797. X\end{verbatim}
  1798. X
  1799. The first form puts me off because I think that it is a good visual rule
  1800. to start all the macros with \p{@\$}. The second form puts me off because it
  1801. detaches the macro name from the parameter list, thus making it look
  1802. less like a call, which is desirable syntactic resonance. The third form
  1803. is messy but probably workable. Because we are right next to the tested
  1804. constant string (either \p{==} or \p{+=}) we could augment it further. For
  1805. example, \p{01==} could allow a macro to be called from 0 to 1 times.
  1806. The main problem with this is that we are trying to phase out \p{==} anyway!
  1807. X
  1808. Nevertheless, all the logic points to after the parameter list as the best
  1809. place to locate this information.
  1810. X
  1811. After some thought, it was decided that the \dqp{@?} sequence be reserved
  1812. for a possible future conditional facility, and so \p{@Z} was used
  1813. instead.
  1814. X
  1815. X\thing{Decision:} The position is after the parameter list. The notation
  1816. is \p{@Z} for zero, and \p{@M} for many.\x{@Z}\x{@M}
  1817. X
  1818. XExample of final syntax:
  1819. X
  1820. X\begin{verbatim}
  1821. X@$@<Slothy dogs@>@(@5@)@Z@M+=@{@-
  1822. This is a short macro.
  1823. With only a line or two@}
  1824. X\end{verbatim}
  1825. X
  1826. X\section{The Relationship Between Document Structure and Macro Structure}
  1827. X\xx{document structure}{macro structure}%
  1828. X\xx{document}{structure}\xx{macro}{structure}\note{01-Dec-1991}%
  1829. X\xx{hierarchical}{structure}
  1830. X
  1831. Having already decided upon a fully hierarchical document
  1832. structure, I determined to refine the details.
  1833. The issues to be addressed were as follows:
  1834. X
  1835. X\begin{itemize}
  1836. X
  1837. X\item How should the hierarchical structure connect to the macro structure?
  1838. X\item How can backwards compatibility be achieved? Should it?
  1839. X\item Should the macros be cross referenced by section or by definition?
  1840. X\item Should nameless sections inherit macro names as headings?
  1841. X\item Should we simply use \TeX{} macros to structure the document?
  1842. X
  1843. X\end{itemize}
  1844. X
  1845. After some thought, I arrived at the following thoughts:
  1846. X
  1847. X\thing{Basically a \TeX{} file:} One option is simply
  1848. to treat each \p{.fw} file as a \TeX{}\x{TeX} file
  1849. laced with macros. That is, a \p{.fw} file could be
  1850. structured as a real \TeX{} file from which FunnelWeb could
  1851. extract macro definitions. This approach is feasible because 
  1852. X\TeX{} could be programmed to
  1853. respond to the \p{@} sequences in the same way that
  1854. XFunnelWeb responds to them. Thus, there would be no need for Weave.
  1855. X
  1856. I rejected this approach, first because it is too typesetter-dependent,
  1857. and second because it complicates the inclusion of any sort of
  1858. complicated post-processing in the documentation file. This would have to
  1859. be implemented in \TeX{}.
  1860. X
  1861. A better approach is
  1862. to use an invented section notation (e.g. \p{@A @B @C}). This maintains
  1863. XFunnelWeb's typesetter independence and can easily be
  1864. converted into \TeX{} sectioning macros by Weave.
  1865. X
  1866. In the same spirit, it might be worth introducing a few \p{@} sequences for
  1867. certain general typesetting operations such as italics and program code.
  1868. X
  1869. X\thing{Confusion in FunnelWeb~V1 Heading Numbering:} FunnelWeb~V1
  1870. uses two levels of section headings, but numbers all
  1871. the headings sequentially. In this, it is a little confused. Clearly
  1872. with a fully hierarchical document structure, the headings cannot be
  1873. numbered sequentially --- the numbering must reflect the structure
  1874. X(\eg{}3.2.1).
  1875. X
  1876. X\thing{Hierarchical numbering is messy for macros:} Unfortunately,
  1877. hierarchical numbering\xx{section}{numbering} is messy
  1878. and confusing when applied to macro names.
  1879. In FunnelWeb~V1's typeset output, each macro
  1880. call has appended in square brackets the number of the section in which the
  1881. macro is defined. Use of hierarchical numbering would be somewhat messy.
  1882. XFor example, a macro call might look like.
  1883. X
  1884. X\begin{verbatim}
  1885. X   Write out the output[6.7.4.3]
  1886. X\end{verbatim}
  1887. X
  1888. Similarly, cross reference lists would be messy:
  1889. X
  1890. X\begin{verbatim}
  1891. X   This macro is used in 3.4.5, 1.2, 7.8.9, 7.4, 2.2.1.1.
  1892. X\end{verbatim}
  1893. X
  1894. X\thing{Separate numbering for macros and headings:} One
  1895. idea is to use hierarchical numbering for the sections, but to
  1896. number the macros sequentially. This could be a little confusing in
  1897. documents without much structure, but would be very much less messy than
  1898. cross referencing using hierarchical numbering.
  1899. Also, it will be easier to find macros
  1900. indexed by a sequential number than by section,
  1901. which has a less direct relationship
  1902. with page bulk and number. By macro numbering is meant the sequential
  1903. numbering of each macro body part through the whole document.
  1904. X
  1905. X\thing{Input format matters more than output format:} At this point we
  1906. realize that a distinction should be made between
  1907. the \i{input format} and the \i{typeset output}.
  1908. The critical issue here is not how the
  1909. program should be formatted for printing, but rather the format of its
  1910. X\p{.fw} file. The typeset output can always be changed simply by fiddling
  1911. with Weave. However, as soon as the document structuring features of FunnelWeb
  1912. are fixed, they will be used in dozens or hundreds of documents and it will
  1913. be very difficult indeed to change them. Therefore, the important thing is to
  1914. provide as sensible and expressive a \p{.fw} format as possible.
  1915. X
  1916. It is therefore a separate decision as to whether we should number macros
  1917. by section or by sequence number. The important thing is to address the
  1918. format and rules for the expression of structure.
  1919. X
  1920. X\thing{Naming sections:} The naming
  1921. of sections requires some thought. In many cases (especially
  1922. in the case of high-level sections) the writer will provide an explicit
  1923. name for a section. In other cases, provision of such a name will merely
  1924. duplicate the name of the macro contained within the section. It therefore
  1925. makes sense to allow the user to omit the name from a section, with Weave
  1926. naming the section after the first macro definition in the section. If a 
  1927. macro is unnamed and there
  1928. is no macro in the section, an error can be generated.
  1929. X
  1930. All these thoughts lead to the following scheme:
  1931. X
  1932. X\begin{itemize}
  1933. X\item Documents will be hierarchically structured using \p{@A}, \p{@B} etc.
  1934. X\item Each section can be given a name delimited by \p{@<@>}.
  1935. X\item Sections that do not have names inherit the name of their first macro.
  1936. X\item If a section does not have a name or a macro, it is erroneous.
  1937. X\item Sections will be numbered hierarchically either by FunnelWeb or by \TeX{}.
  1938. X\item Macro body parts will be numbered sequentially by FunnelWeb and cross
  1939. X  referenced by these numbers.
  1940. X\end{itemize}
  1941. X
  1942. All this results in a system which:
  1943. X
  1944. X\begin{itemize}
  1945. X
  1946. X\item Provides a hierarchical document structuring capability.
  1947. X\item Is typesetter independent.
  1948. X\item Does not require duplication between heading and macro names.
  1949. X\item Separates the heading and macro systems so that Weave can be configured
  1950. X  at a later date to cross reference in different ways without requiring
  1951. X  input files to be reworked.
  1952. X\end{itemize}
  1953. X
  1954. X\section{Diagnostic Messages}
  1955. X\xx{diagnostic}{messages}
  1956. X
  1957. In FunnelWeb, all error messages commence with an indicator indicating
  1958. the severity of the error message. Here are some of the formats that
  1959. I investigated before settling on the final format:
  1960. X
  1961. X\begin{verbatim}
  1962. W--Error creating sloth.
  1963. XE--Error opening output file.
  1964. S--I'm a teapot.
  1965. XF--Can't open output file.
  1966. X
  1967. W-Error creating sloth.
  1968. XE-Error opening output file.
  1969. S-I'm a teapot.
  1970. XF-Can't open output file.
  1971. X
  1972. W:Error creating sloth.
  1973. XE:Error opening output file.
  1974. S:I'm a teapot.
  1975. XF:Can't open output file.
  1976. X
  1977. W: Error creating sloth.       -- Format chosen.
  1978. XE: Error opening output file.
  1979. S: I'm a teapot.
  1980. XF: Can't open output file.
  1981. X
  1982. War-Error creating sloth.
  1983. XErr-Error opening output file.
  1984. Sev-I'm a teapot.
  1985. XFat-Can't open output file.
  1986. X
  1987. W-Old fashioned feature.
  1988. X
  1989. W-Old fashioned feature.
  1990. X
  1991. W--Old fashioned feature.
  1992. X
  1993. W: Old fashioned feature.
  1994. X
  1995. W:Old fashioned feature.
  1996. X\end{verbatim}
  1997. X
  1998. X\section{Summary}
  1999. X
  2000. This rather unstructured chapter has addressed some of the key design
  2001. decisions of FunnelWeb. In many cases, the alternatives have been
  2002. unpleasant, but I am confident that in all cases, a fully workable solution
  2003. has been found.
  2004. X
  2005. X%==============================================================================%
  2006. X%                              Start of Ch1.tex                                %
  2007. X%==============================================================================%
  2008. END_OF_FILE
  2009. if test 40771 -ne `wc -c <'hackman/h_ch1.tex'`; then
  2010.     echo shar: \"'hackman/h_ch1.tex'\" unpacked with wrong size!
  2011. fi
  2012. # end of 'hackman/h_ch1.tex'
  2013. fi
  2014. if test -f 'userman/u_manual.idx' -a "${1}" != "-c" ; then 
  2015.   echo shar: Will not clobber existing file \"'userman/u_manual.idx'\"
  2016. else
  2017. echo shar: Extracting \"'userman/u_manual.idx'\" \(33582 characters\)
  2018. sed "s/^X//" >'userman/u_manual.idx' <<'END_OF_FILE'
  2019. X\indexentry{Ross Williams}{1}
  2020. X\indexentry{Williams Ross}{1}
  2021. X\indexentry{copyright notice}{1}
  2022. X\indexentry{notice copyright}{1}
  2023. X\indexentry{preface}{9}
  2024. X\indexentry{Donald Knuth}{9}
  2025. X\indexentry{Knuth Donald}{9}
  2026. X\indexentry{Knuth83}{9}
  2027. X\indexentry{Web}{9}
  2028. X\indexentry{GNU license}{9}
  2029. X\indexentry{license GNU}{9}
  2030. X\indexentry{acknowledgements}{11}
  2031. X\indexentry{David Hulse}{11}
  2032. X\indexentry{Hulse David}{11}
  2033. X\indexentry{Ada}{11}
  2034. X\indexentry{Simon Hackett}{11}
  2035. X\indexentry{Hackett Simon}{11}
  2036. X\indexentry{Jeremy Begg}{11}
  2037. X\indexentry{Begg Jeremy}{11}
  2038. X\indexentry{Barry Dwyer}{11}
  2039. X\indexentry{Dwyer Barry}{11}
  2040. X\indexentry{Roger Brissenden}{11}
  2041. X\indexentry{Brissenden Roger}{11}
  2042. X\indexentry{Donald Knuth}{11}
  2043. X\indexentry{Knuth Donald}{11}
  2044. X\indexentry{presentation notes}{13}
  2045. X\indexentry{typesetting}{13}
  2046. X\indexentry{Andrew Trevorrow}{13}
  2047. X\indexentry{Trevorrow Andrew}{13}
  2048. X\indexentry{OzTeX}{13}
  2049. X\indexentry{Knuth84}{13}
  2050. X\indexentry{Lamport86}{13}
  2051. X\indexentry{TeX}{13}
  2052. X\indexentry{LaTeX}{13}
  2053. X\indexentry{Macintosh}{13}
  2054. X\indexentry{tutorial}{15}
  2055. X\indexentry{literate programming}{15}
  2056. X\indexentry{literate programming}{15}
  2057. X\indexentry{magic trick}{15}
  2058. X\indexentry{tools literate programming}{15}
  2059. X\indexentry{literate programming tools}{15}
  2060. X\indexentry{hypertext}{15}
  2061. X\indexentry{literate programming, facilities}{15}
  2062. X\indexentry{program ordering}{15}
  2063. X\indexentry{ordering program}{15}
  2064. X\indexentry{Pascal}{15}
  2065. X\indexentry{BSI82}{15}
  2066. X\indexentry{cross referencing}{17}
  2067. X\indexentry{literate programming, most significant benefit}{17}
  2068. X\indexentry{Rosovsky90}{17}
  2069. X\indexentry{universities}{17}
  2070. X\indexentry{explaining code}{17}
  2071. X\indexentry{code explaining}{17}
  2072. X\indexentry{development time}{17}
  2073. X\indexentry{time development}{17}
  2074. X\indexentry{Knuth83}{17}
  2075. X\indexentry{Knuth84}{17}
  2076. X\indexentry{Smith91}{17}
  2077. X\indexentry{FunnelWeb overview}{18}
  2078. X\indexentry{overview FunnelWeb}{18}
  2079. X\indexentry{input file}{18}
  2080. X\indexentry{product files}{18}
  2081. X\indexentry{documentation file}{18}
  2082. X\indexentry{output files}{18}
  2083. X\indexentry{simplicity}{18}
  2084. X\indexentry{reliability}{18}
  2085. X\indexentry{language independence}{18}
  2086. X\indexentry{independence language}{18}
  2087. X\indexentry{typesetter independence}{18}
  2088. X\indexentry{independence typesetter}{18}
  2089. X\indexentry{BSI82}{18}
  2090. X\indexentry{Knuth84}{18}
  2091. X\indexentry{TeX}{18}
  2092. X\indexentry{portability}{18}
  2093. X\indexentry{controllability}{18}
  2094. X\indexentry{GNU license}{18}
  2095. X\indexentry{license GNU}{18}
  2096. X\indexentry{production tool}{19}
  2097. X\indexentry{FunnelWeb name}{19}
  2098. X\indexentry{name FunnelWeb}{19}
  2099. X\indexentry{Funnel-web spider}{19}
  2100. X\indexentry{spider Funnel-web}{19}
  2101. X\indexentry{Sydney}{19}
  2102. X\indexentry{Atrax robustus}{19}
  2103. X\indexentry{ANZE}{19}
  2104. X\indexentry{tiger snake}{19}
  2105. X\indexentry{snake tiger}{19}
  2106. X\indexentry{white pointer shark}{19}
  2107. X\indexentry{shark white pointer}{19}
  2108. X\indexentry{Edna Everage}{19}
  2109. X\indexentry{Everage Edna}{19}
  2110. X\indexentry{Barry Humphries}{19}
  2111. X\indexentry{Humphries Barry}{19}
  2112. X\indexentry{Humphries91}{19}
  2113. X\indexentry{tutorial}{19}
  2114. X\indexentry{tutorial introduction}{19}
  2115. X\indexentry{introduction tutorial}{19}
  2116. X\indexentry{hello world document}{20}
  2117. X\indexentry{invoking FunnelWeb}{20}
  2118. X\indexentry{special character}{20}
  2119. X\indexentry{special sequence}{20}
  2120. X\indexentry{@<}{20}
  2121. X\indexentry{@>}{20}
  2122. X\indexentry{@O}{20}
  2123. X\indexentry{@braces}{20}
  2124. X\indexentry{@+}{20}
  2125. X\indexentry{simple rule}{20}
  2126. X\indexentry{rule simple}{20}
  2127. X\indexentry{C preprocessor}{20}
  2128. X\indexentry{preprocessor C}{20}
  2129. X\indexentry{@=}{20}
  2130. X\indexentry{Hello Northern Hemisphere Program}{21}
  2131. X\indexentry{FunnelWeb two main aspects}{21}
  2132. X\indexentry{two main aspects FunnelWeb}{21}
  2133. X\indexentry{Tangling}{21}
  2134. X\indexentry{Weaving}{21}
  2135. X\indexentry{WEB}{21}
  2136. X\indexentry{tutorial macro facilities}{22}
  2137. X\indexentry{macro facilities tutorial}{22}
  2138. X\indexentry{tutorial simple macros}{22}
  2139. X\indexentry{simple macros tutorial}{22}
  2140. X\indexentry{tutorial macros simple}{22}
  2141. X\indexentry{macros simple tutorial}{22}
  2142. X\indexentry{@O}{22}
  2143. X\indexentry{@dollar}{22}
  2144. X\indexentry{order program}{22}
  2145. X\indexentry{program order}{22}
  2146. X\indexentry{program layout}{22}
  2147. X\indexentry{layout program}{22}
  2148. X\indexentry{macro bindings}{22}
  2149. X\indexentry{bindings macro}{22}
  2150. X\indexentry{TeX}{22}
  2151. X\indexentry{number of times called}{23}
  2152. X\indexentry{calls number}{23}
  2153. X\indexentry{number calls}{23}
  2154. X\indexentry{invocation number}{23}
  2155. X\indexentry{number invocation}{23}
  2156. X\indexentry{EOL suppression}{23}
  2157. X\indexentry{suppression EOL}{23}
  2158. X\indexentry{@-}{23}
  2159. X\indexentry{@Z tutorial}{24}
  2160. X\indexentry{tutorial @Z}{24}
  2161. X\indexentry{@M tutorial}{24}
  2162. X\indexentry{tutorial @M}{24}
  2163. X\indexentry{indentation macro calls}{25}
  2164. X\indexentry{macro calls indentation}{25}
  2165. X\indexentry{pragma}{25}
  2166. X\indexentry{WEB}{25}
  2167. X\indexentry{Knuth83}{25}
  2168. X\indexentry{Pascal}{25}
  2169. X\indexentry{output WEB}{25}
  2170. X\indexentry{WEB output}{25}
  2171. X\indexentry{Knuth83}{25}
  2172. X\indexentry{object code}{26}
  2173. X\indexentry{additive macros}{26}
  2174. X\indexentry{macros additive}{26}
  2175. X\indexentry{additive macro}{26}
  2176. X\indexentry{tutorial ==}{26}
  2177. X\indexentry{== tutorial}{26}
  2178. X\indexentry{tutorial +=}{26}
  2179. X\indexentry{+= tutorial}{26}
  2180. X\indexentry{data abstraction}{26}
  2181. X\indexentry{abstraction data}{26}
  2182. X\indexentry{Pascal}{26}
  2183. X\indexentry{program layout}{28}
  2184. X\indexentry{layout program}{28}
  2185. X\indexentry{parameterized macros}{28}
  2186. X\indexentry{macros parameterized}{28}
  2187. X\indexentry{formal parameters}{28}
  2188. X\indexentry{parameters formal}{28}
  2189. X\indexentry{@1...}{28}
  2190. X\indexentry{formal parameters}{28}
  2191. X\indexentry{parameters formal}{28}
  2192. X\indexentry{actual parameters}{29}
  2193. X\indexentry{parameters actual}{29}
  2194. X\indexentry{@(}{29}
  2195. X\indexentry{@)}{29}
  2196. X\indexentry{@,}{29}
  2197. X\indexentry{@"}{29}
  2198. X\indexentry{parameter list, absent}{29}
  2199. X\indexentry{song}{29}
  2200. X\indexentry{twelve bugs of christmas}{29}
  2201. X\indexentry{rec.humor.funny}{29}
  2202. X\indexentry{Pat Scannel}{29}
  2203. X\indexentry{Scannel Pat}{29}
  2204. X\indexentry{macro expansion}{30}
  2205. X\indexentry{expansion macro}{30}
  2206. X\indexentry{memory use of}{30}
  2207. X\indexentry{use of memory}{30}
  2208. X\indexentry{include files}{30}
  2209. X\indexentry{files include}{30}
  2210. X\indexentry{@i}{30}
  2211. X\indexentry{poem camera}{30}
  2212. X\indexentry{camera poem}{30}
  2213. X\indexentry{animal poem}{30}
  2214. X\indexentry{poem animal}{30}
  2215. X\indexentry{shooting}{31}
  2216. X\indexentry{special character changing}{31}
  2217. X\indexentry{changing special character}{31}
  2218. X\indexentry{include files recursive}{31}
  2219. X\indexentry{recursive include files}{31}
  2220. X\indexentry{macro libraries}{31}
  2221. X\indexentry{libraries macro}{31}
  2222. X\indexentry{tutorial typesetting}{32}
  2223. X\indexentry{typesetting tutorial}{32}
  2224. X\indexentry{documentation vs code}{32}
  2225. X\indexentry{code vs documentation}{32}
  2226. X\indexentry{overview typesetting}{32}
  2227. X\indexentry{typesetting overview}{32}
  2228. X\indexentry{macro definitions}{32}
  2229. X\indexentry{directives}{32}
  2230. X\indexentry{free text}{32}
  2231. X\indexentry{typesetter independence}{34}
  2232. X\indexentry{independence typesetter}{34}
  2233. X\indexentry{typesetter independent}{34}
  2234. X\indexentry{hierarchical structure}{34}
  2235. X\indexentry{structure hierarchical}{34}
  2236. X\indexentry{section headings}{34}
  2237. X\indexentry{headings section}{34}
  2238. X\indexentry{@A...}{34}
  2239. X\indexentry{name section}{34}
  2240. X\indexentry{section name}{34}
  2241. X\indexentry{section name inheritance}{35}
  2242. X\indexentry{inheritance section name}{35}
  2243. X\indexentry{programmer's cheer}{35}
  2244. X\indexentry{cheer programmer's}{35}
  2245. X\indexentry{hacker's cheer}{35}
  2246. X\indexentry{cheer hacker's}{35}
  2247. X\indexentry{hacker's dictionary}{35}
  2248. X\indexentry{dictionary hacker's}{35}
  2249. X\indexentry{literal construct}{37}
  2250. X\indexentry{emphasis construct}{37}
  2251. X\indexentry{@slash}{37}
  2252. X\indexentry{@braces}{37}
  2253. X\indexentry{header page}{37}
  2254. X\indexentry{vskip directive}{37}
  2255. X\indexentry{directive vskip}{37}
  2256. X\indexentry{title directive}{37}
  2257. X\indexentry{directive title}{37}
  2258. X\indexentry{newpage directive}{37}
  2259. X\indexentry{directive newpage}{37}
  2260. X\indexentry{table of contents directive}{37}
  2261. X\indexentry{directive table of contents}{37}
  2262. X\indexentry{comments}{37}
  2263. X\indexentry{@!}{37}
  2264. X\indexentry{complete example}{38}
  2265. X\indexentry{example complete}{38}
  2266. X\indexentry{FunnelWeb Example}{38}
  2267. X\indexentry{Example FunnelWeb}{38}
  2268. X\indexentry{FunnelWeb hints}{41}
  2269. X\indexentry{hints FunnelWeb}{41}
  2270. X\indexentry{macro names}{41}
  2271. X\indexentry{names macro}{41}
  2272. X\indexentry{macro identifiers}{41}
  2273. X\indexentry{identifiers macro}{41}
  2274. X\indexentry{quick names}{42}
  2275. X\indexentry{names quick}{42}
  2276. X\indexentry{empty name}{42}
  2277. X\indexentry{name empty}{42}
  2278. X\indexentry{quick name}{42}
  2279. X\indexentry{FunnelWeb rules}{42}
  2280. X\indexentry{rules FunnelWeb}{42}
  2281. X\indexentry{FunnelWeb martinet}{42}
  2282. X\indexentry{martinet FunnelWeb}{42}
  2283. X\indexentry{trailing blanks}{42}
  2284. X\indexentry{blanks trailing}{42}
  2285. X\indexentry{input line length}{42}
  2286. X\indexentry{length input line}{42}
  2287. X\indexentry{output line length}{42}
  2288. X\indexentry{length output line}{42}
  2289. X\indexentry{Fortran compilers}{42}
  2290. X\indexentry{compilers Fortran}{42}
  2291. X\indexentry{control characters}{42}
  2292. X\indexentry{characters control}{42}
  2293. X\indexentry{text editors}{42}
  2294. X\indexentry{editors text}{42}
  2295. X\indexentry{tabs}{42}
  2296. X\indexentry{invocations number}{42}
  2297. X\indexentry{number invocations}{42}
  2298. X\indexentry{recursion macro}{43}
  2299. X\indexentry{macro recursion}{43}
  2300. X\indexentry{EOL fiddling with}{43}
  2301. X\indexentry{fiddling with EOL}{43}
  2302. X\indexentry{end-of-line fiddling with}{43}
  2303. X\indexentry{fiddling with end-of-line}{43}
  2304. X\indexentry{spacing}{43}
  2305. X\indexentry{fudging conditionals}{44}
  2306. X\indexentry{conditionals fudging}{44}
  2307. X\indexentry{Ada}{44}
  2308. X\indexentry{headings strength}{46}
  2309. X\indexentry{strength headings}{46}
  2310. X\indexentry{typesetting strength}{46}
  2311. X\indexentry{strength typesetting}{46}
  2312. X\indexentry{section strength}{46}
  2313. X\indexentry{strength section}{46}
  2314. X\indexentry{font size}{46}
  2315. X\indexentry{size font}{46}
  2316. X\indexentry{FunnelWeb efficiency}{47}
  2317. X\indexentry{efficiency FunnelWeb}{47}
  2318. X\indexentry{efficiency notes}{47}
  2319. X\indexentry{notes efficiency}{47}
  2320. X\indexentry{memory}{47}
  2321. X\indexentry{input files}{47}
  2322. X\indexentry{files input}{47}
  2323. X\indexentry{speed}{47}
  2324. X\indexentry{macro expansion}{47}
  2325. X\indexentry{expansion macro}{47}
  2326. X\indexentry{interactive mode}{47}
  2327. X\indexentry{keyboard mode}{47}
  2328. X\indexentry{regression testing}{47}
  2329. X\indexentry{testing regression}{47}
  2330. X\indexentry{command interpreter}{47}
  2331. X\indexentry{interpreter command}{47}
  2332. X\indexentry{useful commands}{47}
  2333. X\indexentry{commands useful}{47}
  2334. X\indexentry{FunnelWeb proper}{48}
  2335. X\indexentry{set command}{48}
  2336. X\indexentry{command set}{48}
  2337. X\indexentry{show command}{48}
  2338. X\indexentry{command show}{48}
  2339. X\indexentry{trace on command}{48}
  2340. X\indexentry{command trace on}{48}
  2341. X\indexentry{workstations}{48}
  2342. X\indexentry{options setting defaults}{49}
  2343. X\indexentry{setting defaults options}{49}
  2344. X\indexentry{default options}{49}
  2345. X\indexentry{options default}{49}
  2346. X\indexentry{alias}{49}
  2347. X\indexentry{fwinit.fws}{49}
  2348. X\indexentry{startup script}{49}
  2349. X\indexentry{script startup}{49}
  2350. X\indexentry{initialization script}{49}
  2351. X\indexentry{script initialization}{49}
  2352. X\indexentry{make utility}{49}
  2353. X\indexentry{file dependencies}{49}
  2354. X\indexentry{dependencies file}{49}
  2355. X\indexentry{Ada}{49}
  2356. X\indexentry{D option}{49}
  2357. X\indexentry{option D}{49}
  2358. X\indexentry{delete output files}{49}
  2359. X\indexentry{output files delete}{49}
  2360. X\indexentry{suppression file}{49}
  2361. X\indexentry{file suppression}{49}
  2362. X\indexentry{FunnelWeb dangers}{50}
  2363. X\indexentry{dangers FunnelWeb}{50}
  2364. X\indexentry{FunnelWeb pitfalls}{50}
  2365. X\indexentry{pitfalls FunnelWeb}{50}
  2366. X\indexentry{Donald Knuth}{50}
  2367. X\indexentry{Knuth Donald}{50}
  2368. X\indexentry{literate programming}{50}
  2369. X\indexentry{programming literate}{50}
  2370. X\indexentry{spaghetti organization}{50}
  2371. X\indexentry{organization spaghetti}{50}
  2372. X\indexentry{stream of consciousness}{50}
  2373. X\indexentry{boring organization}{50}
  2374. X\indexentry{organization boring}{50}
  2375. X\indexentry{random access}{50}
  2376. X\indexentry{access random}{50}
  2377. X\indexentry{novels}{50}
  2378. X\indexentry{maintenance programmer}{50}
  2379. X\indexentry{programmer maintenance}{50}
  2380. X\indexentry{documentation interdependent}{50}
  2381. X\indexentry{interdependent documentation}{50}
  2382. X\indexentry{pavlov documentation}{51}
  2383. X\indexentry{documentation pavlov}{51}
  2384. X\indexentry{MIL-STD-2167A}{51}
  2385. X\indexentry{2167A}{51}
  2386. X\indexentry{Strunk79}{51}
  2387. X\indexentry{duplicate documentation}{51}
  2388. X\indexentry{documentation duplicate}{51}
  2389. X\indexentry{Ada}{51}
  2390. X\indexentry{over documentation}{51}
  2391. X\indexentry{documentation over}{51}
  2392. X\indexentry{Gries81}{51}
  2393. X\indexentry{wholistic debugging}{53}
  2394. X\indexentry{debugging wholistic}{53}
  2395. X\indexentry{wholistic debugging}{53}
  2396. X\indexentry{debugger}{53}
  2397. X\indexentry{code gardening}{53}
  2398. X\indexentry{gardening code}{53}
  2399. X\indexentry{wholistic medicine}{53}
  2400. X\indexentry{medicine wholistic}{53}
  2401. X\indexentry{FunnelWeb example applications}{53}
  2402. X\indexentry{example applications FunnelWeb}{53}
  2403. X\indexentry{FunnelWeb applications}{53}
  2404. X\indexentry{applications FunnelWeb}{53}
  2405. X\indexentry{monster file postscript}{54}
  2406. X\indexentry{postscript monster file}{54}
  2407. X\indexentry{MacDraw}{54}
  2408. X\indexentry{TeX}{54}
  2409. X\indexentry{PhD thesis}{54}
  2410. X\indexentry{thesis PhD}{54}
  2411. X\indexentry{Macintosh}{54}
  2412. X\indexentry{PostScript}{54}
  2413. X\indexentry{postscript header file}{54}
  2414. X\indexentry{header file postscript}{54}
  2415. X\indexentry{cryptic text files}{55}
  2416. X\indexentry{text files cryptic}{55}
  2417. X\indexentry{Ada}{55}
  2418. X\indexentry{abstract data type}{55}
  2419. X\indexentry{ADT}{55}
  2420. X\indexentry{package}{55}
  2421. X\indexentry{DOD83}{55}
  2422. X\indexentry{multiple languages}{55}
  2423. X\indexentry{languages multiple}{55}
  2424. X\indexentry{open systems}{55}
  2425. X\indexentry{printing system}{55}
  2426. X\indexentry{system printing}{55}
  2427. X\indexentry{laser printer}{55}
  2428. X\indexentry{printer laser}{55}
  2429. X\indexentry{sharing information}{56}
  2430. X\indexentry{small functions}{56}
  2431. X\indexentry{functions small}{56}
  2432. X\indexentry{code abstraction}{56}
  2433. X\indexentry{abstraction code}{56}
  2434. X\indexentry{Pascal}{57}
  2435. X\indexentry{preprocessor C}{57}
  2436. X\indexentry{C preprocessor}{57}
  2437. X\indexentry{procedure call overhead}{57}
  2438. X\indexentry{overhead procedure call}{57}
  2439. X\indexentry{binding problems}{57}
  2440. X\indexentry{problems binding}{57}
  2441. X\indexentry{comments abuse}{57}
  2442. X\indexentry{abuse comments}{57}
  2443. X\indexentry{eliminating comments}{57}
  2444. X\indexentry{comments eliminating}{57}
  2445. X\indexentry{good old days}{57}
  2446. X\indexentry{BASIC}{57}
  2447. X\indexentry{REM statement}{57}
  2448. X\indexentry{statement REM}{57}
  2449. X\indexentry{header files}{57}
  2450. X\indexentry{files header}{57}
  2451. X\indexentry{C header}{57}
  2452. X\indexentry{header C}{57}
  2453. X\indexentry{postscript}{57}
  2454. X\indexentry{sharing text}{58}
  2455. X\indexentry{text sharing}{58}
  2456. X\indexentry{annual report}{58}
  2457. X\indexentry{report annual}{58}
  2458. X\indexentry{examples documentation}{58}
  2459. X\indexentry{documentation examples}{58}
  2460. X\indexentry{generics fudging}{59}
  2461. X\indexentry{fudging generics}{59}
  2462. X\indexentry{Pascal}{59}
  2463. X\indexentry{Barry Dwyer}{59}
  2464. X\indexentry{Dwyer Barry}{59}
  2465. X\indexentry{University Adelaide}{59}
  2466. X\indexentry{Adelaide University}{59}
  2467. X\indexentry{set abstraction}{59}
  2468. X\indexentry{abstraction set}{59}
  2469. X\indexentry{typesafe generics}{61}
  2470. X\indexentry{generics typesafe}{61}
  2471. X\indexentry{FunnelWeb definition}{63}
  2472. X\indexentry{definition FunnelWeb}{63}
  2473. X\indexentry{notation}{63}
  2474. X\indexentry{EBNF syntax}{63}
  2475. X\indexentry{syntax EBNF}{63}
  2476. X\indexentry{terminology}{63}
  2477. X\indexentry{semantic architecture}{64}
  2478. X\indexentry{architecture semantic}{64}
  2479. X\indexentry{FunnelWeb overview}{64}
  2480. X\indexentry{overview FunnelWeb}{64}
  2481. X\indexentry{execution phases}{64}
  2482. X\indexentry{phases execution}{64}
  2483. X\indexentry{input file}{64}
  2484. X\indexentry{FunnelWeb file}{64}
  2485. X\indexentry{phases}{64}
  2486. X\indexentry{output files}{64}
  2487. X\indexentry{journal file}{64}
  2488. X\indexentry{listing file}{64}
  2489. X\indexentry{documentation}{64}
  2490. X\indexentry{product files}{64}
  2491. X\indexentry{scanner}{64}
  2492. X\indexentry{parser}{64}
  2493. X\indexentry{document list}{64}
  2494. X\indexentry{list document}{64}
  2495. X\indexentry{macro table}{64}
  2496. X\indexentry{table macro}{64}
  2497. X\indexentry{analyser}{65}
  2498. X\indexentry{tangle}{65}
  2499. X\indexentry{weave}{65}
  2500. X\indexentry{FunnelWeb proper}{65}
  2501. X\indexentry{FunnelWeb program}{65}
  2502. X\indexentry{diagnostics}{65}
  2503. X\indexentry{diagnostics levels of}{65}
  2504. X\indexentry{levels of diagnostics}{65}
  2505. X\indexentry{severity}{65}
  2506. X\indexentry{warning severity}{65}
  2507. X\indexentry{severity warning}{65}
  2508. X\indexentry{error severity}{65}
  2509. X\indexentry{severity error}{65}
  2510. X\indexentry{severe severity}{65}
  2511. X\indexentry{severity severe}{65}
  2512. X\indexentry{fatal severity}{65}
  2513. X\indexentry{severity fatal}{65}
  2514. X\indexentry{assertion severity}{65}
  2515. X\indexentry{severity assertion}{65}
  2516. X\indexentry{return status}{65}
  2517. X\indexentry{status return}{65}
  2518. X\indexentry{typesetter independence}{65}
  2519. X\indexentry{independence typesetter}{65}
  2520. X\indexentry{Kernighan88}{65}
  2521. X\indexentry{typesetter directives}{66}
  2522. X\indexentry{command line interface}{66}
  2523. X\indexentry{interface command line}{66}
  2524. X\indexentry{FunnelWeb invoking}{66}
  2525. X\indexentry{invoking FunnelWeb}{66}
  2526. X\indexentry{FunnelWeb running}{66}
  2527. X\indexentry{running FunnelWeb}{66}
  2528. X\indexentry{command line processing}{66}
  2529. X\indexentry{processing command line}{66}
  2530. X\indexentry{command line parsing}{66}
  2531. X\indexentry{parsing command line}{66}
  2532. X\indexentry{fw command verb}{66}
  2533. X\indexentry{command verb fw}{66}
  2534. X\indexentry{command line argument}{67}
  2535. X\indexentry{argument command line}{67}
  2536. X\indexentry{syntax command line}{67}
  2537. X\indexentry{command line syntax}{67}
  2538. X\indexentry{arguments}{67}
  2539. X\indexentry{case dependence}{67}
  2540. X\indexentry{dependence case}{67}
  2541. X\indexentry{Unix}{67}
  2542. X\indexentry{sign}{67}
  2543. X\indexentry{letter}{67}
  2544. X\indexentry{string}{67}
  2545. X\indexentry{command line options syntax}{67}
  2546. X\indexentry{syntax command line options}{67}
  2547. X\indexentry{options syntax}{67}
  2548. X\indexentry{syntax options}{67}
  2549. X\indexentry{options}{67}
  2550. X\indexentry{options}{68}
  2551. X\indexentry{list options}{68}
  2552. X\indexentry{options list}{68}
  2553. X\indexentry{B option}{68}
  2554. X\indexentry{option B}{68}
  2555. X\indexentry{tracedump options}{68}
  2556. X\indexentry{options tracedump}{68}
  2557. X\indexentry{dump option}{68}
  2558. X\indexentry{option dump}{68}
  2559. X\indexentry{dump mapped file}{68}
  2560. X\indexentry{mapped file dump}{68}
  2561. X\indexentry{dump global line list}{68}
  2562. X\indexentry{global line list dump}{68}
  2563. X\indexentry{dump token list}{68}
  2564. X\indexentry{token list dump}{68}
  2565. X\indexentry{dump macro table}{68}
  2566. X\indexentry{macro table dump}{68}
  2567. X\indexentry{dump document list}{68}
  2568. X\indexentry{document list dump}{68}
  2569. X\indexentry{dump times}{68}
  2570. X\indexentry{times dump}{68}
  2571. X\indexentry{non-determinism}{68}
  2572. X\indexentry{C option}{68}
  2573. X\indexentry{option C}{68}
  2574. X\indexentry{listing file context}{68}
  2575. X\indexentry{context listing file}{68}
  2576. X\indexentry{infinite context}{68}
  2577. X\indexentry{context infinite}{68}
  2578. X\indexentry{D option}{68}
  2579. X\indexentry{option D}{68}
  2580. X\indexentry{delete output option}{68}
  2581. X\indexentry{option delete output}{68}
  2582. X\indexentry{F option}{68}
  2583. X\indexentry{option F}{68}
  2584. X\indexentry{input file option}{68}
  2585. X\indexentry{option input file}{68}
  2586. X\indexentry{H option}{68}
  2587. X\indexentry{option H}{68}
  2588. X\indexentry{help option}{68}
  2589. X\indexentry{option help}{68}
  2590. X\indexentry{I option}{69}
  2591. X\indexentry{option I}{69}
  2592. X\indexentry{include file option}{69}
  2593. X\indexentry{option include file}{69}
  2594. X\indexentry{include file}{69}
  2595. X\indexentry{file include}{69}
  2596. X\indexentry{J option}{69}
  2597. X\indexentry{option J}{69}
  2598. X\indexentry{journal file option}{69}
  2599. X\indexentry{option journal file}{69}
  2600. X\indexentry{journal file}{69}
  2601. X\indexentry{file journal}{69}
  2602. X\indexentry{K option}{69}
  2603. X\indexentry{option K}{69}
  2604. X\indexentry{keyboard option}{69}
  2605. X\indexentry{option keyboard}{69}
  2606. X\indexentry{interactive option}{69}
  2607. X\indexentry{option interactive}{69}
  2608. X\indexentry{L option}{69}
  2609. X\indexentry{option L}{69}
  2610. X\indexentry{listing file option}{69}
  2611. X\indexentry{option listing file}{69}
  2612. X\indexentry{listing file}{69}
  2613. X\indexentry{file listing}{69}
  2614. X\indexentry{Q option}{69}
  2615. X\indexentry{option Q}{69}
  2616. X\indexentry{quiet option}{69}
  2617. X\indexentry{option quiet}{69}
  2618. X\indexentry{suppress console output}{69}
  2619. X\indexentry{console output suppress}{69}
  2620. X\indexentry{S option}{69}
  2621. X\indexentry{option S}{69}
  2622. X\indexentry{screen option}{69}
  2623. X\indexentry{option screen}{69}
  2624. X\indexentry{context}{69}
  2625. X\indexentry{T option}{69}
  2626. X\indexentry{option T}{69}
  2627. X\indexentry{typeset option}{69}
  2628. X\indexentry{option typeset}{69}
  2629. X\indexentry{typeset file}{69}
  2630. X\indexentry{file typeset}{69}
  2631. X\indexentry{W option}{69}
  2632. X\indexentry{option W}{69}
  2633. X\indexentry{width option}{69}
  2634. X\indexentry{option width}{69}
  2635. X\indexentry{product file width}{69}
  2636. X\indexentry{width product file}{69}
  2637. X\indexentry{X option}{69}
  2638. X\indexentry{option X}{69}
  2639. X\indexentry{execute script option}{69}
  2640. X\indexentry{option execute script}{69}
  2641. X\indexentry{filename inheritance}{70}
  2642. X\indexentry{inheritance filename}{70}
  2643. X\indexentry{filename fields}{70}
  2644. X\indexentry{fields filename}{70}
  2645. X\indexentry{directory}{70}
  2646. X\indexentry{name}{70}
  2647. X\indexentry{extension}{70}
  2648. X\indexentry{filename inheritance example}{70}
  2649. X\indexentry{example filename inheritance}{70}
  2650. X\indexentry{FunnelWeb startup}{70}
  2651. X\indexentry{startup FunnelWeb}{70}
  2652. X\indexentry{FunnelWeb initialization}{70}
  2653. X\indexentry{initialization FunnelWeb}{70}
  2654. X\indexentry{Action options}{70}
  2655. X\indexentry{Ordinary options}{70}
  2656. X\indexentry{action execution order}{71}
  2657. X\indexentry{order action execution}{71}
  2658. X\indexentry{initialization script}{71}
  2659. X\indexentry{script initialization}{71}
  2660. X\indexentry{fwinit.fws}{71}
  2661. X\indexentry{scanner}{71}
  2662. X\indexentry{mapper}{71}
  2663. X\indexentry{file termination}{71}
  2664. X\indexentry{termination file}{71}
  2665. X\indexentry{line termination}{71}
  2666. X\indexentry{termination line}{71}
  2667. X\indexentry{unprintable characters}{71}
  2668. X\indexentry{characters unprintable}{71}
  2669. X\indexentry{line length}{71}
  2670. X\indexentry{length line}{71}
  2671. X\indexentry{special sequences}{72}
  2672. X\indexentry{sequences special}{72}
  2673. X\indexentry{special character}{72}
  2674. X\indexentry{special sequence}{72}
  2675. X\indexentry{default special character}{72}
  2676. X\indexentry{special character default}{72}
  2677. X\indexentry{simple sequence}{72}
  2678. X\indexentry{setting special character}{74}
  2679. X\indexentry{special character setting}{74}
  2680. X\indexentry{special character inserting into text}{74}
  2681. X\indexentry{inserting into text special character}{74}
  2682. X\indexentry{arbitrary characters inserting into text}{74}
  2683. X\indexentry{inserting into text arbitrary characters}{74}
  2684. X\indexentry{control characters inserting into text}{74}
  2685. X\indexentry{inserting into text control characters}{74}
  2686. X\indexentry{@circumflex}{74}
  2687. X\indexentry{Unix newline}{75}
  2688. X\indexentry{comments FunnelWeb}{75}
  2689. X\indexentry{FunnelWeb comments}{75}
  2690. X\indexentry{@!}{75}
  2691. X\indexentry{quick names}{76}
  2692. X\indexentry{names quick}{76}
  2693. X\indexentry{quick name}{76}
  2694. X\indexentry{@hash}{76}
  2695. X\indexentry{EOL markers inserting}{76}
  2696. X\indexentry{inserting EOL markers}{76}
  2697. X\indexentry{@+}{76}
  2698. X\indexentry{EOL markers suppressing}{77}
  2699. X\indexentry{suppressing EOL markers}{77}
  2700. X\indexentry{@-}{77}
  2701. X\indexentry{include files}{77}
  2702. X\indexentry{files include}{77}
  2703. X\indexentry{@i}{77}
  2704. X\indexentry{input file}{77}
  2705. X\indexentry{include files}{77}
  2706. X\indexentry{pragmas}{78}
  2707. X\indexentry{pragmas visible}{78}
  2708. X\indexentry{visible pragmas}{78}
  2709. X\indexentry{pragmas invisible}{78}
  2710. X\indexentry{invisible pragmas}{78}
  2711. X\indexentry{pragma}{78}
  2712. X\indexentry{indentation macro expansion}{78}
  2713. X\indexentry{macro expansion indentation}{78}
  2714. X\indexentry{no indentation}{78}
  2715. X\indexentry{indentation none}{78}
  2716. X\indexentry{none indentation}{78}
  2717. X\indexentry{blank indentation}{78}
  2718. X\indexentry{indentation blank}{78}
  2719. X\indexentry{blank indentation}{78}
  2720. X\indexentry{input line length}{79}
  2721. X\indexentry{line length input}{79}
  2722. X\indexentry{maximum input line length}{79}
  2723. X\indexentry{input line length maximum}{79}
  2724. X\indexentry{pragma input line length}{79}
  2725. X\indexentry{input line length pragma}{79}
  2726. X\indexentry{maximum product file line length}{79}
  2727. X\indexentry{product file line length maximum}{79}
  2728. X\indexentry{pragma maximum product file line length}{79}
  2729. X\indexentry{maximum product file line length pragma}{79}
  2730. X\indexentry{maximum output file line length}{79}
  2731. X\indexentry{output file line length maximum}{79}
  2732. X\indexentry{pragma maximum output file line length}{79}
  2733. X\indexentry{maximum output file line length pragma}{79}
  2734. X\indexentry{typesetter pragma}{80}
  2735. X\indexentry{pragma typesetter}{80}
  2736. X\indexentry{typesetter independence}{80}
  2737. X\indexentry{independence typesetter}{80}
  2738. X\indexentry{typesetter directives}{81}
  2739. X\indexentry{directives typesetter}{81}
  2740. X\indexentry{inline}{81}
  2741. X\indexentry{freestanding}{81}
  2742. X\indexentry{new page}{81}
  2743. X\indexentry{pragma new page}{81}
  2744. X\indexentry{new page pragma}{81}
  2745. X\indexentry{table of contents}{81}
  2746. X\indexentry{contents table of}{81}
  2747. X\indexentry{pragma table of contents}{81}
  2748. X\indexentry{table of contents pragma}{81}
  2749. X\indexentry{vertical skip}{81}
  2750. X\indexentry{skip vertical}{81}
  2751. X\indexentry{pragma vskip}{81}
  2752. X\indexentry{vskip pragma}{81}
  2753. X\indexentry{title}{82}
  2754. X\indexentry{pragma title}{82}
  2755. X\indexentry{title pragma}{82}
  2756. X\indexentry{parser}{82}
  2757. X\indexentry{text tokens}{82}
  2758. X\indexentry{special tokens}{82}
  2759. X\indexentry{typesetter directive tokens}{82}
  2760. X\indexentry{syntax high level}{82}
  2761. X\indexentry{high level syntax}{82}
  2762. X\indexentry{free text}{83}
  2763. X\indexentry{text free}{83}
  2764. X\indexentry{Free text}{83}
  2765. X\indexentry{directives}{83}
  2766. X\indexentry{freestanding typesetter directives}{83}
  2767. X\indexentry{inline typesetter directives}{83}
  2768. X\indexentry{section constructs}{83}
  2769. X\indexentry{constructs section}{83}
  2770. X\indexentry{tree structure}{83}
  2771. X\indexentry{structure tree}{83}
  2772. X\indexentry{LaTeX}{84}
  2773. X\indexentry{section name}{84}
  2774. X\indexentry{name section}{84}
  2775. X\indexentry{literal directive}{84}
  2776. X\indexentry{directive literal}{84}
  2777. X\indexentry{emphasis directive}{85}
  2778. X\indexentry{directive emphasis}{85}
  2779. X\indexentry{macro definition}{85}
  2780. X\indexentry{definition macro}{85}
  2781. X\indexentry{macro name}{85}
  2782. X\indexentry{macro body}{85}
  2783. X\indexentry{expression}{85}
  2784. X\indexentry{macro attributes}{85}
  2785. X\indexentry{attributes macro}{85}
  2786. X\indexentry{@Z}{85}
  2787. X\indexentry{@M}{85}
  2788. X\indexentry{==}{85}
  2789. X\indexentry{+=}{85}
  2790. X\indexentry{additively defined}{85}
  2791. X\indexentry{names}{86}
  2792. X\indexentry{macro names}{86}
  2793. X\indexentry{names macro}{86}
  2794. X\indexentry{section names}{86}
  2795. X\indexentry{names section}{86}
  2796. X\indexentry{parameter lists formal}{86}
  2797. X\indexentry{formal parameter lists}{86}
  2798. X\indexentry{@1...}{86}
  2799. X\indexentry{macro expressions}{86}
  2800. X\indexentry{expressions macro}{86}
  2801. X\indexentry{macro calls}{86}
  2802. X\indexentry{calls macro}{86}
  2803. X\indexentry{macro parameter delimiting}{87}
  2804. X\indexentry{delimiting macro parameter}{87}
  2805. X\indexentry{formal parameters}{87}
  2806. X\indexentry{parameters formal}{87}
  2807. X\indexentry{macro definition}{87}
  2808. X\indexentry{definition macro}{87}
  2809. X\indexentry{macro expansion}{87}
  2810. X\indexentry{expansion macro}{87}
  2811. X\indexentry{macros static}{87}
  2812. X\indexentry{static macros}{87}
  2813. X\indexentry{analyser}{88}
  2814. X\indexentry{checks macro}{88}
  2815. X\indexentry{macro checks}{88}
  2816. X\indexentry{static analysis}{88}
  2817. X\indexentry{analysis static}{88}
  2818. X\indexentry{macro recursion}{88}
  2819. X\indexentry{recursion macro}{88}
  2820. X\indexentry{tangle}{88}
  2821. X\indexentry{weave}{89}
  2822. X\indexentry{typesetting}{89}
  2823. X\indexentry{target typesetter}{89}
  2824. X\indexentry{typesetter target}{89}
  2825. X\indexentry{cross referencing}{89}
  2826. X\indexentry{referencing cross}{89}
  2827. X\indexentry{cross reference numbering}{89}
  2828. X\indexentry{numbering cross reference}{89}
  2829. X\indexentry{section numbering}{89}
  2830. X\indexentry{numbering section}{89}
  2831. X\indexentry{FunnelWeb command shell}{90}
  2832. X\indexentry{command shell FunnelWeb}{90}
  2833. X\indexentry{commands FunnelWeb}{90}
  2834. X\indexentry{FunnelWeb commands}{90}
  2835. X\indexentry{FunnelWeb shell}{90}
  2836. X\indexentry{shell FunnelWeb}{90}
  2837. X\indexentry{FunnelWeb command shell}{90}
  2838. X\indexentry{uses shell}{90}
  2839. X\indexentry{shell uses}{90}
  2840. X\indexentry{workstation}{90}
  2841. X\indexentry{errors shell}{90}
  2842. X\indexentry{shell errors}{90}
  2843. X\indexentry{status success}{90}
  2844. X\indexentry{success status}{90}
  2845. X\indexentry{status warning}{90}
  2846. X\indexentry{warning status}{90}
  2847. X\indexentry{status error}{90}
  2848. X\indexentry{error status}{90}
  2849. X\indexentry{status severe}{90}
  2850. X\indexentry{severe status}{90}
  2851. X\indexentry{status fatal}{90}
  2852. X\indexentry{fatal status}{90}
  2853. X\indexentry{status assertion}{90}
  2854. X\indexentry{assertion status}{90}
  2855. X\indexentry{command length}{91}
  2856. X\indexentry{length command}{91}
  2857. X\indexentry{string substitution}{91}
  2858. X\indexentry{substitution string}{91}
  2859. X\indexentry{define command}{91}
  2860. X\indexentry{command define}{91}
  2861. X\indexentry{command line processing}{92}
  2862. X\indexentry{processing command line}{92}
  2863. X\indexentry{command options}{92}
  2864. X\indexentry{options command}{92}
  2865. X\indexentry{default options}{92}
  2866. X\indexentry{options default}{92}
  2867. X\indexentry{shell commands list}{93}
  2868. X\indexentry{list shell commands}{93}
  2869. X\indexentry{commands shell}{93}
  2870. X\indexentry{shell commands}{93}
  2871. X\indexentry{command absent}{93}
  2872. X\indexentry{absent command}{93}
  2873. X\indexentry{command codify}{93}
  2874. X\indexentry{codify command}{93}
  2875. X\indexentry{command compare}{93}
  2876. X\indexentry{compare command}{93}
  2877. X\indexentry{command define}{94}
  2878. X\indexentry{define command}{94}
  2879. X\indexentry{string substitution}{94}
  2880. X\indexentry{substitution string}{94}
  2881. X\indexentry{command diff}{94}
  2882. X\indexentry{diff command}{94}
  2883. X\indexentry{file differences}{94}
  2884. X\indexentry{differences file}{94}
  2885. X\indexentry{command diffsummary}{95}
  2886. X\indexentry{diffsummary command}{95}
  2887. X\indexentry{command diffzero}{95}
  2888. X\indexentry{diffzero command}{95}
  2889. X\indexentry{command eneo}{95}
  2890. X\indexentry{eneo command}{95}
  2891. X\indexentry{command execute}{96}
  2892. X\indexentry{execute command}{96}
  2893. X\indexentry{command exists}{96}
  2894. X\indexentry{exists command}{96}
  2895. X\indexentry{command fixeols}{96}
  2896. X\indexentry{fixeols command}{96}
  2897. X\indexentry{non-printable characters}{96}
  2898. X\indexentry{characters non-printable}{96}
  2899. X\indexentry{command fw}{97}
  2900. X\indexentry{fw command}{97}
  2901. X\indexentry{command help}{97}
  2902. X\indexentry{help command}{97}
  2903. X\indexentry{command here}{98}
  2904. X\indexentry{here command}{98}
  2905. X\indexentry{command quit}{98}
  2906. X\indexentry{quit command}{98}
  2907. X\indexentry{command set}{98}
  2908. X\indexentry{set command}{98}
  2909. X\indexentry{command show}{98}
  2910. X\indexentry{show command}{98}
  2911. X\indexentry{command skipto}{98}
  2912. X\indexentry{skipto command}{98}
  2913. X\indexentry{command status}{99}
  2914. X\indexentry{status command}{99}
  2915. X\indexentry{command tolerate}{100}
  2916. X\indexentry{tolerate command}{100}
  2917. X\indexentry{command trace}{100}
  2918. X\indexentry{trace command}{100}
  2919. X\indexentry{command write}{100}
  2920. X\indexentry{write command}{100}
  2921. X\indexentry{command writeu}{100}
  2922. X\indexentry{writeu command}{100}
  2923. X\indexentry{FunnelWeb installation}{101}
  2924. X\indexentry{installation FunnelWeb}{101}
  2925. X\indexentry{FunnelWeb obtaining}{101}
  2926. X\indexentry{obtaining FunnelWeb}{101}
  2927. X\indexentry{ftp anonymous}{101}
  2928. X\indexentry{anonymous ftp}{101}
  2929. X\indexentry{directory tree}{102}
  2930. X\indexentry{tree directory}{102}
  2931. X\indexentry{admin directory}{102}
  2932. X\indexentry{directory admin}{102}
  2933. X\indexentry{answers directory}{102}
  2934. X\indexentry{directory answers}{102}
  2935. X\indexentry{correct answers}{102}
  2936. X\indexentry{answers correct}{102}
  2937. X\indexentry{hackman directory}{103}
  2938. X\indexentry{directory hackman}{103}
  2939. X\indexentry{results directory}{103}
  2940. X\indexentry{directory results}{103}
  2941. X\indexentry{scripts directory}{103}
  2942. X\indexentry{directory scripts}{103}
  2943. X\indexentry{regression testing}{103}
  2944. X\indexentry{testing regression}{103}
  2945. X\indexentry{sources directory}{103}
  2946. X\indexentry{directory sources}{103}
  2947. X\indexentry{tests directory}{104}
  2948. X\indexentry{directory tests}{104}
  2949. X\indexentry{userman directory}{105}
  2950. X\indexentry{directory userman}{105}
  2951. X\indexentry{compiling FunnelWeb}{105}
  2952. X\indexentry{FunnelWeb compiling}{105}
  2953. X\indexentry{testing FunnelWeb}{105}
  2954. X\indexentry{FunnelWeb testing}{105}
  2955. X\indexentry{installing FunnelWeb}{106}
  2956. X\indexentry{FunnelWeb installing}{106}
  2957. X\indexentry{FunnelWeb executable}{106}
  2958. X\indexentry{executable FunnelWeb}{106}
  2959. X\indexentry{printing manuals}{107}
  2960. X\indexentry{manuals printing}{107}
  2961. X\indexentry{problems installation}{107}
  2962. X\indexentry{installation problems}{107}
  2963. X\indexentry{FunnelWeb administration}{109}
  2964. X\indexentry{administration FunnelWeb}{109}
  2965. X\indexentry{commitment FunnelWeb}{109}
  2966. X\indexentry{FunnelWeb commitment}{109}
  2967. X\indexentry{ANSI}{109}
  2968. X\indexentry{FunnelWeb documentation}{110}
  2969. X\indexentry{documentation FunnelWeb}{110}
  2970. X\indexentry{FunnelWeb registration}{110}
  2971. X\indexentry{registration FunnelWeb}{110}
  2972. X\indexentry{FunnelWeb support}{110}
  2973. X\indexentry{support FunnelWeb}{110}
  2974. X\indexentry{copyright FunnelWeb}{112}
  2975. X\indexentry{FunnelWeb copyright}{112}
  2976. X\indexentry{FunnelWeb license}{112}
  2977. X\indexentry{license FunnelWeb}{112}
  2978. X\indexentry{GNU license}{112}
  2979. X\indexentry{license GNU}{112}
  2980. X\indexentry{warranty}{112}
  2981. X\indexentry{FunnelWeb Distribution}{113}
  2982. X\indexentry{Distribution FunnelWeb}{113}
  2983. X\indexentry{FunnelWeb versions}{114}
  2984. X\indexentry{versions FunnelWeb}{114}
  2985. X\indexentry{author contacting}{114}
  2986. X\indexentry{contacting author}{114}
  2987. X\indexentry{ftp archive}{114}
  2988. X\indexentry{archive ftp}{114}
  2989. X\indexentry{FunnelWeb archive}{114}
  2990. X\indexentry{archive FunnelWeb}{114}
  2991. X\indexentry{glossary}{115}
  2992. X\indexentry{Analyser}{115}
  2993. X\indexentry{Argument}{115}
  2994. X\indexentry{Directive}{115}
  2995. X\indexentry{Documentation}{115}
  2996. X\indexentry{Documentation file}{115}
  2997. X\indexentry{Free text}{115}
  2998. X\indexentry{FunnelWeb}{115}
  2999. X\indexentry{FunnelWeb file}{115}
  3000. X\indexentry{FunnelWeb language}{115}
  3001. X\indexentry{FunnelWeb proper}{115}
  3002. X\indexentry{FW}{115}
  3003. X\indexentry{Include file}{115}
  3004. X\indexentry{Input file}{115}
  3005. X\indexentry{Journal file}{115}
  3006. X\indexentry{Listing file}{115}
  3007. X\indexentry{Macro}{115}
  3008. X\indexentry{Macro definition}{116}
  3009. X\indexentry{Mapper}{116}
  3010. X\indexentry{Option}{116}
  3011. X\indexentry{Output file}{116}
  3012. X\indexentry{Parser}{116}
  3013. X\indexentry{Pragma}{116}
  3014. X\indexentry{Printed documentation}{116}
  3015. X\indexentry{Product file}{116}
  3016. X\indexentry{Scanner}{116}
  3017. X\indexentry{Script}{116}
  3018. X\indexentry{Shell}{116}
  3019. X\indexentry{Special character}{116}
  3020. X\indexentry{Special sequence}{116}
  3021. X\indexentry{Tangle}{116}
  3022. X\indexentry{Typesetting directive}{116}
  3023. X\indexentry{Weave}{116}
  3024. X\indexentry{references}{117}
  3025. X\indexentry{ANSI}{117}
  3026. X\indexentry{ANZE}{117}
  3027. X\indexentry{BSI82}{117}
  3028. X\indexentry{Gries81}{117}
  3029. X\indexentry{Humphries91}{117}
  3030. X\indexentry{Kernighan88}{117}
  3031. X\indexentry{Knuth83}{117}
  3032. X\indexentry{Knuth84}{117}
  3033. X\indexentry{Knuth84}{117}
  3034. X\indexentry{Lamport86}{117}
  3035. X\indexentry{Rosovsky90}{117}
  3036. X\indexentry{Smith91}{117}
  3037. X\indexentry{Strunk79}{117}
  3038. X\indexentry{USDOD83}{117}
  3039. END_OF_FILE
  3040. if test 33582 -ne `wc -c <'userman/u_manual.idx'`; then
  3041.     echo shar: \"'userman/u_manual.idx'\" unpacked with wrong size!
  3042. fi
  3043. # end of 'userman/u_manual.idx'
  3044. fi
  3045. echo shar: End of archive 14 \(of 20\).
  3046. cp /dev/null ark14isdone
  3047. MISSING=""
  3048. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ; do
  3049.     if test ! -f ark${I}isdone ; then
  3050.     MISSING="${MISSING} ${I}"
  3051.     fi
  3052. done
  3053. if test "${MISSING}" = "" ; then
  3054.     echo You have unpacked all 20 archives.
  3055.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  3056. else
  3057.     echo You still need to unpack the following archives:
  3058.     echo "        " ${MISSING}
  3059. fi
  3060. ##  End of shell archive.
  3061. exit 0
  3062.