--- gforth/ds2texi.fs 1994/10/24 19:15:55 1.1 +++ gforth/ds2texi.fs 1995/09/15 14:52:49 1.6 @@ -7,6 +7,13 @@ \ The glossary entries are generated from data present in the wordlist \ `documentation'. Each word resides there under its own name. +script? [IF] +warnings off +include search-order.fs +include struct.fs +include debugging.fs +[THEN] + wordlist constant documentation struct @@ -17,6 +24,37 @@ struct 2 cells: field doc-description end-struct doc-entry +create description-buffer 4096 chars allot + +: get-description ( -- addr u ) + description-buffer + begin + refill + while + source nip + while + source swap >r 2dup r> -rot cmove + chars + + #lf over c! char+ + repeat then + description-buffer tuck - ; + +: make-doc ( -- ) + get-current documentation set-current + create + last @ name>string 2, \ name + [char] ) parse save-string 2, \ stack-effect + bl parse-word save-string 2, \ wordset + bl parse-word dup \ pronounciation + if + save-string + else + 2drop last @ name>string + endif + 2, + get-description save-string 2, + set-current ; + : emittexi ( c -- ) >r s" @{}" r@ scan 0<> @@ -34,11 +72,12 @@ end-struct doc-entry drop ; : print-short ( doc-entry -- ) - >r ." @format" + >r ." @format" cr ." @code{" r@ doc-name 2@ typetexi ." } " ." @i{" r@ doc-stack-effect 2@ type ." } " r@ doc-wordset 2@ type ." ``" - r@ doc-pronounciation 2@ type ." ''@end format" cr + r@ doc-pronounciation 2@ type ." ''" cr ." @end format" cr + ." @findex " r@ doc-name 2@ typetexi cr rdrop ; : print-doc ( doc-entry -- ) @@ -92,3 +131,11 @@ create docline doclinelength chars allot docline swap process-line repeat drop rdrop ; + +script? [IF] +include prims2x.fs +s" primitives.b" ' register-doc process-file +require doc.fd +require crossdoc.fd +s" gforth.ds" r/o open-file throw ds2texi bye +[THEN]