home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBOPAS / RNF-PAS.LBR / RNF0.PQS / RNF0.PAS
Pascal/Delphi Source File  |  2000-06-30  |  19KB  |  492 lines

  1. (* --- rnf0 ---*)
  2.  
  3.  
  4. PROCEDURE INI;
  5. { Initialization procedures }
  6.  
  7.   var
  8.     j: integer;
  9.     
  10. PROCEDURE INISTDMACS;
  11.  
  12.   const
  13.     EmptyMacroText =
  14.         '                                                                  ';
  15.   type
  16.     alfa66 = packed array [ 1 .. 66] of char;
  17.     
  18.   procedure InitMac(MacroName: alfa; MacText: alfa66);
  19.  
  20.     var
  21.       TheMacroPtr: PMAC;
  22.         length, i: integer;
  23.  
  24.     begin
  25.       new(TheMacroPtr);
  26.       with TheMacroPtr^  do
  27.         begin
  28.           ON := FALSE;   NM := MacroName;
  29.           MT := HEADER;  NP := 0;
  30.           MA := MACLSTP;     
  31.              
  32.           MacroBegin := FreeStgIndx;
  33.           if MacText = EmptyMacroText then
  34.             begin
  35.               Length := linlen;
  36.               (* allocate, but don't use the space *)
  37.               MacroEnd := MacroBegin - 1;
  38.               StgTable[MacroBegin] := ' ';
  39.             end
  40.           else
  41.             begin
  42.               Length := 66;
  43.               while ((Length > 1) and (MacText[Length] =  ' ')) do
  44.                 Length := Length - 1;
  45.               if MacText[Length] <> ' ' then
  46.                 Length := Length + 1;
  47.           
  48.               MacroEnd := MacroBegin + Length - 1;
  49.               
  50.               for i := 1 to Length do
  51.                 StgTable[MacroBegin + i - 1] := MacText[i];
  52.             end;
  53.           FreeStgIndx := MacroBegin + Length;
  54.         end;
  55.       MACLSTP := TheMacroPtr;
  56.     end;
  57.     
  58.   BEGIN 
  59.     MACLSTP := NIL;   
  60.     
  61.     InitMac('FRCPAGE   ',
  62.      '.TOP .SAV .RESPAG .B 3 ..TTL ..NMP .BR ..STL .B 2 .RES .MID       ');
  63.     FrcPgMacP := MACLSTP;
  64.     
  65.     InitMac(' d-frcpage',
  66.      '.FRCPAGE                                                          ');
  67.     DefrFrcPgMacP := MACLSTP;
  68.     
  69.     InitMac('.NMP      ',
  70.      '$$PAGE=$$PAGE+1; .IF $$NMP .TAB $$RM .RT $$PAGE                   ');
  71.          
  72.     InitMac('.TTL      ', EmptyMacroText);
  73.     TTLMACP := MACLSTP;
  74.     
  75.     InitMac('.STL      ', EmptyMacroText);
  76.     STLMACP := MACLSTP;
  77.  
  78.     InitMac('.CH       ',
  79.      '.PAGE .FIG 12 .C ^CHAPTER $$CH=$$CH+1 $$HL=0; .B 2 .C ..CHT .B 3  ');
  80.     ChapterMacP := MACLSTP;
  81.  
  82.     InitMac('.CHT      ', EmptyMacroText);
  83.     CHTMACP := MACLSTP;
  84.     
  85.     InitMac(' defer pp ',
  86.      '.PP                                                               ');
  87.     ParagMacP := MACLSTP;
  88.     
  89.     InitMac(' defer cr ',
  90.      '.CR                                                               ');
  91.     CarRtnMacP := MACLSTP;
  92.     
  93.     InitMac(' defer mid',
  94.      '.MID                                                              ');
  95.     MidMacP := MACLSTP;
  96. END (*INISTDMACS*);
  97.  
  98.  
  99. PROCEDURE INIRELS;
  100.  
  101.   BEGIN
  102.     ARELOPR[EQ] := 'EQ        ';   ARELOPR[GT] := 'GT        ';
  103.     ARELOPR[LT] := 'LT        ';   ARELOPR[NE] := 'NE        ';
  104.     ARELOPR[GE] := 'GE        ';   ARELOPR[LE] := 'LE        ';
  105.   END (*INIRELS*);
  106.  
  107.  
  108. PROCEDURE INIVARS;
  109.  
  110.   var
  111.     i: integer;
  112.     
  113.   BEGIN
  114.     VID[VPAGE]  := '$PAGE     ';   VTY[VPAGE] := VITEM;
  115.     VID[VCH]    := '$CH       ';   VTY[VCH]   := VITEM;
  116.     VID[VHL]    := '$HL       ';   VTY[VHL]   := VARRAY;   VUP[VHL]    := 5;
  117.     VID[VLIST]  := '$LIST     ';   VTY[VLIST] := VARRAY;   VUP[VLIST]  := 5;
  118.     VID[VLM]    := '$LM       ';   VTY[VLM]   := VITEM;
  119.     VID[VRM]    := '$RM       ';   VTY[VRM]   := VITEM;
  120.     VID[VSP]    := '$SP       ';   VTY[VSP]   := VITEM;
  121.     VID[VNMP]   := '$NMP      ';   VTY[VNMP]  := VITEM;
  122.     VID[VOLNO]  := '$OLNO     ';   VTY[VOLNO] := VITEM;  
  123.     VID[VCR]    := '$CR       ';   VTY[VCR]   := VITEM;
  124.     VID[VANSI]  := '$ANSI     ';   VTY[VANSI] := VITEM;
  125.     TV := NextVariable;
  126.     FOR i := 1 TO VARMAX DO VAL[i] := 0;
  127.   END (*INIVARS*);
  128.  
  129.  
  130. PROCEDURE INICMDS;
  131.  
  132. PROCEDURE INIT1;
  133.   
  134.   BEGIN 
  135.     cmds[cinclude]   := 'INCLUDE   ';   cmds[cbold]     := 'BOLD      ';
  136.     cmds[ccaseflag]  := 'CASEFLAG  ';
  137.     CMDS[CBLANK]     := 'B         ';   CMDS[CFLAG]     := 'FLAG      ';
  138.     CMDS[CFLAGCAPS]  := 'FLAGCAPS  ';   CMDS[CFLAGOVER] := 'FLAGOVER  ';
  139.     CMDS[CFLAGSIG]   := 'FLAGSIG   ';   CMDS[CLOWER]    := 'LOWER     ';
  140.     CMDS[CUPPER]     := 'UPPER     ';   CMDS[CPERIOD]   := 'PERIOD    ';
  141.     CMDS[CBREAK]     := 'BR        ';   CMDS[CCR]       := 'CR        ';
  142.     CMDS[CESCCHR]    := 'ESC       ';   CMDS[CCENTER]   := 'C         ';
  143.     CMDS[CJUST]      := 'J         ';   CMDS[CUL]       := 'UL        ';
  144.     CMDS[CLMAR]      := 'LM        ';   CMDS[CRMAR]     := 'RM        ';
  145.     CMDS[CSUP]       := 'SUP       ';   CMDS[CSTD]      := 'STD       ';
  146.     CMDS[CPS]        := 'PAGESIZE  ';   CMDS[CSAV]      := 'SAV       ';
  147.     CMDS[CP]         := 'P         ';   CMDS[CRES]      := 'RES       ';
  148.     CMDS[CPP]        := 'PP        ';   CMDS[CSP]       := 'SP        ';
  149.     CMDS[CS]         := 'S         ';   CMDS[CTP]       := 'TP        ';
  150.     CMDS[CNMP]       := 'NMP       ';   CMDS[CPNO]      := 'PNO       ';
  151.     CMDS[CTITLE]     := 'TITLE     ';   CMDS[CST]       := 'ST        ';
  152.     CMDS[CATITLE]    := 'ATITLE    ';   CMDS[CLIST]     := 'LIST      ';
  153.     CMDS[CLE]        := 'LE        ';   CMDS[CELIST]    := 'ENDLIST   ';
  154.   END;
  155.  
  156.  
  157. PROCEDURE INIT2; 
  158.   
  159.   BEGIN
  160.     CMDS[CFIG]       := 'FIG       ';   CMDS[CBAR]      := 'BAR       ';
  161.     CMDS[CBB]        := 'BB        ';   CMDS[CEB]       := 'EB        ';
  162.     CMDS[CU]         := 'U         ';   CMDS[CT]        := 'T         ';
  163.     CMDS[CTAB]       := 'TAB       ';   CMDS[CTABS]     := 'TABS      ';
  164.     CMDS[CRT]        := 'RT        ';   CMDS[CCH]       := 'CH        ';
  165.     CMDS[CAP]        := 'AP        ';   CMDS[CI]        := 'I         ';
  166.     CMDS[CFILL]      := 'F         ';   CMDS[CSIG]      := 'SIG       ';
  167.     CMDS[CPAGE]      := 'PAGE      ';   CMDS[CFRCPAGE]  := 'FRCPAGE   ';
  168.     CMDS[CTOP]       := 'TOP       ';   CMDS[CMID]      := 'MID       ';
  169.     CMDS[CBOT]       := 'BOTTOM    ';   CMDS[CARRAY]    := 'ARRAY     ';
  170.     CMDS[CFMT]       := 'FMT       ';   CMDS[CIF]       := 'IF        ';
  171.     CMDS[CASIS]      := 'ASIS      ';   CMDS[CDOT]      := 'DOT       ';
  172.     CMDS[CREM]       := 'REM       ';   CMDS[CUPP]      := 'UP        ';
  173.     CMDS[CUSB]       := 'USB       ';   CMDS[CHL]       := 'HL        ';
  174.     CMDS[CRIGHT]     := 'RIGHT     ';   CMDS[CLINES]    := 'LINES     ';
  175.     CMDS[CMACRO]     := 'MACRO     ';   CMDS[CX]        := 'X         ';
  176.     CMDS[CVAR]       := 'VAR       ';   CMDS[CINC]      := 'INC       ';
  177.     CMDS[CDEC]       := 'DEC       ';   CMDS[CSAVPAG]   := 'SAVPAG    ';
  178.     CMDS[CRESPAG]    := 'RESPAG    ';   CMDS[NOTCMD]    := '----------';
  179.     
  180.     BREAKSET := [CCENTER, CTITLE, CST, CI, CCH, CLE, CLIST, CELIST, CHL,
  181.        CCR, CPP, CPAGE, CFIG, CS, CTP, CBLANK, CASIS, CBREAK, CRES,
  182.        CRESPAG];
  183.     CRSET := BREAKSET - [CBREAK, CBLANK, CRES, CRESPAG];
  184.   END (* INIT2 *);
  185.   
  186.   procedure IniPerfect;
  187.    { Perfect hash function -- very fast keyword lookup }
  188.     begin
  189.       perfect[ 0] := NOTCMD;    
  190.       perfect[ 1] := CP;                perfect[ 2] := CPP;       
  191.       perfect[ 3] := CNMP;              perfect[ 4] := CPAGE;     
  192.       perfect[ 5] := CJUST;             perfect[ 6] := NOTCMD;    
  193.       perfect[ 7] := CPERIOD;           perfect[ 8] := CPS (* PAGESIZE *);
  194.       perfect[ 9] := CTP;               perfect[10] := CTOP;      
  195.       perfect[11] := CDOT;              perfect[12] := CTITLE;    
  196.       perfect[13] := CEB;               perfect[14] := CELIST  (* ENDLIST *);  
  197.       perfect[15] := CT;                perfect[16] := CBOLD;     
  198.       perfect[17] := CX;                perfect[18] := CSP;       
  199.       perfect[19] := CSUP;              perfect[20] := CSTD;      
  200.       perfect[21] := CTAB;              perfect[22] := CINCLUDE;  
  201.       perfect[23] := CBLANK;            perfect[24] := CBB;       
  202.       perfect[25] := CST;               perfect[26] := CUPP;      
  203.       perfect[27] := CTABS;             perfect[28] := CPNO;      
  204.       perfect[29] := NOTCMD;            perfect[30] := NOTCMD;    
  205.       perfect[31] := CI;                perfect[32] := CRT;       
  206.       perfect[33] := CS;                perfect[34] := CLE;       
  207.       perfect[35] := CRIGHT;            perfect[36] := CBREAK;    
  208.       perfect[37] := CBAR;              perfect[38] := CUSB;      
  209.       perfect[39] := CESCCHR;           perfect[40] := CDEC;      
  210.       perfect[41] := NOTCMD;            perfect[42] := CRES;      
  211.       perfect[43] := CLIST;             perfect[44] := NOTCMD;    
  212.       perfect[45] := CFRCPAGE;          perfect[46] := NOTCMD;    
  213.       perfect[47] := CAP;               perfect[48] := CFMT;      
  214.       perfect[49] := CU;                perfect[50] := CMID;      
  215.       perfect[51] := CATITLE;           perfect[52] := CUPPER;    
  216.       perfect[53] := CLINES;            perfect[54] := CINC;      
  217.       perfect[55] := CIF;               perfect[56] := CSIG;      
  218.       perfect[57] := CSAV;              perfect[58] := CUL;       
  219.       perfect[59] := CSAVPAG;           perfect[60] := CLOWER;    
  220.       perfect[61] := CCR;               perfect[62] := CFLAGCAPS; 
  221.       perfect[63] := CBOT (* BOTTOM *); perfect[64] := CVAR;
  222.       perfect[65] := CASIS;             perfect[66] := CRESPAG;   
  223.       perfect[67] := CARRAY;            perfect[68] := NOTCMD;    
  224.       perfect[69] := CFLAGOVER;         perfect[70] := CHL;       
  225.       perfect[71] := CRMAR;             perfect[72] := CREM;      
  226.       perfect[73] := CCENTER;           perfect[74] := CCH;       
  227.       perfect[75] := NOTCMD;            perfect[76] := CMACRO;    
  228.       perfect[77] := CFILL;             perfect[78] := CFIG;      
  229.       perfect[79] := CFLAG;             perfect[80] := CLMAR;     
  230.       perfect[81] := CCASEFLAG;         perfect[82] := CFLAGSIG;  
  231.     end;
  232.  
  233.     procedure IniLetPerfect;
  234.      
  235.       begin
  236.         LetPerfect['A'] := 45;    LetPerfect['B'] := 11;
  237.         LetPerfect['C'] := 36;    LetPerfect['D'] :=  1;
  238.         LetPerfect['E'] :=  0;    LetPerfect['F'] := 38;
  239.         LetPerfect['G'] := 37;    LetPerfect['H'] := 36;
  240.         LetPerfect['I'] := 15;    LetPerfect['J'] :=  2;
  241.         LetPerfect['K'] :=  0;    LetPerfect['L'] := 32;
  242.         LetPerfect['M'] := 46;    LetPerfect['N'] :=  0;
  243.         LetPerfect['O'] := 25;    LetPerfect['P'] :=  0;
  244.         LetPerfect['Q'] :=  0;    LetPerfect['R'] := 23;
  245.         LetPerfect['S'] := 16;    LetPerfect['T'] :=  7;
  246.         LetPerfect['U'] := 24;    LetPerfect['V'] := 38;
  247.         LetPerfect['W'] :=  0;    LetPerfect['X'] :=  8;
  248.         LetPerfect['Y'] := 17;    LetPerfect['Z'] :=  0;
  249.       end;
  250.       
  251.   procedure initchars;
  252.   
  253.     var
  254.       achar: char;
  255.       
  256.     begin
  257.       for achar := chr(0) to chr(127) do  { 7-bit ASCII characters }
  258.         begin
  259.           CharCategory[achar] := OtherChar;
  260.           (* default -- no case conversion *)
  261.           MakeUpper[achar] := achar;
  262.           MakeLower[achar] := achar;
  263.           if (achar >= 'a') and (achar <= 'z') then
  264.             CharCategory[achar] := lcLetter
  265.           else
  266.             if (achar >= 'A') and (achar <= 'Z') then
  267.               CharCategory[achar] := ucLetter;
  268.         end;
  269.       for achar := chr(128) to chr(255) do  { 8-bit ASCII characters }
  270.         begin
  271.           CharCategory[achar] := MiscChar; { these pass through and print }
  272.           (* no case conversion *)
  273.           MakeUpper[achar] := achar;
  274.           MakeLower[achar] := achar;
  275.  
  276.           {  comment-out either DEC or IBM-PC }
  277.  
  278.           (* DEC VT220, Rainbow character set *)
  279.           { 128 .. 159 are control chars, and are not printed }
  280.           { 192 .. 253 are foreign characters, upper or lower case }
  281.           if (achar < chr(160)) then
  282.             CharCategory[achar] := OtherChar
  283.           else
  284.             if (achar >= chr(192)) and (achar <= chr(253)) then
  285.               CharCategory[achar] := lcLetter;
  286.  
  287.           (* IBM-PC 8-bit characters, all are printable *)
  288.           { 128 .. 167 are foreign characters (more or less) }
  289.           {
  290.           if (achar < chr(168)) then
  291.             CharCategory[achar] := lcLetter;
  292.           }
  293.         end;
  294.  
  295.       CharCategory['^'] := UpArrow;
  296.       CharCategory['<'] := LeftAngle;
  297.       CharCategory['.'] := EndSentence;
  298.       CharCategory['?'] := EndSentence;
  299.       CharCategory['!'] := EndSentence;
  300.       CharCategory['_'] := UnderScore;
  301.       CharCategory['#'] := NumberSign;
  302.  
  303.       (* ASCII dependent *)
  304.  
  305. {}    CharCategory[chr(92)] := BackSlash;
  306.       CharCategory['{'] := MiscChar;
  307.       CharCategory['}'] := MiscChar;
  308. {}    CharCategory[chr(126)] := MiscChar   (* tilda *);
  309. {}    CharCategory[chr(96)] := MiscChar    (* grave *);
  310. {}    CharCategory[chr(124)] := MiscChar   (* vertical bar *);
  311. {}    for achar := ' ' to ']' do
  312.         if CharCategory[achar] = OtherChar then
  313.           CharCategory[achar] := ArithChar;
  314.  
  315.       RomanChars := 'M CMD CDC XCL XLX IXV IVI ';
  316.  
  317.       RomanValue[ 1] := 1000;
  318.       RomanValue[ 2] :=  900;
  319.       RomanValue[ 3] :=  500;
  320.       RomanValue[ 4] :=  400;
  321.       RomanValue[ 5] :=  100;
  322.       RomanValue[ 6] :=   90;
  323.       RomanValue[ 7] :=   50;
  324.       RomanValue[ 8] :=   40;
  325.       RomanValue[ 9] :=   10;
  326.       RomanValue[10] :=    9;
  327.       RomanValue[11] :=    5;
  328.       RomanValue[12] :=    4;
  329.       RomanValue[13] :=    1;
  330.     end;
  331.     
  332.   BEGIN (* INICMDS *) 
  333.     INIT1;
  334.     INIT2;
  335.     IniPerfect;
  336.     IniLetPerfect;
  337.     initchars;
  338.   END (*INICMDS*);  
  339.  
  340. PROCEDURE INIFILES;
  341.  
  342.   VAR
  343.     OUTNAME: string80;
  344.     ans: char;
  345.     badname, FromOS : boolean;
  346.  
  347.  
  348.     function CommandLineFile : boolean;
  349.     { If nothing given on command line, write message and ruturn false. }
  350.     { Else set InputName and outname }
  351.     { Highly OS- and compiler-dependent; ParamCount, ParamStr Turbo Pascal }
  352.     { For Turbo v 1 or 2, modify this routine to just return false. }
  353.     BEGIN
  354.       if ParamCount < 1 then  { ParamCount requires Turbo v 3 }
  355.         begin
  356.           CommandLineFile := false;
  357.           writeln(' Give input file on RNF command line for listing to ',
  358.                   'printer and auto eject.');
  359.         end
  360.       else
  361.         begin
  362.           CommandLineFile := true;
  363.           InputName := ParamStr(1);
  364.           outname := 'lst:';   { MS-DOS or CP/M printer }
  365.         end;
  366.     END { CommandLineFile };
  367.  
  368.  
  369.   BEGIN
  370.     FromOS := CommandLineFile;
  371.     repeat
  372.       badname := false;
  373.       if not FromOS then
  374.         begin
  375.           WRITE(' INPUT FILE >');
  376.           readln(InputName);
  377.         end;
  378. {}{VMS,Turbo}   if length(InputName) = 0 then halt;
  379. { VMS allows "length" on a PAOC, Turbo only on their string type }
  380.       if not fileexists(InputName) then
  381.   {VMS} {begin
  382.           InputName := concat(InputName, '.text');
  383.           if not fileexists(InputName) then
  384.             begin
  385.               badname := true;
  386.               writeln(' not present')
  387.             end
  388.         end;}
  389.             begin
  390.               badname := true; FromOS := false;
  391.               writeln(InputName, ' not present')
  392.             end
  393.     until not badname;
  394.     if not FromOS then
  395.       begin
  396.         WRITE(' LISTING FILE >');
  397.         readln(outname);
  398.       end;
  399. {}{VMS,Turbo,Prospero} if length(outname) = 0 then halt;
  400. {}{VMS} { open(File_Variable:=InFile,File_Name:=Inputname, History:= old); }
  401. {}{Turbo,Prospero} assign(INFILE,InputName);
  402.     RESET(INFILE);
  403. {}{VMS} { open(File_Variable:=OutFile,File_Name:=OutName,History := new,   }
  404. {}{VMS} {         Record_Length:= 322); }
  405. {}{Turbo,Prospero} assign(OUTFILE,outname);
  406. {}{VMS} {    REWRITE(OUTFILE, error := continue); }
  407. {}{Turbo,Prospero}    REWRITE(OUTFILE);
  408.     if FromOS
  409.     then  HandFeed := false
  410.     else
  411.       repeat
  412.         write(' Hand feed paper or Auto page eject ? [H/A] >');
  413.         read(ans);
  414.         writeln;
  415.         HandFeed := (ans = 'H') or (ans = 'h');
  416.       until ans in ['H','A','h','a'];
  417.   END (* INIFILES *);
  418.  
  419.   BEGIN (*INI*)
  420.     VarName := AlfaBlanks;
  421.     DangerPoint := maxint div 10;
  422.     INIFILES;          INIRELS;
  423.     InitialPageEject := false; { true for PAGE( ) before first page printed }
  424.     USB := TRUE;       doinclfl := false;
  425.     UNDL := FALSE;     bold := false;     asis := false;     XTEND := FALSE;
  426.     ERRORCOUNT := 0;   ILNO := 0;         EOFINPUT := FALSE;
  427.     FREEMACP := NIL;   FLAGOVER := TRUE;
  428.     FLAGSIG := TRUE;   T := FALSE;        RT := FALSE;       DOT := FALSE;
  429.     PUSHED := FALSE;   PMAR := 0;         AP := FALSE;       PARA := FALSE;
  430.     RIGHT := TRUE;     RT := FALSE;
  431.     OVETXT := 58;      OETXT := 58;       OEPAG := 66;       ENP := 0;
  432.     SUP := FALSE;      YES := TRUE;       ENP := 0;          PARSPACE := 1;
  433.     PARTEST := 3;      DEFRB := 0;        PREL := TRUE;      FIRSTCH := TRUE;
  434.     FORCE := FALSE;    ATITLE := FALSE;   FIGP := 0;         BAR := FALSE;
  435.     BB := FALSE;       CLRTAB; 
  436.     
  437.     ITEMSET := ['$', '0' .. '9', '+', '-', '#', '.'];
  438.     TERMSET := ITEMSET + ['('];
  439.     
  440.     StgMarker := StgTblSize;
  441.     TopOfStack := 0;
  442.     with StgStack[0] do
  443.       begin
  444.         ActiveMacro := nil;
  445.         StgBegin := 1;
  446.         StgEnd := linlen;
  447.         FreeStgIndx := StgEnd + 1;
  448.         StgPosition := 1;
  449.       end;
  450.       
  451.     for j := 1 to FreeStgIndx do
  452.       StgTable[j] := ' ';
  453.       
  454. {} {fillchar(StgTable, StgTblSize, ' ');}
  455.     for j:=1 to StgTblSize do StgTable[j] := ' ';
  456.  
  457.     INISTDMACS;  INICMDS;   SETSTD;
  458.  
  459.     INIVARS;
  460.     VAL[VNMP] := 1;   VAL[VRM] := 72;   VAL[VSP] := 1;
  461. {}  val[vcr] := {128+} 13;  { This character returns carriage to left edge }
  462.     VAL[VLM] := 1;
  463.  
  464.     for j := 0 to LinLen do
  465.       EmptyFlags[j] := false;
  466.     
  467.     CLRLINE;
  468.     with otl do
  469.       begin
  470.         HasBoldPrinting := false;  HasOverPrinting := false;
  471.         HasUnderScore := false;
  472.         USflag := EmptyFlags;
  473.         BoldFlag := EmptyFlags;
  474.         FOR j := 1 TO LINLEN DO
  475.           LIN[j] := ' ';
  476.       end;
  477.     SYL := OTL;   TMPL := OTL;   PAGSAV := OTL;      
  478.     ADDSYL := OTL;   
  479.     
  480.     PQEND := FALSE;   OVBTXT := 0;
  481.     WITH JUST DO
  482.       FOR j := 1 TO LINLEN DO POS[j] := 0;
  483.     JUST.NDX := 0;
  484.     RIGHTSPACE := 0;
  485.     FOR j := 1 TO FIGMAX DO FIGN[j] := 0;   HOLDBB := FALSE;
  486.     LASTCUP := 0;   LASTLEN := 0;   LASTSLEN := 0;   
  487.     PAGOTL := FALSE;   EXPRERR := FALSE;
  488.     SHOWEXPR := TRUE;   XTRABL := PQEND;
  489.     VAL[VOLNO] := 10000;   SAVENV(PAGENV);   PushText(MidMacP);   
  490.   END (*INI*);
  491.  
  492.