% This is a change file for WEAVE-GPC, Wolfgang Helbig, Nov. 2007 % Apr. 2008 get file names from command line % Jul. 2008 pass the exit code [0] About WEAVE-GPC @x \pageno=\contentspagenumber \advance\pageno by 1 @y \pageno=\contentspagenumber \advance\pageno by 1 \input webmac-gpc \def\name{\tt WEAVE} \let\maybe=\iffalse % print changed modules only. \N0\*. About \namegpc.\fi This is an adaption of Donald~E. Knuth's \.{WEAVE}, version 4.4 from December 2002, to Unix. \namegpc\ 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 \namegpc\ with the wrong number of command line arguments, it will tell you and exit. To support shell scripting, \namegpc\ 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-GPC' @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 @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 @= @!term_out:text_file; {the terminal as an output file} @y @z [21] terminal output, output is rewritten implicitely in ISO Pascal @x @= 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 @x begin reset(web_file); reset(change_file); @y begin reset(web_file, param_str(1)); reset(change_file, param_str(2)); @z [26] get file names from command line @x rewrite(tex_file); @y if param_count <> 3 then fatal_error('Usage: ', param_str(0), ' web-file change-file TeX-file'); rewrite(tex_file, param_str(3)); @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 [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