-- 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.