From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- systems/unix/tex-gpc/tangle.ch | 167 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 systems/unix/tex-gpc/tangle.ch (limited to 'systems/unix/tex-gpc/tangle.ch') diff --git a/systems/unix/tex-gpc/tangle.ch b/systems/unix/tex-gpc/tangle.ch new file mode 100644 index 0000000000..0a459f9157 --- /dev/null +++ b/systems/unix/tex-gpc/tangle.ch @@ -0,0 +1,167 @@ +% This is a change file for TANGLE-GPC, Wolfgang Helbig, Nov. 2007 +% Apr. 2008 take file names from command line +% Jul. 2008 pass the exit code + +[0] About TANGLE-GPC +@x +\pageno=\contentspagenumber \advance\pageno by 1 +@y +\pageno=\contentspagenumber \advance\pageno by 1 +\input webmac-gpc +\def\name{{\tt TANGLE}} + +\let\maybe=\iffalse % print changed modules only. + +\N0\*. About \namegpc.\fi +This is an adaption of Donald~E. Knuth's \.{TANGLE}, version 4.5 +from December 2002, to Unix. \namegpc\ is based on GNU~Pascal, version +2.1. + +This program expects four file names on the command line: Two input +files, the web and change file, followed by two output files, the +Pascal and string pool file. If you call \namegpc\ with the wrong number +of command line arguments, it will tell you and exit. + +To support shell scripting, this version sets the exit code to its +`\\{history}'---zero means ok, one means a warning was issued, two +an error occurred and three means \.{TANGLE} ended prematurely. + +\hint + +Comments and questions are welcome! +\bigskip +\address +@z + +[1] Change the banner line +@x +@d banner=='This is TANGLE, Version 4.5' +@y +@d banner=='This is TANGLE-GPC' +@z + +[2] terminal output and input +@x +program TANGLE(@!web_file,@!change_file,@!Pascal_file,@!pool); +@y +program TANGLE(@!input,@!output); +@z + + [3] turn debugging on + @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 output +@x +@d print(#)==write(term_out,#) {`|print|' means write on the terminal} +@y +@d term_out == output +@d term_in == input +@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 arguments +@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 arguments +@x +rewrite(Pascal_file); rewrite(pool); +@y +if param_count <> 4 then begin + fatal_error('Usage: tangle web_file change_file pascal_file pool_file'); + end; +rewrite(Pascal_file, param_str(3)); rewrite(pool, param_str(4)); +@z + +[38] increase token capacity to tangle mf. +@x +@d zz=3 {we multiply the token capacity by approximately this amount} +@y +@d zz=4 {we need 4 not 3 to tangle mf} +@z + +[179] +@x +@!term_in:text_file; {the user's terminal as an input file} +@y +@z + +[180] terminal input, implicitely done by Pascal +@x +reset(term_in,'TTY:','/I'); {open |term_in| as the terminal, don't do a |get|} +@y +@z + +[187] 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 -- cgit v1.2.3