28-Jan-87 05:11:16-PST,16195;000000000000
Return-Path: <CHAA006%vaxb.rhbnc.ac.uk@Cs.Ucl.AC.UK>
Received: from Cs.Ucl.AC.UK by SU-SCORE.ARPA with TCP; Wed 28 Jan 87 05:06:51-PST
Received: from vaxb.rhbnc.ac.uk by mv1.Cs.Ucl.AC.UK   via Janet with NIFTP
           id aa03008; 28 Jan 87 12:48 WET
Date:		28-JAN-1987 12:48:16
From:		CHAA006%vaxb.rhbnc.ac.uk@Cs.Ucl.AC.UK
To:		TEXHAX <@Cs.Ucl.AC.UK:TEXHAX@score.stanford.edu>
Subject:	Pretex

In the light of experience, I have modified the source of Pretex (the
DEC-169 to TeX conversion utility).  The original version produced
TeX composite sequences for all TeX active characters (e.g. {, }. \);
the new version passes through unchanged all characters in the range
ASCII 0..126 with the exception of double-quote, less- and greater-than,
and solidus, for which four characters composite sequences are still
produced.  ** Phil

Philip Taylor (Royal Holloway & Bedford New College;  University of London; U.K)

Bitnet/NetNorth/Earn:	chaa006@vaxa.rhbnc.ac.uk (or) chaa006%rhbnc.vaxa@ac.uk
       (or)	    :	chaa006@vaxb.rhbnc.ac.uk (or) chaa006%rhbnc.vaxb@ac.uk

       Arpa	    :	chaa006%vaxa.rhbnc.ac.uk@ucl-cs.arpa
       (or) 	    :	chaa006%vaxb.rhbnc.ac.uk@ucl-cs.arpa

================================== PRETEX.PAS ==================================

program pretex (input, output, dec169in, texout);

{ This program will read DEC-169 files, and produce TeX files as output }

const max = 80; debug = true;

type string = varying [max] of char; word = 0 .. 65535;

type dec169 = (nul, soh, stx, etx, eot, enq, ack, bel, bs, ht, lf, vt, ff, cr,
	       so,  si, dle, dc1, dc2, dc3, dc4, nak, syn, etb, can, em, sub,
	       esc, fs,  gs, rs, us, space, exclamation, double_quote, hash,
	       dollar,  per_cent, ampersand, acute, open_round, close_round, asterisk,
	       plus, comma,  minus, period, slash, digit_0, digit_1, digit_2,
	       digit_3, digit_4,  digit_5, digit_6, digit_7, digit_8, digit_9,
	       colon, semi_colon,  less_than, equals, greater_than,
	       interrogative, commercial_at,  upper_case_A, upper_case_B,
	       upper_case_C, upper_case_D,  upper_case_E, upper_case_F,
	       upper_case_G, upper_case_H,  upper_case_I, upper_case_J,
	       upper_case_K, upper_case_L,  upper_case_M, upper_case_N,
	       upper_case_O, upper_case_P,  upper_case_Q, upper_case_R,
	       upper_case_S, upper_case_T,  upper_case_U, upper_case_V,
	       upper_case_W, upper_case_X,  upper_case_Y, upper_case_Z,
	       open_square, back_slash, close_square,  caret, underscore,
	       grave, lower_case_a, lower_case_b, lower_case_c,  lower_case_d,
	       lower_case_e, lower_case_f, lower_case_g,  lower_case_h,
	       lower_case_i, lower_case_j, lower_case_k,  lower_case_l,
	       lower_case_m, lower_case_n, lower_case_o,  lower_case_p,
	       lower_case_q, lower_case_r, lower_case_s,  lower_case_t,
	       lower_case_u, lower_case_v, lower_case_w,  lower_case_x,
	       lower_case_y, lower_case_z, open_brace, solidus,  close_brace,
	       tilde, del, k128, k129, k130, k131, ind, nel, ssa,  esa, hts,
	       htu, vts, pld, plu, ri, ss2, ss3, dcs, pu1, pu2, sts,  cch, mw,
	       spa, epa, k152, k153, k154, csi, st, osc, pm, apc, k160, 
	       inverted_exclamation, cent, pound, k164, yen, k166, section, 
	       currency, copyright, lower_case_a_underscored, open_guillemets, 
	       k172, k173, k174, k175, degree, plus_minus, super_2, super_3,
	       k180,  mu, paragraph, centred_period, k184, super_1, 
	       lower_case_o_underscored, close_guillemets, quarter,
	       half,  k190, inverted_interrogative, upper_case_A_grave, 
	       upper_case_A_acute, upper_case_A_caret, upper_case_A_tilde, 
	       upper_case_A_trema, upper_case_A_ring, upper_case_AE_digraph, 
	       upper_case_C_cedilla, upper_case_E_grave, upper_case_E_acute, 
	       upper_case_E_caret, upper_case_E_trema, upper_case_I_grave, 
	       upper_case_I_acute, upper_case_I_caret, upper_case_I_trema,
	       k208,  upper_case_N_tilde, upper_case_O_grave,
	       upper_case_O_acute,  upper_case_O_caret, upper_case_O_tilde,
	       upper_case_O_trema,  upper_case_OE_digraph,
	       upper_case_O_slashed, upper_case_U_grave,  upper_case_U_acute,
	       upper_case_U_caret, upper_case_U_trema,  upper_case_Y_trema,
	       k222, beta, lower_case_a_grave,  lower_case_a_acute,
	       lower_case_a_caret, lower_case_a_tilde,  lower_case_a_trema,
	       lower_case_a_ring, lower_case_ae_digraph,  lower_case_c_cedilla,
	       lower_case_e_grave, lower_case_e_acute,  lower_case_e_caret,
	       lower_case_e_trema, lower_case_i_grave,  lower_case_i_acute,
	       lower_case_i_caret, lower_case_i_trema, k240, 
	       lower_case_n_tilde, lower_case_o_grave, lower_case_o_acute, 
	       lower_case_o_caret, lower_case_o_tilde, lower_case_o_trema, 
	       lower_case_oe_digraph, lower_case_o_slashed, lower_case_u_grave,
	       lower_case_u_acute, lower_case_u_caret, lower_case_u_trema, 
	       lower_case_y_trema, k254, k255); 

var dec169in, texout: text; ch: char; i: dec169; chr169: array [char] of dec169;

[external (lib$signal)] procedure report (%immed status: integer); external;

[external (cli$get_value)] function get_value 
	  (p_name: [class_s] packed array [$l1 .. $u1: integer] of char;
	   var p_value: [class_s] packed array [$l2 .. $u2: integer] of char;
	   var p_length: [word] word): integer; external;

procedure call (status: integer);
	  begin
	  if not odd(status) then report (status)
	  end;

procedure open_files (var source, sink: text);
	  var source_file_name: string; sf_length: integer;
	  begin
 	  call (get_value ('SOURCE', source_file_name.body, 
				source_file_name.length));
	  open (source, source_file_name, history := readonly, 
			default := 'PRETEX.TXT');
	  reset (source);
	  open (sink, '.TEX', history := new, 
			default := source_file_name, record_length := 511);
	  rewrite (sink)
	  end;

begin
for i := nul to k255 do chr169 [chr (ord (i))] := i;
open_files (dec169in, texout);
while not eof (dec169in)
do    begin
      while not eoln (dec169in)
      do    begin
      	    read (dec169in, ch); i := chr169 [ch];
	    ch := chr (ord (ch) mod ord (k128));
	    case i of
		 nul:				write(texout,ch);
		 soh:				write(texout,ch);
		 stx:				write(texout,ch);
		 etx:				write(texout,ch);
		 eot:				write(texout,ch);
		 enq:				write(texout,ch);
		 ack:				write(texout,ch);
		 bel:				write(texout,ch);
		 bs:				write(texout,ch);
		 ht:				write(texout,ch);
		 lf:				write(texout,ch);
		 vt:				write(texout,ch);
		 ff:				write(texout,ch);
		 cr:				write(texout,ch);
		 so:				write(texout,ch);
		 si:				write(texout,ch);
		 dle:				write(texout,ch);
		 dc1:				write(texout,ch);
		 dc2:				write(texout,ch);
		 dc3:				write(texout,ch);
		 dc4:				write(texout,ch);
		 nak:				write(texout,ch);
		 syn:				write(texout,ch);
		 etb:				write(texout,ch);
		 can:				write(texout,ch);
		 em:				write(texout,ch);
		 sub:				write(texout,ch);
		 esc:				write(texout,ch);
		 fs:				write(texout,ch);
		 gs:				write(texout,ch);
		 rs:				write(texout,ch);
		 us:				write(texout,ch);
		 space:				write(texout,ch);
		 exclamation:			write(texout,ch);
		 double_quote:			write(texout,'{$\prime\prime$}');
		 hash:				write(texout,ch);
		 dollar:			write(texout,ch);
		 per_cent:			write(texout,ch);
		 ampersand:			write(texout,ch);
		 acute:				write(texout,ch);
		 open_round:			write(texout,ch);
		 close_round:			write(texout,ch);
		 asterisk:			write(texout,ch);
		 plus:				write(texout,ch);
		 comma:				write(texout,ch);
		 minus:				write(texout,ch);
		 period:			write(texout,ch);
		 slash:				write(texout,ch);
	 	 digit_0:			write(texout,ch);
		 digit_1:			write(texout,ch);
		 digit_2:			write(texout,ch);
		 digit_3:			write(texout,ch);
		 digit_4:			write(texout,ch);
		 digit_5:			write(texout,ch);
		 digit_6:			write(texout,ch);
		 digit_7:			write(texout,ch);
		 digit_8:			write(texout,ch);
		 digit_9:			write(texout,ch);
		 colon:				write(texout,ch);
		 semi_colon:			write(texout,ch);
		 less_than:			write(texout,'{$<$}');
		 equals:			write(texout,ch);
		 greater_than:			write(texout,'{$>$}');
		 interrogative:			write(texout,ch);
		 commercial_at:			write(texout,ch);
		 upper_case_A:			write(texout,ch);
		 upper_case_B:			write(texout,ch);
		 upper_case_C:			write(texout,ch);
		 upper_case_D:			write(texout,ch);
		 upper_case_E:			write(texout,ch);
		 upper_case_F:			write(texout,ch);
		 upper_case_G:			write(texout,ch);
		 upper_case_H:			write(texout,ch);
		 upper_case_I:			write(texout,ch);
		 upper_case_J:			write(texout,ch);
		 upper_case_K:			write(texout,ch);
		 upper_case_L:			write(texout,ch);
		 upper_case_M:			write(texout,ch);
		 upper_case_N:			write(texout,ch);
		 upper_case_O:			write(texout,ch);
		 upper_case_P:			write(texout,ch);
		 upper_case_Q:			write(texout,ch);
		 upper_case_R:			write(texout,ch);
		 upper_case_S:			write(texout,ch);
		 upper_case_T:			write(texout,ch);
		 upper_case_U:			write(texout,ch);
		 upper_case_V:			write(texout,ch);
		 upper_case_W:			write(texout,ch);
		 upper_case_X:			write(texout,ch);
		 upper_case_Y:			write(texout,ch);
		 upper_case_Z:			write(texout,ch);
		 open_square:			write(texout,ch);
		 back_slash:			write(texout,ch);
		 close_square:			write(texout,ch);
		 caret:				write(texout,ch);
		 underscore:			write(texout,ch);
		 grave:				write(texout,ch);
		 lower_case_a:			write(texout,ch);
		 lower_case_b:			write(texout,ch);
		 lower_case_c:			write(texout,ch);
		 lower_case_d:			write(texout,ch);
		 lower_case_e:			write(texout,ch);
		 lower_case_f:			write(texout,ch);
		 lower_case_g:			write(texout,ch);
		 lower_case_h:			write(texout,ch);
		 lower_case_i:			write(texout,ch);
		 lower_case_j:			write(texout,ch);
		 lower_case_k:			write(texout,ch);
		 lower_case_l:			write(texout,ch);
		 lower_case_m:			write(texout,ch);
		 lower_case_n:			write(texout,ch);
		 lower_case_o:			write(texout,ch);
		 lower_case_p:			write(texout,ch);
		 lower_case_q:			write(texout,ch);
		 lower_case_r:			write(texout,ch);
		 lower_case_s:			write(texout,ch);
		 lower_case_t:			write(texout,ch);
		 lower_case_u:			write(texout,ch);
		 lower_case_v:			write(texout,ch);
		 lower_case_w:			write(texout,ch);
		 lower_case_x:			write(texout,ch);
		 lower_case_y:			write(texout,ch);
		 lower_case_z:			write(texout,ch);
		 open_brace:			write(texout,ch);
		 solidus:			write(texout,'{$|$}');
		 close_brace:			write(texout,ch);
		 tilde:				write(texout,ch);
		 del:				write(texout,' ');
		 k128:				write(texout,' ');
		 k129:				write(texout,' ');
		 k130:				write(texout,' ');
		 k131:				write(texout,' ');
		 ind:				write(texout,' ');
		 nel:				write(texout,' ');
		 ssa:				write(texout,' ');
		 esa:				write(texout,' ');
		 hts:				write(texout,' ');
		 htu:				write(texout,' ');
		 vts:				write(texout,' ');
		 pld:				write(texout,' ');
		 plu:				write(texout,' ');
		 ri:				write(texout,' ');
		 ss2:				write(texout,' ');
		 ss3:				write(texout,' ');
		 dcs:				write(texout,' ');
		 pu1:				write(texout,' ');
		 pu2:				write(texout,' ');
		 sts:				write(texout,' ');
		 cch:				write(texout,' ');
		 mw:				write(texout,' ');
		 spa:				write(texout,' ');
		 epa:				write(texout,' ');
		 k152:				write(texout,' ');
		 k153:				write(texout,' ');
		 k154:				write(texout,' ');
		 csi:				write(texout,' ');
		 st:				write(texout,' ');
		 osc:				write(texout,' ');
		 pm:				write(texout,' ');
		 apc:				write(texout,' ');
		 k160:				write(texout,' ');
		 inverted_exclamation:		write(texout,'{<}');
		 cent:				write(texout,'{\rlap/c}');
		 pound:				write(texout,'{\it\$}');
		 k164:				write(texout,' ');
		 yen:				write(texout,'{\rlap=Y}');
		 k166:				write(texout,' ');
		 section:			write(texout,'{\S}');
		 currency:			write(texout,'{\rlap{\mathhexbox202}\kern0.15em\mathhexbox20E}');
		 copyright:			write(texout,'{\copyright}');
		 lower_case_a_underscored:	write(texout,'{\b a}');
		 open_guillemets:		write(texout,'{\mathhexbox21C}');
		 k172:				write(texout,' ');
		 k173:				write(texout,' ');
		 k174:				write(texout,' ');
		 k175:				write(texout,' ');
		 degree:			write(texout,'{${}^\circ$}');
		 plus_minus:			write(texout,'{\mathhexbox206}');
		 super_2:			write(texout,'{$ ^2$}');
		 super_3:			write(texout,'{$ ^3$}');
		 k180:				write(texout,' ');
		 mu:				write(texout,'{$\mu$}');
		 paragraph:			write(texout,'{\P}');
		 centred_period:		write(texout,'{\mathhexbox20F}');
		 k184:				write(texout,' ');
		 super_1:			write(texout,'{$ ^1$}');
		 lower_case_o_underscored:	write(texout,'{\b o}');
		 close_guillemets:		write(texout,'{\mathhexbox21D}');
		 quarter:			write(texout,'{$1\over4$}');
		 half:				write(texout,'{$1\over2$}');
		 k190:				write(texout,' ');
		 inverted_interrogative:	write(texout,'{>}');
		 upper_case_A_grave:		write(texout,'{\`A}');
		 upper_case_A_acute:		write(texout,'{\''A}');
		 upper_case_A_caret:		write(texout,'{\^A}');
		 upper_case_A_tilde:		write(texout,'{\~A}');
		 upper_case_A_trema:		write(texout,'{\"A}');
		 upper_case_A_ring:		write(texout,'{\AA}');
		 upper_case_AE_digraph:		write(texout,'{\AE}');
		 upper_case_C_cedilla:		write(texout,'{\c C}');
		 upper_case_E_grave:		write(texout,'{\`E}');
		 upper_case_E_acute:		write(texout,'{\''E}');
		 upper_case_E_caret:		write(texout,'{\^E}');
		 upper_case_E_trema:		write(texout,'{\"E}');
		 upper_case_I_grave:		write(texout,'{\`I}');
		 upper_case_I_acute:		write(texout,'{\''I}');
		 upper_case_I_caret:		write(texout,'{\^I}');
		 upper_case_I_trema:		write(texout,'{\"I}');
		 k208:				write(texout,' ');
		 upper_case_N_tilde:		write(texout,'{\~N}');
		 upper_case_O_grave:		write(texout,'{\`O}');
		 upper_case_O_acute:		write(texout,'{\''O}');
		 upper_case_O_caret:		write(texout,'{\^O}');
		 upper_case_O_tilde:		write(texout,'{\~O}');
		 upper_case_O_trema:		write(texout,'{\"O}');
		 upper_case_OE_digraph:		write(texout,'{\OE}');
		 upper_case_O_slashed:		write(texout,'{\O}');
		 upper_case_U_grave:		write(texout,'{\`U}');
		 upper_case_U_acute:		write(texout,'{\''U}');
		 upper_case_U_caret:		write(texout,'{\^U}');
		 upper_case_U_trema:		write(texout,'{\"U}');
		 upper_case_Y_trema:		write(texout,'{\"Y}');
		 k222:				write(texout,' ');
		 beta:				write(texout,'{\ss}');
		 lower_case_a_grave:		write(texout,'{\`a}');
		 lower_case_a_acute:		write(texout,'{\''a}');
		 lower_case_a_caret:		write(texout,'{\^a}');
		 lower_case_a_tilde:		write(texout,'{\~a}');
		 lower_case_a_trema:		write(texout,'{\"a}');
		 lower_case_a_ring:		write(texout,'{\aa}');
		 lower_case_ae_digraph:		write(texout,'{\ae}');
		 lower_case_c_cedilla:		write(texout,'{\c c}');
		 lower_case_e_grave:		write(texout,'{\`e}');
		 lower_case_e_acute:		write(texout,'{\''e}');
		 lower_case_e_caret:		write(texout,'{\^e}');
		 lower_case_e_trema:		write(texout,'{\"e}');
		 lower_case_i_grave:		write(texout,'{\`\i}');
		 lower_case_i_acute:		write(texout,'{\''\i}');
		 lower_case_i_caret:		write(texout,'{\^\i}');
		 lower_case_i_trema:		write(texout,'{\"\i}');
		 k240:				write(texout,' ');
		 lower_case_n_tilde:		write(texout,'{\~n}');
		 lower_case_o_grave:		write(texout,'{\`o}');
		 lower_case_o_acute:		write(texout,'{\''o}');
		 lower_case_o_caret:		write(texout,'{\^o}');
		 lower_case_o_tilde:		write(texout,'{\~o}');
		 lower_case_o_trema:		write(texout,'{\"o}');
		 lower_case_oe_digraph:		write(texout,'{\oe}');
		 lower_case_o_slashed:		write(texout,'{\o}');
		 lower_case_u_grave:		write(texout,'{\`u}');
		 lower_case_u_acute:		write(texout,'{\''u}');
		 lower_case_u_caret:		write(texout,'{\^u}');
		 lower_case_u_trema:		write(texout,'{\"u}');
		 lower_case_y_trema:		write(texout,'{\"y}');
		 k254:				write(texout,' ');
		 k255:				write(texout,' ')
	    end {case}
	    end;
      readln (dec169in);
      writeln (texout)
      end
end.

-------
