0 [IF] Forth to HTML converter Written by Brad Eckert Modifications by Dirk Busch and Ed Beroset Revision 4. See bottom for revision history. This ANS Forth program is public domain. It translates ANS Forth to colorized HTML. Hyperlinks to the ANS Forth draft standard are inserted for all ANS standard words. Hyperlinks to user definitions are included. Usage: HTML FileName Generates HTML file from Forth source output file is Filename with .HTM extension Q [forth code] Outputs HTML for 1 line to screen Q is used for debugging. You can use "linenum ?" to show the line number if an ABORT occurs. The HTML is about 10 times as big as the Forth source because of all the links, color changes and whitespace. INCLUDEd files produce corresponding HTML pages. Most browsers get severely bogged down with large files. If you're converting a large Forth program to HTML, try to keep the source files under 500 lines each by splitting long source into multiple INCLUDE files. HTML pages are best viewed with Internet Explorer or Netscape 4.7. Netscape 6 is more sluggish with large files. When you INCLUDE this file some redefinition complaints will occur. That's okay since you won't be loading an application on top of this. [THEN] ONLY FORTH ALSO DEFINITIONS \ ------------------------------------------------------------------------------ \ Configuration: \ Hyperlink to the original file, or not. \ Output at the TOP of the HTML-File 1 VALUE LINK-TO-ORG-FILE \ path to the ANS-Files CREATE DPANS-PATH ," http://www.tinyboot.com/ANS/" \ ------------------------------------------------------------------------------ : [undef] ( -- f ) BL WORD FIND NIP 0= ; [undef] C+! [IF] : C+! SWAP OVER C@ + SWAP C! ; [THEN] [undef] BOUNDS [IF] : BOUNDS OVER + SWAP ; [THEN] [undef] SCAN [IF] : SCAN >R BEGIN DUP WHILE OVER C@ R@ <> WHILE 1 /STRING REPEAT THEN R> DROP ; [THEN] [undef] SKIP [IF] : SKIP >R BEGIN DUP WHILE OVER C@ R@ = WHILE 1 /STRING REPEAT THEN R> DROP ; [THEN] [undef] NOOP [IF] : NOOP ; [THEN] [undef] +PLACE [IF] : +PLACE 2DUP 2>R COUNT CHARS + SWAP MOVE 2R> C+! ; [THEN] [undef] PLACE [IF] : PLACE 0 OVER C! +PLACE ; [THEN] [undef] FDROP [IF] : FDROP ; [THEN] [undef] >FLOAT [IF] : >FLOAT DROP C@ [CHAR] 0 [CHAR] 9 1+ WITHIN ; [THEN] 0 VALUE outf \ output to file 1 VALUE screen-only \ screen is for testing : werr ABORT" Error writing file" ; : out screen-only IF TYPE ELSE outf WRITE-FILE werr THEN ; : outln screen-only IF TYPE CR ELSE outf WRITE-LINE werr THEN ; : bang PAD C@ 84 > IF 0 0 C! THEN ; WORDLIST CONSTANT hyperlinks VARIABLE attrib : /a ( -- ) attrib @ IF S" " out THEN 0 attrib ! ; : (,$) ( a len -- ) DUP C, BOUNDS ?DO I C@ C, LOOP ; \ text to dictionary : text ( -- ) -1 WORD COUNT -TRAILING (,$) ; : line ( a line# -- ) 0 ?DO COUNT + LOOP COUNT out ; \ output one string : boiler ( addr -- ) BEGIN COUNT DUP WHILE 2DUP + >R outln R> REPEAT 2DROP ; CREATE misctext \ various attribute strings text text text 0 C, VARIABLE color \ current color VARIABLE active-color \ active color VARIABLE infont \ within tag : fontcolor ( color -- ) \ change font color DUP active-color @ <> IF DUP active-color ! 1 infont ! BASE @ >R misctext 5 line 0 HEX <# # # # # # # #> out misctext 2 line R> BASE ! ELSE DROP THEN ; : fcol ( color -- ) \ define a font color CREATE , DOES> @ color ! ; HEX 808080 fcol unknown 008000 fcol commentary CC0000 fcol numeric 990080 fcol values 000000 fcol userwords 009999 fcol userdefiner CC00CC fcol variables 0000FF fcol core_ws 0000FF fcol core_ext_ws 0000FF fcol block_ws 0000FF fcol double_ws 0000FF fcol exception_ws 0000FF fcol facilities_ws 0000FF fcol file_ws 0000FF fcol fp_ws 0000FF fcol local_ws 0000FF fcol malloc_ws 0000FF fcol progtools_ws 0000FF fcol searchord_ws 0000FF fcol string_ws DECIMAL CREATE begin_header \ begin of HTML file part 1 text text text text text text text text 0 C, \ body defaults: the most common link color (blue) is made the default color \ the most common plain text color (green) is made default. CREATE mid_header \ begin of HTML file part 2 text text 0 C, CREATE end_header \ end of HTML file text text 0 C, HEX : setcolor ( -- ) \ select next color attrib @ 1 = color @ 0000FF = AND 0= \ blue link: don't color IF color @ fontcolor THEN ; DECIMAL : closefont ( -- ) /a infont @ IF misctext 8 line 0 infont ! THEN ; : outh ( a n -- ) \ HTMLized text output BOUNDS ?DO I C@ CASE [CHAR] & OF S" &" out ENDOF [CHAR] < OF S" <" out ENDOF [CHAR] > OF S" >" out ENDOF [CHAR] " OF S" "" out ENDOF I 1 out ENDCASE LOOP ; : outhattr ( a n -- ) \ HTMLized text output BOUNDS ?DO I C@ CASE [CHAR] & OF S" amp" out ENDOF [CHAR] < OF S" lt" out ENDOF [CHAR] > OF S" gt" out ENDOF [CHAR] " OF S" quot" out ENDOF [CHAR] + OF S" plus" out ENDOF [CHAR] ! OF S" bang" out ENDOF [CHAR] / OF S" slash" out ENDOF [CHAR] \ OF S" backslash" out ENDOF [CHAR] ' OF S" apos" out ENDOF [CHAR] = OF S" equal" out ENDOF [CHAR] - OF S" dash" out ENDOF [CHAR] @ OF S" at" out ENDOF [CHAR] ; OF S" semi" out ENDOF [CHAR] * OF S" star" out ENDOF [CHAR] ? OF S" question" out ENDOF [CHAR] ~ OF S" tilde" out ENDOF [CHAR] # OF S" pound" out ENDOF [CHAR] , OF S" comma" out ENDOF [CHAR] $ OF S" dollar" out ENDOF [CHAR] | OF S" bar" out ENDOF [CHAR] [ OF S" leftbracket" out ENDOF [CHAR] ( OF S" leftparen" out ENDOF [CHAR] { OF S" leftbrace" out ENDOF [CHAR] ] OF S" rightbracket" out ENDOF [CHAR] ) OF S" rightparen" out ENDOF [CHAR] } OF S" rightbrace" out ENDOF BL OF S" _" out ENDOF I 1 out ENDCASE LOOP ; : label ( addr len -- ) /a \ associate a label with a word misctext 1 line outhattr misctext 2 line 1 attrib ! ; : "out ( -- ) \ output a " misctext 9 line ; : new-line ( -- ) \ start a new line S" " outln ; : std ( word color -- ) CREATE ' , ' , BL WORD COUNT (,$) DOES> /a DUP >R 2 CELLS + misctext 0 line \ begin hyperlink BASE @ >R DECIMAL COUNT 0 0 2OVER >NUMBER 2DROP D>S R> BASE ! DPANS-PATH COUNT out \ write path to ANS files CASE \ choose file name 6 OF S" dpans6.htm#" out ENDOF 7 OF S" dpans7.htm#" out ENDOF 8 OF S" dpans8.htm#" out ENDOF 9 OF S" dpans9.htm#" out ENDOF 10 OF S" dpans10.htm#" out ENDOF 11 OF S" dpans11.htm#" out ENDOF 12 OF S" dpans12.htm#" out ENDOF 13 OF S" dpans13.htm#" out ENDOF 14 OF S" dpans14.htm#" out ENDOF 15 OF S" dpans15.htm#" out ENDOF 16 OF S" dpans16.htm#" out ENDOF 17 OF S" dpans17.htm#" out ENDOF ABORT" Undefined source file" ENDCASE out misctext 2 line 1 attrib ! R> 2@ SWAP EXECUTE EXECUTE ; \ extra attributes : genHTML ( -- ) \ generate pending HTML PAD COUNT DUP IF setcolor THEN outh closefont 0 PAD ! ; : genHTML2 ( -- ) \ generate pending HTML PAD COUNT DUP IF setcolor THEN outh closefont 0 PAD ! ; : isnumber? ( addr len -- f ) \ string converts to number? 0 0 2SWAP >NUMBER NIP NIP NIP 0= ; : hparse ( a len char -- a' len' ) >R 2DUP R@ SKIP R> SCAN BL SCAN 2SWAP 2 PICK - PAD +PLACE ; CREATE XPAD 1024 CHARS ALLOT \ temporary pad for word storage CREATE EPAD 1024 CHARS ALLOT \ temporary pad for evaluation : >XPAD ( -- ) PAD COUNT BL SKIP XPAD PLACE ; \ move to temporary pad : hint ( addr len -- ) \ interpret one line... BEGIN 0 PAD ! BL hparse PAD C@ WHILE unknown \ default color >XPAD XPAD COUNT hyperlinks SEARCH-WORDLIST \ got a hyperlink for this? IF DEPTH >R EXECUTE R> DEPTH <> ABORT" stack depth change in HTML generator" ELSE XPAD COUNT BASE @ 10 = IF >FLOAT IF FDROP numeric THEN \ valid float or integer ELSE isnumber? IF numeric THEN THEN THEN genHTML REPEAT 2DROP new-line ; CREATE inbuf 260 CHARS ALLOT CREATE fn 128 CHARS ALLOT \ file name CREATE fn1 128 CHARS ALLOT \ file name backup CREATE pstr 128 CHARS ALLOT \ parsed string storage CREATE uname 64 CHARS ALLOT \ : definition name 0 VALUE inf VARIABLE nufile \ T if nesting a file VARIABLE utype \ type of defined word VARIABLE hstate VARIABLE linenum VARIABLE special \ special action, 0=none : ofn ( -- addr len ) \ output file name fn COUNT 2DUP [CHAR] . SCAN NIP - EPAD PLACE S" .htm" EPAD +PLACE EPAD COUNT ; ( TODO: fix the pad overrun in defx! ) : hcreate ( addr len -- ) S" CREATE " EPAD PLACE EPAD +PLACE GET-CURRENT >R hyperlinks SET-CURRENT EPAD COUNT EVALUATE R> SET-CURRENT ; \ create a hyperlink generator \ The user defined words use the following data structure: \ CELL xt of coloring word \ STRING name of reference word \ STRING name of file : deflink ( addr -- ) \ make hyperlink from data structure DUP @ EXECUTE CELL+ \ set color DUP COUNT + COUNT ofn COMPARE \ in an external file? IF misctext 0 line DUP COUNT + COUNT out \ yes, put file name S" #" out COUNT outh S" >" out ELSE misctext 3 line COUNT outhattr \ no, just use the name misctext 4 line THEN 1 attrib ! ; : defx ( a len xt -- a' len' ) >R genHTML BL hparse >XPAD \ output defining word XPAD COUNT 2DUP hcreate R> , (,$) ofn (,$) DOES> deflink ; : labelnow genHTML2 XPAD COUNT 2DUP label S" " outh outh ; : defdat ['] numeric defx numeric labelnow ; : defvar ['] variables defx variables labelnow ; : defusr ['] userwords defx userwords labelnow ; : defval ['] values defx values labelnow ; : defdef ['] userdefiner defx userdefiner labelnow ; : hstate=0 ( -- ) 0 hstate ! ; : hstate=1 ( -- ) 1 hstate ! ; : spec=zero ( -- ) 1 special ! ; : skip) ( a len -- a' len' ) [CHAR] ) hparse ; : skip} ( a len -- a' len' ) [CHAR] } hparse ; : skipw ( a len -- a' len' ) BL hparse ; : skipc ( a len -- a len ) hstate @ 0= IF numeric skipw THEN ; : skip" ( a len -- a' len' ) \ copy string to pstr genHTML [CHAR] " hparse PAD COUNT 1- pstr PLACE ; \ ------------------------------------------------------------------------------ \ ":" definitions might be defining words, so they can't be assumed to be defusr \ types. ":" makes a label and saves the name for later use by ";" which makes \ a hyperlink or a hyperlink defining word. :NONAME \ normal : definition uname COUNT ['] userwords defx 2DROP 0 PAD ! ; CONSTANT normal_def :NONAME uname COUNT 2DUP hcreate ['] userwords , (,$) ofn (,$) DOES> deflink defdef ; CONSTANT defining_def : defunk ( a len -- a' len' ) \ starting unknown definition hstate=1 normal_def utype ! \ save name of : definition genHTML skipw userwords PAD COUNT BL SKIP 2DUP uname PLACE label ; : resunk ( -- ) \ resolve unknown defined word genHTML utype @ EXECUTE hstate=0 ; : created ( -- ) hstate @ IF defining_def utype ! \ make ; create a defining word ELSE defdat \ not compiling THEN ; \ ------------------------------------------------------------------------------ : header ( addr len -- ) \ output big header text misctext 6 line LINK-TO-ORG-FILE IF misctext 0 line 2dup out misctext 2 line outln misctext 10 line ELSE out THEN misctext 7 line ; : _incfil ( addr -- ) \ trigger file nesting fn COUNT fn1 PLACE COUNT BL SKIP fn PLACE 1 nufile ! ; : incfile ( a len -- a' len' ) \ include a file genHTML skipw PAD _incfil ; : "incfil ( a len -- a' len' ) \ include file from S" filename" skipw pstr _incfil ; : hfill ( -- len ) \ read next line of file inbuf 256 inf READ-LINE ABORT" Error reading file" 1 linenum +! ; : open ( -- ) cr ." Reading " fn COUNT TYPE ." at line " linenum @ . 1 linenum ! fn COUNT R/O OPEN-FILE ABORT" Error opening source file" TO inf ; : close ( -- ) cr ." closing " fn COUNT TYPE inf CLOSE-FILE ABORT" Error closing file" ; : oopen ( -- ) ofn W/O CREATE-FILE ABORT" Error creating file" TO outf begin_header boiler \ begin boilerplate fn COUNT outln mid_header boiler \ title and end boilerplate fn COUNT header ; : HTML ( -- ) 0 TO screen-only 0 nufile ! \ force usage of file 1 linenum ! -1 active-color ! BL WORD COUNT fn PLACE open oopen \ open input and output files -1 DUP >R outf >R \ file nest uses stacks hstate=0 BEGIN BEGIN 0 special ! \ process line nufile @ \ nest a file? IF inf outf open oopen outf >R \ open new files 0 nufile ! THEN hfill WHILE inbuf SWAP hint REPEAT DROP close fn1 COUNT fn PLACE \ restore file name DUP -1 <> IF TO outf TO inf FALSE \ unnest files ELSE TRUE THEN UNTIL DROP BEGIN R> DUP -1 <> \ close all output files WHILE end_header boiler \ finish up HTML CLOSE-FILE ABORT" Error closing file" REPEAT DROP ; : q ( -- ) 1 TO screen-only \ single line test -1 WORD COUNT inbuf PLACE inbuf COUNT hint ; \ 0 [IF] is often used as a comment. If it is used as a comment, scan the file \ for a [THEN]. [THEN] must be on the next line or beyond. : upp ( an--) BOUNDS ?DO I C@ [CHAR] a > IF I C@ 32 - I C! THEN LOOP \ uppercase ; : bigif ( a len -- a len ) special @ 1 = IF genHTML commentary setcolor outh \ closefont \ finish up this line BEGIN hfill new-line WHILE >R inbuf EPAD R@ MOVE EPAD R@ upp \ uppercase for search EPAD R@ S" [THEN]" SEARCH IF DROP EPAD - inbuf OVER PAD PLACE \ before [THEN] is comment genHTML inbuf R> ROT /STRING EXIT ELSE 2DROP inbuf R> outh \ whole line is comment THEN REPEAT DROP -1 ABORT" Missing [THEN]" THEN ; : _local ( a len -- a len ) \ define locals to | genHTML S" MARKER L#O#C#A#L" EVALUATE \ start a list of locals BEGIN BEGIN 2DUP BL hparse 2DROP PAD COUNT BL SKIP DUP \ inputstring wordstring . WHILE S" |" COMPARE 0 PAD ! IF defval ELSE local_ws EXIT THEN REPEAT 2DROP 2DROP hfill 0= ABORT" Missing | in locals list" inbuf SWAP S" " outln AGAIN ; \ handle multi-line comments \ (( )) and comment: comment; are often used as multi-line comments in win32forth. \ )) or comment; must be on the next line or beyond. variable mlc-stop : (mlc) ( a -- ) mlc-stop ! commentary setcolor genHTML outh \ finish up this line BEGIN hfill new-line WHILE >R inbuf EPAD R@ MOVE EPAD R@ upp \ uppercase for search EPAD R@ mlc-stop @ count SEARCH IF DROP mlc-stop @ count nip + EPAD - inbuf OVER PAD PLACE \ before )) and )) is comment genHTML inbuf R> ROT /STRING EXIT ELSE 2DROP inbuf R> outh \ whole line is comment THEN REPEAT DROP ." Missing " mlc-stop @ count type ABORT ; : mlc ( -- ) \ handle a multi line comment CREATE BL WORD COUNT (,$) DOES> (mlc) ; \ ============================================================================= : _DEFINITIONS DEFINITIONS ; hyperlinks SET-CURRENT \ The following words are not in the ANS standard but are very common. : VOCABULARY defusr ; : DEFER defusr ; : INCLUDE hstate @ 0= IF incfile THEN ; : FLOAD hstate @ 0= IF incfile THEN ; : BINARY 2 BASE ! ; : OCTAL 8 BASE ! ; : 0 numeric spec=zero ; : 1 numeric ; : -1 numeric ; \ The following words are not in the ANS standard but are used in Win32Forth : ANEW skipw ; : { commentary genHTML skip} ; : CallBack: defunk ; : :M defunk ; : ;M resunk ; mlc (( )) mlc COMMENT: COMMENT; : L#O#C#A#L ; \ The rest is ANS Forth standard : \ commentary genHTML PAD PLACE PAD 0 ; ( NAME ACTION COLOR REFERENCE ) ( ------------------ ------ -------------- ----------- ) std ! NOOP core_ws 6.1.0010 std # NOOP core_ws 6.1.0030 std #> NOOP core_ws 6.1.0040 std #S NOOP core_ws 6.1.0050 std ' NOOP core_ws 6.1.0070 std ( skip) commentary 6.1.0080 std * NOOP core_ws 6.1.0090 std */ NOOP core_ws 6.1.0100 std */MOD NOOP core_ws 6.1.0110 std + NOOP core_ws 6.1.0120 std +! NOOP core_ws 6.1.0130 std +LOOP NOOP core_ws 6.1.0140 std , NOOP core_ws 6.1.0150 std - NOOP core_ws 6.1.0160 std . NOOP core_ws 6.1.0180 std ." skip" numeric 6.1.0190 std / NOOP core_ws 6.1.0230 std /MOD NOOP core_ws 6.1.0240 std 0< NOOP core_ws 6.1.0250 std 0= NOOP core_ws 6.1.0270 std 1+ NOOP core_ws 6.1.0290 std 1- NOOP core_ws 6.1.0300 std 2! NOOP core_ws 6.1.0310 std 2* NOOP core_ws 6.1.0320 std 2/ NOOP core_ws 6.1.0330 std 2@ NOOP core_ws 6.1.0350 std 2DROP NOOP core_ws 6.1.0370 std 2DUP NOOP core_ws 6.1.0380 std 2OVER NOOP core_ws 6.1.0400 std 2SWAP NOOP core_ws 6.1.0430 std : defunk core_ws 6.1.0450 std ; resunk core_ws 6.1.0460 std < NOOP core_ws 6.1.0480 std <# NOOP core_ws 6.1.0490 std = NOOP core_ws 6.1.0530 std > NOOP core_ws 6.1.0540 std >BODY NOOP core_ws 6.1.0550 std >IN NOOP core_ws 6.1.0560 std >NUMBER NOOP core_ws 6.1.0570 std >R NOOP core_ws 6.1.0580 std ?DUP NOOP core_ws 6.1.0630 std @ NOOP core_ws 6.1.0650 std ABORT NOOP core_ws 6.1.0670 std ABORT" skip" numeric 6.1.0680 std ABS NOOP core_ws 6.1.0690 std ACCEPT NOOP core_ws 6.1.0695 std ALIGN NOOP core_ws 6.1.0705 std ALIGNED NOOP core_ws 6.1.0706 std ALLOT NOOP core_ws 6.1.0710 std AND NOOP core_ws 6.1.0720 std BASE NOOP core_ws 6.1.0750 std BEGIN NOOP core_ws 6.1.0760 std BL NOOP numeric 6.1.0770 std C! NOOP core_ws 6.1.0850 std C, NOOP core_ws 6.1.0860 std C@ NOOP core_ws 6.1.0870 std CELL+ NOOP core_ws 6.1.0880 std CELLS NOOP core_ws 6.1.0890 std CHAR skipc core_ws 6.1.0895 std CHAR+ NOOP core_ws 6.1.0897 std CHARS NOOP core_ws 6.1.0898 std CONSTANT defdat core_ws 6.1.0950 std COUNT NOOP core_ws 6.1.0980 std CR NOOP core_ws 6.1.0990 std CREATE created core_ws 6.1.1000 std DECIMAL DECIMAL core_ws 6.1.1170 std DEPTH NOOP core_ws 6.1.1200 std DO NOOP core_ws 6.1.1240 std DOES> NOOP core_ws 6.1.1250 std DROP NOOP core_ws 6.1.1260 std DUP NOOP core_ws 6.1.1290 std ELSE NOOP core_ws 6.1.1310 std EMIT NOOP core_ws 6.1.1320 std ENVIRONMENT? NOOP core_ws 6.1.1345 std EVALUATE NOOP core_ws 6.1.1360 std EXECUTE NOOP core_ws 6.1.1370 std EXIT NOOP core_ws 6.1.1380 std FILL NOOP core_ws 6.1.1540 std FIND NOOP core_ws 6.1.1550 std FM/MOD NOOP core_ws 6.1.1561 std HERE NOOP core_ws 6.1.1650 std HOLD NOOP core_ws 6.1.1670 std I NOOP core_ws 6.1.1680 std IF NOOP core_ws 6.1.1700 std IMMEDIATE NOOP core_ws 6.1.1710 std INVERT NOOP core_ws 6.1.1720 std J NOOP core_ws 6.1.1730 std KEY NOOP core_ws 6.1.1750 std LEAVE NOOP core_ws 6.1.1760 std LITERAL NOOP core_ws 6.1.1780 std LOOP NOOP core_ws 6.1.1800 std LSHIFT NOOP core_ws 6.1.1805 std M* NOOP core_ws 6.1.1810 std MAX NOOP core_ws 6.1.1870 std MIN NOOP core_ws 6.1.1880 std MOD NOOP core_ws 6.1.1890 std MOVE NOOP core_ws 6.1.1900 std NEGATE NOOP core_ws 6.1.1910 std OR NOOP core_ws 6.1.1980 std OVER NOOP core_ws 6.1.1990 std POSTPONE NOOP core_ws 6.1.2033 std QUIT NOOP core_ws 6.1.2050 std R> NOOP core_ws 6.1.2060 std R@ NOOP core_ws 6.1.2070 std RECURSE NOOP core_ws 6.1.2120 std REPEAT NOOP core_ws 6.1.2140 std ROT NOOP core_ws 6.1.2160 std RSHIFT NOOP core_ws 6.1.2162 std S" skip" numeric 6.1.2165 std S>D NOOP core_ws 6.1.2170 std SIGN NOOP core_ws 6.1.2210 std SM/REM NOOP core_ws 6.1.2214 std SOURCE NOOP core_ws 6.1.2216 std SPACE NOOP core_ws 6.1.2220 std SPACES NOOP core_ws 6.1.2230 std STATE NOOP core_ws 6.1.2250 std SWAP NOOP core_ws 6.1.2260 std THEN NOOP core_ws 6.1.2270 std TYPE NOOP core_ws 6.1.2310 std U. NOOP core_ws 6.1.2320 std U< NOOP core_ws 6.1.2340 std UM* NOOP core_ws 6.1.2360 std UM/MOD NOOP core_ws 6.1.2370 std UNLOOP NOOP core_ws 6.1.2380 std UNTIL NOOP core_ws 6.1.2390 std VARIABLE defvar core_ws 6.1.2410 std WHILE NOOP core_ws 6.1.2430 std WORD NOOP core_ws 6.1.2450 std XOR NOOP core_ws 6.1.2490 std [ hstate=0 core_ws 6.1.2500 std ['] skipw numeric 6.1.2510 std [CHAR] skipw numeric 6.1.2520 std ] hstate=1 core_ws 6.1.2540 std #TIB NOOP core_ext_ws 6.2.0060 std .( skip) commentary 6.2.0200 std .R NOOP core_ext_ws 6.2.0210 std 0<> NOOP core_ext_ws 6.2.0260 std 0> NOOP core_ext_ws 6.2.0280 std 2>R NOOP core_ext_ws 6.2.0340 std 2R> NOOP core_ext_ws 6.2.0410 std 2R@ NOOP core_ext_ws 6.2.0415 std :NONAME NOOP core_ext_ws 6.2.0455 std <> NOOP core_ext_ws 6.2.0500 std ?DO NOOP core_ext_ws 6.2.0620 std AGAIN NOOP core_ext_ws 6.2.0700 std C" skip" numeric 6.2.0855 std CASE NOOP core_ext_ws 6.2.0873 std COMPILE, NOOP core_ext_ws 6.2.0945 std CONVERT NOOP core_ext_ws 6.2.0970 std ENDCASE NOOP core_ext_ws 6.2.1342 std ENDOF NOOP core_ext_ws 6.2.1343 std ERASE NOOP core_ext_ws 6.2.1350 std EXPECT NOOP core_ext_ws 6.2.1390 std FALSE spec=zero numeric 6.2.1485 std HEX HEX core_ext_ws 6.2.1660 std MARKER defusr core_ext_ws 6.2.1850 std NIP NOOP core_ext_ws 6.2.1930 std OF NOOP core_ext_ws 6.2.1950 std PAD NOOP core_ext_ws 6.2.2000 std PARSE NOOP core_ext_ws 6.2.2008 std PICK NOOP core_ext_ws 6.2.2030 std QUERY NOOP core_ext_ws 6.2.2040 std REFILL NOOP core_ext_ws 6.2.2125 std RESTORE-INPUT NOOP core_ext_ws 6.2.2148 std ROLL NOOP core_ext_ws 6.2.2150 std SAVE-INPUT NOOP core_ext_ws 6.2.2182 std SOURCE-ID NOOP core_ext_ws 6.2.2218 std SPAN NOOP core_ext_ws 6.2.2240 std TIB NOOP core_ext_ws 6.2.2290 std TO NOOP core_ext_ws 6.2.2295 std TRUE NOOP numeric 6.2.2298 std TUCK NOOP core_ext_ws 6.2.2300 std U.R NOOP core_ext_ws 6.2.2330 std U> NOOP core_ext_ws 6.2.2350 std UNUSED NOOP core_ext_ws 6.2.2395 std VALUE defval core_ext_ws 6.2.2405 std WITHIN NOOP core_ext_ws 6.2.2440 std [COMPILE] NOOP core_ext_ws 6.2.2530 std BLK NOOP block_ws 7.6.1.0790 std BLOCK NOOP block_ws 7.6.1.0800 std BUFFER NOOP block_ws 7.6.1.0820 std FLUSH NOOP block_ws 7.6.1.1559 std LOAD NOOP block_ws 7.6.1.1790 std SAVE-BUFFERS NOOP block_ws 7.6.1.2180 std UPDATE NOOP block_ws 7.6.1.2400 std EMPTY-BUFFERS NOOP block_ws 7.6.2.1330 std LIST NOOP block_ws 7.6.2.1770 std SCR NOOP block_ws 7.6.2.2190 std THRU NOOP block_ws 7.6.2.2280 std 2CONSTANT defdat double_ws 8.6.1.0360 std 2LITERAL NOOP double_ws 8.6.1.0390 std 2VARIABLE defvar double_ws 8.6.1.0440 std D+ NOOP double_ws 8.6.1.1040 std D- NOOP double_ws 8.6.1.1050 std D. NOOP double_ws 8.6.1.1060 std D.R NOOP double_ws 8.6.1.1070 std D0< NOOP double_ws 8.6.1.1075 std D0= NOOP double_ws 8.6.1.1080 std D2* NOOP double_ws 8.6.1.1090 std D2/ NOOP double_ws 8.6.1.1100 std D< NOOP double_ws 8.6.1.1110 std D= NOOP double_ws 8.6.1.1120 std D>S NOOP double_ws 8.6.1.1140 std DABS NOOP double_ws 8.6.1.1160 std DMAX NOOP double_ws 8.6.1.1210 std DMIN NOOP double_ws 8.6.1.1220 std DNEGATE NOOP double_ws 8.6.1.1230 std M*/ NOOP double_ws 8.6.1.1820 std M+ NOOP double_ws 8.6.1.1830 std 2ROT NOOP double_ws 8.6.2.0420 std DU< NOOP double_ws 8.6.2.1270 std CATCH NOOP exception_ws 9.6.1.0875 std THROW NOOP exception_ws 9.6.1.2275 std AT-XY NOOP facilities_ws 10.6.1.0742 std KEY? NOOP facilities_ws 10.6.1.1755 std PAGE NOOP facilities_ws 10.6.1.2005 std EKEY NOOP facilities_ws 10.6.2.1305 std EKEYFLOAT NOOP fp_ws 12.6.1.0558 std D>F NOOP fp_ws 12.6.1.1130 std F! NOOP fp_ws 12.6.1.1400 std F* NOOP fp_ws 12.6.1.1410 std F+ NOOP fp_ws 12.6.1.1420 std F- NOOP fp_ws 12.6.1.1425 std F/ NOOP fp_ws 12.6.1.1430 std F0< NOOP fp_ws 12.6.1.1440 std F0= NOOP fp_ws 12.6.1.1450 std F< NOOP fp_ws 12.6.1.1460 std F>D NOOP fp_ws 12.6.1.1460 std F@ NOOP fp_ws 12.6.1.1472 std FALIGN NOOP fp_ws 12.6.1.1479 std FALIGNED NOOP fp_ws 12.6.1.1483 std FCONSTANT defdat fp_ws 12.6.1.1492 std FDEPTH NOOP fp_ws 12.6.1.1497 std FDROP NOOP fp_ws 12.6.1.1500 std FDUP NOOP fp_ws 12.6.1.1510 std FLITERAL NOOP fp_ws 12.6.1.1552 std FLOAT+ NOOP fp_ws 12.6.1.1555 std FLOATS NOOP fp_ws 12.6.1.1556 std FLOOR NOOP fp_ws 12.6.1.1558 std FMAX NOOP fp_ws 12.6.1.1562 std FMIN NOOP fp_ws 12.6.1.1565 std FNEGATE NOOP fp_ws 12.6.1.1567 std FOVER NOOP fp_ws 12.6.1.1600 std FROT NOOP fp_ws 12.6.1.1610 std FROUND NOOP fp_ws 12.6.1.1612 std FSWAP NOOP fp_ws 12.6.1.1620 std FVARIABLE defvar fp_ws 12.6.1.1630 std REPRESENT NOOP fp_ws 12.6.1.2143 std DF! NOOP fp_ws 12.6.2.1203 std DF@ NOOP fp_ws 12.6.2.1204 std DFALIGN NOOP fp_ws 12.6.2.1205 std DFALIGNED NOOP fp_ws 12.6.2.1207 std DFLOAT+ NOOP fp_ws 12.6.2.1208 std DFLOATS NOOP fp_ws 12.6.2.1209 std F** NOOP fp_ws 12.6.2.1415 std F. NOOP fp_ws 12.6.2.1427 std FABS NOOP fp_ws 12.6.2.1474 std FACOS NOOP fp_ws 12.6.2.1476 std FACOSH NOOP fp_ws 12.6.2.1477 std FALOG NOOP fp_ws 12.6.2.1484 std FASIN NOOP fp_ws 12.6.2.1486 std FASINH NOOP fp_ws 12.6.2.1487 std FATAN NOOP fp_ws 12.6.2.1488 std FATAN2 NOOP fp_ws 12.6.2.1489 std FATANH NOOP fp_ws 12.6.2.1491 std FCOS NOOP fp_ws 12.6.2.1493 std FCOSH NOOP fp_ws 12.6.2.1494 std FE. NOOP fp_ws 12.6.2.1513 std FEXP NOOP fp_ws 12.6.2.1515 std FEXPM1 NOOP fp_ws 12.6.2.1516 std FLN NOOP fp_ws 12.6.2.1553 std FLNP1 NOOP fp_ws 12.6.2.1554 std FLOG NOOP fp_ws 12.6.2.1557 std FS. NOOP fp_ws 12.6.2.1613 std FSIN NOOP fp_ws 12.6.2.1614 std FSINCOS NOOP fp_ws 12.6.2.1616 std FSINH NOOP fp_ws 12.6.2.1617 std FSQRT NOOP fp_ws 12.6.2.1618 std FTAN NOOP fp_ws 12.6.2.1625 std FTANH NOOP fp_ws 12.6.2.1626 std F~ NOOP fp_ws 12.6.2.1640 std PRECISION NOOP fp_ws 12.6.2.2035 std SET-PRECISION NOOP fp_ws 12.6.2.2200 std SF! NOOP fp_ws 12.6.2.2202 std SF@ NOOP fp_ws 12.6.2.2203 std SFALIGN NOOP fp_ws 12.6.2.2204 std SFALIGNED NOOP fp_ws 12.6.2.2206 std SFLOAT+ NOOP fp_ws 12.6.2.2207 std SFLOATS NOOP fp_ws 12.6.2.2208 std (LOCAL) NOOP local_ws 13.6.1.0086 std LOCALS| _local local_ws 13.6.2.1795 std ALLOCATE NOOP malloc_ws 14.6.1.0707 std FREE NOOP malloc_ws 14.6.1.1605 std RESIZE NOOP malloc_ws 14.6.1.2145 std .S NOOP progtools_ws 15.6.1.0220 std ? NOOP progtools_ws 15.6.1.0600 std DUMP NOOP progtools_ws 15.6.1.1280 std SEE NOOP progtools_ws 15.6.1.2194 std WORDS NOOP progtools_ws 15.6.1.2465 std ;CODE resunk progtools_ws 15.6.2.0470 std AHEAD NOOP progtools_ws 15.6.2.0702 std ASSEMBLER NOOP progtools_ws 15.6.2.0740 std BYE NOOP progtools_ws 15.6.2.0830 std CODE defusr progtools_ws 15.6.2.0930 std CS-PICK NOOP progtools_ws 15.6.2.1015 std CS-ROLL NOOP progtools_ws 15.6.2.1020 std EDITOR NOOP progtools_ws 15.6.2.1300 std FORGET NOOP progtools_ws 15.6.2.1580 std [ELSE] NOOP progtools_ws 15.6.2.2531 std [IF] bigif progtools_ws 15.6.2.2532 std [THEN] NOOP progtools_ws 15.6.2.2533 std DEFINITIONS NOOP searchord_ws 16.6.1.1180 std FORTH-WORDLIST NOOP searchord_ws 16.6.1.1595 std GET-CURRENT NOOP searchord_ws 16.6.1.1643 std GET-ORDER NOOP searchord_ws 16.6.1.1647 std SEARCH-WORDLIST NOOP searchord_ws 16.6.1.2192 std SET-CURRENT NOOP searchord_ws 16.6.1.2195 std SET-ORDER NOOP searchord_ws 16.6.1.2197 std WORDLIST NOOP searchord_ws 16.6.1.2460 std ALSO NOOP searchord_ws 16.6.2.0715 std FORTH NOOP searchord_ws 16.6.2.1590 std ONLY NOOP searchord_ws 16.6.2.1965 std ORDER NOOP searchord_ws 16.6.2.1985 std PREVIOUS NOOP searchord_ws 16.6.2.2037 std -TRAILING NOOP string_ws 17.6.1.0170 std /STRING NOOP string_ws 17.6.1.0245 std BLANK NOOP string_ws 17.6.1.0780 std CMOVE NOOP string_ws 17.6.1.0910 std CMOVE> NOOP string_ws 17.6.1.0920 std COMPARE NOOP string_ws 17.6.1.0935 std SEARCH NOOP string_ws 17.6.1.2191 std SLITERAL NOOP string_ws 17.6.1.2212 _DEFINITIONS \ Revision history \ 0. 1st release to guinea pigs via comp.lang.forth \ 1. Added multi-line comment 0 [IF]. Colored CHAR outside definitions. \ 2. (EJB) Added missing definitions for common but nonstandard words \ and cleaned up to account for case sensitivity. \ 3. (EJB) Fixed up to create conforming XHTML 1.0 Strict \ 2a. Added support for LOCALS|. Changed to use blanks for whitespace. \ 3b. December 30th to January 1st, 2004 - Dirk Busch (dbu) \ - Added DPANS-PATH to configure the path to the dpans-files \ - Added multi-line comments (( )) and comment: comment; as used in Win32Forth \ - HTML crashed on files with long lines (more than 80 char's) - fixed \ - Added some more words for better Win32Forth support \ - renamed COL to FCOL since COL is used in Win32Forth \ - renamed ,$ to (,$) since ,$ is used in Win32Forth \ - renamed HEADER to HEADER_OUT since HEADER is used in Win32Forth \ - changed FONTCOLOR to set the new color only if it's not the actual color \ - Added LINK-TO-ORG-FILE to configure the output of a hyperlink to the original File