This is a change file of GFtype for FPC, Wolfgang Helbig, Oct. 2020 To be used with the Free Pascal Compiler [0] About type-FPC @x \pageno=\contentspagenumber \advance\pageno by 1 @y \pageno=\contentspagenumber \advance\pageno by 1 \input webmac-fpc % \let\maybe=\iftrue % uncomment to print changed modules only. \def\name{\tt GFtype} \N0\*. About \namefpc.\fi This is an adaption of Donald~E. Knuth's \.{GFtype}, to Unix. \namefpc\ is based on Free~Pascal. \namefpc\ expects the name of the input file (\.{.gf}) as the first and the name of the output file (\.{.typ} as the second parameter on the command line. \hint Comments and questions are welcome! \bigskip \address @z [1] Change the banner line @x @d banner=='This is GFtype, Version 3.1' {printed when the program starts} @y @d banner=='This is GFtype-FPC, 3rd ed.' {printed when the program starts} @z [2] othercases @x @d othercases == others: {default for cases not listed explicitly} @y @d othercases == @+ else {default for cases not listed explicitly} @z [3] filenames from commandline @x @d print(#)==write(#) @d print_ln(#)==write_ln(#) @d print_nl==write_ln @p program GF_type(@!gf_file,@!output); @y @d print(#)==write(typ_file, #) @d print_ln(#)==write_ln(typ_file, #) @d print_nl==write_ln(typ_file) @p @{$MODE@,ISO@} @/ @{$Q+@} @/ @{$R+@} @/ @{$I+@} @# program GF_type(@!input, @!output); @z [9] text file. @x @!text_file=packed file of text_char; @y @!text_file=text; @z [21] declare typ file @x @!gf_file:byte_file; {the stuff we are \.{GF}typing} @y @!gf_file:byte_file; {the stuff we are \.{GF}typing} @!typ_file: text; { output file } @z [22] open gf file @x begin reset(gf_file); @y begin assign(gf_file, param_str(1)); @# @{$I-@} @# ioresult; reset(gf_file); if ioresult <> 0 then begin write_ln('Could not open gf file: ', param_str(1)); halt(1); end; @# @{$I+@} @# @z [27] standard io files @x and |term_out| for terminal output. @^system dependencies@> @= @!buffer:array[0..terminal_line_length] of ASCII_code; @!term_in:text_file; {the terminal, considered as an input file} @!term_out:text_file; {the terminal, considered as an output file} @y and |term_out| for terminal output. @^system dependencies@> @d term_in == input @d term_out == output @= @!buffer:array[0..terminal_line_length] of ASCII_code; @z [28] no break known to fpc @x @d update_terminal == break(term_out) {empty the terminal output buffer} @y @d update_terminal == {empty the terminal output buffer} @z [29] input_ln @x @p procedure input_ln; {inputs a line from the terminal} var k:0..terminal_line_length; begin update_terminal; reset(term_in); if eoln(term_in) then read_ln(term_in); k:=0; while (k 2 then begin write_ln('Usage: ', param_str(0), ' gf_file typ_file'); halt(1); end; assign(typ_file, param_str(2)); @# @{$I-@} @# ioresult; rewrite(typ_file); if ioresult <> 0 then begin write_ln('Could not open type file: ', param_str(2)); halt(1); end; @# @{$I+@} @# initialize; {get all variables initialized} @z [66] terminate last line in typ file @x final_end:end. @y print_nl; close(typ_file); final_end:end. @z