% 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
@<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
@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