summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/gftodvi.ch
diff options
context:
space:
mode:
authorDenis Bitouzé <dbitouze@wanadoo.fr>2021-02-25 18:23:07 +0000
committerDenis Bitouzé <dbitouze@wanadoo.fr>2021-02-25 18:23:07 +0000
commitc6101f91d071883b48b1b4b51e5eba0f36d9a78d (patch)
tree1bf7f5a881d7a4f5c5bf59d0b2821943dd822372 /Build/source/texk/web2c/gftodvi.ch
parent07ee7222e389b0777456b427a55c22d0e6ffd267 (diff)
French translation for tlmgr updated
git-svn-id: svn://tug.org/texlive/trunk@57912 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/gftodvi.ch')
-rw-r--r--Build/source/texk/web2c/gftodvi.ch717
1 files changed, 0 insertions, 717 deletions
diff --git a/Build/source/texk/web2c/gftodvi.ch b/Build/source/texk/web2c/gftodvi.ch
deleted file mode 100644
index 1c473a863a6..00000000000
--- a/Build/source/texk/web2c/gftodvi.ch
+++ /dev/null
@@ -1,717 +0,0 @@
-% gftodvi.ch for C compilation with web2c.
-%
-% (More recent changes in the ChangeLog)
-% 01/20/90 Karl New gftodvi.web (same version number).
-% 12/02/89 Karl Berry To version 3.
-% Revision 1.7.1.5 86/02/01 15:29:58 richards
-% Released again for MF 1.0 package
-% Revision 1.7.1.4 86/02/01 15:06:50 richards
-% Added: <nl> at end of successful run
-% Revision 1.7.1.3 86/01/27 16:39:48 richards
-% Fixed: syntax error in previous edits
-% Revision 1.7.1.2 86/01/27 15:55:58 richards
-% Added: dvi_buf_type declaration and redefined dvi_buf[] in
-% terms of it, so we can use it as a parameter to b_write_buf()
-% Revision 1.7.1.1 86/01/27 15:39:10 richards
-% First edit to use new binary I/O routines
-% Revision 1.7 85/10/21 21:55:50 richards
-% Released for GFtoDVI 1.7
-% Revision 1.3.7.1 85/10/18 22:59:01 richards
-% Updated for GFtoDVI Version 1.7 (Distributed w/ MF84 Version 0.9999)
-% Revision 1.3.5.1 85/10/09 17:02:35 richards
-% First draft to run at 1.5 level
-% Revision 1.3 85/05/27 21:15:30 richards
-% Updated for GFtoDVI Version 1.3 (Distributed w/ MF84 Version 0.91)
-% Revision 1.2 85/04/25 19:33:30 richards
-% Updated to GFtoDVI Version 1.2 (Distributed w/ MF84 Version 0.81)
-% Revision 1.1 85/03/03 21:47:17 richards
-% Updated for GF utilities distributed with MF Version 0.77
-% Revision 1.0 84/12/16 22:38:22 richards
-% Updated for GFtoDVI Version 1.0 (New GF file format)
-% Revision 0.6 84/12/05 13:32:01 richards
-% Updated for GFtoDVI Version 0.6; merged in changes from sdcarl!rusty
-% Note: still has BUGFIX in section 199 to keep GFtoDVI from trying
-% to use non-existent characters in a gray font
-% Revision 0.3 84/11/17 23:51:56 richards
-% Base version for GFtoDVI Version 0.3
-
-@x [0] WEAVE: print changes only.
-\pageno=\contentspagenumber \advance\pageno by 1
-@y
-\pageno=\contentspagenumber \advance\pageno by 1
-\let\maybe=\iffalse
-\def\title{GF$\,$\lowercase{to}$\,$DVI changes for C}
-@z
-
-@x [1] Define my_name
-@d banner=='This is GFtoDVI, Version 3.0' {printed when the program starts}
-@y
-@d my_name=='gftodvi'
-@d banner=='This is GFtoDVI, Version 3.0' {printed when the program starts}
-@z
-
-@x [3] Redirect output to term_out.
-@d print(#)==write(#)
-@d print_ln(#)==write_ln(#)
-@d print_nl(#)==@+begin write_ln; write(#);@+end
-@y
-@d print(#)==write(stdout, #)
-@d print_ln(#)==write_ln(stdout, #)
-@d print_nl(#)==@+begin write_ln(stdout); write(stdout, #);@+end
-@z
-
-@x [still 3] Toss labels.
-label @<Labels in the outer block@>@/
-const @<Constants in the outer block@>@/
-type @<Types in the outer block@>@/
-var @<Globals in the outer block@>@/
-procedure initialize; {this procedure gets things started properly}
- var @!i,@!j,@!m,@!n:integer; {loop indices for initializations}
- begin print_ln(banner);@/
-@y
-const @<Constants in the outer block@>@/
-type @<Types in the outer block@>@/
-var @<Globals in the outer block@>@/
-@<Define |parse_arguments|@>
-procedure initialize; {this procedure gets things started properly}
- var @!i,@!j,@!m,@!n:integer; {loop indices for initializations}
- begin
- kpse_set_program_name (argv[0], my_name);
- kpse_init_prog ('GFTODVI', 0, nil, nil);
- parse_arguments;
- if verbose then begin
- print (banner);
- print_ln (version_string);
- end;
-@z
-
-% [4] Remove the final_end label.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
-@ If the program has to stop prematurely, it goes to the
-`|final_end|'.
-
-@d final_end=9999 {label for the end of it all}
-
-@<Labels...@>=final_end;
-@y
-@ This module deleted, since it only defined the label |final_end|.
-@z
-
-@x [8] Add newline to end of abort() message, and exit abnormally.
-so a procedure called |jump_out| has been introduced. This procedure, which
-simply transfers control to the label |final_end| at the end of the program,
-contains the only non-local |goto| statement in \.{GFtoDVI}.
-@^system dependencies@>
-
-@d abort(#)==@+begin print(' ',#); jump_out;@+end
-@y
-so a procedure called |jump_out| has been introduced.
-@^system dependencies@>
-
-@d abort(#)==@+begin write_ln (stderr, #); jump_out;@+end
-@z
-
-% [8] Remove nonlocal goto.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
-@p procedure jump_out;
-begin goto final_end;
-end;
-@y
-@p procedure jump_out;
-begin uexit(1);
-end;
-@z
-
-% [11] The text_char type is used as an array index into xord. The
-% default type `char' produces signed integers, which are bad array
-% indices in C.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
-@d text_char == char {the data type of characters in text files}
-@y
-@d text_char == ASCII_code {the data type of characters in text files}
-@z
-
-@x [14] Allow any input character.
-for i:=0 to @'37 do xchr[i]:='?';
-for i:=@'177 to @'377 do xchr[i]:='?';
-@y
-for i:=1 to @'37 do xchr[i]:=chr(i);
-for i:=@'177 to @'377 do xchr[i]:=chr(i);
-@z
-
-
-@x [15] Change `update_terminal' to `flush', `term_in' is stdin.
-Since the terminal is being used for both input and output, some systems
-need a special routine to make sure that the user can see a prompt message
-before waiting for input based on that message. (Otherwise the message
-may just be sitting in a hidden buffer somewhere, and the user will have
-no idea what the program is waiting for.) We shall call a system-dependent
-subroutine |update_terminal| in order to avoid this problem.
-
-@d update_terminal == break(output) {empty the terminal output buffer}
-
-@<Glob...@>=
-@!buffer:array[0..terminal_line_length] of 0..255;
-@!term_in:text_file; {the terminal, considered as an input file}
-@y
-Since the terminal is being used for both input and output, some systems
-need a special routine to make sure that the user can see a prompt message
-before waiting for input based on that message. (Otherwise the message
-may just be sitting in a hidden buffer somewhere, and the user will have
-no idea what the program is waiting for.) We shall call a system-dependent
-subroutine |update_terminal| in order to avoid this problem.
-@^system dependencies@>
-
-@d update_terminal == fflush (stdout) {empty the terminal output buffer}
-@d term_in == stdin {standard input}
-
-@<Glob...@>=
-@!buffer:array[0..terminal_line_length] of 0..255;
-@z
-
-@x [17] Change term_in^, etc.
-@p procedure input_ln; {inputs a line from the terminal}
-begin update_terminal; reset(term_in);
-if eoln(term_in) then read_ln(term_in);
-line_length:=0;
-while (line_length<terminal_line_length)and not eoln(term_in) do
- begin buffer[line_length]:=xord[term_in^]; incr(line_length); get(term_in);
- end;
-end;
-@y
-@p procedure input_ln; {inputs a line from the terminal}
-begin update_terminal;
-if eoln(term_in) then read_ln(term_in);
-line_length:=0;
-while (line_length<terminal_line_length)and not eoln(term_in) do
- begin buffer[line_length]:=xord[getc(term_in)]; incr(line_length);
- end;
-end;
-@z
-
-@x [47] Open files based on paths.
-@p procedure open_gf_file; {prepares to read packed bytes in |gf_file|}
-begin reset(gf_file,name_of_file);
-cur_loc:=0;
-end;
-@#
-procedure open_tfm_file; {prepares to read packed bytes in |tfm_file|}
-begin reset(tfm_file,name_of_file);
-end;
-@#
-procedure open_dvi_file; {prepares to write packed bytes in |dvi_file|}
-begin rewrite(dvi_file,name_of_file);
-end;
-@y
-In C, we do path searching based on the user's environment or the
-default path. We also read the command line and print the banner here
-(since we don't want to print the banner if the command line is
-unreasonable).
-
-@p procedure open_gf_file; {prepares to read packed bytes in |gf_file|}
-begin
- gf_file := kpse_open_file (stringcast(name_of_file), kpse_gf_format);
- cur_loc := 0;
-end;
-@#
-procedure open_tfm_file; {prepares to read packed bytes in |tfm_file|}
-begin
- tfm_file := kpse_open_file (stringcast(name_of_file), kpse_tfm_format);
-end;
-@#
-procedure open_dvi_file; {prepares to write packed bytes in |dvi_file|}
-begin rewritebin(dvi_file,stringcast(name_of_file));
-end;
-@z
-
-% [48] Don't force a maximum length for name_of_file. See comments in
-% tex.ch for why we change the element type to text_char.
-@x
-@!name_of_file:packed array[1..file_name_size] of char; {external file name}
-@y
-@!name_of_file:^text_char;
-@z
-
-% [52] The memory_word structure is too hard to translate via web2c, so
-% we use a hand-coded include file. Also, b0 (et al.) is used both as a
-% field and as a regular variable. web2c puts field names in the global
-% symbol table, so this loses. Rather than fix web2c (hard), we change
-% the name of the field (ugly, but easy).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
-@!four_quarters = packed record@;@/
- @!b0:quarterword;
- @!b1:quarterword;
- @!b2:quarterword;
- @!b3:quarterword;
- end;
-@!memory_word = record@;@/
- case boolean of
- true: (@!sc:scaled);
- false: (@!qqqq:four_quarters);
- end;
-@y
-@!four_quarters = packed record@;@/
- @!B0:quarterword;
- @!B1:quarterword;
- @!B2:quarterword;
- @!B3:quarterword;
- end;
-@\@/@=#include "gftodmem.h";@>@\ {note the |;| so |web2c| will translate
- types that come after this}
-@z
-
-% [55] fix references to .b0
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
-@d char_width_end(#)==#.b0].sc
-@d char_width(#)==font_info[width_base[#]+char_width_end
-@d char_exists(#)==(#.b0>min_quarterword)
-@d char_italic_end(#)==(qo(#.b2)) div 4].sc
-@d char_italic(#)==font_info[italic_base[#]+char_italic_end
-@d height_depth(#)==qo(#.b1)
-@d char_height_end(#)==(#) div 16].sc
-@d char_height(#)==font_info[height_base[#]+char_height_end
-@d char_depth_end(#)==# mod 16].sc
-@d char_depth(#)==font_info[depth_base[#]+char_depth_end
-@d char_tag(#)==((qo(#.b2)) mod 4)
-@d skip_byte(#)==qo(#.b0)
-@d next_char(#)==#.b1
-@d op_byte(#)==qo(#.b2)
-@d rem_byte(#)==#.b3
-@y
-@d char_width_end(#)==#.B0].sc
-@d char_width(#)==font_info[width_base[#]+char_width_end
-@d char_exists(#)==(#.B0>min_quarterword)
-@d char_italic_end(#)==(qo(#.B2)) div 4].sc
-@d char_italic(#)==font_info[italic_base[#]+char_italic_end
-@d height_depth(#)==qo(#.B1)
-@d char_height_end(#)==(#) div 16].sc
-@d char_height(#)==font_info[height_base[#]+char_height_end
-@d char_depth_end(#)==# mod 16].sc
-@d char_depth(#)==font_info[depth_base[#]+char_depth_end
-@d char_tag(#)==((qo(#.B2)) mod 4)
-@d skip_byte(#)==qo(#.B0)
-@d next_char(#)==#.B1
-@d op_byte(#)==qo(#.B2)
-@d rem_byte(#)==#.B3
-@z
-
-% [62] More .b?'s.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
- qw.b0:=qi(b0); qw.b1:=qi(b1); qw.b2:=qi(b2); qw.b3:=qi(b3);
-@y
- qw.B0:=qi(b0); qw.B1:=qi(b1); qw.B2:=qi(b2); qw.B3:=qi(b3);
-@z
-
-@x [78] Change default extension to `.2602gf'.
-l:=3; init_str3(".")("g")("f")(gf_ext);@/
-@y
-l:=7; init_str7(".")("2")("6")("0")("2")("g")("f")(gf_ext);@/
-@z
-
-@x [81] Diagnose impossible cases.
-end; {there are no other cases}
-@y
-othercases abort('internal error');
-endcases;
-@z
-
-@x [85] Diagnose impossible cases.
-end; {there are no other cases}
-@y
-othercases abort('internal error');
-endcases;
-@z
-
-@x [88] Change home_font_area to null_string.
-l:=9; init_str9("T")("e")("X")("f")("o")("n")("t")("s")(":")(home_font_area);@/
-@y
-l:=0; init_str0(home_font_area);@/
-@z
-
-@x [90] Change more_name to understand Unix file name syntax.
-else begin if (c=">")or(c=":") then
- begin area_delimiter:=pool_ptr; ext_delimiter:=0;
- end
- else if (c=".")and(ext_delimiter=0) then ext_delimiter:=pool_ptr;
-@y
-else begin if c="/" then
- begin area_delimiter:=pool_ptr; ext_delimiter:=0;
- end
- else if c="." then ext_delimiter:=pool_ptr;
-@z
-
-@x [92] pack_file_name must pack for C conventions.
-@d append_to_name(#)==begin c:=#; incr(k);
- if k<=file_name_size then name_of_file[k]:=xchr[c];
-@y
-@d append_to_name(#)==begin c:=#; incr(k);
- name_of_file[k]:=xchr[c];
-@z
-
-@x
-@!name_length:0..file_name_size; {number of characters packed}
-begin k:=0;
-for j:=str_start[a] to str_start[a+1]-1 do append_to_name(str_pool[j]);
-for j:=str_start[n] to str_start[n+1]-1 do append_to_name(str_pool[j]);
-for j:=str_start[e] to str_start[e+1]-1 do append_to_name(str_pool[j]);
-if k<=file_name_size then name_length:=k@+else name_length:=file_name_size;
-for k:=name_length+1 to file_name_size do name_of_file[k]:=' ';
-@y
-@!name_length: integer;
-begin
- name_length := length (a) + length (n) + length (e);
- name_of_file := xmalloc_array (ASCII_code, name_length);
- k := -1; {C strings start at position zero.}
-for j:=str_start[a] to str_start[a+1]-1 do append_to_name(str_pool[j]);
-for j:=str_start[n] to str_start[n+1]-1 do append_to_name(str_pool[j]);
-for j:=str_start[e] to str_start[e+1]-1 do append_to_name(str_pool[j]);
- name_of_file[name_length] := 0;
-@z
-
-@x [94] Change start_gf to get file name from the command line.
-@ The |start_gf| procedure prompts the user for the name of the generic
-font file to be input. It opens the file, making sure that some input is
-present; then it opens the output file.
-
-Although this routine is system-independent, it should probably be
-modified to take the file name from the command line (without an initial
-prompt), on systems that permit such things.
-
-@p procedure start_gf;
-label found,done;
-begin loop@+begin print_nl('GF file name: '); input_ln;
-@.GF file name@>
- buf_ptr:=0; buffer[line_length]:="?";
- while buffer[buf_ptr]=" " do incr(buf_ptr);
- if buf_ptr<line_length then
- begin @<Scan the file name in the buffer@>;
- if cur_ext=null_string then cur_ext:=gf_ext;
- pack_file_name(cur_name,cur_area,cur_ext); open_gf_file;
- if not eof(gf_file) then goto found;
- print_nl('Oops... I can''t find file '); print(name_of_file);
-@.Oops...@>
-@.I can't find...@>
- end;
- end;
-found:job_name:=cur_name; pack_file_name(job_name,null_string,dvi_ext);
-open_dvi_file;
-end;
-@y
-@ The |start_gf| procedure obtains the name of the generic font file to
-be input from the command line. It opens the file, making sure that
-some input is present; then it opens the output file.
-
-@p procedure start_gf;
-label done;
-var arg_buffer: c_string;
- arg_buf_ptr: integer;
-begin
- arg_buffer := cmdline (optind);
- arg_buf_ptr := 0;
- while (line_length < terminal_line_length)
- and (arg_buffer[arg_buf_ptr] <> 0) do begin
- buffer[line_length] := xord[ucharcast(arg_buffer[arg_buf_ptr])];
- incr(line_length);
- incr(arg_buf_ptr);
- end;
-
- buf_ptr:=0; buffer[line_length]:="?";
- while buffer[buf_ptr]=" " do incr(buf_ptr);
- if buf_ptr < line_length
- then begin
- @<Scan the file name in the buffer@>;
- if cur_ext = null_string then cur_ext:=gf_ext;
- pack_file_name (cur_name, cur_area, cur_ext);
- open_gf_file;
- end;
- job_name := cur_name;
- pack_file_name(job_name, null_string, dvi_ext);
- open_dvi_file;
-end;
-@z
-
-@x [107] `write_dvi' is now an external C routine.
-@p procedure write_dvi(@!a,@!b:dvi_index);
-var k:dvi_index;
-begin for k:=a to b do write(dvi_file,dvi_buf[k]);
-end;
-@y
-In C, we use a macro to call |fwrite| or |write| directly, writing all
-the bytes in one shot. Much better even than writing four
-bytes at a time.
-@z
-
-@x [108] dvi_swap: check dvi file size
-begin if dvi_limit=dvi_buf_size then
-@y
-begin if dvi_ptr>(@"7FFFFFFF-dvi_offset) then
- abort('dvi length exceeds "7FFFFFFF');
-@.dvi length exceeds...@>
-if dvi_limit=dvi_buf_size then
-@z
-
-@x [109] empty the last bytes: check dvi file size
-if dvi_ptr>0 then write_dvi(0,dvi_ptr-1)
-@y
-if dvi_ptr>(@"7FFFFFFF-dvi_offset) then
- abort('dvi length exceeds "7FFFFFFF');
-@.dvi length exceeds...@>
-if dvi_ptr>0 then write_dvi(0,dvi_ptr-1)
-@z
-
-% [111] More .b?'s.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
-dvi_out(qo(font_check[f].b0));
-dvi_out(qo(font_check[f].b1));
-dvi_out(qo(font_check[f].b2));
-dvi_out(qo(font_check[f].b3));@/
-@y
-dvi_out(qo(font_check[f].B0));
-dvi_out(qo(font_check[f].B1));
-dvi_out(qo(font_check[f].B2));
-dvi_out(qo(font_check[f].B3));@/
-@z
-
-% [115] Don't go to final_end, just exit; this is the normal exit from
-% the program, so we want to end with a newline if we are being verbose.
-@x
-goto final_end;
-@y
-if verbose then print_ln (' ');
-uexit (0);
-@z
-
-% [118] And still more .b?'s.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
-dummy_info.b0:=qi(0); dummy_info.b1:=qi(0); dummy_info.b2:=qi(0);
-dummy_info.b3:=qi(0);
-@y
-dummy_info.B0:=qi(0); dummy_info.B1:=qi(0); dummy_info.B2:=qi(0);
-dummy_info.B3:=qi(0);
-@z
-
-% [138] write_ln formatting.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
-begin if abs(r-slant_reported)>0.001 then
- begin print_nl('Sorry, I can''t make diagonal rules of slant ',r:10:5,'!');
-@y
-begin if fabs(r-slant_reported)>0.001 then
- begin print_nl('Sorry, I can''t make diagonal rules of slant ');
- print_real(r,10,5); print('!');
-@z
-
-% [164] No progress report unless verbose.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-@x
-print('[',total_pages:1); update_terminal; {print a progress report}
-@y
-if verbose
-then begin
- print('[',total_pages:1);
- update_terminal; {print a progress report}
-end;
-@z
-
-@x
-print(']'); update_terminal;
-@y
-if verbose
-then begin
- print(']');
- if total_pages mod 13 = 0
- then print_ln (' ')
- else print (' ');
- update_terminal;
-end;
-@z
-
-% [170] Change offset for overflow labels. The defaults adds about 2.1
-% inches to the right edge of the diagram, which puts it off the paper
-% for even moderately large fonts. Instead, we make it a command-line
-% option.
-@x
-over_col:=over_col+delta_x+10000000;
-@y
-over_col := over_col + delta_x + overflow_label_offset;
-@z
-
-% [215] Some broken compilers cannot handle 165 labels for the same
-% branch of a switch.
-@x
-@<Read and process...@>=
-loop @+begin continue: case cur_gf of
- sixty_four_cases(0): k:=cur_gf;
- paint1:k:=get_byte;
- paint2:k:=get_two_bytes;
- paint3:k:=get_three_bytes;
- eoc:goto done1;
- skip0:end_with(blank_rows:=0; do_skip);
- skip1:end_with(blank_rows:=get_byte; do_skip);
- skip2:end_with(blank_rows:=get_two_bytes; do_skip);
- skip3:end_with(blank_rows:=get_three_bytes; do_skip);
- sixty_four_cases(new_row_0),sixty_four_cases(new_row_0+64),
- thirty_two_cases(new_row_0+128),five_cases(new_row_0+160):
- end_with(z:=cur_gf-new_row_0;paint_black:=true);
- xxx1,xxx2,xxx3,xxx4,yyy,no_op:begin skip_nop; goto continue;
- end;
- othercases bad_gf('Improper opcode')
- endcases;@/
-@y
-@<Read and process...@>=
-loop @+begin continue:
- if (cur_gf>=new_row_0)and(cur_gf<=new_row_0+164) then
- end_with(z:=cur_gf-new_row_0;paint_black:=true)
- else case cur_gf of
- sixty_four_cases(0): k:=cur_gf;
- paint1:k:=get_byte;
- paint2:k:=get_two_bytes;
- paint3:k:=get_three_bytes;
- eoc:goto done1;
- skip0:end_with(blank_rows:=0; do_skip);
- skip1:end_with(blank_rows:=get_byte; do_skip);
- skip2:end_with(blank_rows:=get_two_bytes; do_skip);
- skip3:end_with(blank_rows:=get_three_bytes; do_skip);
- xxx1,xxx2,xxx3,xxx4,yyy,no_op:begin skip_nop; goto continue;
- end;
- othercases bad_gf('Improper opcode')
- endcases;@/
-@z
-
-@x [still 219] If verbose, output a newline at the end.
-final_end:end.
-@y
- if verbose and (total_pages mod 13 <> 0) then print_ln (' ');
-end.
-@z
-
-@x [222] System-dependent changes.
-This section should be replaced, if necessary, by changes to the program
-that are necessary to make \.{GFtoDVI} work at a particular installation.
-It is usually best to design your change file so that all changes to
-previous sections preserve the section numbering; then everybody's version
-will be consistent with the printed program. More extensive changes,
-which introduce new sections, can be inserted here; then only the index
-itself will get a new section number.
-@^system dependencies@>
-@y
-Parse a Unix-style command line.
-
-@d argument_is (#) == (strcmp (long_options[option_index].name, #) = 0)
-
-@<Define |parse_arguments|@> =
-procedure parse_arguments;
-const n_options = 4; {Pascal won't count array lengths for us.}
-var @!long_options: array[0..n_options] of getopt_struct;
- @!getopt_return_val: integer;
- @!option_index: c_int_type;
- @!current_option: 0..n_options;
-begin
- @<Initialize the option variables@>;
- @<Define the option table@>;
- repeat
- getopt_return_val := getopt_long_only (argc, argv, '', long_options,
- address_of (option_index));
- if getopt_return_val = -1 then begin
- do_nothing; {End of arguments; we exit the loop below.}
-
- end else if getopt_return_val = "?" then begin
- usage (my_name);
-
- end else if argument_is ('help') then begin
- usage_help (GFTODVI_HELP, nil);
-
- end else if argument_is ('version') then begin
- print_version_and_exit (banner, nil, 'D.E. Knuth', nil);
-
- end else if argument_is ('overflow-label-offset') then begin
- offset_in_points := atof (optarg);
- overflow_label_offset := round (offset_in_points * 65536);
-
- end; {Else it was a flag; |getopt| has already done the assignment.}
- until getopt_return_val = -1;
-
- {Now |optind| is the index of first non-option on the command line.
- We must have one remaining argument.}
- if (optind + 1 <> argc) then begin
- write_ln (stderr, my_name, ': Need exactly one file argument.');
- usage (my_name);
- end;
-end;
-
-@ Here are the options we allow. The first is one of the standard GNU options.
-@.-help@>
-
-@<Define the option...@> =
-current_option := 0;
-long_options[current_option].name := 'help';
-long_options[current_option].has_arg := 0;
-long_options[current_option].flag := 0;
-long_options[current_option].val := 0;
-incr (current_option);
-
-@ Another of the standard options.
-@.-version@>
-
-@<Define the option...@> =
-long_options[current_option].name := 'version';
-long_options[current_option].has_arg := 0;
-long_options[current_option].flag := 0;
-long_options[current_option].val := 0;
-incr (current_option);
-
-@ Print progress information?
-
-@<Define the option...@> =
-long_options[current_option].name := 'verbose';
-long_options[current_option].has_arg := 0;
-long_options[current_option].flag := address_of (verbose);
-long_options[current_option].val := 1;
-incr (current_option);
-
-@ @<Glob...@> =
-@!verbose: c_int_type;
-
-@ @<Initialize the option...@> =
-verbose := false;
-
-@ Change how far from the right edge of the character boxes we print
-overflow labels.
-@.-overflow-label-offset@>
-
-@<Define the option...@> =
-long_options[current_option].name := 'overflow-label-offset';
-long_options[current_option].has_arg := 1;
-long_options[current_option].flag := 0;
-long_options[current_option].val := 0;
-incr (current_option);
-
-@ It's easier on the user to specify the value in \TeX\ points, but we
-want to store it in scaled points.
-
-@<Glob...@> =
-@!overflow_label_offset: integer; {in scaled points}
-@!offset_in_points: real;
-
-@ The default offset is ten million scaled points---a little more than
-two inches.
-
-@<Initialize the option...@> =
-overflow_label_offset := 10000000;
-
-@ An element with all zeros always ends the list.
-
-@<Define the option...@> =
-long_options[current_option].name := 0;
-long_options[current_option].has_arg := 0;
-long_options[current_option].flag := 0;
-long_options[current_option].val := 0;
-@z