(* version 2.15 *) {---------------------------------------------------------------------------} { finds the '.' initiating the postfix of the given file name } function pos_postfix(xx : string) : integer; var i : integer; begin pos_postfix:=0; for i:=1 to length(xx) do begin if (xx[i]='.') then pos_postfix:=i else if (xx[i]=']') then pos_postfix:=0 else if (xx[i]='/') then pos_postfix:=0 else if (xx[i]='\') then pos_postfix:=0 else if (xx[i]=':') then pos_postfix:=0 ; {END IF} end ; {END DO} end; {---------------------------------------------------------------------------} { the signed variant of str(n,stg) } procedure sign_str(num : integer; var out_sign_str : string24); var sign_work : string255; begin str(num, sign_work); (* if (num<0) then out_sign_str:='-'+sign_work *) if (num<0) then out_sign_str:=truncate24('-'+sign_work) else out_sign_str:=truncate24(sign_work) ; {END IF} end; {---------------------------------------------------------------------------} { prints/displays a message } procedure print_msg (verbose_level : integer; msg : string); begin if (verbose >= verbose_level) then write(msg); if write_log then write(logfile, msg); end; {---------------------------------------------------------------------------} { prints/displays a message with RETURN } procedure println_msg (verbose_level : integer; msg : string); begin if (verbose >= verbose_level) then writeln(msg); if write_log then writeln(logfile, msg); end; { ======================================================================= } { used at initialization to store one size name (Latex) and its magnitudes } procedure sizeone(i : integer; s : string; j,k,l : integer; mag10, mag11, mag12 : integer); begin sizekey[i]:=truncate24(s); sizeval[1,i]:=j; sizemags[1,i]:=mag10; sizeval[2,i]:=k; sizemags[2,i]:=mag11; sizeval[3,i]:=l; sizemags[3,i]:=mag12; end; { ======================================================================= } { initialization of LaTeX font heights <==> size keywords } procedure sizeinit; var k : integer; begin sizeone(1, 'HUGE', 720, 720, 840, 2986, 2986, 3583); sizeone(2, 'Huge', 600, 600, 720, 2488, 2488, 2986); sizeone(3, 'huge', 500, 500, 600, 2074, 2074, 2488); sizeone(4, 'LARGE', 440, 440, 500, 1728, 1728, 2074); sizeone(5, 'Large', 360, 360, 440, 1440, 1440, 1728); sizeone(6, 'large', 280, 280, 360, 1200, 1200, 1440); sizeone(7, 'normalsize', 240, 272, 290, 1000, 1095, 1200); sizeone(8, 'small', 220, 240, 272, 900, 1000, 1095); sizeone(9,'footnotesize',190, 220, 240, 800, 900, 1000); sizeone(10,'scriptsize', 160, 190, 190, 700, 800, 800); sizeone(11,'tiny' , 120, 140, 140, 500, 600, 600); for k:=12 to 16 do sizeone(k,'tiny',0,0,0,500,600,600); num_diff_sizes:=11; for k:=0 to 10 do environ_type[k]:='\RTFerror'; environ_type[0]:='document'; environ_type[1]:='center'; environ_type[2]:='flushright'; end; { ======================================================================= } procedure mac_init; var k : integer; begin { install the conversions of RTF accents (coded \'xx in hexa) } { build a list of conversion of accented letters } for k:=0 to 255 do acc_transl[k]:=''; acc_transl[hs_to_i('80')]:='"A'; acc_transl[hs_to_i('81')]:='\AA{}'; acc_transl[hs_to_i('82')]:='\c{C}'; acc_transl[hs_to_i('83')]:='\''E'; acc_transl[hs_to_i('84')]:='\~N'; acc_transl[hs_to_i('85')]:='\"O'; acc_transl[hs_to_i('86')]:='\"U'; acc_transl[hs_to_i('87')]:='\''a'; acc_transl[hs_to_i('88')]:='\`a'; acc_transl[hs_to_i('89')]:='\^a'; acc_transl[hs_to_i('8a')]:='\"a'; acc_transl[hs_to_i('8b')]:='\~a'; acc_transl[hs_to_i('8c')]:='\aa{}'; acc_transl[hs_to_i('8d')]:='\c{c}'; acc_transl[hs_to_i('8e')]:='\''e'; acc_transl[hs_to_i('8f')]:='\`e'; acc_transl[hs_to_i('90')]:='\^e'; acc_transl[hs_to_i('91')]:='\"e'; acc_transl[hs_to_i('93')]:='\''{\i}'; acc_transl[hs_to_i('93')]:='\`{\i}'; acc_transl[hs_to_i('94')]:='\^{\i}'; acc_transl[hs_to_i('95')]:='\"{\i}'; acc_transl[hs_to_i('96')]:='\~n'; acc_transl[hs_to_i('97')]:='\''o'; acc_transl[hs_to_i('98')]:='\`o'; acc_transl[hs_to_i('99')]:='\^o'; acc_transl[hs_to_i('9a')]:='\"o'; acc_transl[hs_to_i('9b')]:='\~o'; acc_transl[hs_to_i('9c')]:='\''u'; acc_transl[hs_to_i('9d')]:='\`u'; acc_transl[hs_to_i('9e')]:='\^u'; acc_transl[hs_to_i('9f')]:='\"u'; acc_transl[hs_to_i('a0')]:='\dag{}'; acc_transl[hs_to_i('a1')]:='\degree{}'; acc_transl[hs_to_i('a3')]:='\pound{}'; acc_transl[hs_to_i('a4')]:='\S{}'; acc_transl[hs_to_i('a7')]:='\ss{}'; acc_transl[hs_to_i('ae')]:='\AE{}'; acc_transl[hs_to_i('af')]:='\O{}'; acc_transl[hs_to_i('b0')]:='$\infty '; acc_transl[hs_to_i('b1')]:='$\pm '; acc_transl[hs_to_i('b2')]:='$\leq '; acc_transl[hs_to_i('b3')]:='$\geq '; acc_transl[hs_to_i('b5')]:='$\mu '; acc_transl[hs_to_i('b6')]:='$\partial '; acc_transl[hs_to_i('b7')]:='$\Sigma '; acc_transl[hs_to_i('b8')]:='$\Pi '; acc_transl[hs_to_i('b9')]:='$\pi '; acc_transl[hs_to_i('bd')]:='${1\over2}'; acc_transl[hs_to_i('bf')]:='\o{}'; acc_transl[hs_to_i('c6')]:='$\Delta '; acc_transl[hs_to_i('c9')]:='...'; acc_transl[hs_to_i('cb')]:='\`A'; acc_transl[hs_to_i('cc')]:='\~A'; acc_transl[hs_to_i('cd')]:='\~O'; acc_transl[hs_to_i('ce')]:='\OE{}'; acc_transl[hs_to_i('cf')]:='\oe{}'; acc_transl[hs_to_i('d0')]:='--{}'; acc_transl[hs_to_i('d1')]:='---{}'; acc_transl[hs_to_i('d2')]:='``'; acc_transl[hs_to_i('d3')]:=''''''; acc_transl[hs_to_i('d4')]:='`{}'; acc_transl[hs_to_i('d5')]:='''{}'; acc_transl[hs_to_i('d6')]:='$\div '; acc_transl[hs_to_i('d8')]:='\"y'; acc_transl[hs_to_i('e1')]:='$\cdot '; acc_transl[hs_to_i('e4')]:='\"a'; acc_transl[hs_to_i('e5')]:='\^A'; acc_transl[hs_to_i('e6')]:='\^E'; acc_transl[hs_to_i('e7')]:='\''A'; acc_transl[hs_to_i('e8')]:='\"E'; acc_transl[hs_to_i('e9')]:='\`E'; acc_transl[hs_to_i('ea')]:='\''I'; acc_transl[hs_to_i('eb')]:='\^I'; acc_transl[hs_to_i('ec')]:='\"I'; acc_transl[hs_to_i('ed')]:='\`I'; acc_transl[hs_to_i('ee')]:='\''O'; acc_transl[hs_to_i('ef')]:='\^O'; acc_transl[hs_to_i('f1')]:='\`O'; acc_transl[hs_to_i('f2')]:='\''U'; acc_transl[hs_to_i('f3')]:='\^U'; acc_transl[hs_to_i('f4')]:='\`U'; acc_transl[hs_to_i('f6')]:='\"o'; acc_transl[hs_to_i('fb')]:='\degree{}'; acc_transl[hs_to_i('fc')]:='\"u'; end; { ======================================================================= } procedure ansi_init; var k : integer; begin { install the conversions of RTF accents (coded \'xx in hexa) } { build a list of conversion of accented letters } for k:=0 to 255 do acc_transl[k]:=''; acc_transl[hs_to_i('a1')]:='!`'; acc_transl[hs_to_i('a3')]:='\pound{}'; acc_transl[hs_to_i('a7')]:='\S{}'; acc_transl[hs_to_i('a8')]:='\"{ }'; acc_transl[hs_to_i('a9')]:='\copyright{}'; acc_transl[hs_to_i('ab')]:='<<'; acc_transl[hs_to_i('b0')]:='\degree{}'; acc_transl[hs_to_i('b1')]:='$\pm '; acc_transl[hs_to_i('b4')]:='\''{ }'; acc_transl[hs_to_i('b5')]:='$\mu '; acc_transl[hs_to_i('b7')]:='$\cdot '; acc_transl[hs_to_i('b8')]:='\c{ }'; acc_transl[hs_to_i('bb')]:='>>'; acc_transl[hs_to_i('bc')]:='${1\over4}'; acc_transl[hs_to_i('bd')]:='${1\over2}'; acc_transl[hs_to_i('be')]:='${3\over4}'; acc_transl[hs_to_i('bf')]:='?`'; acc_transl[hs_to_i('c0')]:='\`A'; acc_transl[hs_to_i('c1')]:='\''A'; acc_transl[hs_to_i('c2')]:='\^A'; acc_transl[hs_to_i('c3')]:='\~A'; acc_transl[hs_to_i('c4')]:='\"A'; acc_transl[hs_to_i('c5')]:='\AA{}'; acc_transl[hs_to_i('c6')]:='\AE{}'; acc_transl[hs_to_i('c7')]:='\c{C}'; acc_transl[hs_to_i('c8')]:='\`E'; acc_transl[hs_to_i('c9')]:='\''E'; acc_transl[hs_to_i('ca')]:='\^E'; acc_transl[hs_to_i('cb')]:='\"E'; acc_transl[hs_to_i('cc')]:='\`I'; acc_transl[hs_to_i('cd')]:='\''I'; acc_transl[hs_to_i('ce')]:='\^I'; acc_transl[hs_to_i('cf')]:='\"I'; acc_transl[hs_to_i('d1')]:='\~N'; acc_transl[hs_to_i('d2')]:='\`O'; acc_transl[hs_to_i('d3')]:='\''O'; acc_transl[hs_to_i('d4')]:='\^O'; acc_transl[hs_to_i('d5')]:='\~O'; acc_transl[hs_to_i('d6')]:='\"O'; acc_transl[hs_to_i('d8')]:='\O'; acc_transl[hs_to_i('d9')]:='\`U'; acc_transl[hs_to_i('da')]:='\''U'; acc_transl[hs_to_i('db')]:='\^U'; acc_transl[hs_to_i('dc')]:='\"U'; acc_transl[hs_to_i('dd')]:='\''Y'; acc_transl[hs_to_i('df')]:='\ss{}'; acc_transl[hs_to_i('e0')]:='\`a'; acc_transl[hs_to_i('e1')]:='\''a'; acc_transl[hs_to_i('e2')]:='\^a'; acc_transl[hs_to_i('e3')]:='\~a'; acc_transl[hs_to_i('e4')]:='\"a'; acc_transl[hs_to_i('e5')]:='\aa{}'; acc_transl[hs_to_i('e6')]:='\ae{}'; acc_transl[hs_to_i('e7')]:='\c{c}'; acc_transl[hs_to_i('e8')]:='\`e'; acc_transl[hs_to_i('e9')]:='\''e'; acc_transl[hs_to_i('ea')]:='\^e'; acc_transl[hs_to_i('eb')]:='\"e'; acc_transl[hs_to_i('ec')]:='\`i'; acc_transl[hs_to_i('ed')]:='\''i'; acc_transl[hs_to_i('ee')]:='\^i'; acc_transl[hs_to_i('ef')]:='\"i'; acc_transl[hs_to_i('f1')]:='\~n'; acc_transl[hs_to_i('f2')]:='\`o'; acc_transl[hs_to_i('f3')]:='\''o'; acc_transl[hs_to_i('f4')]:='\^o'; acc_transl[hs_to_i('f5')]:='\~o'; acc_transl[hs_to_i('f6')]:='\"o'; acc_transl[hs_to_i('f8')]:='\o'; acc_transl[hs_to_i('f9')]:='\`u'; acc_transl[hs_to_i('fa')]:='\''u'; acc_transl[hs_to_i('fb')]:='\^u'; acc_transl[hs_to_i('fc')]:='\"u'; acc_transl[hs_to_i('fd')]:='\''y'; acc_transl[hs_to_i('ff')]:='\"y'; end; { ======================================================================= } procedure charinit; var K : integer; begin for K:=0 to 255 do catcode[K]:=12; for K:=ord('A') to ord('Z') do catcode[K]:=11; for K:=ord('a') to ord('z') do catcode[K]:=11; for K:=ord('0') to ord('9') do catcode[K]:=16; K:=ord(' '); catcode[K]:=10; K:=ord('{'); catcode[K]:=1; K:=ord('}'); catcode[K]:=2; K:=ord('('); catcode[K]:=3; K:=ord(')'); catcode[K]:=4; K:=ord('\'); catcode[K]:=0; icharz:=ord('0'); { build an empty list of conversion of accented letters } for K:=0 to 255 do acc_transl[K]:=''; { Now install the conversions of "ftech" characters into math codes ... or letters} for K:=0 to 255 do ftech_transl[K]:=''; ftech_transl[ord('a')]:='\alpha '; ftech_transl[ord('A')]:='\Alpha '; ftech_transl[ord('b')]:='\beta '; ftech_transl[ord('B')]:='\Beta '; ftech_transl[ord('c')]:='\chi '; ftech_transl[ord('C')]:='\Chi '; ftech_transl[ord('d')]:='\delta '; ftech_transl[ord('D')]:='\Delta '; ftech_transl[ord('e')]:='\varepsilon '; ftech_transl[ord('E')]:='\Epsilon '; ftech_transl[ord('f')]:='\phi '; ftech_transl[ord('F')]:='\Phi '; ftech_transl[ord('g')]:='\gamma '; ftech_transl[ord('G')]:='\Gamma '; ftech_transl[ord('h')]:='\eta '; ftech_transl[ord('H')]:='\Eta '; ftech_transl[ord('i')]:='\iota '; ftech_transl[ord('I')]:='\Iota '; ftech_transl[ord('j')]:='\varphi '; ftech_transl[ord('J')]:='\vartheta '; ftech_transl[ord('k')]:='\kappa '; ftech_transl[ord('K')]:='\Kappa '; ftech_transl[ord('l')]:='\lambda '; ftech_transl[ord('L')]:='\Lambda '; ftech_transl[ord('m')]:='\mu '; ftech_transl[ord('M')]:='\Mu '; ftech_transl[ord('n')]:='\nu '; ftech_transl[ord('N')]:='\Nu'; ftech_transl[ord('o')]:='o'; ftech_transl[ord('O')]:='\Omicron '; ftech_transl[ord('p')]:='\pi '; ftech_transl[ord('P')]:='\Pi '; ftech_transl[ord('q')]:='\theta '; ftech_transl[ord('Q')]:='\Theta '; ftech_transl[ord('r')]:='\rho '; ftech_transl[ord('R')]:='\Rho '; ftech_transl[ord('s')]:='\sigma '; ftech_transl[ord('S')]:='\Sigma '; ftech_transl[ord('t')]:='\tau '; ftech_transl[ord('T')]:='\Tau '; ftech_transl[ord('u')]:='\upsilon '; ftech_transl[ord('U')]:='\varUpsilon '; ftech_transl[ord('v')]:='\varpi '; ftech_transl[ord('V')]:='\varsigma '; ftech_transl[ord('w')]:='\omega '; ftech_transl[ord('W')]:='\Omega '; ftech_transl[ord('x')]:='\xi '; ftech_transl[ord('X')]:='\Xi '; ftech_transl[ord('y')]:='\psi '; ftech_transl[ord('Y')]:='\Psi '; ftech_transl[ord('z')]:='\zeta '; ftech_transl[ord('Z')]:='\Zeta '; ftech_transl[ord('@')]:='\cong '; ftech_transl[ord('~')]:='\sim '; ftech_transl[ord('"')]:='\forall '; ftech_transl[ord('$')]:='\exists '; ftech_transl[hs_to_i('27')]:='\ni '; ftech_transl[hs_to_i('5e')]:='\bot '; ftech_transl[hs_to_i('a0')]:='\dag '; ftech_transl[hs_to_i('a1')]:='\Upsilon '; ftech_transl[hs_to_i('a2')]:=''''; ftech_transl[hs_to_i('a3')]:='\leq '; ftech_transl[hs_to_i('a4')]:='/'; ftech_transl[hs_to_i('a5')]:='\infty '; ftech_transl[hs_to_i('a6')]:='\cap '; ftech_transl[hs_to_i('a7')]:='\clubsuit '; ftech_transl[hs_to_i('a9')]:='\heartsuit '; ftech_transl[hs_to_i('aa')]:='\spadesuit '; ftech_transl[hs_to_i('ab')]:='\leftrightarrow '; ftech_transl[hs_to_i('ac')]:='\leftarrow '; ftech_transl[hs_to_i('ad')]:='\uparrow '; ftech_transl[hs_to_i('ae')]:='\rightarrow '; ftech_transl[hs_to_i('af')]:='\downarrow '; ftech_transl[hs_to_i('b0')]:='^{\circ}'; ftech_transl[hs_to_i('b1')]:='\pm '; ftech_transl[hs_to_i('b2')]:=''''''; ftech_transl[hs_to_i('b3')]:='\geq '; ftech_transl[hs_to_i('b4')]:='\times '; ftech_transl[hs_to_i('b5')]:='\propto '; ftech_transl[hs_to_i('b6')]:='\partial '; ftech_transl[hs_to_i('b7')]:='\bullet '; ftech_transl[hs_to_i('b8')]:='\div '; ftech_transl[hs_to_i('b9')]:='\neq '; ftech_transl[hs_to_i('ba')]:='\equiv '; ftech_transl[hs_to_i('bb')]:='\approx '; ftech_transl[hs_to_i('bc')]:='\ldots '; ftech_transl[hs_to_i('bd')]:='\mid '; ftech_transl[hs_to_i('c0')]:='\aleph '; ftech_transl[hs_to_i('c1')]:='\Im '; ftech_transl[hs_to_i('c2')]:='\Re '; ftech_transl[hs_to_i('c3')]:='\wp '; ftech_transl[hs_to_i('c4')]:='\otimes '; ftech_transl[hs_to_i('c5')]:='\oplus '; ftech_transl[hs_to_i('c6')]:='\oslash '; ftech_transl[hs_to_i('c7')]:='\cap '; ftech_transl[hs_to_i('c8')]:='\cup '; ftech_transl[hs_to_i('c9')]:='\supset '; ftech_transl[hs_to_i('ca')]:='\supseteq '; ftech_transl[hs_to_i('cb')]:='\not\subset '; ftech_transl[hs_to_i('cc')]:='\subset '; ftech_transl[hs_to_i('cd')]:='\subseteq '; ftech_transl[hs_to_i('ce')]:='\in '; ftech_transl[hs_to_i('cf')]:='\not\in '; ftech_transl[hs_to_i('d0')]:='\angle '; ftech_transl[hs_to_i('d1')]:='\nabla '; ftech_transl[hs_to_i('d2')]:='\registered '; ftech_transl[hs_to_i('d3')]:='\copyright '; ftech_transl[hs_to_i('d4')]:='\trademark '; ftech_transl[hs_to_i('d5')]:='\prod '; ftech_transl[hs_to_i('d7')]:='\cdot '; ftech_transl[hs_to_i('d8')]:='\neg '; ftech_transl[hs_to_i('d9')]:='\wedge '; ftech_transl[hs_to_i('da')]:='\vee '; ftech_transl[hs_to_i('db')]:='\Leftrightarrow '; ftech_transl[hs_to_i('dc')]:='\Leftarrow '; ftech_transl[hs_to_i('dd')]:='\Uparrow '; ftech_transl[hs_to_i('de')]:='\Rightarrow '; ftech_transl[hs_to_i('df')]:='\Downarrow '; ftech_transl[hs_to_i('e0')]:='\diamondsuit '; ftech_transl[hs_to_i('e1')]:='\langle '; ftech_transl[hs_to_i('e2')]:='\registered '; ftech_transl[hs_to_i('e3')]:='\copyright '; ftech_transl[hs_to_i('e4')]:='\trademark '; ftech_transl[hs_to_i('e5')]:='\sum '; ftech_transl[hs_to_i('e9')]:='\lceil '; ftech_transl[hs_to_i('ea')]:='\mid '; ftech_transl[hs_to_i('eb')]:='\lfloor '; ftech_transl[hs_to_i('f1')]:='\rangle '; ftech_transl[hs_to_i('f2')]:='\int '; end_math_code:='$'; end; { ======================================================================= } { this procedure returns a set of 4 chars, the size preamble of a non std font } function sizealpha(i : integer) : string5; var h : integer; begin h:=i div 2; if h<= 5 then sizealpha:='\fiv' else if h<= 6 then sizealpha:='\six' else if h<= 7 then sizealpha:='\sev' else if h<= 8 then sizealpha:='\egt' else if h<= 9 then sizealpha:='\nin' else if h<= 10 then sizealpha:='\ten' else if h<= 11 then sizealpha:='\elv' else if h<= 13 then sizealpha:='\twl' else if h<= 15 then sizealpha:='\frt' else if h<= 18 then sizealpha:='\svtn' else if h<= 23 then sizealpha:='\twty' else if h<= 28 then sizealpha:='\twfv' else sizealpha:='\thtw' ; {END IF} end; { ======================================================================= } { write "help" information } procedure write_help; begin writeln('Usage: RTFLATEX [options] [options] '); writeln('Options:'); writeln(' -b : set explicit \baselineskip at par ends'); writeln(' -d : debug level: 1=default, 0=quiet, >1=verbose'); writeln(' -f : file template to put figures (need a * )'); writeln(' -l