-- file: WeaveLow.mesa
-- Pascal-to-Mesa translator output, translated at September 23, 1986 1:27:38 pm PDT


DIRECTORY
  PascalBasic,
  PascalWizardFiles,
  WeaveProcs,
  WeaveProcArray,
  WeaveVars;

WeaveLow: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, WeaveProcArray, WeaveVars EXPORTS WeaveProcs = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, WeaveProcs, WeaveProcArray, WeaveVars;
 FlushBuffer: PROCEDURE[B: EightBits,PerCent: PascalBoolean] = 
BEGIN 
 J, K:PascalInteger[0..LineLength]; J←B;
{IF  NOT PerCent  THEN WHILE TRUE DO BEGIN IF J=0  THEN  GOTO Label30;
IF OutBuf↑[J]#32  THEN  GOTO Label30;J←J-1; END ENDLOOP ;
EXITS Label30 => NULL};FOR i:INT    IN [ INT[1 ].. INT[J ]] DO  K ← i; PascalWriteChar[file: @TexFile, item: Xchr↑[OutBuf↑[K]]] ENDLOOP;
IF PerCent  THEN PascalWriteChar[file: @TexFile, item: Xchr↑[37]];PascalWriteLn[file: @TexFile];
OutLine←OutLine+1;
IF  INT[B]<OutPtr  THEN FOR i:INT    IN [ INT[B+1 ].. INT[OutPtr ]] DO  K ← i; OutBuf↑[K-B]←OutBuf↑[K] ENDLOOP;
OutPtr←OutPtr-B; END;--:123----124:-- FinishLine: PROCEDURE = 
BEGIN 
 K:PascalInteger[0..BufSize];
 {IF  INT[OutPtr]>0  THEN FlushBuffer[OutPtr,FALSE] ELSE BEGIN FOR i:INT    IN [ INT[0
].. INT[Limit ]] DO  K ← i; IF(Buffer↑[K]#32)AND (Buffer↑[K]#9) THEN  GOTO Label10 ENDLOOP;
FlushBuffer[0,FALSE]; END;EXITS Label10 => NULL}; END;--:124----128:-- BreakOut: PROCEDURE
 = 
BEGIN  K:PascalInteger[0..LineLength];D:AsciiCode; K←OutPtr;
{WHILE TRUE DO BEGIN IF K=0  THEN--129:--BEGIN BEGIN PascalWriteLn[file: @TermOut];
{PascalWriteLongString[file: @TermOut, item: "! Line had to be broken (output l."]; PascalWriteInteger[file: @TermOut, item: OutLine, fieldMinLength: 1]}; END;
{PascalWriteLongString[file: @TermOut, item: "):"]; PascalWriteLn[file: @TermOut]};
FOR i:INT    IN [ INT[1 ].. INT[OutPtr-1 ]] DO  K ← i; PascalWriteChar[file: @TermOut, item: Xchr↑[OutBuf↑[K]]] ENDLOOP;
PascalWriteLn[file: @TermOut];IF History=0  THEN History←1;
FlushBuffer[OutPtr-1,TRUE]; GOTO Label10; END--:129--;D←OutBuf↑[K];
IF D=32  THEN BEGIN FlushBuffer[K,FALSE]; GOTO Label10; END;
IF(D=92)AND (OutBuf↑[K-1]#92) THEN BEGIN FlushBuffer[K-1,TRUE]; GOTO Label10;
 END;K←K-1; END ENDLOOP ;EXITS Label10 => NULL}; END;--:128----131:-- OutMod: PROCEDURE[M: PascalInteger]
 = 
BEGIN K:PascalInteger[0..5];A:PascalInteger; K←0;A←M;DO Dig↑[K]← A MOD 10;
A← A /10;K←K+1; IF A=0 THEN EXIT; ENDLOOP;DO K←K-1;
BEGIN IF OutPtr=LineLength  THEN BreakOut[];OutPtr←OutPtr+1;
OutBuf↑[OutPtr]←Dig↑[K]+48; END; IF K=0 THEN EXIT; ENDLOOP;
IF ChangedModule↑[M] THEN BEGIN IF OutPtr=LineLength  THEN BreakOut[];
OutPtr←OutPtr+1;OutBuf↑[OutPtr]←92;
IF OutPtr=LineLength  THEN BreakOut[];OutPtr←OutPtr+1;
OutBuf↑[OutPtr]←42; END; END;--:131----132:
 OutName: PROCEDURE[P: NamePointer] = 
BEGIN K:PascalInteger[0..MaxBytes];W:PascalInteger[0..1];
 BEGIN IF OutPtr=LineLength  THEN BreakOut[];OutPtr←OutPtr+1;
OutBuf↑[OutPtr]←123; END;W← PascalMODPower2Mask[P ,1];
FOR i:INT    IN [ INT[ByteStart↑[P]].. INT[ INT[ByteStart↑[P+2]]-1 ]] DO  K ← i;  IF ByteMem[W, K]↑=95
 THEN BEGIN IF OutPtr=LineLength  THEN BreakOut[];OutPtr←OutPtr+1;
OutBuf↑[OutPtr]←92; END;BEGIN IF OutPtr=LineLength  THEN BreakOut[];
OutPtr←OutPtr+1;OutBuf↑[OutPtr]←ByteMem[W, K]↑; END; ENDLOOP;
BEGIN IF OutPtr=LineLength  THEN BreakOut[];OutPtr←OutPtr+1;
OutBuf↑[OutPtr]←125; END; END;--:132----133:--
END.