-- file: TangleInput.mesa -- Pascal-to-Mesa translator output, translated at September 14, 1985 3:58:20 pm PDT DIRECTORY PascalBasic, PascalWizardFiles, TanglePrivate; TangleInput: PROGRAM IMPORTS PascalWizardFiles, TanglePrivate EXPORTS TanglePrivate = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, TanglePrivate; LinesDontMatch: PROCEDURE RETURNS[LinesDontMatchResult: PascalBoolean] = BEGIN K:PascalInteger[0..BufSize]; LinesDontMatchResult←TRUE; {IF ChangeLimit#Limit THEN GOTO Label10; IF INT[Limit]>0 THEN FOR i:INT IN [ INT[0 ].. INT[Limit-1 ]] DO K ← i; IF ChangeBuffer↑[K]#Buffer↑[K] THEN GOTO Label10 ENDLOOP;LinesDontMatchResult←FALSE;EXITS Label10 => NULL}; END;--:127----128: PrimeTheChangeBuffer: PROCEDURE = BEGIN K:PascalInteger[0..BufSize]; --130:-- --131:-- ChangeLimit←0;--129:--{{WHILE TRUE DO BEGIN Line←Line+1; IF NOT InputLn[@ChangeFile] THEN GOTO Label10;{IF INT[Limit]<2 THEN GOTO Label22; IF Buffer↑[0]#64 THEN GOTO Label22; IF( INT[Buffer↑[1]]>=88)AND ( INT[Buffer↑[1]]<=90) THEN Buffer↑[1]←Buffer↑[1]+32; IF Buffer↑[1]=120 THEN GOTO Label30; IF(Buffer↑[1]=121)OR (Buffer↑[1]=122) THEN BEGIN Loc←2; BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Where is the matching @x?"]; Error[]; END; END;EXITS Label22 => NULL}; END ENDLOOP ;EXITS Label30 => NULL};--:129--DO Line←Line+1; IF NOT InputLn[@ChangeFile] THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Change file ended after @x"];Error[]; END; GOTO Label10; END; IF INT[Limit]>0 THEN EXIT; ENDLOOP;--:130--BEGIN ChangeLimit←Limit; FOR i:INT IN [ INT[0 ].. INT[Limit ]] DO K ← i; ChangeBuffer↑[K]←Buffer↑[K] ENDLOOP; END--:131--;EXITS Label10 => NULL}; END;--:128 --132:-- CheckChange: PROCEDURE = BEGIN N:PascalInteger;K:PascalInteger[0..BufSize]; {IF LinesDontMatch [] THEN GOTO Label10;N←0; WHILE TRUE DO BEGIN Changing← NOT Changing;TempLine←OtherLine; OtherLine←Line;Line←TempLine;Line←Line+1; IF NOT InputLn[@ChangeFile] THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Change file ended before @y"];Error[]; END; ChangeLimit←0;Changing← NOT Changing;TempLine←OtherLine; OtherLine←Line;Line←TempLine; GOTO Label10; END;--133: IF INT[Limit]>1 THEN IF Buffer↑[0]=64 THEN BEGIN IF( INT[Buffer↑[1]]>=88)AND ( INT[Buffer↑[1 ]]<=90) THEN Buffer↑[1]←Buffer↑[1]+32; IF(Buffer↑[1]=120)OR (Buffer↑[1]=122) THEN BEGIN Loc←2; BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Where is the matching @y?"]; Error[]; END; END ELSE IF Buffer↑[1]=121 THEN BEGIN IF N>0 THEN BEGIN Loc←2; BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Hmm... "]; PascalWriteInteger[file: @TermOut, item: N, fieldMinLength: 1] ; PascalWriteLongString[file: @TermOut, item: " of the preceding lines failed to match"]};Error[]; END; END; GOTO Label10; END; END--:133--;--131:--BEGIN ChangeLimit←Limit; FOR i:INT IN [ INT[0 ].. INT[Limit ]] DO K ← i; ChangeBuffer↑[K]←Buffer↑[K] ENDLOOP; END--:131--; Changing← NOT Changing;TempLine←OtherLine;OtherLine←Line; Line←TempLine;Line←Line+1; IF NOT InputLn[@WebFile] THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! WEB file ended during a change"];Error[]; END; InputHasEnded←TRUE; GOTO Label10; END;IF LinesDontMatch [] THEN N←N+1; END ENDLOOP ; EXITS Label10 => NULL}; END;--:132----135:-- GetLine: PROCEDURE = BEGIN DO {--Label20:--IF Changing THEN--137:--BEGIN Line←Line+1; IF NOT InputLn[@ChangeFile] THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Change file ended without @z"];Error[]; END; Buffer↑[0]←64;Buffer↑[1]←122;Limit←2; END; IF INT[Limit]>1 THEN IF Buffer↑[0]=64 THEN BEGIN IF( INT[Buffer↑[1]]>=88)AND ( INT[Buffer↑[1 ]]<=90) THEN Buffer↑[1]←Buffer↑[1]+32; IF(Buffer↑[1]=120)OR (Buffer↑[1]=121) THEN BEGIN Loc←2; BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Where is the matching @z?"]; Error[]; END; END ELSE IF Buffer↑[1]=122 THEN BEGIN PrimeTheChangeBuffer[]; Changing← NOT Changing;TempLine←OtherLine;OtherLine←Line; Line←TempLine; END; END; END--:137--;IF NOT Changing THEN BEGIN--136: BEGIN Line←Line+1; IF NOT InputLn[@WebFile] THEN InputHasEnded←TRUE ELSE IF Limit=ChangeLimit THEN IF Buffer↑[0]=ChangeBuffer↑[0] THEN IF INT[ChangeLimit]>0 THEN CheckChange[]; END--:136--;IF Changing THEN GOTO Label20; END;Loc←0; Buffer↑[Limit]←32;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:135----139: END.