% This is DVITYPE.CHGCMS in text format, as of jun 25, 1986
%  (change file for IBM CMS PASCAL/VS, created by B.SCHULZE, SFB72)
%
%
%line numbers correspond to version 2.8 of DVITYPE (of may  5, 1986)
%     (more or less)
%
%line 105
%
%module 2
@x othercases, terminal I/O
@d random_reading==true {should we skip around in the file?}
@d othercases == others: {default for cases not listed explicitly}
@d endcases == @+end {follows the default case in an extended |case| statement}
@y
@d random_reading==false {should we skip around in the file?}
@d othercases == otherwise {default for cases not listed explicitly}
@d endcases == @+end {follows the default case in an extended |case| statement}
@d term_in == INTERM {terminal input}
@d term_out == OUTTERM {terminal output}
@z
%
%line 126
%
%module 3
@x open terminal
  begin print_ln(banner);@/
@y
  begin
  @= termin@>(term_in);
  @= termout@>(term_out); {prepare the terminal for output}
  print_ln(banner);@/
@z
%
%line 149
%
%module 5
@x font files
@!name_length=50; {a file name shouldn't be longer than this}
@y
@!name_length=20; {a file name shouldn't be longer than this}
@!dvi_max_size=4096;    {should fit all installations}
@!tfm_max_size=4096;
@z
%
%line 215
%
%module 9
@x text files
@!text_file=packed file of text_char;
@y
@!text_file=text;
@z
%
%line 838
%
%module 21
@x packed
@!eight_bits=0..255; {unsigned one-byte quantity}
@!byte_file=packed file of eight_bits; {files that contain binary data}
@y
@!eight_bits=packed 0..255; {unsigned one-byte quantity}
@z
%
%line 847
%
%module xx
@x
@!dvi_file:byte_file; {the stuff we are \.{DVI}typing}
@!tfm_file:byte_file; {a font metric file}
@y
@!dvi_file:text;
@!tfm_file:text;
@!dvi_rec:string(dvi_max_size);
@!tfm_rec:string(tfm_max_size);
@!tfm_ptr,tfm_rec_size:integer; {current position (last read) and}
@!dvi_ptr,dvi_rec_size:integer;       {length of current record}
@!eof_dvi_file:boolean;
@!eof_tfm_file:boolean;
@z
%
%line 867
%
%module 23
@x open dvi file
begin reset(dvi_file);
@y
begin reset(dvi_file);
read_ln(dvi_file,dvi_rec);
dvi_ptr:=0;
dvi_rec_size:= @= LENGTH @> (dvi_rec);
if dvi_rec_size=0 then eof_dvi_file:=true
                  else eof_dvi_file:=false;
@z
%
%line 872
%
%module 23
@x open tfm file
begin reset(tfm_file,cur_name);
@y
begin reset(tfm_file,'NAME='||trim(str(cur_name)));
read_ln(tfm_file,tfm_rec);
tfm_ptr:=0;
tfm_rec_size:= @= LENGTH @> (tfm_rec);
if tfm_rec_size=0 then eof_tfm_file:=true
                  else eof_tfm_file:=false;
@z
%
%line 891
%
%module xx
@x
begin read(tfm_file,b0); read(tfm_file,b1);
read(tfm_file,b2); read(tfm_file,b3);
end;
@y
begin
{length of current record should be 0 mod 4}
if tfm_ptr + 4 >= tfm_rec_size then
 begin
 read_ln(tfm_file,tfm_rec);
 tfm_ptr:=0;
 end;
b0:=ord(tfm_rec(.tfm_ptr+1.));
b1:=ord(tfm_rec(.tfm_ptr+2.));
b2:=ord(tfm_rec(.tfm_ptr+3.));
b3:=ord(tfm_rec(.tfm_ptr+4.));
tfm_ptr:=tfm_ptr+4;
eof_tfm_file:=eof(tfm_file) & (tfm_ptr >= tfm_rec_size);
end;

procedure read_dvi(var b:eight_bits);
begin
if dvi_ptr >= dvi_rec_size then
 begin
 read_ln(dvi_file,dvi_rec);
 dvi_ptr:=0;
 end;
b:=ord(dvi_rec(.dvi_ptr+1.));
incr(dvi_ptr);
eof_dvi_file:=eof(dvi_file) & (dvi_ptr >= dvi_rec_size);
end;
@z
%
%line 904
%
%module 27
@x
begin if eof(dvi_file) then get_byte:=0
else  begin read(dvi_file,b); incr(cur_loc); get_byte:=b;
@y
begin if eof_dvi_file then get_byte:=0
else  begin read_dvi(b); incr(cur_loc); get_byte:=b;
@z
%
%line 911
%
%module xx
@x
begin read(dvi_file,b); incr(cur_loc);
@y
begin read_dvi(b); incr(cur_loc);
@z
%
%line 917
%
%module xx
@x
begin read(dvi_file,a); read(dvi_file,b);
@y
begin read_dvi(a); read_dvi(b);
@z
%
%line 924
%
%module xx
@x
begin read(dvi_file,a); read(dvi_file,b);
@y
begin read_dvi(a); read_dvi(b);
@z
%
%line 932
%
%module xx
@x
begin read(dvi_file,a); read(dvi_file,b); read(dvi_file,c);
@y
begin read_dvi(a); read_dvi(b); read_dvi(c);
@z
%
%line 939
%
%module xx
@x
begin read(dvi_file,a); read(dvi_file,b); read(dvi_file,c);
@y
begin read_dvi(a); read_dvi(b); read_dvi(c);
@z
%
%line 947
%
%module xx
@x
begin read(dvi_file,a); read(dvi_file,b); read(dvi_file,c); read(dvi_file,d);
@y
begin read_dvi(a); read_dvi(b); read_dvi(c); read_dvi(d);
@z
%
%line 970
%
%module 28
@x random
begin set_pos(dvi_file,-1); dvi_length:=cur_pos(dvi_file);
end;
@#
procedure move_to_byte(n:integer);
begin set_pos(dvi_file,n); cur_loc:=n;
end;
@y
begin
dvi_length := 0
end;
@#
procedure move_to_byte(n:integer);
begin
cur_loc := 0
end;
@z
%
%line 1107
%
%module 46
@x
  begin if eof(tfm_file) then goto 9997;
@y
  begin if eof_tfm_file then goto 9997;
@z
%
%line 1304
%
%module 46
@x break
@d update_terminal == break(term_out) {empty the terminal output buffer}
@y
@d update_terminal ==write_ln(term_out) {empty the terminal output buffer}
@z
%
%line 1311
%
%module 47
@x read from terminal
@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<terminal_line_length)and not eoln(term_in) do
  begin buffer[k]:=xord[term_in^]; incr(k); get(term_in);
  end;
buffer[k]:=" ";
end;
@y
@p procedure input_ln; {inputs a line from the terminal}
var k:0..terminal_line_length;
    il: string(terminal_line_length);
begin update_terminal;
read_ln(term_in,il);
k:=0;
while (k<length(il)) do
  begin
     buffer(.k.):=xord(.il(.k+1.).);  incr(k);
  end;
buffer[k]:=" ";
end;
@z
%
%line 1354
%
%module 50
@x open terminal
begin rewrite(term_out); {prepare the terminal for output}
@y
begin
@z
%
%line 1547
%
%module xx
@x
if eof(tfm_file) then
@y
if eof_tfm_file then
@z
%
%line 1602
%
%module 66
@x font names
@<Move font name into the |cur_name| string@>=
for k:=1 to name_length do cur_name[k]:=' ';
if p=0 then
  begin for k:=1 to default_directory_name_length do
    cur_name[k]:=default_directory[k];
  r:=default_directory_name_length;
  end
else r:=0;
for k:=font_name[nf] to font_name[nf+1]-1 do
  begin incr(r);
  if r+4>name_length then
    abort('DVItype capacity exceeded (max font name length=',
      name_length:1,')!');
@.DVItype capacity exceeded...@>
  if (names[k]>="a")and(names[k]<="z") then
      cur_name[r]:=xchr[names[k]-@'40]
  else cur_name[r]:=xchr[names[k]];
  end;
cur_name[r+1]:='.'; cur_name[r+2]:='T'; cur_name[r+3]:='F'; cur_name[r+4]:='M'
@y
@<Move font name into the |cur_name| string@>=
for k:=1 to name_length do cur_name[k]:=' ';
r:=0;
for k:=font_name[nf] to font_name[nf+1]-1 do
  begin incr(r);
  if r+6>name_length then
    abort('DVItype capacity exceeded (max font name length=',
      name_length:1,')!');
@.DVItype capacity exceeded...@>
  if (names[k]>="a")and(names[k]<="z") then
      cur_name[r]:=xchr[names[k]-@'40]
  else cur_name[r]:=xchr[names[k]];
  end;
cur_name[r+1]:='.'; cur_name[r+2]:='T'; cur_name[r+3]:='F';
cur_name[r+4]:='M'; cur_name[r+5]:='.'; cur_name[r+6]:='*';
@z
%
%line 1642
%
%module 69
@x we have no brackets
    begin print('[');
    for k:=1 to text_ptr do print(xchr[text_buf[k]]);
    print_ln(']');
@y
    begin print('(');
    for k:=1 to text_ptr do print(xchr[text_buf[k]]);
    print_ln(')');
@z
%
%line 1813
%
%module xx
@x
if eof(dvi_file) then bad_dvi('the file ended prematurely');
@y
if eof_dvi_file then bad_dvi('the file ended prematurely');
@z
%
%line 2122
%
%module xx
@x
  begin if eof(dvi_file) then bad_dvi('the file ended prematurely');
@y
  begin if eof_dvi_file then bad_dvi('the file ended prematurely');
@z
%
%line 2301
%
%module xx
@x
while (m=223)and not eof(dvi_file) do m:=get_byte;
if not eof(dvi_file) then bad_dvi('signature in byte ',cur_loc-1:1,
@y
while (m=223)and not eof_dvi_file do m:=get_byte;
if not eof_dvi_file then bad_dvi('signature in byte ',cur_loc-1:1,
@z