diff options
Diffstat (limited to 'systems/unix/tex-fpc/web/weave.ch')
-rw-r--r-- | systems/unix/tex-fpc/web/weave.ch | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/systems/unix/tex-fpc/web/weave.ch b/systems/unix/tex-fpc/web/weave.ch new file mode 100644 index 0000000000..bcb0a7e7d5 --- /dev/null +++ b/systems/unix/tex-fpc/web/weave.ch @@ -0,0 +1,185 @@ +% This is a change file for WEAVE-FPC, Wolfgang Helbig, Nov. 2007 +% Apr. 2008 get file names from command line +% Jul. 2008 pass the exit code +% Jul. 2016 change from gpc to fpc +[0] About WEAVE-FPC +@x +\pageno=\contentspagenumber \advance\pageno by 1 +@y +\pageno=\contentspagenumber \advance\pageno by 1 +\input webmac-fpc +\def\name{\tt WEAVE} + +\let\maybe=\iffalse % print changed modules only. + +\N0\*. About \namefpc.\fi +This is an adaption of Donald~E. Knuth's \.{WEAVE}, version 4.4 +from December 2002, to Unix. \namefpc\ is based on GNU~Pascal, +version 2.1. + +This program expects three file names on the command line: A +web~file (\.{.web}), a change~file (\.{.ch}), and a \TeX~file +(\.{.tex}). If you call \namefpc\ with the wrong number of command +line arguments, it will tell you and exit. +To support shell scripting, \namefpc\ sets the exit code to its +`\\{history}'---zero means ok, one means a warning was issued, two +an error occurred and three means \.{WEAVE} ended prematurely. + +\hint + +The input file \.{weave.tex} will exceed \TeX's memory. To fix, +change the constant value \.{MEMMAX} to 32000 in \.{tex.p}, +recompile and run it on \.{weave.tex}. Put \.{\\tracingstats1} +in \.{weave.tex}. The log file then shows the memory \TeX\ needed +to compile its input. +\medskip +Comments and questions are welcome! +\bigskip +\address +@z + +[1] Change the banner line +@x +@d banner=='This is WEAVE, Version 4.4' +@y +@d banner=='This is WEAVE-FPC' +@z + +[2] terminal output and input +@x +program WEAVE(@!web_file,@!change_file,@!tex_file); +@y +program WEAVE(@!input,@!output); +@z + +[3] shift left to turn debugging on, shift right to turn it off + @x + @d debug==@{ {change this to `$\\{debug}\equiv\null$' when debugging} + @d gubed==@t@>@} {change this to `$\\{gubed}\equiv\null$' when debugging} + @y + @d debug== + @d gubed== + @z + +[3] turn stats on +@x +@d stat==@{ {change this to `$\\{stat}\equiv\null$' + when gathering usage statistics} +@d tats==@t@>@} {change this to `$\\{tats}\equiv\null$' + when gathering usage statistics} +@y +@d stat== +@d tats== +@z + +[4] compiler directives +@x +@{@&$C-,A+,D-@} {no range check, catch arithmetic overflow, no debug overhead} +@!debug @{@&$C+,D+@}@+ gubed {but turn everything on when debugging} +@y +@{@&$M@&O@&D@&E I@&S@&O@} +@z + +[7] default case branch +@x +@d othercases == others: {default for cases not listed explicitly} +@y +@d othercases == @+else {default for cases not listed explicitly} +@z + +[12] the type of text_files is text in ISO Pascal +@x +@!text_file=packed file of text_char; +@y +@!text_file=text; +@z + +[20] terminal input/output +@x +@d print(#)==write(term_out,#) {`|print|' means write on the terminal} +@y +@d term_in == input +@d term_out == output +@d print(#)==write(term_out,#) {`|print|' means write on the terminal} +@z + +[20] terminal output, implicitely defined in ISO Pasal +@x +@<Globals...@>= +@!term_out:text_file; {the terminal as an output file} +@y +@z + +[21] terminal output, output is rewritten implicitely in ISO Pascal +@x +@<Set init...@>= +rewrite(term_out,'TTY:'); {send |term_out| output to the terminal} +@y +@z + +[22] terminal output, don't need update in ISO Pascal +@x +@d update_terminal == break(term_out) {empty the terminal output buffer} +@y +@d update_terminal == do_nothing +@z + +[24] get file names from command line arguments +@x +begin reset(web_file); reset(change_file); +@y +begin +assign(web_file, param_str(1)); +assign(change_file, param_str(2)); +reset(web_file); reset(change_file); +@z + +[26] get file names from command line +@x +rewrite(tex_file); +@y +if param_count <> 3 then begin + fatal_error('Usage: weave web-file change-file TeX-file'); + end; +assign(tex_file, param_str(3)); +rewrite(tex_file); +@z + +[258] Don't define Pascal's standard text files +@x +@!term_in:text_file; {the user's terminal as an input file} +@y +@z + +[259] terminal input, implicitely done in ISO Pascal +@x +reset(term_in,'TTY:','/I'); {open |term_in| as the terminal, don't do a |get|} +@y +@z + +[261] define fpc_close +@x +@^split procedures@> +@y +@^split procedures@> + +@d fpc_close == c@&l@&o@&s@&e +@z + +[261] close tex_file +@x +@t\4\4@>{here files should be closed if the operating system requires it} +@y +fpc_close(tex_file); +@z + +[263] put eol after last terminal out line +@x +fatal_message: print_nl('(That was a fatal error, my friend.)'); +end {there are no other cases} +@y +fatal_message: print_nl('(That was a fatal error, my friend.)'); +end; {there are no other cases} +new_line; +halt(history) {pass the history as exit code to the operating system} +@z |