diff view
color-brad3.f color-ed3.f
end of diff view
1. 0 [IF]
2.    Forth to HTML converter
3.  
4.    Main contributors: Brad Eckert & Ed Beroset
5.    Revision 4. See bottom for revision history.
6.  
7.    This ANS Forth program is public domain. It translates ANS Forth to colorized
8.    HTML. Hyperlinks to the ANS Forth draft standard are inserted for all ANS
9.    standard words. Hyperlinks to user definitions are included.
10.  
11.    Usage: HTML FileName    Generates HTML file from Forth source.
12.                            Output file is Filename with .HTM extension.
13.           Q [forth code]   Outputs HTML for 1 line to screen
14.  
15.    Q is used for debugging. You can use "linenum ?" to show the line number if an
16.    ABORT occurs. The HTML is about 10 times as big as the Forth source because of
17.    all the links, color changes and whitespace.
18.  
19.    INCLUDEd files produce corresponding HTML pages. Most browsers get severely
20.    bogged down with large files. If you're converting a large Forth program to
21.    HTML, try to keep the source files under 500 lines each by splitting long
22.    source into multiple INCLUDE files.
23.  
24.    When you INCLUDE this file some redefinition complaints may occur. That's
25.    okay since you won't be loading an application on top of this.
26.  
27.    Users of specific Forths can extend the hyperlink table to point to words
28.    in a glossary for that particular Forth.
29.  
30.    You can change the following bold/italic/nestable options:
31. [THEN]
32.  
33. ONLY FORTH ALSO DEFINITIONS
34.  
35. 0 VALUE bold                                    \ T if bold text
36. 1 VALUE italic                                  \ T if italic comments
37. 1 VALUE nestable                                \ T if INCLUDE nests files
38.  
39. : undefined ( <name> -- f ) BL WORD FIND NIP 0= ;
40. undefined C+!    [IF] : C+! SWAP OVER C@ + SWAP C! ;                      [THEN]
41. undefined BOUNDS [IF] : BOUNDS OVER + SWAP ;                              [THEN]
42. undefined SCAN   [IF] : SCAN
43.    >R
44.    BEGIN DUP WHILE OVER C@ R@ <> WHILE 1 /STRING REPEAT THEN
45.    R> DROP ;                                                              [THEN]
46. undefined SKIP   [IF] : SKIP
47.    >R
48.    BEGIN DUP WHILE OVER C@ R@ = WHILE 1 /STRING REPEAT THEN
49.    R> DROP ;                                                              [THEN]
50. undefined NOOP   [IF] : NOOP ;                                            [THEN]
51. undefined +PLACE [IF] : +PLACE 2DUP 2>R COUNT CHARS + SWAP MOVE 2R> C+! ; [THEN]
52. undefined PLACE  [IF] : PLACE  0 OVER C! +PLACE ;                         [THEN]
53. undefined FDROP  [IF] : FDROP ;                                           [THEN]
54. undefined >FLOAT [IF] : >FLOAT DROP C@ [CHAR] 0 [CHAR] 9 1+ WITHIN ;      [THEN]
55.  
56. 0 VALUE outf                                    \ output to file
57. 1 VALUE screen-only                             \ screen is for testing
58. : werr  ABORT" Error writing file" ;
59. : out   screen-only IF TYPE    ELSE outf WRITE-FILE werr THEN ;
60. : outln screen-only IF TYPE CR ELSE outf WRITE-LINE werr THEN ;
61.  
62. WORDLIST CONSTANT hyperlinks
63. VARIABLE attrib
64. : /a      ( -- )         attrib @ IF S" </a>" out THEN 0 attrib ! ;
65. : ,$      ( a len -- )   DUP C, BOUNDS ?DO I C@ C, LOOP ; \ text to dictionary
66. : text    ( <text> -- )  -1 WORD COUNT -TRAILING ,$ ;
67. : line    ( a line# -- ) 0 ?DO COUNT + LOOP COUNT out ;   \ output one string
68. : boiler  ( addr -- )    BEGIN COUNT DUP WHILE 2DUP + >R outln R> REPEAT 2DROP ;
69. : ital(   ( -- )         italic IF S" <i>" out THEN ;
70. : )ital   ( -- )         italic IF S" </i>" out THEN ;
71.  
1. 0 [IF]
2.    Forth to HTML converter
3.  
4.    Main contributors: Brad Eckert & Ed Beroset
5.    Revision 4. See bottom for revision history.
6.  
7.    This ANS Forth program is public domain. It translates ANS Forth to colorized
8.    HTML. Hyperlinks to the ANS Forth draft standard are inserted for all ANS
9.    standard words. Hyperlinks to user definitions are included.
10.  
11.    Usage: HTML FileName    Generates HTML file from Forth source.
12.                            Output file is Filename with .HTM extension.
13.           Q [forth code]   Outputs HTML for 1 line to screen
14.  
15.    Q is used for debugging. You can use "linenum ?" to show the line number if an
16.    ABORT occurs. The HTML is about 10 times as big as the Forth source because of
17.    all the links, color changes and whitespace.
18.  
19.    INCLUDEd files produce corresponding HTML pages. Most browsers get severely
20.    bogged down with large files. If you're converting a large Forth program to
21.    HTML, try to keep the source files under 500 lines each by splitting long
22.    source into multiple INCLUDE files.
23.  
24.    When you INCLUDE this file some redefinition complaints may occur. That's
25.    okay since you won't be loading an application on top of this.
26.  
27.    Users of specific Forths can extend the hyperlink table to point to words
28.    in a glossary for that particular Forth.
29.  
30.    You can change the following bold/italic/nestable options:
31. [THEN]
32.  
33. ONLY FORTH ALSO DEFINITIONS
34.  
35. 0 VALUE bold                                    \ T if bold text
36. 1 VALUE italic                                  \ T if italic comments
37. 1 VALUE nestable                                \ T if INCLUDE nests files
38.  
39. : undefined ( <name> -- f ) BL WORD FIND NIP 0= ;
40. undefined C+!    [IF] : C+! SWAP OVER C@ + SWAP C! ;                      [THEN]
41. undefined BOUNDS [IF] : BOUNDS OVER + SWAP ;                              [THEN]
42. undefined SCAN   [IF] : SCAN
43.    >R
44.    BEGIN DUP WHILE OVER C@ R@ <> WHILE 1 /STRING REPEAT THEN
45.    R> DROP ;                                                              [THEN]
46. undefined SKIP   [IF] : SKIP
47.    >R
48.    BEGIN DUP WHILE OVER C@ R@ = WHILE 1 /STRING REPEAT THEN
49.    R> DROP ;                                                              [THEN]
50. undefined NOOP   [IF] : NOOP ;                                            [THEN]
51. undefined +PLACE [IF] : +PLACE 2DUP 2>R COUNT CHARS + SWAP MOVE 2R> C+! ; [THEN]
52. undefined PLACE  [IF] : PLACE  0 OVER C! +PLACE ;                         [THEN]
53. undefined FDROP  [IF] : FDROP ;                                           [THEN]
54. undefined >FLOAT [IF] : >FLOAT DROP C@ [CHAR] 0 [CHAR] 9 1+ WITHIN ;      [THEN]
55.  
56. 0 VALUE outf                                    \ output to file
57. 1 VALUE screen-only                             \ screen is for testing
58. : werr  ABORT" Error writing file" ;
59. : out   screen-only IF TYPE    ELSE outf WRITE-FILE werr THEN ;
60. : outln screen-only IF TYPE CR ELSE outf WRITE-LINE werr THEN ;
61.  
62. WORDLIST CONSTANT hyperlinks
63. VARIABLE attrib
64. : /a      ( -- )         attrib @ IF S" </a>" out THEN 0 attrib ! ;
65. : ,$      ( a len -- )   DUP C, BOUNDS ?DO I C@ C, LOOP ; \ text to dictionary
66. : text    ( <text> -- )  -1 WORD COUNT -TRAILING ,$ ;
67. : line    ( a line# -- ) 0 ?DO COUNT + LOOP COUNT out ;   \ output one string
68. : boiler  ( addr -- )    BEGIN COUNT DUP WHILE 2DUP + >R outln R> REPEAT 2DROP ;
69. : ital(   ( -- )         italic IF S" <i>" out THEN ;
70. : )ital   ( -- )         italic IF S" </i>" out THEN ;
71.  
72. CREATE misctext                                 \ various attribute strings
73.    text <a href="
74.    text <a name="x
75.    text ">
76.    text <a href="#x
77.    text ">
78.    text <span style="color:#
79.    text <hr /><h1>
80.    text </h1><hr /><p>
81.    text </span>
82.    0 C,
72. \ create a named text string terminated by char
73. \ when executed, emits the named text using out
74. : namedtext ( char <name> <text> -- )                
75.    CREATE WORD COUNT -TRAILING ,$
76.    DOES> COUNT out ;
77.  
78. \ new and improved strings are now named
79.    CHAR ! namedtext emitfarhref <a href="AnsForth/!
80.    CHAR ! namedtext emitanchor <a name="x!
81.    CHAR ! namedtext emitcloseattrib ">!
82.    CHAR ! namedtext emitlocalhref <a href="#x!
83.    CHAR ! namedtext emitcolor <span style="color:#!
84.    CHAR ! namedtext emith1 <hr /><h1>!
85.    CHAR ! namedtext emitcloseh1 </h1><hr /><p>!
86.    CHAR ! namedtext emitclosespan </span>!
83.  
84. VARIABLE color                                  \ current color
85. VARIABLE infont                                 \ within <font> tag
86.  
87. : fontcolor ( color -- ) BASE @ >R              \ change font color
88.    1 infont !
87.  
88. VARIABLE color                                  \ current color
89. VARIABLE infont                                 \ within <font> tag
90.  
91. : fontcolor ( color -- ) BASE @ >R              \ change font color
92.    1 infont !
89.    misctext 5 line 0 HEX <# # # # # # # #> out
90.    misctext 2 line       R> BASE ! ;
93.    emitcolor 0 HEX <# # # # # # # #> out
94.    emitcloseattrib       R> BASE ! ;
91.  
92. : col ( color <name> -- )                       \ define a font color
93.    CREATE , DOES> @ color ! ;
94.  
95. HEX
96. 808080 col unknown
97. 008000 col commentary
98. CC0000 col numeric
99. 990080 col values
100. 000000 col userwords
101. 009999 col userdefiner
102. CC00CC col variables
103. 0000FF col core_ws
104. 0000FF col core_ext_ws
105. 0000FF col block_ws
106. 0000FF col double_ws
107. 0000FF col exception_ws
108. 0000FF col facilities_ws
109. 0000FF col file_ws
110. 0000FF col fp_ws
111. 0000FF col local_ws
112. 0000FF col malloc_ws
113. 0000FF col progtools_ws
114. 0000FF col searchord_ws
115. 0000FF col string_ws
116. DECIMAL
117.  
118. CREATE begin_header                             \ begin of HTML file part 1
119.    text <?xml version="1.0"?>
120.    text <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
121.    text     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
122.    text <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
123.    text <head>
124.    text <meta http-equiv="Content-Type" content="text/xml; charset=iso-8859-1" />
125.    text <meta name="GENERATOR" content="Forth2HTML 0.0" />
126.    text <style type="text/css">
127.    text body {background: #FFFFEE;}
128.    text h1 {color: #000000;}
129.    text p {font-family: monospace;}
130.    text a {text-decoration:none;}
131.    text </style>
132.    text <title>
133.    0 C,
134.  
135. \ body defaults: the most common link color (blue) is made the default color
136. \ the most common plain text color (green) is made default.
137.  
138. CREATE mid_header                               \ begin of HTML file part 2
139.    text </title></head>
140.    text <body>
141.    0 C,
142.  
143. CREATE end_header                               \ end of HTML file
144.    text </p></body>
145.    text </html>
146.    0 C,
147.  
148. HEX
149. : setcolor ( -- )                               \ select next color
150.    attrib @ 1 = color @ 0000FF = AND 0=         \ blue link: don't color
151.    DROP TRUE                                    \ /4/ vlinks are still purple
152.    IF color @ fontcolor THEN ;
153. DECIMAL
154.  
155. : closefont ( -- )
156.    infont @ IF
95.  
96. : col ( color <name> -- )                       \ define a font color
97.    CREATE , DOES> @ color ! ;
98.  
99. HEX
100. 808080 col unknown
101. 008000 col commentary
102. CC0000 col numeric
103. 990080 col values
104. 000000 col userwords
105. 009999 col userdefiner
106. CC00CC col variables
107. 0000FF col core_ws
108. 0000FF col core_ext_ws
109. 0000FF col block_ws
110. 0000FF col double_ws
111. 0000FF col exception_ws
112. 0000FF col facilities_ws
113. 0000FF col file_ws
114. 0000FF col fp_ws
115. 0000FF col local_ws
116. 0000FF col malloc_ws
117. 0000FF col progtools_ws
118. 0000FF col searchord_ws
119. 0000FF col string_ws
120. DECIMAL
121.  
122. CREATE begin_header                             \ begin of HTML file part 1
123.    text <?xml version="1.0"?>
124.    text <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
125.    text     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
126.    text <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
127.    text <head>
128.    text <meta http-equiv="Content-Type" content="text/xml; charset=iso-8859-1" />
129.    text <meta name="GENERATOR" content="Forth2HTML 0.0" />
130.    text <style type="text/css">
131.    text body {background: #FFFFEE;}
132.    text h1 {color: #000000;}
133.    text p {font-family: monospace;}
134.    text a {text-decoration:none;}
135.    text </style>
136.    text <title>
137.    0 C,
138.  
139. \ body defaults: the most common link color (blue) is made the default color
140. \ the most common plain text color (green) is made default.
141.  
142. CREATE mid_header                               \ begin of HTML file part 2
143.    text </title></head>
144.    text <body>
145.    0 C,
146.  
147. CREATE end_header                               \ end of HTML file
148.    text </p></body>
149.    text </html>
150.    0 C,
151.  
152. HEX
153. : setcolor ( -- )                               \ select next color
154.    attrib @ 1 = color @ 0000FF = AND 0=         \ blue link: don't color
155.    DROP TRUE                                    \ /4/ vlinks are still purple
156.    IF color @ fontcolor THEN ;
157. DECIMAL
158.  
159. : closefont ( -- )
160.    infont @ IF
157.    misctext 8 line 0 infont ! THEN ;
161.    emitclosespan 0 infont ! THEN ;
158.     
159.  
160. VARIABLE bltally
161. : outh    ( a n -- )                            \ HTMLized text output
162.    999 bltally !
163.    BOUNDS ?DO I C@ CASE
164.       [CHAR] & OF S" &amp;"     out ENDOF
165.       [CHAR] < OF S" &lt;"      out ENDOF
166.       [CHAR] > OF S" &gt;"      out ENDOF
167.       [CHAR] " OF S" &quot;"    out ENDOF
168.       BL       OF bltally @ 0= IF S"  " ELSE S" &nbsp;" THEN out
169.                 1 bltally +!     ENDOF
170.       I 1 out   0 bltally !
171.    ENDCASE LOOP ;
172.  
173. : outhattr  ( a n -- )                          \ HTMLized text output
174.    BOUNDS ?DO I C@ CASE
175.       [CHAR] & OF S" amp"       out ENDOF
176.       [CHAR] < OF S" lt"        out ENDOF
177.       [CHAR] > OF S" gt"        out ENDOF
178.       [CHAR] " OF S" quot"      out ENDOF
179.       [CHAR] + OF S" plus"      out ENDOF
180.       [CHAR] ! OF S" bang"      out ENDOF
181.       [CHAR] / OF S" slash"     out ENDOF
182.       [CHAR] \ OF S" backslash" out ENDOF
183.       [CHAR] ' OF S" apos"      out ENDOF
184.       [CHAR] = OF S" equal"     out ENDOF
185.       [CHAR] - OF S" dash"      out ENDOF
186.       [CHAR] @ OF S" at"        out ENDOF
187.       [CHAR] ; OF S" semi"      out ENDOF
188.       [CHAR] * OF S" star"      out ENDOF
189.       [CHAR] ? OF S" question"  out ENDOF
190.       [CHAR] ~ OF S" tilde"     out ENDOF
191.       [CHAR] # OF S" pound"     out ENDOF
192.       [CHAR] , OF S" comma"     out ENDOF
193.       [CHAR] $ OF S" dollar"    out ENDOF
194.       [CHAR] | OF S" bar"       out ENDOF
195.       [CHAR] [ OF S" leftbracket" out ENDOF
196.       [CHAR] ( OF S" leftparen" out ENDOF
197.       [CHAR] { OF S" leftbrace" out ENDOF
198.       [CHAR] ] OF S" rightbracket" out ENDOF
199.       [CHAR] ) OF S" rightparen" out ENDOF
200.       [CHAR] } OF S" rightbrace" out ENDOF
201.       BL       OF S" _"         out ENDOF
202.       I 1 out   
203.    ENDCASE LOOP ;
204.  
205. : label ( addr len -- ) /a                      \ associate a label with a word
162.     
163.  
164. VARIABLE bltally
165. : outh    ( a n -- )                            \ HTMLized text output
166.    999 bltally !
167.    BOUNDS ?DO I C@ CASE
168.       [CHAR] & OF S" &amp;"     out ENDOF
169.       [CHAR] < OF S" &lt;"      out ENDOF
170.       [CHAR] > OF S" &gt;"      out ENDOF
171.       [CHAR] " OF S" &quot;"    out ENDOF
172.       BL       OF bltally @ 0= IF S"  " ELSE S" &nbsp;" THEN out
173.                 1 bltally +!     ENDOF
174.       I 1 out   0 bltally !
175.    ENDCASE LOOP ;
176.  
177. : outhattr  ( a n -- )                          \ HTMLized text output
178.    BOUNDS ?DO I C@ CASE
179.       [CHAR] & OF S" amp"       out ENDOF
180.       [CHAR] < OF S" lt"        out ENDOF
181.       [CHAR] > OF S" gt"        out ENDOF
182.       [CHAR] " OF S" quot"      out ENDOF
183.       [CHAR] + OF S" plus"      out ENDOF
184.       [CHAR] ! OF S" bang"      out ENDOF
185.       [CHAR] / OF S" slash"     out ENDOF
186.       [CHAR] \ OF S" backslash" out ENDOF
187.       [CHAR] ' OF S" apos"      out ENDOF
188.       [CHAR] = OF S" equal"     out ENDOF
189.       [CHAR] - OF S" dash"      out ENDOF
190.       [CHAR] @ OF S" at"        out ENDOF
191.       [CHAR] ; OF S" semi"      out ENDOF
192.       [CHAR] * OF S" star"      out ENDOF
193.       [CHAR] ? OF S" question"  out ENDOF
194.       [CHAR] ~ OF S" tilde"     out ENDOF
195.       [CHAR] # OF S" pound"     out ENDOF
196.       [CHAR] , OF S" comma"     out ENDOF
197.       [CHAR] $ OF S" dollar"    out ENDOF
198.       [CHAR] | OF S" bar"       out ENDOF
199.       [CHAR] [ OF S" leftbracket" out ENDOF
200.       [CHAR] ( OF S" leftparen" out ENDOF
201.       [CHAR] { OF S" leftbrace" out ENDOF
202.       [CHAR] ] OF S" rightbracket" out ENDOF
203.       [CHAR] ) OF S" rightparen" out ENDOF
204.       [CHAR] } OF S" rightbrace" out ENDOF
205.       BL       OF S" _"         out ENDOF
206.       I 1 out   
207.    ENDCASE LOOP ;
208.  
209. : label ( addr len -- ) /a                      \ associate a label with a word
206.    misctext 1 line outhattr
207.    misctext 2 line 1 attrib ! ;
210.    emitanchor outhattr
211.    emitcloseattrib 1 attrib ! ;
208.  
209. \ Assuming this is running on a PC, we allocate enough storage that crashes from
210. \ string overflows can't happen.                /4/
211.  
212. CREATE inbuf 260 CHARS ALLOT                    \ current line from file
213. CREATE token 260 CHARS ALLOT                    \ the last blank delimited string
214. CREATE XPAD  260 CHARS ALLOT                    \ temporary pad for word storage
215. CREATE EPAD  260 CHARS ALLOT                    \ temporary pad for evaluation
216. CREATE fn    260 CHARS ALLOT                    \ file name
217. CREATE fn1   260 CHARS ALLOT                    \ file name backup
218. CREATE "str" 260 CHARS ALLOT                    \ parsed string storage
219. CREATE uname 260 CHARS ALLOT                    \ : definition name
220. 0 VALUE inf
221. VARIABLE nufile                                 \ T if nesting a file
222. VARIABLE utype                                  \ type of defined word
223. VARIABLE hstate
224. VARIABLE linenum
225. VARIABLE special                                \ special action, 0=none
226.  
227. : std    ( word 2nd_fn color filename label -- )
228.    CREATE ' , ' , BL WORD COUNT ,$ BL WORD COUNT ,$
229.    DOES> /a DUP >R  2 CELLS +
212.  
213. \ Assuming this is running on a PC, we allocate enough storage that crashes from
214. \ string overflows can't happen.                /4/
215.  
216. CREATE inbuf 260 CHARS ALLOT                    \ current line from file
217. CREATE token 260 CHARS ALLOT                    \ the last blank delimited string
218. CREATE XPAD  260 CHARS ALLOT                    \ temporary pad for word storage
219. CREATE EPAD  260 CHARS ALLOT                    \ temporary pad for evaluation
220. CREATE fn    260 CHARS ALLOT                    \ file name
221. CREATE fn1   260 CHARS ALLOT                    \ file name backup
222. CREATE "str" 260 CHARS ALLOT                    \ parsed string storage
223. CREATE uname 260 CHARS ALLOT                    \ : definition name
224. 0 VALUE inf
225. VARIABLE nufile                                 \ T if nesting a file
226. VARIABLE utype                                  \ type of defined word
227. VARIABLE hstate
228. VARIABLE linenum
229. VARIABLE special                                \ special action, 0=none
230.  
231. : std    ( word 2nd_fn color filename label -- )
232.    CREATE ' , ' , BL WORD COUNT ,$ BL WORD COUNT ,$
233.    DOES> /a DUP >R  2 CELLS +
230.    misctext 0 line                              \ begin hyperlink
234.    emitfarhref                                  \ begin hyperlink
231.    COUNT 2DUP + >R  out S" #" out               \ output file name      /4/
235.    COUNT 2DUP + >R  out S" #" out               \ output file name      /4/
232.    R> COUNT out misctext 2 line                 \ and anchor name
236.    R> COUNT out emitcloseattrib                 \ and anchor name
233.    1 attrib !
234.    R> 2@ SWAP EXECUTE EXECUTE ;                 \ extra attributes
235.  
236. : genHTML ( -- )                                \ generate pending HTML
237.    token COUNT DUP IF setcolor THEN outh closefont /a  0 token ! ;
238.  
239. : isnumber? ( addr len -- f )                   \ string converts to number?
240.    0 0 2SWAP >NUMBER NIP NIP NIP 0= ;
241.  
242. : hparse ( a len char -- a' len' )
243.    >R 2DUP R@ SKIP R> SCAN BL SCAN
244.    2SWAP 2 PICK - token +PLACE ;
245.  
246. : >XPAD ( -- ) token COUNT BL SKIP XPAD PLACE ; \ move to temporary pad
247.  
248. : hint  ( addr len -- )                         \ interpret one line...
249.    BEGIN
250.       0 token !  BL hparse token C@
251.    WHILE unknown                                \ default color
252.       >XPAD XPAD COUNT hyperlinks SEARCH-WORDLIST \ got a hyperlink for this?
253.       IF DEPTH >R EXECUTE
254.          R> DEPTH <> ABORT" stack depth change in HTML generator"
255.       ELSE
256.          XPAD COUNT BASE @ 10 = IF
257.             >FLOAT IF FDROP numeric THEN        \ valid float or integer
258.          ELSE
259.             isnumber? IF numeric THEN
260.          THEN
261.       THEN genHTML
262.    REPEAT 2DROP
263.    S" <br />" outln ;                           \ new line
264.  
265. : ofn   ( -- addr len )                         \ output file name
266.    fn COUNT 2DUP [CHAR] . SCAN NIP - EPAD PLACE
267.    S" .htm" EPAD +PLACE   EPAD COUNT ;
268.  
269. : hcreate ( addr len -- )
270.    DUP 0= IF 2DROP S" fakename" THEN            \ in case the name is missing
271.    S" CREATE " EPAD PLACE  EPAD +PLACE
272.    GET-CURRENT >R hyperlinks SET-CURRENT
273.    EPAD COUNT EVALUATE    R> SET-CURRENT ;      \ create a hyperlink generator
274.  
275. \ The user defined words use the following data structure:
276. \ CELL   xt of coloring word
277. \ STRING name of reference word
278. \ STRING name of file
279.  
280. : deflink ( addr -- )                           \ make hyperlink from data structure
281.    DUP @ EXECUTE CELL+                          \ set color
282.    DUP COUNT + COUNT ofn COMPARE                \ in an external file?
237.    1 attrib !
238.    R> 2@ SWAP EXECUTE EXECUTE ;                 \ extra attributes
239.  
240. : genHTML ( -- )                                \ generate pending HTML
241.    token COUNT DUP IF setcolor THEN outh closefont /a  0 token ! ;
242.  
243. : isnumber? ( addr len -- f )                   \ string converts to number?
244.    0 0 2SWAP >NUMBER NIP NIP NIP 0= ;
245.  
246. : hparse ( a len char -- a' len' )
247.    >R 2DUP R@ SKIP R> SCAN BL SCAN
248.    2SWAP 2 PICK - token +PLACE ;
249.  
250. : >XPAD ( -- ) token COUNT BL SKIP XPAD PLACE ; \ move to temporary pad
251.  
252. : hint  ( addr len -- )                         \ interpret one line...
253.    BEGIN
254.       0 token !  BL hparse token C@
255.    WHILE unknown                                \ default color
256.       >XPAD XPAD COUNT hyperlinks SEARCH-WORDLIST \ got a hyperlink for this?
257.       IF DEPTH >R EXECUTE
258.          R> DEPTH <> ABORT" stack depth change in HTML generator"
259.       ELSE
260.          XPAD COUNT BASE @ 10 = IF
261.             >FLOAT IF FDROP numeric THEN        \ valid float or integer
262.          ELSE
263.             isnumber? IF numeric THEN
264.          THEN
265.       THEN genHTML
266.    REPEAT 2DROP
267.    S" <br />" outln ;                           \ new line
268.  
269. : ofn   ( -- addr len )                         \ output file name
270.    fn COUNT 2DUP [CHAR] . SCAN NIP - EPAD PLACE
271.    S" .htm" EPAD +PLACE   EPAD COUNT ;
272.  
273. : hcreate ( addr len -- )
274.    DUP 0= IF 2DROP S" fakename" THEN            \ in case the name is missing
275.    S" CREATE " EPAD PLACE  EPAD +PLACE
276.    GET-CURRENT >R hyperlinks SET-CURRENT
277.    EPAD COUNT EVALUATE    R> SET-CURRENT ;      \ create a hyperlink generator
278.  
279. \ The user defined words use the following data structure:
280. \ CELL   xt of coloring word
281. \ STRING name of reference word
282. \ STRING name of file
283.  
284. : deflink ( addr -- )                           \ make hyperlink from data structure
285.    DUP @ EXECUTE CELL+                          \ set color
286.    DUP COUNT + COUNT ofn COMPARE                \ in an external file?
283.    IF   misctext 0 line DUP COUNT + COUNT out   \ yes, put file name
287.    IF   emitfarhref DUP COUNT + COUNT out       \ yes, put file name
284.         S" #" out COUNT outh S" >" out
288.         S" #" out COUNT outh S" >" out
285.    ELSE misctext 3 line COUNT outhattr          \ no, just use the name
286.         misctext 4 line
289.    ELSE emitlocalhref COUNT outhattr            \ no, just use the name
290.         emitcloseattrib
287.    THEN 1 attrib ! ;
288.  
289. : defx  ( a len xt -- a' len' )
290.    >R genHTML BL hparse >XPAD                   \ output defining word
291.    XPAD COUNT 2DUP hcreate R> , ,$ ofn ,$
292.    DOES> deflink ;
293.  
294. : labelnow   genHTML XPAD COUNT label ;         \ /4/
295. : defdat ['] numeric   defx numeric   labelnow ;
296. : defvar ['] variables defx variables labelnow ;
297. : defusr ['] userwords defx userwords labelnow ;
298. : defval ['] values    defx values    labelnow ;
299. : defdef ['] userdefiner defx userdefiner labelnow ;
300.  
301. : hstate=0 ( -- )             0 hstate ! ;
302. : hstate=1 ( -- )             1 hstate ! ;
303. : spec=zero ( -- )            1 special ! ;
304. : skip)  ( a len -- a' len' ) [CHAR] ) hparse ;
305. : skipw  ( a len -- a' len' ) BL hparse ;
306. : skipc  ( a len -- a len )   hstate @ 0= IF numeric skipw THEN ;
307. : skip"  ( a len -- a' len' )                   \ copy string to "str"
308.    genHTML [CHAR] " hparse token COUNT 1- "str" PLACE ;
309.  
310. \ ------------------------------------------------------------------------------
311. \ ":" definitions might be defining words, so they can't be assumed to be defusr
312. \ types. ":" makes a label and saves the name for later use by ";" which makes
313. \ a hyperlink or a hyperlink defining word.
314.  
315. :NONAME                                         \ normal : definition
316.    uname COUNT ['] userwords defx 2DROP  0 token !
317. ; CONSTANT normal_def
318.  
319. :NONAME
320.    uname COUNT 2DUP hcreate ['] userwords , ,$ ofn ,$
321.    DOES> deflink defdef
322. ; CONSTANT defining_def
323.  
324. : defunk ( a len -- a' len' )                   \ starting unknown definition
325.    hstate=1  normal_def utype !                 \ save name of : definition
326.    genHTML skipw userwords token COUNT BL SKIP 2DUP uname PLACE label ;
327.  
328. : resunk ( -- )                                 \ resolve unknown defined word
329.    genHTML utype @ EXECUTE hstate=0 ;
330.  
331. : created ( -- ) hstate @
332.    IF   defining_def utype !                    \ make ; create a defining word
333.    ELSE defdat                                  \ not compiling
334.    THEN ;
335.  
336. \ ------------------------------------------------------------------------------
337.  
338. : header  ( addr len -- )                       \ output big header text
291.    THEN 1 attrib ! ;
292.  
293. : defx  ( a len xt -- a' len' )
294.    >R genHTML BL hparse >XPAD                   \ output defining word
295.    XPAD COUNT 2DUP hcreate R> , ,$ ofn ,$
296.    DOES> deflink ;
297.  
298. : labelnow   genHTML XPAD COUNT label ;         \ /4/
299. : defdat ['] numeric   defx numeric   labelnow ;
300. : defvar ['] variables defx variables labelnow ;
301. : defusr ['] userwords defx userwords labelnow ;
302. : defval ['] values    defx values    labelnow ;
303. : defdef ['] userdefiner defx userdefiner labelnow ;
304.  
305. : hstate=0 ( -- )             0 hstate ! ;
306. : hstate=1 ( -- )             1 hstate ! ;
307. : spec=zero ( -- )            1 special ! ;
308. : skip)  ( a len -- a' len' ) [CHAR] ) hparse ;
309. : skipw  ( a len -- a' len' ) BL hparse ;
310. : skipc  ( a len -- a len )   hstate @ 0= IF numeric skipw THEN ;
311. : skip"  ( a len -- a' len' )                   \ copy string to "str"
312.    genHTML [CHAR] " hparse token COUNT 1- "str" PLACE ;
313.  
314. \ ------------------------------------------------------------------------------
315. \ ":" definitions might be defining words, so they can't be assumed to be defusr
316. \ types. ":" makes a label and saves the name for later use by ";" which makes
317. \ a hyperlink or a hyperlink defining word.
318.  
319. :NONAME                                         \ normal : definition
320.    uname COUNT ['] userwords defx 2DROP  0 token !
321. ; CONSTANT normal_def
322.  
323. :NONAME
324.    uname COUNT 2DUP hcreate ['] userwords , ,$ ofn ,$
325.    DOES> deflink defdef
326. ; CONSTANT defining_def
327.  
328. : defunk ( a len -- a' len' )                   \ starting unknown definition
329.    hstate=1  normal_def utype !                 \ save name of : definition
330.    genHTML skipw userwords token COUNT BL SKIP 2DUP uname PLACE label ;
331.  
332. : resunk ( -- )                                 \ resolve unknown defined word
333.    genHTML utype @ EXECUTE hstate=0 ;
334.  
335. : created ( -- ) hstate @
336.    IF   defining_def utype !                    \ make ; create a defining word
337.    ELSE defdat                                  \ not compiling
338.    THEN ;
339.  
340. \ ------------------------------------------------------------------------------
341.  
342. : header  ( addr len -- )                       \ output big header text
339.    misctext 6 line outln misctext 7 line ;
343.    emith1 outln emitcloseh1 ;
340.  
341. : _incfil ( addr -- )                           \ trigger file nesting      /4/
342.    nestable 0= IF DROP EXIT THEN                \ don't nest files if disabled
343.    COUNT BL SKIP  2DUP R/O OPEN-FILE            \ can the file be opened?
344.    IF   DROP 2DROP                              \ no
345.    ELSE CLOSE-FILE DROP                         \ yes
346.         fn COUNT fn1 PLACE  fn PLACE 1 nufile !
347.    THEN ;
348.  
349. : incfile ( a len -- a' len' )                  \ include a file
350.    genHTML skipw token _incfil ;
351.  
352. : "incfil ( a len -- a' len' )                  \ include file from S" filename"
353.    skipw "str" _incfil ;
354.  
355. : hfill  ( -- len ior )                         \ read next line of file
356.    inbuf 256 BL FILL
357.    XPAD 256 inf READ-LINE ABORT" Error reading file"
358.    >R >R 0 XPAD R> BOUNDS                       ( idx . . )
359.    ?DO  I C@ 9 = IF 3 RSHIFT 1+ 3 LSHIFT        \ tab
360.         ELSE I C@ OVER 255 AND CHARS inbuf + C!
361.            1+ DUP 256 = IF CR ." Input line too long" THEN
362.         THEN
363.    LOOP R>
364.    1 linenum +! ;
365.  
366. : open  ( -- ) CR ." Reading " fn COUNT TYPE ."  at line " linenum @ .
367.    0 linenum !
368.    fn COUNT R/O OPEN-FILE ABORT" Error opening source file" TO inf ;
369.  
370. : close  ( -- ) CR ." closing " fn COUNT TYPE
371.    inf CLOSE-FILE ABORT" Error closing file" ;
372.  
373. : .title ( addr len -- )                        \ output as title string
374.    BOUNDS ?DO I C@ BL = IF S" %20" out ELSE I 1 out THEN LOOP ;
375.  
376. : oopen  ( -- )
377.    ofn W/O CREATE-FILE ABORT" Error creating file" TO outf
378.    begin_header boiler                          \ begin boilerplate
379.    fn COUNT .title  mid_header boiler           \ title and end boilerplate
380.    bold IF S" <b>" out THEN
381.    fn COUNT header ;
382.  
383. : HTML  ( <infile> -- )
384.    S" /basic-links/" hyperlinks SEARCH-WORDLIST
385.    IF   EXECUTE  THEN                           \ remove user hyperlinks
386.    GET-CURRENT >R hyperlinks SET-CURRENT        \ replace the fence
387.    S" MARKER /basic-links/" EVALUATE
388.    R> SET-CURRENT
389.    0 TO screen-only  0 nufile !  1 linenum !    \ force usage of file
390.    BL WORD COUNT fn PLACE open oopen            \ open input and output files
391.    -1 DUP >R outf >R                            \ file nest uses stacks
392.    hstate=0
393.    BEGIN
394.       BEGIN 0 special !                         \ process line
395.          nufile @                               \ nest a file?
396.          IF   inf outf
397.               open oopen  outf >R               \ open new files
398.               0 nufile !
399.          THEN hfill
400.       WHILE inbuf SWAP hint
401.       REPEAT DROP
402.       close fn1 COUNT fn PLACE                  \ restore file name
403.       DUP -1 <>
404.       IF   TO outf TO inf FALSE                 \ unnest files
405.       ELSE TRUE
406.       THEN
407.    UNTIL DROP
408.    BEGIN R> DUP -1 <>                           \ close all output files
409.    WHILE bold IF S" </b>" out THEN
410.       end_header boiler                         \ finish up HTML
411.       CLOSE-FILE ABORT" Error closing file"
412.    REPEAT DROP ;
413.  
414. : q  ( -- ) 1 TO screen-only                    \ single line test
415.    -1 WORD COUNT inbuf PLACE inbuf COUNT hint ;
416.  
417. \ 0 [IF] is often used as a comment. If it is used as a comment, scan the file
418. \ for a [THEN]. [THEN] must be on the next line or beyond.
419.  
420. : upp ( an--) BOUNDS ?DO I C@ [CHAR] a > IF I C@ 32 - I C! THEN LOOP \ uppercase
421. ;
422.  
423. CREATE terminator 16 CHARS ALLOT                \ multiline comment terminator
424.  
425. : multicomment ( a len searchstring -- a' len' )
426.    terminator PLACE
427.    genHTML commentary setcolor ital( outh       \ finish up this line
428.    BEGIN hfill      S" <br />" outln
429.    WHILE >R inbuf EPAD R@ MOVE
430.       EPAD R@ upp                               \ uppercase for search
431.       EPAD R@ terminator COUNT SEARCH
432.       IF   DROP EPAD - inbuf OVER token PLACE   \ before [THEN] is comment
433.            genHTML
434.            inbuf R> ROT /STRING
435.            )ital closefont EXIT
436.       ELSE 2DROP inbuf R> outh                  \ whole line is comment
437.       THEN
438.    REPEAT inbuf SWAP )ital closefont ;          \ EOF found
439.  
440. : bigif  ( a len -- a len )  special @ 1 =
441.    IF S" [THEN]" multicomment THEN ;
442.  
443. \ =============================================================================
444.  
445. : _DEFINITIONS DEFINITIONS ;
446. : _order order ;  : _words words ; : _see see ;
447.  
448. hyperlinks SET-CURRENT
449. \ The following words are not in the ANS standard but are very common.
450. : VOCABULARY    defusr ;
451. : DEFER         defusr ;
452. : INCLUDE       hstate @ 0= IF incfile THEN ;
453. : FLOAD         hstate @ 0= IF incfile THEN ;
454. : BINARY        2 BASE ! ;
455. : OCTAL         8 BASE ! ;
456. : 0             numeric spec=zero ;
457. : 1             numeric  ;
458. : -1            numeric  ;
459. : COMMENT:      S" COMMENT;" multicomment ;
460. : ((            S" ))"       multicomment ;
461.  
462. \ The rest is ANS Forth standard
463.  
464. : \             commentary genHTML ital( token PLACE genHTML )ital token 0 ;
465.  
466. (   NAME                ACTION  COLOR           FILENAME        REFERENCE )
467. (   ------------------  ------  --------------  -----------     --------- )
468. std !                   NOOP    core_ws         dpans6.htm      6.1.0010
469. std #                   NOOP    core_ws         dpans6.htm      6.1.0030
470. std #>                  NOOP    core_ws         dpans6.htm      6.1.0040
471. std #S                  NOOP    core_ws         dpans6.htm      6.1.0050
472. std '                   NOOP    core_ws         dpans6.htm      6.1.0070
473. std (                   skip)   commentary      dpans6.htm      6.1.0080
474. std *                   NOOP    core_ws         dpans6.htm      6.1.0090
475. std */                  NOOP    core_ws         dpans6.htm      6.1.0100
476. std */MOD               NOOP    core_ws         dpans6.htm      6.1.0110
477. std +                   NOOP    core_ws         dpans6.htm      6.1.0120
478. std +!                  NOOP    core_ws         dpans6.htm      6.1.0130
479. std +LOOP               NOOP    core_ws         dpans6.htm      6.1.0140
480. std ,                   NOOP    core_ws         dpans6.htm      6.1.0150
481. std -                   NOOP    core_ws         dpans6.htm      6.1.0160
482. std .                   NOOP    core_ws         dpans6.htm      6.1.0180
483. std ."                  skip"   numeric         dpans6.htm      6.1.0190
484. std /                   NOOP    core_ws         dpans6.htm      6.1.0230
485. std /MOD                NOOP    core_ws         dpans6.htm      6.1.0240
486. std 0<                  NOOP    core_ws         dpans6.htm      6.1.0250
487. std 0=                  NOOP    core_ws         dpans6.htm      6.1.0270
488. std 1+                  NOOP    core_ws         dpans6.htm      6.1.0290
489. std 1-                  NOOP    core_ws         dpans6.htm      6.1.0300
490. std 2!                  NOOP    core_ws         dpans6.htm      6.1.0310
491. std 2*                  NOOP    core_ws         dpans6.htm      6.1.0320
492. std 2/                  NOOP    core_ws         dpans6.htm      6.1.0330
493. std 2@                  NOOP    core_ws         dpans6.htm      6.1.0350
494. std 2DROP               NOOP    core_ws         dpans6.htm      6.1.0370
495. std 2DUP                NOOP    core_ws         dpans6.htm      6.1.0380
496. std 2OVER               NOOP    core_ws         dpans6.htm      6.1.0400
497. std 2SWAP               NOOP    core_ws         dpans6.htm      6.1.0430
498. std :                   defunk  core_ws         dpans6.htm      6.1.0450
499. std ;                   resunk  core_ws         dpans6.htm      6.1.0460
500. std <                   NOOP    core_ws         dpans6.htm      6.1.0480
501. std <#                  NOOP    core_ws         dpans6.htm      6.1.0490
502. std =                   NOOP    core_ws         dpans6.htm      6.1.0530
503. std >                   NOOP    core_ws         dpans6.htm      6.1.0540
504. std >BODY               NOOP    core_ws         dpans6.htm      6.1.0550
505. std >IN                 NOOP    core_ws         dpans6.htm      6.1.0560
506. std >NUMBER             NOOP    core_ws         dpans6.htm      6.1.0570
507. std >R                  NOOP    core_ws         dpans6.htm      6.1.0580
508. std ?DUP                NOOP    core_ws         dpans6.htm      6.1.0630
509. std @                   NOOP    core_ws         dpans6.htm      6.1.0650
510. std ABORT               NOOP    core_ws         dpans6.htm      6.1.0670
511. std ABORT"              skip"   numeric         dpans6.htm      6.1.0680
512. std ABS                 NOOP    core_ws         dpans6.htm      6.1.0690
513. std ACCEPT              NOOP    core_ws         dpans6.htm      6.1.0695
514. std ALIGN               NOOP    core_ws         dpans6.htm      6.1.0705
515. std ALIGNED             NOOP    core_ws         dpans6.htm      6.1.0706
516. std ALLOT               NOOP    core_ws         dpans6.htm      6.1.0710
517. std AND                 NOOP    core_ws         dpans6.htm      6.1.0720
518. std BASE                NOOP    core_ws         dpans6.htm      6.1.0750
519. std BEGIN               NOOP    core_ws         dpans6.htm      6.1.0760
520. std BL                  NOOP    numeric         dpans6.htm      6.1.0770
521. std C!                  NOOP    core_ws         dpans6.htm      6.1.0850
522. std C,                  NOOP    core_ws         dpans6.htm      6.1.0860
523. std C@                  NOOP    core_ws         dpans6.htm      6.1.0870
524. std CELL+               NOOP    core_ws         dpans6.htm      6.1.0880
525. std CELLS               NOOP    core_ws         dpans6.htm      6.1.0890
526. std CHAR                skipc   core_ws         dpans6.htm      6.1.0895
527. std CHAR+               NOOP    core_ws         dpans6.htm      6.1.0897
528. std CHARS               NOOP    core_ws         dpans6.htm      6.1.0898
529. std CONSTANT            defdat  core_ws         dpans6.htm      6.1.0950
530. std COUNT               NOOP    core_ws         dpans6.htm      6.1.0980
531. std CR                  NOOP    core_ws         dpans6.htm      6.1.0990
532. std CREATE              created core_ws         dpans6.htm      6.1.1000
533. std DECIMAL             DECIMAL core_ws         dpans6.htm      6.1.1170
534. std DEPTH               NOOP    core_ws         dpans6.htm      6.1.1200
535. std DO                  NOOP    core_ws         dpans6.htm      6.1.1240
536. std DOES>               NOOP    core_ws         dpans6.htm      6.1.1250
537. std DROP                NOOP    core_ws         dpans6.htm      6.1.1260
538. std DUP                 NOOP    core_ws         dpans6.htm      6.1.1290
539. std ELSE                NOOP    core_ws         dpans6.htm      6.1.1310
540. std EMIT                NOOP    core_ws         dpans6.htm      6.1.1320
541. std ENVIRONMENT?        NOOP    core_ws         dpans6.htm      6.1.1345
542. std EVALUATE            NOOP    core_ws         dpans6.htm      6.1.1360
543. std EXECUTE             NOOP    core_ws         dpans6.htm      6.1.1370
544. std EXIT                NOOP    core_ws         dpans6.htm      6.1.1380
545. std FILL                NOOP    core_ws         dpans6.htm      6.1.1540
546. std FIND                NOOP    core_ws         dpans6.htm      6.1.1550
547. std FM/MOD              NOOP    core_ws         dpans6.htm      6.1.1561
548. std HERE                NOOP    core_ws         dpans6.htm      6.1.1650
549. std HOLD                NOOP    core_ws         dpans6.htm      6.1.1670
550. std I                   NOOP    core_ws         dpans6.htm      6.1.1680
551. std IF                  NOOP    core_ws         dpans6.htm      6.1.1700
552. std IMMEDIATE           NOOP    core_ws         dpans6.htm      6.1.1710
553. std INVERT              NOOP    core_ws         dpans6.htm      6.1.1720
554. std J                   NOOP    core_ws         dpans6.htm      6.1.1730
555. std KEY                 NOOP    core_ws         dpans6.htm      6.1.1750
556. std LEAVE               NOOP    core_ws         dpans6.htm      6.1.1760
557. std LITERAL             NOOP    core_ws         dpans6.htm      6.1.1780
558. std LOOP                NOOP    core_ws         dpans6.htm      6.1.1800
559. std LSHIFT              NOOP    core_ws         dpans6.htm      6.1.1805
560. std M*                  NOOP    core_ws         dpans6.htm      6.1.1810
561. std MAX                 NOOP    core_ws         dpans6.htm      6.1.1870
562. std MIN                 NOOP    core_ws         dpans6.htm      6.1.1880
563. std MOD                 NOOP    core_ws         dpans6.htm      6.1.1890
564. std MOVE                NOOP    core_ws         dpans6.htm      6.1.1900
565. std NEGATE              NOOP    core_ws         dpans6.htm      6.1.1910
566. std OR                  NOOP    core_ws         dpans6.htm      6.1.1980
567. std OVER                NOOP    core_ws         dpans6.htm      6.1.1990
568. std POSTPONE            NOOP    core_ws         dpans6.htm      6.1.2033
569. std QUIT                NOOP    core_ws         dpans6.htm      6.1.2050
570. std R>                  NOOP    core_ws         dpans6.htm      6.1.2060
571. std R@                  NOOP    core_ws         dpans6.htm      6.1.2070
572. std RECURSE             NOOP    core_ws         dpans6.htm      6.1.2120
573. std REPEAT              NOOP    core_ws         dpans6.htm      6.1.2140
574. std ROT                 NOOP    core_ws         dpans6.htm      6.1.2160
575. std RSHIFT              NOOP    core_ws         dpans6.htm      6.1.2162
576. std S"                  skip"   numeric         dpans6.htm      6.1.2165
577. std S>D                 NOOP    core_ws         dpans6.htm      6.1.2170
578. std SIGN                NOOP    core_ws         dpans6.htm      6.1.2210
579. std SM/REM              NOOP    core_ws         dpans6.htm      6.1.2214
580. std SOURCE              NOOP    core_ws         dpans6.htm      6.1.2216
581. std SPACE               NOOP    core_ws         dpans6.htm      6.1.2220
582. std SPACES              NOOP    core_ws         dpans6.htm      6.1.2230
583. std STATE               NOOP    core_ws         dpans6.htm      6.1.2250
584. std SWAP                NOOP    core_ws         dpans6.htm      6.1.2260
585. std THEN                NOOP    core_ws         dpans6.htm      6.1.2270
586. std TYPE                NOOP    core_ws         dpans6.htm      6.1.2310
587. std U.                  NOOP    core_ws         dpans6.htm      6.1.2320
588. std U<                  NOOP    core_ws         dpans6.htm      6.1.2340
589. std UM*                 NOOP    core_ws         dpans6.htm      6.1.2360
590. std UM/MOD              NOOP    core_ws         dpans6.htm      6.1.2370
591. std UNLOOP              NOOP    core_ws         dpans6.htm      6.1.2380
592. std UNTIL               NOOP    core_ws         dpans6.htm      6.1.2390
593. std VARIABLE            defvar  core_ws         dpans6.htm      6.1.2410
594. std WHILE               NOOP    core_ws         dpans6.htm      6.1.2430
595. std WORD                NOOP    core_ws         dpans6.htm      6.1.2450
596. std XOR                 NOOP    core_ws         dpans6.htm      6.1.2490
597. std [                  hstate=0 core_ws         dpans6.htm      6.1.2500
598. std [']                 skipw   numeric         dpans6.htm      6.1.2510
599. std [CHAR]              skipw   numeric         dpans6.htm      6.1.2520
600. std ]                  hstate=1 core_ws         dpans6.htm      6.1.2540
601. std #TIB                NOOP    core_ext_ws     dpans6.htm      6.2.0060
602. std .(                  skip)   commentary      dpans6.htm      6.2.0200
603. std .R                  NOOP    core_ext_ws     dpans6.htm      6.2.0210
604. std 0<>                 NOOP    core_ext_ws     dpans6.htm      6.2.0260
605. std 0>                  NOOP    core_ext_ws     dpans6.htm      6.2.0280
606. std 2>R                 NOOP    core_ext_ws     dpans6.htm      6.2.0340
607. std 2R>                 NOOP    core_ext_ws     dpans6.htm      6.2.0410
608. std 2R@                 NOOP    core_ext_ws     dpans6.htm      6.2.0415
609. std :NONAME             NOOP    core_ext_ws     dpans6.htm      6.2.0455
610. std <>                  NOOP    core_ext_ws     dpans6.htm      6.2.0500
611. std ?DO                 NOOP    core_ext_ws     dpans6.htm      6.2.0620
612. std AGAIN               NOOP    core_ext_ws     dpans6.htm      6.2.0700
613. std C"                  skip"   numeric         dpans6.htm      6.2.0855
614. std CASE                NOOP    core_ext_ws     dpans6.htm      6.2.0873
615. std COMPILE,            NOOP    core_ext_ws     dpans6.htm      6.2.0945
616. std CONVERT             NOOP    core_ext_ws     dpans6.htm      6.2.0970
617. std ENDCASE             NOOP    core_ext_ws     dpans6.htm      6.2.1342
618. std ENDOF               NOOP    core_ext_ws     dpans6.htm      6.2.1343
619. std ERASE               NOOP    core_ext_ws     dpans6.htm      6.2.1350
620. std EXPECT              NOOP    core_ext_ws     dpans6.htm      6.2.1390
621. std FALSE             spec=zero numeric         dpans6.htm      6.2.1485
622. std HEX                 HEX     core_ext_ws     dpans6.htm      6.2.1660
623. std MARKER              defusr  core_ext_ws     dpans6.htm      6.2.1850
624. std NIP                 NOOP    core_ext_ws     dpans6.htm      6.2.1930
625. std OF                  NOOP    core_ext_ws     dpans6.htm      6.2.1950
626. std PAD                 NOOP    core_ext_ws     dpans6.htm      6.2.2000
627. std PARSE               NOOP    core_ext_ws     dpans6.htm      6.2.2008
628. std PICK                NOOP    core_ext_ws     dpans6.htm      6.2.2030
629. std QUERY               NOOP    core_ext_ws     dpans6.htm      6.2.2040
630. std REFILL              NOOP    core_ext_ws     dpans6.htm      6.2.2125
631. std RESTORE-INPUT       NOOP    core_ext_ws     dpans6.htm      6.2.2148
632. std ROLL                NOOP    core_ext_ws     dpans6.htm      6.2.2150
633. std SAVE-INPUT          NOOP    core_ext_ws     dpans6.htm      6.2.2182
634. std SOURCE-ID           NOOP    core_ext_ws     dpans6.htm      6.2.2218
635. std SPAN                NOOP    core_ext_ws     dpans6.htm      6.2.2240
636. std TIB                 NOOP    core_ext_ws     dpans6.htm      6.2.2290
637. std TO                  NOOP    core_ext_ws     dpans6.htm      6.2.2295
638. std TRUE                NOOP    numeric         dpans6.htm      6.2.2298
639. std TUCK                NOOP    core_ext_ws     dpans6.htm      6.2.2300
640. std U.R                 NOOP    core_ext_ws     dpans6.htm      6.2.2330
641. std U>                  NOOP    core_ext_ws     dpans6.htm      6.2.2350
642. std UNUSED              NOOP    core_ext_ws     dpans6.htm      6.2.2395
643. std VALUE               defval  core_ext_ws     dpans6.htm      6.2.2405
644. std WITHIN              NOOP    core_ext_ws     dpans6.htm      6.2.2440
645. std [COMPILE]           NOOP    core_ext_ws     dpans6.htm      6.2.2530
646. std BLK                 NOOP    block_ws        dpans7.htm      7.6.1.0790
647. std BLOCK               NOOP    block_ws        dpans7.htm      7.6.1.0800
648. std BUFFER              NOOP    block_ws        dpans7.htm      7.6.1.0820
649. std FLUSH               NOOP    block_ws        dpans7.htm      7.6.1.1559
650. std LOAD                NOOP    block_ws        dpans7.htm      7.6.1.1790
651. std SAVE-BUFFERS        NOOP    block_ws        dpans7.htm      7.6.1.2180
652. std UPDATE              NOOP    block_ws        dpans7.htm      7.6.1.2400
653. std EMPTY-BUFFERS       NOOP    block_ws        dpans7.htm      7.6.2.1330
654. std LIST                NOOP    block_ws        dpans7.htm      7.6.2.1770
655. std SCR                 NOOP    block_ws        dpans7.htm      7.6.2.2190
656. std THRU                NOOP    block_ws        dpans7.htm      7.6.2.2280
657. std 2CONSTANT           defdat  double_ws       dpans8.htm      8.6.1.0360
658. std 2LITERAL            NOOP    double_ws       dpans8.htm      8.6.1.0390
659. std 2VARIABLE           defvar  double_ws       dpans8.htm      8.6.1.0440
660. std D+                  NOOP    double_ws       dpans8.htm      8.6.1.1040
661. std D-                  NOOP    double_ws       dpans8.htm      8.6.1.1050
662. std D.                  NOOP    double_ws       dpans8.htm      8.6.1.1060
663. std D.R                 NOOP    double_ws       dpans8.htm      8.6.1.1070
664. std D0<                 NOOP    double_ws       dpans8.htm      8.6.1.1075
665. std D0=                 NOOP    double_ws       dpans8.htm      8.6.1.1080
666. std D2*                 NOOP    double_ws       dpans8.htm      8.6.1.1090
667. std D2/                 NOOP    double_ws       dpans8.htm      8.6.1.1100
668. std D<                  NOOP    double_ws       dpans8.htm      8.6.1.1110
669. std D=                  NOOP    double_ws       dpans8.htm      8.6.1.1120
670. std D>S                 NOOP    double_ws       dpans8.htm      8.6.1.1140
671. std DABS                NOOP    double_ws       dpans8.htm      8.6.1.1160
672. std DMAX                NOOP    double_ws       dpans8.htm      8.6.1.1210
673. std DMIN                NOOP    double_ws       dpans8.htm      8.6.1.1220
674. std DNEGATE             NOOP    double_ws       dpans8.htm      8.6.1.1230
675. std M*/                 NOOP    double_ws       dpans8.htm      8.6.1.1820
676. std M+                  NOOP    double_ws       dpans8.htm      8.6.1.1830
677. std 2ROT                NOOP    double_ws       dpans8.htm      8.6.2.0420
678. std DU<                 NOOP    double_ws       dpans8.htm      8.6.2.1270
679. std CATCH               NOOP    exception_ws    dpans9.htm      9.6.1.0875
680. std THROW               NOOP    exception_ws    dpans9.htm      9.6.1.2275
681. std AT-XY               NOOP    facilities_ws   dpans10.htm     10.6.1.0742
682. std KEY?                NOOP    facilities_ws   dpans10.htm     10.6.1.1755
683. std PAGE                NOOP    facilities_ws   dpans10.htm     10.6.1.2005
684. std EKEY                NOOP    facilities_ws   dpans10.htm     10.6.2.1305
685. std EKEY<CHAR           NOOP    facilities_ws   dpans10.htm     10.6.2.1306
686. std EKEY?               NOOP    facilities_ws   dpans10.htm     10.6.2.1307
687. std EMIT?               NOOP    facilities_ws   dpans10.htm     10.6.2.1325
688. std MS                  NOOP    facilities_ws   dpans10.htm     10.6.2.1905
689. std TIME&DATE           NOOP    facilities_ws   dpans10.htm     10.6.2.2292
690. std BIN                 NOOP    file_ws         dpans11.htm     11.6.1.0765
691. std CLOSE-FILE          NOOP    file_ws         dpans11.htm     11.6.1.0900
692. std CREATE-FILE         NOOP    file_ws         dpans11.htm     11.6.1.1010
693. std DELETE-FILE         NOOP    file_ws         dpans11.htm     11.6.1.1190
694. std FILE-POSITION       NOOP    file_ws         dpans11.htm     11.6.1.1520
695. std FILE-SIZE           NOOP    file_ws         dpans11.htm     11.6.1.1522
696. std INCLUDE-FILE        NOOP    file_ws         dpans11.htm     11.6.1.1717
697. std INCLUDED            "incfil file_ws         dpans11.htm     11.6.1.1718
698. std OPEN-FILE           NOOP    file_ws         dpans11.htm     11.6.1.1970
699. std R/O                 NOOP    file_ws         dpans11.htm     11.6.1.2054
700. std R/W                 NOOP    file_ws         dpans11.htm     11.6.1.2056
701. std READ-FILE           NOOP    file_ws         dpans11.htm     11.6.1.2080
702. std READ-LINE           NOOP    file_ws         dpans11.htm     11.6.1.2090
703. std REPOSITION-FILE     NOOP    file_ws         dpans11.htm     11.6.1.2142
704. std RESIZE-FILE         NOOP    file_ws         dpans11.htm     11.6.1.2147
705. std W/O                 NOOP    file_ws         dpans11.htm     11.6.1.2425
706. std WRITE-FILE          NOOP    file_ws         dpans11.htm     11.6.1.2480
707. std WRITE-LINE          NOOP    file_ws         dpans11.htm     11.6.1.2485
708. std FILE-STATUS         NOOP    file_ws         dpans11.htm     11.6.2.1524
709. std FLUSH-FILE          NOOP    file_ws         dpans11.htm     11.6.2.1560
710. std RENAME-FILE         NOOP    file_ws         dpans11.htm     11.6.2.2130
711. std >FLOAT              NOOP    fp_ws           dpans12.htm     12.6.1.0558
712. std D>F                 NOOP    fp_ws           dpans12.htm     12.6.1.1130
713. std F!                  NOOP    fp_ws           dpans12.htm     12.6.1.1400
714. std F*                  NOOP    fp_ws           dpans12.htm     12.6.1.1410
715. std F+                  NOOP    fp_ws           dpans12.htm     12.6.1.1420
716. std F-                  NOOP    fp_ws           dpans12.htm     12.6.1.1425
717. std F/                  NOOP    fp_ws           dpans12.htm     12.6.1.1430
718. std F0<                 NOOP    fp_ws           dpans12.htm     12.6.1.1440
719. std F0=                 NOOP    fp_ws           dpans12.htm     12.6.1.1450
720. std F<                  NOOP    fp_ws           dpans12.htm     12.6.1.1460
721. std F>D                 NOOP    fp_ws           dpans12.htm     12.6.1.1460
722. std F@                  NOOP    fp_ws           dpans12.htm     12.6.1.1472
723. std FALIGN              NOOP    fp_ws           dpans12.htm     12.6.1.1479
724. std FALIGNED            NOOP    fp_ws           dpans12.htm     12.6.1.1483
725. std FCONSTANT           defdat  fp_ws           dpans12.htm     12.6.1.1492
726. std FDEPTH              NOOP    fp_ws           dpans12.htm     12.6.1.1497
727. std FDROP               NOOP    fp_ws           dpans12.htm     12.6.1.1500
728. std FDUP                NOOP    fp_ws           dpans12.htm     12.6.1.1510
729. std FLITERAL            NOOP    fp_ws           dpans12.htm     12.6.1.1552
730. std FLOAT+              NOOP    fp_ws           dpans12.htm     12.6.1.1555
731. std FLOATS              NOOP    fp_ws           dpans12.htm     12.6.1.1556
732. std FLOOR               NOOP    fp_ws           dpans12.htm     12.6.1.1558
733. std FMAX                NOOP    fp_ws           dpans12.htm     12.6.1.1562
734. std FMIN                NOOP    fp_ws           dpans12.htm     12.6.1.1565
735. std FNEGATE             NOOP    fp_ws           dpans12.htm     12.6.1.1567
736. std FOVER               NOOP    fp_ws           dpans12.htm     12.6.1.1600
737. std FROT                NOOP    fp_ws           dpans12.htm     12.6.1.1610
738. std FROUND              NOOP    fp_ws           dpans12.htm     12.6.1.1612
739. std FSWAP               NOOP    fp_ws           dpans12.htm     12.6.1.1620
740. std FVARIABLE           defvar  fp_ws           dpans12.htm     12.6.1.1630
741. std REPRESENT           NOOP    fp_ws           dpans12.htm     12.6.1.2143
742. std DF!                 NOOP    fp_ws           dpans12.htm     12.6.2.1203
743. std DF@                 NOOP    fp_ws           dpans12.htm     12.6.2.1204
744. std DFALIGN             NOOP    fp_ws           dpans12.htm     12.6.2.1205
745. std DFALIGNED           NOOP    fp_ws           dpans12.htm     12.6.2.1207
746. std DFLOAT+             NOOP    fp_ws           dpans12.htm     12.6.2.1208
747. std DFLOATS             NOOP    fp_ws           dpans12.htm     12.6.2.1209
748. std F**                 NOOP    fp_ws           dpans12.htm     12.6.2.1415
749. std F.                  NOOP    fp_ws           dpans12.htm     12.6.2.1427
750. std FABS                NOOP    fp_ws           dpans12.htm     12.6.2.1474
751. std FACOS               NOOP    fp_ws           dpans12.htm     12.6.2.1476
752. std FACOSH              NOOP    fp_ws           dpans12.htm     12.6.2.1477
753. std FALOG               NOOP    fp_ws           dpans12.htm     12.6.2.1484
754. std FASIN               NOOP    fp_ws           dpans12.htm     12.6.2.1486
755. std FASINH              NOOP    fp_ws           dpans12.htm     12.6.2.1487
756. std FATAN               NOOP    fp_ws           dpans12.htm     12.6.2.1488
757. std FATAN2              NOOP    fp_ws           dpans12.htm     12.6.2.1489
758. std FATANH              NOOP    fp_ws           dpans12.htm     12.6.2.1491
759. std FCOS                NOOP    fp_ws           dpans12.htm     12.6.2.1493
760. std FCOSH               NOOP    fp_ws           dpans12.htm     12.6.2.1494
761. std FE.                 NOOP    fp_ws           dpans12.htm     12.6.2.1513
762. std FEXP                NOOP    fp_ws           dpans12.htm     12.6.2.1515
763. std FEXPM1              NOOP    fp_ws           dpans12.htm     12.6.2.1516
764. std FLN                 NOOP    fp_ws           dpans12.htm     12.6.2.1553
765. std FLNP1               NOOP    fp_ws           dpans12.htm     12.6.2.1554
766. std FLOG                NOOP    fp_ws           dpans12.htm     12.6.2.1557
767. std FS.                 NOOP    fp_ws           dpans12.htm     12.6.2.1613
768. std FSIN                NOOP    fp_ws           dpans12.htm     12.6.2.1614
769. std FSINCOS             NOOP    fp_ws           dpans12.htm     12.6.2.1616
770. std FSINH               NOOP    fp_ws           dpans12.htm     12.6.2.1617
771. std FSQRT               NOOP    fp_ws           dpans12.htm     12.6.2.1618
772. std FTAN                NOOP    fp_ws           dpans12.htm     12.6.2.1625
773. std FTANH               NOOP    fp_ws           dpans12.htm     12.6.2.1626
774. std F~                  NOOP    fp_ws           dpans12.htm     12.6.2.1640
775. std PRECISION           NOOP    fp_ws           dpans12.htm     12.6.2.2035
776. std SET-PRECISION       NOOP    fp_ws           dpans12.htm     12.6.2.2200
777. std SF!                 NOOP    fp_ws           dpans12.htm     12.6.2.2202
778. std SF@                 NOOP    fp_ws           dpans12.htm     12.6.2.2203
779. std SFALIGN             NOOP    fp_ws           dpans12.htm     12.6.2.2204
780. std SFALIGNED           NOOP    fp_ws           dpans12.htm     12.6.2.2206
781. std SFLOAT+             NOOP    fp_ws           dpans12.htm     12.6.2.2207
782. std SFLOATS             NOOP    fp_ws           dpans12.htm     12.6.2.2208
783. std (LOCAL)             NOOP    local_ws        dpans13.htm     13.6.1.0086
784. std LOCALS|             NOOP    local_ws        dpans13.htm     13.6.2.1795
785. std ALLOCATE            NOOP    malloc_ws       dpans14.htm     14.6.1.0707
786. std FREE                NOOP    malloc_ws       dpans14.htm     14.6.1.1605
787. std RESIZE              NOOP    malloc_ws       dpans14.htm     14.6.1.2145
788. std .S                  NOOP    progtools_ws    dpans15.htm     15.6.1.0220
789. std ?                   NOOP    progtools_ws    dpans15.htm     15.6.1.0600
790. std DUMP                NOOP    progtools_ws    dpans15.htm     15.6.1.1280
791. std SEE                 NOOP    progtools_ws    dpans15.htm     15.6.1.2194
792. std WORDS               NOOP    progtools_ws    dpans15.htm     15.6.1.2465
793. std ;CODE               resunk  progtools_ws    dpans15.htm     15.6.2.0470
794. std AHEAD               NOOP    progtools_ws    dpans15.htm     15.6.2.0702
795. std ASSEMBLER           NOOP    progtools_ws    dpans15.htm     15.6.2.0740
796. std BYE                 NOOP    progtools_ws    dpans15.htm     15.6.2.0830
797. std CODE                defusr  progtools_ws    dpans15.htm     15.6.2.0930
798. std CS-PICK             NOOP    progtools_ws    dpans15.htm     15.6.2.1015
799. std CS-ROLL             NOOP    progtools_ws    dpans15.htm     15.6.2.1020
800. std EDITOR              NOOP    progtools_ws    dpans15.htm     15.6.2.1300
801. std FORGET              NOOP    progtools_ws    dpans15.htm     15.6.2.1580
802. std [ELSE]              NOOP    progtools_ws    dpans15.htm     15.6.2.2531
803. std [IF]                bigif   progtools_ws    dpans15.htm     15.6.2.2532
804. std [THEN]              NOOP    progtools_ws    dpans15.htm     15.6.2.2533
805. std DEFINITIONS         NOOP    searchord_ws    dpans16.htm     16.6.1.1180
806. std FORTH-WORDLIST      NOOP    searchord_ws    dpans16.htm     16.6.1.1595
807. std GET-CURRENT         NOOP    searchord_ws    dpans16.htm     16.6.1.1643
808. std GET-ORDER           NOOP    searchord_ws    dpans16.htm     16.6.1.1647
809. std SEARCH-WORDLIST     NOOP    searchord_ws    dpans16.htm     16.6.1.2192
810. std SET-CURRENT         NOOP    searchord_ws    dpans16.htm     16.6.1.2195
811. std SET-ORDER           NOOP    searchord_ws    dpans16.htm     16.6.1.2197
812. std WORDLIST            NOOP    searchord_ws    dpans16.htm     16.6.1.2460
813. std ALSO                NOOP    searchord_ws    dpans16.htm     16.6.2.0715
814. std FORTH               NOOP    searchord_ws    dpans16.htm     16.6.2.1590
815. std ONLY                NOOP    searchord_ws    dpans16.htm     16.6.2.1965
816. std ORDER               NOOP    searchord_ws    dpans16.htm     16.6.2.1985
817. std PREVIOUS            NOOP    searchord_ws    dpans16.htm     16.6.2.2037
818. std -TRAILING           NOOP    string_ws       dpans17.htm     17.6.1.0170
819. std /STRING             NOOP    string_ws       dpans17.htm     17.6.1.0245
820. std BLANK               NOOP    string_ws       dpans17.htm     17.6.1.0780
821. std CMOVE               NOOP    string_ws       dpans17.htm     17.6.1.0910
822. std CMOVE>              NOOP    string_ws       dpans17.htm     17.6.1.0920
823. std COMPARE             NOOP    string_ws       dpans17.htm     17.6.1.0935
824. std SEARCH              NOOP    string_ws       dpans17.htm     17.6.1.2191
825. std SLITERAL            NOOP    string_ws       dpans17.htm     17.6.1.2212
826.  
827. _DEFINITIONS
828.  
829. \ Revision history
830. \ 0. 1st release to guinea pigs via comp.lang.forth
831. \ 1. Added multi-line comment 0 [IF]. Colored CHAR outside definitions.
832. \ 2. (EJB) Added missing definitions for common but nonstandard words
833. \    and cleaned up to account for case sensitivity.
834. \ 3. (EJB) Fixed up to create conforming XHTML 1.0 Strict
835. \ 4. (BNE) File check before nesting, moved file names to the hyperlink table,
836. \    added some option flags, cleared hyperlink list for each run. Added more
837. \    multiline comment words. Expands tabs to spaces. Title uses %20 for blanks.
344.  
345. : _incfil ( addr -- )                           \ trigger file nesting      /4/
346.    nestable 0= IF DROP EXIT THEN                \ don't nest files if disabled
347.    COUNT BL SKIP  2DUP R/O OPEN-FILE            \ can the file be opened?
348.    IF   DROP 2DROP                              \ no
349.    ELSE CLOSE-FILE DROP                         \ yes
350.         fn COUNT fn1 PLACE  fn PLACE 1 nufile !
351.    THEN ;
352.  
353. : incfile ( a len -- a' len' )                  \ include a file
354.    genHTML skipw token _incfil ;
355.  
356. : "incfil ( a len -- a' len' )                  \ include file from S" filename"
357.    skipw "str" _incfil ;
358.  
359. : hfill  ( -- len ior )                         \ read next line of file
360.    inbuf 256 BL FILL
361.    XPAD 256 inf READ-LINE ABORT" Error reading file"
362.    >R >R 0 XPAD R> BOUNDS                       ( idx . . )
363.    ?DO  I C@ 9 = IF 3 RSHIFT 1+ 3 LSHIFT        \ tab
364.         ELSE I C@ OVER 255 AND CHARS inbuf + C!
365.            1+ DUP 256 = IF CR ." Input line too long" THEN
366.         THEN
367.    LOOP R>
368.    1 linenum +! ;
369.  
370. : open  ( -- ) CR ." Reading " fn COUNT TYPE ."  at line " linenum @ .
371.    0 linenum !
372.    fn COUNT R/O OPEN-FILE ABORT" Error opening source file" TO inf ;
373.  
374. : close  ( -- ) CR ." closing " fn COUNT TYPE
375.    inf CLOSE-FILE ABORT" Error closing file" ;
376.  
377. : .title ( addr len -- )                        \ output as title string
378.    BOUNDS ?DO I C@ BL = IF S" %20" out ELSE I 1 out THEN LOOP ;
379.  
380. : oopen  ( -- )
381.    ofn W/O CREATE-FILE ABORT" Error creating file" TO outf
382.    begin_header boiler                          \ begin boilerplate
383.    fn COUNT .title  mid_header boiler           \ title and end boilerplate
384.    bold IF S" <b>" out THEN
385.    fn COUNT header ;
386.  
387. : HTML  ( <infile> -- )
388.    S" /basic-links/" hyperlinks SEARCH-WORDLIST
389.    IF   EXECUTE  THEN                           \ remove user hyperlinks
390.    GET-CURRENT >R hyperlinks SET-CURRENT        \ replace the fence
391.    S" MARKER /basic-links/" EVALUATE
392.    R> SET-CURRENT
393.    0 TO screen-only  0 nufile !  1 linenum !    \ force usage of file
394.    BL WORD COUNT fn PLACE open oopen            \ open input and output files
395.    -1 DUP >R outf >R                            \ file nest uses stacks
396.    hstate=0
397.    BEGIN
398.       BEGIN 0 special !                         \ process line
399.          nufile @                               \ nest a file?
400.          IF   inf outf
401.               open oopen  outf >R               \ open new files
402.               0 nufile !
403.          THEN hfill
404.       WHILE inbuf SWAP hint
405.       REPEAT DROP
406.       close fn1 COUNT fn PLACE                  \ restore file name
407.       DUP -1 <>
408.       IF   TO outf TO inf FALSE                 \ unnest files
409.       ELSE TRUE
410.       THEN
411.    UNTIL DROP
412.    BEGIN R> DUP -1 <>                           \ close all output files
413.    WHILE bold IF S" </b>" out THEN
414.       end_header boiler                         \ finish up HTML
415.       CLOSE-FILE ABORT" Error closing file"
416.    REPEAT DROP ;
417.  
418. : q  ( -- ) 1 TO screen-only                    \ single line test
419.    -1 WORD COUNT inbuf PLACE inbuf COUNT hint ;
420.  
421. \ 0 [IF] is often used as a comment. If it is used as a comment, scan the file
422. \ for a [THEN]. [THEN] must be on the next line or beyond.
423.  
424. : upp ( an--) BOUNDS ?DO I C@ [CHAR] a > IF I C@ 32 - I C! THEN LOOP \ uppercase
425. ;
426.  
427. CREATE terminator 16 CHARS ALLOT                \ multiline comment terminator
428.  
429. : multicomment ( a len searchstring -- a' len' )
430.    terminator PLACE
431.    genHTML commentary setcolor ital( outh       \ finish up this line
432.    BEGIN hfill      S" <br />" outln
433.    WHILE >R inbuf EPAD R@ MOVE
434.       EPAD R@ upp                               \ uppercase for search
435.       EPAD R@ terminator COUNT SEARCH
436.       IF   DROP EPAD - inbuf OVER token PLACE   \ before [THEN] is comment
437.            genHTML
438.            inbuf R> ROT /STRING
439.            )ital closefont EXIT
440.       ELSE 2DROP inbuf R> outh                  \ whole line is comment
441.       THEN
442.    REPEAT inbuf SWAP )ital closefont ;          \ EOF found
443.  
444. : bigif  ( a len -- a len )  special @ 1 =
445.    IF S" [THEN]" multicomment THEN ;
446.  
447. \ =============================================================================
448.  
449. : _DEFINITIONS DEFINITIONS ;
450. : _order order ;  : _words words ; : _see see ;
451.  
452. hyperlinks SET-CURRENT
453. \ The following words are not in the ANS standard but are very common.
454. : VOCABULARY    defusr ;
455. : DEFER         defusr ;
456. : INCLUDE       hstate @ 0= IF incfile THEN ;
457. : FLOAD         hstate @ 0= IF incfile THEN ;
458. : BINARY        2 BASE ! ;
459. : OCTAL         8 BASE ! ;
460. : 0             numeric spec=zero ;
461. : 1             numeric  ;
462. : -1            numeric  ;
463. : COMMENT:      S" COMMENT;" multicomment ;
464. : ((            S" ))"       multicomment ;
465.  
466. \ The rest is ANS Forth standard
467.  
468. : \             commentary genHTML ital( token PLACE genHTML )ital token 0 ;
469.  
470. (   NAME                ACTION  COLOR           FILENAME        REFERENCE )
471. (   ------------------  ------  --------------  -----------     --------- )
472. std !                   NOOP    core_ws         dpans6.htm      6.1.0010
473. std #                   NOOP    core_ws         dpans6.htm      6.1.0030
474. std #>                  NOOP    core_ws         dpans6.htm      6.1.0040
475. std #S                  NOOP    core_ws         dpans6.htm      6.1.0050
476. std '                   NOOP    core_ws         dpans6.htm      6.1.0070
477. std (                   skip)   commentary      dpans6.htm      6.1.0080
478. std *                   NOOP    core_ws         dpans6.htm      6.1.0090
479. std */                  NOOP    core_ws         dpans6.htm      6.1.0100
480. std */MOD               NOOP    core_ws         dpans6.htm      6.1.0110
481. std +                   NOOP    core_ws         dpans6.htm      6.1.0120
482. std +!                  NOOP    core_ws         dpans6.htm      6.1.0130
483. std +LOOP               NOOP    core_ws         dpans6.htm      6.1.0140
484. std ,                   NOOP    core_ws         dpans6.htm      6.1.0150
485. std -                   NOOP    core_ws         dpans6.htm      6.1.0160
486. std .                   NOOP    core_ws         dpans6.htm      6.1.0180
487. std ."                  skip"   numeric         dpans6.htm      6.1.0190
488. std /                   NOOP    core_ws         dpans6.htm      6.1.0230
489. std /MOD                NOOP    core_ws         dpans6.htm      6.1.0240
490. std 0<                  NOOP    core_ws         dpans6.htm      6.1.0250
491. std 0=                  NOOP    core_ws         dpans6.htm      6.1.0270
492. std 1+                  NOOP    core_ws         dpans6.htm      6.1.0290
493. std 1-                  NOOP    core_ws         dpans6.htm      6.1.0300
494. std 2!                  NOOP    core_ws         dpans6.htm      6.1.0310
495. std 2*                  NOOP    core_ws         dpans6.htm      6.1.0320
496. std 2/                  NOOP    core_ws         dpans6.htm      6.1.0330
497. std 2@                  NOOP    core_ws         dpans6.htm      6.1.0350
498. std 2DROP               NOOP    core_ws         dpans6.htm      6.1.0370
499. std 2DUP                NOOP    core_ws         dpans6.htm      6.1.0380
500. std 2OVER               NOOP    core_ws         dpans6.htm      6.1.0400
501. std 2SWAP               NOOP    core_ws         dpans6.htm      6.1.0430
502. std :                   defunk  core_ws         dpans6.htm      6.1.0450
503. std ;                   resunk  core_ws         dpans6.htm      6.1.0460
504. std <                   NOOP    core_ws         dpans6.htm      6.1.0480
505. std <#                  NOOP    core_ws         dpans6.htm      6.1.0490
506. std =                   NOOP    core_ws         dpans6.htm      6.1.0530
507. std >                   NOOP    core_ws         dpans6.htm      6.1.0540
508. std >BODY               NOOP    core_ws         dpans6.htm      6.1.0550
509. std >IN                 NOOP    core_ws         dpans6.htm      6.1.0560
510. std >NUMBER             NOOP    core_ws         dpans6.htm      6.1.0570
511. std >R                  NOOP    core_ws         dpans6.htm      6.1.0580
512. std ?DUP                NOOP    core_ws         dpans6.htm      6.1.0630
513. std @                   NOOP    core_ws         dpans6.htm      6.1.0650
514. std ABORT               NOOP    core_ws         dpans6.htm      6.1.0670
515. std ABORT"              skip"   numeric         dpans6.htm      6.1.0680
516. std ABS                 NOOP    core_ws         dpans6.htm      6.1.0690
517. std ACCEPT              NOOP    core_ws         dpans6.htm      6.1.0695
518. std ALIGN               NOOP    core_ws         dpans6.htm      6.1.0705
519. std ALIGNED             NOOP    core_ws         dpans6.htm      6.1.0706
520. std ALLOT               NOOP    core_ws         dpans6.htm      6.1.0710
521. std AND                 NOOP    core_ws         dpans6.htm      6.1.0720
522. std BASE                NOOP    core_ws         dpans6.htm      6.1.0750
523. std BEGIN               NOOP    core_ws         dpans6.htm      6.1.0760
524. std BL                  NOOP    numeric         dpans6.htm      6.1.0770
525. std C!                  NOOP    core_ws         dpans6.htm      6.1.0850
526. std C,                  NOOP    core_ws         dpans6.htm      6.1.0860
527. std C@                  NOOP    core_ws         dpans6.htm      6.1.0870
528. std CELL+               NOOP    core_ws         dpans6.htm      6.1.0880
529. std CELLS               NOOP    core_ws         dpans6.htm      6.1.0890
530. std CHAR                skipc   core_ws         dpans6.htm      6.1.0895
531. std CHAR+               NOOP    core_ws         dpans6.htm      6.1.0897
532. std CHARS               NOOP    core_ws         dpans6.htm      6.1.0898
533. std CONSTANT            defdat  core_ws         dpans6.htm      6.1.0950
534. std COUNT               NOOP    core_ws         dpans6.htm      6.1.0980
535. std CR                  NOOP    core_ws         dpans6.htm      6.1.0990
536. std CREATE              created core_ws         dpans6.htm      6.1.1000
537. std DECIMAL             DECIMAL core_ws         dpans6.htm      6.1.1170
538. std DEPTH               NOOP    core_ws         dpans6.htm      6.1.1200
539. std DO                  NOOP    core_ws         dpans6.htm      6.1.1240
540. std DOES>               NOOP    core_ws         dpans6.htm      6.1.1250
541. std DROP                NOOP    core_ws         dpans6.htm      6.1.1260
542. std DUP                 NOOP    core_ws         dpans6.htm      6.1.1290
543. std ELSE                NOOP    core_ws         dpans6.htm      6.1.1310
544. std EMIT                NOOP    core_ws         dpans6.htm      6.1.1320
545. std ENVIRONMENT?        NOOP    core_ws         dpans6.htm      6.1.1345
546. std EVALUATE            NOOP    core_ws         dpans6.htm      6.1.1360
547. std EXECUTE             NOOP    core_ws         dpans6.htm      6.1.1370
548. std EXIT                NOOP    core_ws         dpans6.htm      6.1.1380
549. std FILL                NOOP    core_ws         dpans6.htm      6.1.1540
550. std FIND                NOOP    core_ws         dpans6.htm      6.1.1550
551. std FM/MOD              NOOP    core_ws         dpans6.htm      6.1.1561
552. std HERE                NOOP    core_ws         dpans6.htm      6.1.1650
553. std HOLD                NOOP    core_ws         dpans6.htm      6.1.1670
554. std I                   NOOP    core_ws         dpans6.htm      6.1.1680
555. std IF                  NOOP    core_ws         dpans6.htm      6.1.1700
556. std IMMEDIATE           NOOP    core_ws         dpans6.htm      6.1.1710
557. std INVERT              NOOP    core_ws         dpans6.htm      6.1.1720
558. std J                   NOOP    core_ws         dpans6.htm      6.1.1730
559. std KEY                 NOOP    core_ws         dpans6.htm      6.1.1750
560. std LEAVE               NOOP    core_ws         dpans6.htm      6.1.1760
561. std LITERAL             NOOP    core_ws         dpans6.htm      6.1.1780
562. std LOOP                NOOP    core_ws         dpans6.htm      6.1.1800
563. std LSHIFT              NOOP    core_ws         dpans6.htm      6.1.1805
564. std M*                  NOOP    core_ws         dpans6.htm      6.1.1810
565. std MAX                 NOOP    core_ws         dpans6.htm      6.1.1870
566. std MIN                 NOOP    core_ws         dpans6.htm      6.1.1880
567. std MOD                 NOOP    core_ws         dpans6.htm      6.1.1890
568. std MOVE                NOOP    core_ws         dpans6.htm      6.1.1900
569. std NEGATE              NOOP    core_ws         dpans6.htm      6.1.1910
570. std OR                  NOOP    core_ws         dpans6.htm      6.1.1980
571. std OVER                NOOP    core_ws         dpans6.htm      6.1.1990
572. std POSTPONE            NOOP    core_ws         dpans6.htm      6.1.2033
573. std QUIT                NOOP    core_ws         dpans6.htm      6.1.2050
574. std R>                  NOOP    core_ws         dpans6.htm      6.1.2060
575. std R@                  NOOP    core_ws         dpans6.htm      6.1.2070
576. std RECURSE             NOOP    core_ws         dpans6.htm      6.1.2120
577. std REPEAT              NOOP    core_ws         dpans6.htm      6.1.2140
578. std ROT                 NOOP    core_ws         dpans6.htm      6.1.2160
579. std RSHIFT              NOOP    core_ws         dpans6.htm      6.1.2162
580. std S"                  skip"   numeric         dpans6.htm      6.1.2165
581. std S>D                 NOOP    core_ws         dpans6.htm      6.1.2170
582. std SIGN                NOOP    core_ws         dpans6.htm      6.1.2210
583. std SM/REM              NOOP    core_ws         dpans6.htm      6.1.2214
584. std SOURCE              NOOP    core_ws         dpans6.htm      6.1.2216
585. std SPACE               NOOP    core_ws         dpans6.htm      6.1.2220
586. std SPACES              NOOP    core_ws         dpans6.htm      6.1.2230
587. std STATE               NOOP    core_ws         dpans6.htm      6.1.2250
588. std SWAP                NOOP    core_ws         dpans6.htm      6.1.2260
589. std THEN                NOOP    core_ws         dpans6.htm      6.1.2270
590. std TYPE                NOOP    core_ws         dpans6.htm      6.1.2310
591. std U.                  NOOP    core_ws         dpans6.htm      6.1.2320
592. std U<                  NOOP    core_ws         dpans6.htm      6.1.2340
593. std UM*                 NOOP    core_ws         dpans6.htm      6.1.2360
594. std UM/MOD              NOOP    core_ws         dpans6.htm      6.1.2370
595. std UNLOOP              NOOP    core_ws         dpans6.htm      6.1.2380
596. std UNTIL               NOOP    core_ws         dpans6.htm      6.1.2390
597. std VARIABLE            defvar  core_ws         dpans6.htm      6.1.2410
598. std WHILE               NOOP    core_ws         dpans6.htm      6.1.2430
599. std WORD                NOOP    core_ws         dpans6.htm      6.1.2450
600. std XOR                 NOOP    core_ws         dpans6.htm      6.1.2490
601. std [                  hstate=0 core_ws         dpans6.htm      6.1.2500
602. std [']                 skipw   numeric         dpans6.htm      6.1.2510
603. std [CHAR]              skipw   numeric         dpans6.htm      6.1.2520
604. std ]                  hstate=1 core_ws         dpans6.htm      6.1.2540
605. std #TIB                NOOP    core_ext_ws     dpans6.htm      6.2.0060
606. std .(                  skip)   commentary      dpans6.htm      6.2.0200
607. std .R                  NOOP    core_ext_ws     dpans6.htm      6.2.0210
608. std 0<>                 NOOP    core_ext_ws     dpans6.htm      6.2.0260
609. std 0>                  NOOP    core_ext_ws     dpans6.htm      6.2.0280
610. std 2>R                 NOOP    core_ext_ws     dpans6.htm      6.2.0340
611. std 2R>                 NOOP    core_ext_ws     dpans6.htm      6.2.0410
612. std 2R@                 NOOP    core_ext_ws     dpans6.htm      6.2.0415
613. std :NONAME             NOOP    core_ext_ws     dpans6.htm      6.2.0455
614. std <>                  NOOP    core_ext_ws     dpans6.htm      6.2.0500
615. std ?DO                 NOOP    core_ext_ws     dpans6.htm      6.2.0620
616. std AGAIN               NOOP    core_ext_ws     dpans6.htm      6.2.0700
617. std C"                  skip"   numeric         dpans6.htm      6.2.0855
618. std CASE                NOOP    core_ext_ws     dpans6.htm      6.2.0873
619. std COMPILE,            NOOP    core_ext_ws     dpans6.htm      6.2.0945
620. std CONVERT             NOOP    core_ext_ws     dpans6.htm      6.2.0970
621. std ENDCASE             NOOP    core_ext_ws     dpans6.htm      6.2.1342
622. std ENDOF               NOOP    core_ext_ws     dpans6.htm      6.2.1343
623. std ERASE               NOOP    core_ext_ws     dpans6.htm      6.2.1350
624. std EXPECT              NOOP    core_ext_ws     dpans6.htm      6.2.1390
625. std FALSE             spec=zero numeric         dpans6.htm      6.2.1485
626. std HEX                 HEX     core_ext_ws     dpans6.htm      6.2.1660
627. std MARKER              defusr  core_ext_ws     dpans6.htm      6.2.1850
628. std NIP                 NOOP    core_ext_ws     dpans6.htm      6.2.1930
629. std OF                  NOOP    core_ext_ws     dpans6.htm      6.2.1950
630. std PAD                 NOOP    core_ext_ws     dpans6.htm      6.2.2000
631. std PARSE               NOOP    core_ext_ws     dpans6.htm      6.2.2008
632. std PICK                NOOP    core_ext_ws     dpans6.htm      6.2.2030
633. std QUERY               NOOP    core_ext_ws     dpans6.htm      6.2.2040
634. std REFILL              NOOP    core_ext_ws     dpans6.htm      6.2.2125
635. std RESTORE-INPUT       NOOP    core_ext_ws     dpans6.htm      6.2.2148
636. std ROLL                NOOP    core_ext_ws     dpans6.htm      6.2.2150
637. std SAVE-INPUT          NOOP    core_ext_ws     dpans6.htm      6.2.2182
638. std SOURCE-ID           NOOP    core_ext_ws     dpans6.htm      6.2.2218
639. std SPAN                NOOP    core_ext_ws     dpans6.htm      6.2.2240
640. std TIB                 NOOP    core_ext_ws     dpans6.htm      6.2.2290
641. std TO                  NOOP    core_ext_ws     dpans6.htm      6.2.2295
642. std TRUE                NOOP    numeric         dpans6.htm      6.2.2298
643. std TUCK                NOOP    core_ext_ws     dpans6.htm      6.2.2300
644. std U.R                 NOOP    core_ext_ws     dpans6.htm      6.2.2330
645. std U>                  NOOP    core_ext_ws     dpans6.htm      6.2.2350
646. std UNUSED              NOOP    core_ext_ws     dpans6.htm      6.2.2395
647. std VALUE               defval  core_ext_ws     dpans6.htm      6.2.2405
648. std WITHIN              NOOP    core_ext_ws     dpans6.htm      6.2.2440
649. std [COMPILE]           NOOP    core_ext_ws     dpans6.htm      6.2.2530
650. std BLK                 NOOP    block_ws        dpans7.htm      7.6.1.0790
651. std BLOCK               NOOP    block_ws        dpans7.htm      7.6.1.0800
652. std BUFFER              NOOP    block_ws        dpans7.htm      7.6.1.0820
653. std FLUSH               NOOP    block_ws        dpans7.htm      7.6.1.1559
654. std LOAD                NOOP    block_ws        dpans7.htm      7.6.1.1790
655. std SAVE-BUFFERS        NOOP    block_ws        dpans7.htm      7.6.1.2180
656. std UPDATE              NOOP    block_ws        dpans7.htm      7.6.1.2400
657. std EMPTY-BUFFERS       NOOP    block_ws        dpans7.htm      7.6.2.1330
658. std LIST                NOOP    block_ws        dpans7.htm      7.6.2.1770
659. std SCR                 NOOP    block_ws        dpans7.htm      7.6.2.2190
660. std THRU                NOOP    block_ws        dpans7.htm      7.6.2.2280
661. std 2CONSTANT           defdat  double_ws       dpans8.htm      8.6.1.0360
662. std 2LITERAL            NOOP    double_ws       dpans8.htm      8.6.1.0390
663. std 2VARIABLE           defvar  double_ws       dpans8.htm      8.6.1.0440
664. std D+                  NOOP    double_ws       dpans8.htm      8.6.1.1040
665. std D-                  NOOP    double_ws       dpans8.htm      8.6.1.1050
666. std D.                  NOOP    double_ws       dpans8.htm      8.6.1.1060
667. std D.R                 NOOP    double_ws       dpans8.htm      8.6.1.1070
668. std D0<                 NOOP    double_ws       dpans8.htm      8.6.1.1075
669. std D0=                 NOOP    double_ws       dpans8.htm      8.6.1.1080
670. std D2*                 NOOP    double_ws       dpans8.htm      8.6.1.1090
671. std D2/                 NOOP    double_ws       dpans8.htm      8.6.1.1100
672. std D<                  NOOP    double_ws       dpans8.htm      8.6.1.1110
673. std D=                  NOOP    double_ws       dpans8.htm      8.6.1.1120
674. std D>S                 NOOP    double_ws       dpans8.htm      8.6.1.1140
675. std DABS                NOOP    double_ws       dpans8.htm      8.6.1.1160
676. std DMAX                NOOP    double_ws       dpans8.htm      8.6.1.1210
677. std DMIN                NOOP    double_ws       dpans8.htm      8.6.1.1220
678. std DNEGATE             NOOP    double_ws       dpans8.htm      8.6.1.1230
679. std M*/                 NOOP    double_ws       dpans8.htm      8.6.1.1820
680. std M+                  NOOP    double_ws       dpans8.htm      8.6.1.1830
681. std 2ROT                NOOP    double_ws       dpans8.htm      8.6.2.0420
682. std DU<                 NOOP    double_ws       dpans8.htm      8.6.2.1270
683. std CATCH               NOOP    exception_ws    dpans9.htm      9.6.1.0875
684. std THROW               NOOP    exception_ws    dpans9.htm      9.6.1.2275
685. std AT-XY               NOOP    facilities_ws   dpans10.htm     10.6.1.0742
686. std KEY?                NOOP    facilities_ws   dpans10.htm     10.6.1.1755
687. std PAGE                NOOP    facilities_ws   dpans10.htm     10.6.1.2005
688. std EKEY                NOOP    facilities_ws   dpans10.htm     10.6.2.1305
689. std EKEY<CHAR           NOOP    facilities_ws   dpans10.htm     10.6.2.1306
690. std EKEY?               NOOP    facilities_ws   dpans10.htm     10.6.2.1307
691. std EMIT?               NOOP    facilities_ws   dpans10.htm     10.6.2.1325
692. std MS                  NOOP    facilities_ws   dpans10.htm     10.6.2.1905
693. std TIME&DATE           NOOP    facilities_ws   dpans10.htm     10.6.2.2292
694. std BIN                 NOOP    file_ws         dpans11.htm     11.6.1.0765
695. std CLOSE-FILE          NOOP    file_ws         dpans11.htm     11.6.1.0900
696. std CREATE-FILE         NOOP    file_ws         dpans11.htm     11.6.1.1010
697. std DELETE-FILE         NOOP    file_ws         dpans11.htm     11.6.1.1190
698. std FILE-POSITION       NOOP    file_ws         dpans11.htm     11.6.1.1520
699. std FILE-SIZE           NOOP    file_ws         dpans11.htm     11.6.1.1522
700. std INCLUDE-FILE        NOOP    file_ws         dpans11.htm     11.6.1.1717
701. std INCLUDED            "incfil file_ws         dpans11.htm     11.6.1.1718
702. std OPEN-FILE           NOOP    file_ws         dpans11.htm     11.6.1.1970
703. std R/O                 NOOP    file_ws         dpans11.htm     11.6.1.2054
704. std R/W                 NOOP    file_ws         dpans11.htm     11.6.1.2056
705. std READ-FILE           NOOP    file_ws         dpans11.htm     11.6.1.2080
706. std READ-LINE           NOOP    file_ws         dpans11.htm     11.6.1.2090
707. std REPOSITION-FILE     NOOP    file_ws         dpans11.htm     11.6.1.2142
708. std RESIZE-FILE         NOOP    file_ws         dpans11.htm     11.6.1.2147
709. std W/O                 NOOP    file_ws         dpans11.htm     11.6.1.2425
710. std WRITE-FILE          NOOP    file_ws         dpans11.htm     11.6.1.2480
711. std WRITE-LINE          NOOP    file_ws         dpans11.htm     11.6.1.2485
712. std FILE-STATUS         NOOP    file_ws         dpans11.htm     11.6.2.1524
713. std FLUSH-FILE          NOOP    file_ws         dpans11.htm     11.6.2.1560
714. std RENAME-FILE         NOOP    file_ws         dpans11.htm     11.6.2.2130
715. std >FLOAT              NOOP    fp_ws           dpans12.htm     12.6.1.0558
716. std D>F                 NOOP    fp_ws           dpans12.htm     12.6.1.1130
717. std F!                  NOOP    fp_ws           dpans12.htm     12.6.1.1400
718. std F*                  NOOP    fp_ws           dpans12.htm     12.6.1.1410
719. std F+                  NOOP    fp_ws           dpans12.htm     12.6.1.1420
720. std F-                  NOOP    fp_ws           dpans12.htm     12.6.1.1425
721. std F/                  NOOP    fp_ws           dpans12.htm     12.6.1.1430
722. std F0<                 NOOP    fp_ws           dpans12.htm     12.6.1.1440
723. std F0=                 NOOP    fp_ws           dpans12.htm     12.6.1.1450
724. std F<                  NOOP    fp_ws           dpans12.htm     12.6.1.1460
725. std F>D                 NOOP    fp_ws           dpans12.htm     12.6.1.1460
726. std F@                  NOOP    fp_ws           dpans12.htm     12.6.1.1472
727. std FALIGN              NOOP    fp_ws           dpans12.htm     12.6.1.1479
728. std FALIGNED            NOOP    fp_ws           dpans12.htm     12.6.1.1483
729. std FCONSTANT           defdat  fp_ws           dpans12.htm     12.6.1.1492
730. std FDEPTH              NOOP    fp_ws           dpans12.htm     12.6.1.1497
731. std FDROP               NOOP    fp_ws           dpans12.htm     12.6.1.1500
732. std FDUP                NOOP    fp_ws           dpans12.htm     12.6.1.1510
733. std FLITERAL            NOOP    fp_ws           dpans12.htm     12.6.1.1552
734. std FLOAT+              NOOP    fp_ws           dpans12.htm     12.6.1.1555
735. std FLOATS              NOOP    fp_ws           dpans12.htm     12.6.1.1556
736. std FLOOR               NOOP    fp_ws           dpans12.htm     12.6.1.1558
737. std FMAX                NOOP    fp_ws           dpans12.htm     12.6.1.1562
738. std FMIN                NOOP    fp_ws           dpans12.htm     12.6.1.1565
739. std FNEGATE             NOOP    fp_ws           dpans12.htm     12.6.1.1567
740. std FOVER               NOOP    fp_ws           dpans12.htm     12.6.1.1600
741. std FROT                NOOP    fp_ws           dpans12.htm     12.6.1.1610
742. std FROUND              NOOP    fp_ws           dpans12.htm     12.6.1.1612
743. std FSWAP               NOOP    fp_ws           dpans12.htm     12.6.1.1620
744. std FVARIABLE           defvar  fp_ws           dpans12.htm     12.6.1.1630
745. std REPRESENT           NOOP    fp_ws           dpans12.htm     12.6.1.2143
746. std DF!                 NOOP    fp_ws           dpans12.htm     12.6.2.1203
747. std DF@                 NOOP    fp_ws           dpans12.htm     12.6.2.1204
748. std DFALIGN             NOOP    fp_ws           dpans12.htm     12.6.2.1205
749. std DFALIGNED           NOOP    fp_ws           dpans12.htm     12.6.2.1207
750. std DFLOAT+             NOOP    fp_ws           dpans12.htm     12.6.2.1208
751. std DFLOATS             NOOP    fp_ws           dpans12.htm     12.6.2.1209
752. std F**                 NOOP    fp_ws           dpans12.htm     12.6.2.1415
753. std F.                  NOOP    fp_ws           dpans12.htm     12.6.2.1427
754. std FABS                NOOP    fp_ws           dpans12.htm     12.6.2.1474
755. std FACOS               NOOP    fp_ws           dpans12.htm     12.6.2.1476
756. std FACOSH              NOOP    fp_ws           dpans12.htm     12.6.2.1477
757. std FALOG               NOOP    fp_ws           dpans12.htm     12.6.2.1484
758. std FASIN               NOOP    fp_ws           dpans12.htm     12.6.2.1486
759. std FASINH              NOOP    fp_ws           dpans12.htm     12.6.2.1487
760. std FATAN               NOOP    fp_ws           dpans12.htm     12.6.2.1488
761. std FATAN2              NOOP    fp_ws           dpans12.htm     12.6.2.1489
762. std FATANH              NOOP    fp_ws           dpans12.htm     12.6.2.1491
763. std FCOS                NOOP    fp_ws           dpans12.htm     12.6.2.1493
764. std FCOSH               NOOP    fp_ws           dpans12.htm     12.6.2.1494
765. std FE.                 NOOP    fp_ws           dpans12.htm     12.6.2.1513
766. std FEXP                NOOP    fp_ws           dpans12.htm     12.6.2.1515
767. std FEXPM1              NOOP    fp_ws           dpans12.htm     12.6.2.1516
768. std FLN                 NOOP    fp_ws           dpans12.htm     12.6.2.1553
769. std FLNP1               NOOP    fp_ws           dpans12.htm     12.6.2.1554
770. std FLOG                NOOP    fp_ws           dpans12.htm     12.6.2.1557
771. std FS.                 NOOP    fp_ws           dpans12.htm     12.6.2.1613
772. std FSIN                NOOP    fp_ws           dpans12.htm     12.6.2.1614
773. std FSINCOS             NOOP    fp_ws           dpans12.htm     12.6.2.1616
774. std FSINH               NOOP    fp_ws           dpans12.htm     12.6.2.1617
775. std FSQRT               NOOP    fp_ws           dpans12.htm     12.6.2.1618
776. std FTAN                NOOP    fp_ws           dpans12.htm     12.6.2.1625
777. std FTANH               NOOP    fp_ws           dpans12.htm     12.6.2.1626
778. std F~                  NOOP    fp_ws           dpans12.htm     12.6.2.1640
779. std PRECISION           NOOP    fp_ws           dpans12.htm     12.6.2.2035
780. std SET-PRECISION       NOOP    fp_ws           dpans12.htm     12.6.2.2200
781. std SF!                 NOOP    fp_ws           dpans12.htm     12.6.2.2202
782. std SF@                 NOOP    fp_ws           dpans12.htm     12.6.2.2203
783. std SFALIGN             NOOP    fp_ws           dpans12.htm     12.6.2.2204
784. std SFALIGNED           NOOP    fp_ws           dpans12.htm     12.6.2.2206
785. std SFLOAT+             NOOP    fp_ws           dpans12.htm     12.6.2.2207
786. std SFLOATS             NOOP    fp_ws           dpans12.htm     12.6.2.2208
787. std (LOCAL)             NOOP    local_ws        dpans13.htm     13.6.1.0086
788. std LOCALS|             NOOP    local_ws        dpans13.htm     13.6.2.1795
789. std ALLOCATE            NOOP    malloc_ws       dpans14.htm     14.6.1.0707
790. std FREE                NOOP    malloc_ws       dpans14.htm     14.6.1.1605
791. std RESIZE              NOOP    malloc_ws       dpans14.htm     14.6.1.2145
792. std .S                  NOOP    progtools_ws    dpans15.htm     15.6.1.0220
793. std ?                   NOOP    progtools_ws    dpans15.htm     15.6.1.0600
794. std DUMP                NOOP    progtools_ws    dpans15.htm     15.6.1.1280
795. std SEE                 NOOP    progtools_ws    dpans15.htm     15.6.1.2194
796. std WORDS               NOOP    progtools_ws    dpans15.htm     15.6.1.2465
797. std ;CODE               resunk  progtools_ws    dpans15.htm     15.6.2.0470
798. std AHEAD               NOOP    progtools_ws    dpans15.htm     15.6.2.0702
799. std ASSEMBLER           NOOP    progtools_ws    dpans15.htm     15.6.2.0740
800. std BYE                 NOOP    progtools_ws    dpans15.htm     15.6.2.0830
801. std CODE                defusr  progtools_ws    dpans15.htm     15.6.2.0930
802. std CS-PICK             NOOP    progtools_ws    dpans15.htm     15.6.2.1015
803. std CS-ROLL             NOOP    progtools_ws    dpans15.htm     15.6.2.1020
804. std EDITOR              NOOP    progtools_ws    dpans15.htm     15.6.2.1300
805. std FORGET              NOOP    progtools_ws    dpans15.htm     15.6.2.1580
806. std [ELSE]              NOOP    progtools_ws    dpans15.htm     15.6.2.2531
807. std [IF]                bigif   progtools_ws    dpans15.htm     15.6.2.2532
808. std [THEN]              NOOP    progtools_ws    dpans15.htm     15.6.2.2533
809. std DEFINITIONS         NOOP    searchord_ws    dpans16.htm     16.6.1.1180
810. std FORTH-WORDLIST      NOOP    searchord_ws    dpans16.htm     16.6.1.1595
811. std GET-CURRENT         NOOP    searchord_ws    dpans16.htm     16.6.1.1643
812. std GET-ORDER           NOOP    searchord_ws    dpans16.htm     16.6.1.1647
813. std SEARCH-WORDLIST     NOOP    searchord_ws    dpans16.htm     16.6.1.2192
814. std SET-CURRENT         NOOP    searchord_ws    dpans16.htm     16.6.1.2195
815. std SET-ORDER           NOOP    searchord_ws    dpans16.htm     16.6.1.2197
816. std WORDLIST            NOOP    searchord_ws    dpans16.htm     16.6.1.2460
817. std ALSO                NOOP    searchord_ws    dpans16.htm     16.6.2.0715
818. std FORTH               NOOP    searchord_ws    dpans16.htm     16.6.2.1590
819. std ONLY                NOOP    searchord_ws    dpans16.htm     16.6.2.1965
820. std ORDER               NOOP    searchord_ws    dpans16.htm     16.6.2.1985
821. std PREVIOUS            NOOP    searchord_ws    dpans16.htm     16.6.2.2037
822. std -TRAILING           NOOP    string_ws       dpans17.htm     17.6.1.0170
823. std /STRING             NOOP    string_ws       dpans17.htm     17.6.1.0245
824. std BLANK               NOOP    string_ws       dpans17.htm     17.6.1.0780
825. std CMOVE               NOOP    string_ws       dpans17.htm     17.6.1.0910
826. std CMOVE>              NOOP    string_ws       dpans17.htm     17.6.1.0920
827. std COMPARE             NOOP    string_ws       dpans17.htm     17.6.1.0935
828. std SEARCH              NOOP    string_ws       dpans17.htm     17.6.1.2191
829. std SLITERAL            NOOP    string_ws       dpans17.htm     17.6.1.2212
830.  
831. _DEFINITIONS
832.  
833. \ Revision history
834. \ 0. 1st release to guinea pigs via comp.lang.forth
835. \ 1. Added multi-line comment 0 [IF]. Colored CHAR outside definitions.
836. \ 2. (EJB) Added missing definitions for common but nonstandard words
837. \    and cleaned up to account for case sensitivity.
838. \ 3. (EJB) Fixed up to create conforming XHTML 1.0 Strict
839. \ 4. (BNE) File check before nesting, moved file names to the hyperlink table,
840. \    added some option flags, cleared hyperlink list for each run. Added more
841. \    multiline comment words. Expands tabs to spaces. Title uses %20 for blanks.
 
842. \ 5. (EJB) Consolidated some strings
838.  
839.  
843.  
844.