-- file: TangleId.mesa -- Pascal-to-Mesa translator output, translated at September 23, 1986 11:39:50 am PDT DIRECTORY PascalBasic, PascalWizardFiles, TanglePrivate, TangleProcArray; TangleId: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, TanglePrivate, TangleProcArray EXPORTS TanglePrivate = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, TanglePrivate, TangleProcArray; PrintId: PROCEDURE[P: NamePointer] = BEGIN K:PascalInteger[0..MaxBytes]; W:PascalInteger[0..1]; IF INT[P]>=NamePtr THEN PascalWriteLongString[file: @TermOut, item: "IMPOSSIBLE"] ELSE BEGIN W_ PascalMODPower2Mask[P ,1]; FOR i:INT IN [ INT[ByteStart^[P]].. INT[ INT[ByteStart^[P+2]]-1 ]] DO K _ i; PascalWriteChar[file: @TermOut, item: Xchr^[ByteMem [W, K]^]] ENDLOOP; END; END;--:49----53:-- IdLookup: PROCEDURE[T: EightBits] RETURNS[IdLookupResult: NamePointer] = BEGIN C:EightBits;I:PascalInteger[0..BufSize];H:PascalInteger[0..HashSize]; K:PascalInteger[0..MaxBytes];W:PascalInteger[0..1];L:PascalInteger[0..BufSize];P, Q:NamePointer; S:PascalInteger[0..UnambigLength]; L_IdLoc-IdFirst;--54:--H_Buffer^[IdFirst]; I_IdFirst+1;WHILE INT[I] NULL};--:55--IF(P=NamePtr)OR (T#0) THEN--57: BEGIN IF((P#NamePtr)AND (T#0)AND (Ilk^[P]=0))OR ((P=NamePtr)AND (T=0)AND ( Buffer^[IdFirst]#34)) THEN--58:--BEGIN I_IdFirst;S_0;H_0; WHILE( INT[I]=97 THEN ChoppedId^[S]_Buffer^[I]-32 ELSE ChoppedId^[S]_Buffer^[I]; H_ (H+H+ChoppedId^[S])MOD HashSize;S_S+1; END;I_I+1; END ENDLOOP ; ChoppedId^[S]_0; END--:58--;IF P#NamePtr THEN--59: BEGIN IF Ilk^[P]=0 THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! This identifier has already appeared"];Error[]; END;--60: Q_ChopHash^[H]; IF Q=P THEN ChopHash^[H]_Equiv^[P] ELSE BEGIN WHILE Equiv^[Q]#P DO Q_ Equiv^[Q] ENDLOOP ;Equiv^[Q]_Equiv^[P]; END--:60--; END ELSE BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! This identifier was defined before"];Error[]; END; Ilk^[P]_T; END--:59-- ELSE--61: BEGIN IF(T=0)AND (Buffer^[IdFirst]#34) THEN--62:--BEGIN Q_ChopHash^[H]; WHILE Q#0 DO BEGIN--63:--BEGIN K_ByteStart^[Q];S_0;W_ PascalMODPower2Mask[Q ,1]; {WHILE( INT[K]=97 THEN C_C-32;IF ChoppedId^[S]#C THEN GOTO Label32;S_S+1; END; K_K+1; END ENDLOOP ;IF(K=ByteStart^[Q+2])AND (ChoppedId^[S]#0) THEN GOTO Label32; BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Identifier conflict with "]; END; FOR i:INT IN [ INT[ByteStart^[Q]].. INT[ INT[ByteStart^[Q+2]]-1 ]] DO K _ i; PascalWriteChar[file: @TermOut, item: Xchr^[ByteMem [W, K]^]] ENDLOOP;Error[];Q_0;EXITS Label32 => NULL}; END--:63--;Q_Equiv^[Q]; END ENDLOOP ;Equiv^[P]_ChopHash^[H]; ChopHash^[H]_P; END--:62--;W_ PascalMODPower2Mask[NamePtr ,1];K_BytePtr^[W]; IF INT[K+L]>MaxBytes THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "byte memory"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END; IF INT[NamePtr]>MaxNames-2 THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "name"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;I_IdFirst; WHILE INT[I]99 THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Preprocessed string is too long"];Error[]; END; StringPtr_StringPtr+1; {PascalWriteChar[file: @Pool, item: Xchr^[ 48+L /10]]; PascalWriteChar[file: @Pool, item: Xchr^[ 48+L MOD 10]]}; PoolCheckSum_PoolCheckSum+PoolCheckSum+L; WHILE PoolCheckSum>536870839 DO PoolCheckSum_PoolCheckSum -536870839 ENDLOOP ;I_IdFirst+1; WHILE INT[I]536870839 DO PoolCheckSum_PoolCheckSum -536870839 ENDLOOP ;IF(Buffer^[I]=34)OR (Buffer^[I]=64) THEN I_I+2 ELSE I_I+1; END ENDLOOP ; PascalWriteLn[file: @Pool]; END; END--:64--; END--:61--; END--:57--;IdLookupResult_P; END;--:53----66: ModLookup: PROCEDURE[L: SixteenBits] RETURNS[ModLookupResult: NamePointer] = BEGIN C:PascalInteger[0..4]; J:PascalInteger[0..LongestName];K:PascalInteger[0..MaxBytes];W:PascalInteger[0..1];P:NamePointer;Q:NamePointer; C_2;Q_0;P_Ilk^[0];{WHILE P#0 DO BEGIN--68: BEGIN K_ByteStart^[P];W_ PascalMODPower2Mask[P ,1];C_1;J_1; WHILE( INT[K]L THEN C_1 ELSE C_4 ELSE IF INT[J]>L THEN C_ 3 ELSE IF INT[ModText^[J]]MaxBytes THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "byte memory"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END; IF INT[NamePtr]>MaxNames-2 THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "name"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;P_NamePtr; IF C=0 THEN Link^[Q]_P ELSE Ilk^[Q]_P;Link^[P]_0;Ilk^[P]_0;C_1; Equiv^[P]_0;FOR i:INT IN [ INT[1 ].. INT[L ]] DO J _ i; ByteMem[W, INT[K+J]-1]^_ModText^[J] ENDLOOP; BytePtr^[W]_ INT[K]+L;ByteStart^[NamePtr+2]_ INT[K]+L;NamePtr_NamePtr+1;--:67--EXITS Label31 => NULL};IF C#1 THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Incompatible section names"];Error[]; END;P_0; END; ModLookupResult_P; END;--:66----69: PrefixLookup: PROCEDURE[L: SixteenBits] RETURNS[PrefixLookupResult: NamePointer] = BEGIN C:PascalInteger[0..4]; Count:PascalInteger[0..MaxNames];J:PascalInteger[0..LongestName];K:PascalInteger[0..MaxBytes];W:PascalInteger[0..1]; P:NamePointer;Q:NamePointer;R:NamePointer; Q_0;P_Ilk^[0]; Count_0;R_0;WHILE P#0 DO BEGIN--68:--BEGIN K_ByteStart^[P];W_ PascalMODPower2Mask[P ,1]; C_1;J_1; WHILE( INT[K]L THEN C_1 ELSE C_4 ELSE IF INT[J]>L THEN C_ 3 ELSE IF INT[ModText^[J]]MaxToks THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "token"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;TokMem[Z, TokPtr^[Z]]^_ PascalDIVPower2[X ,8]; TokMem[Z, TokPtr^[Z]+1]^_ PascalMODPower2Mask[X ,255];TokPtr^[Z]_TokPtr^[Z]+2; END;--:73 END.