PREQ . INTERNAL SORT 1 ENTRY PER ITEM BS000100 . A0 =M BS000200 . A1 =M+1 BS000300 . A2 =J BS000400 . A3 =I BS000500 . A4 =L-1 BS000600 . A5 =TEMP BS000700 . R1 =TEMP BS000800 . 28 =K-1 BS000900 SRT1* LA A2,(1,0) J INCREMENT LA,H2 A0,0,B11 START LOC. BS001100 AN,M A0,1 -1 BS001200 SA,H2 A0,SR12 SAVE LOCATION TO USE LATER BS001300 OR A0,(0400000) BS001400 SA,H2 A1,SR15 BS001500 AN,M A0,1 (I) BS001600 SA,H2 A0,SR19 (I) BS001700 SA,H2 A0,SR191 BS001800 SA,H2 A0,SR17 BS001900 LA,H2 A0,*1,B11 M=K BS002000 ANU,M A0,1 BS002100 SA A1,R15 K-1 SR10 SSL A0,1 M/2 TO M BS002300 TG,M A0,16 BS002400 SSL A0,1 BS002500 JZ A0,2,B11 EXIT BS002600 JB A0,$+2 ODD BS002700 A,M A0,1 NO, MAKE ODD BS002800 LA A4,R15 K-M-1=L-1 AN A4,A0 BS003000 SR12 LA,M A5,$ PICK UP UNINCREMENT BITTED BS003100 A A5,A0 +M BS003200 SA,H2 A5,SR14 BS003300 AN,M A5,1 -1 BS003400 SA,H2 A5,SR18 BS003500 AU,M A0,2 A1 = M+2 FOR STOP SWITCHING BS003600 LXM,M A2,1 J=1 (1,1) BS003700 LN A3,A0 SET -M INCREMENT FOR I BS003800 SSC A3,18 BS003900 SR14 LA A5,$,A2 A5=X(I2) BS004000 SR15 TLE A5,$,*A2 X(I)VS X(I2),(J+1) TO 5 BS004100 J SR171 BS004200 SR16 JGD A4,SR14 L-1 VS 0 (OR=J VS L) BS004300 J SR10 BIG LOOP BS004400 SR171 LXM A3,A2 A3=(-M,J+1)=I BS004500 SR17 LR R1,$,A3 SWITCH VALUES BS004700 SR18 SR R1,$,A3 BS004800 SR19 SA A5,$,A3 BS004900 TLEM A3,A1 I(=J+1) VS M(+1) BS005000 J SR16 BS005100 SR191 TLE A5,$,A3 TEST X(I) VS. X(I2) BS005200 J SR17 NO SWITCH BS005300 JGD A4,SR14 L-1 VS 0(OR=J VS L) BS005400 J SR10 BIG LOOP BS005500 . INTERNAL SORT WITH TWO WORDS PER ITEM, ONLY ONE WORD PER KEY BS005600 . LMJ B11,SRT2 BS005700 . + FWA LOCATION OF TABLE BS005800 . + L(K) COUNT LOCATION BS005900 . A0 =I BS006000 . A1 =J BS006100 . A2 =M BS006200 . A3 =2M BS006300 . A4 =2M+2 BS006400 . A5 =TEMP BS006500 . R1 =TEMP BS006600 . R2 =TEMP BS006700 . 28 =K-1 BS006800 . 29 =L-1 BS006900 SRT2* LA A1,(2,0) J INCREMENT LA,H2 A4,0,B11 FWA BS007100 AN,M A4,2 -2 BS007200 SA,H2 A4,SR22 SAVE NON INCREMENT BITTED BS007300 OR A4,(0400000) SET INCREMENT BIT BS007400 SA,H2 A5,SR25 BS007500 AN,M A4,2 -4 BS007600 SA,H2 A4,SR27 BS007700 SA,H2 A4,SR27+2 BS007800 SA,H2 A4,SR28 BS007900 A,M A4,1 BS008000 SA,H2 A4,SR27+3 BS008100 SA,H2 A4,SR27+6 BS008200 LA,H2 A2,*1,B11 K TO M BS008300 ANU,M A2,1 -1 BS008400 SA A3,R15 . K-1 SR20 SSL A2,1 M/2 BS008600 TG,M A2,16 LARGE BS008700 SSL A2,1 M/2 BS008800 JZ A2,2,B11 EXIT BS008900 JB A2,$+2 ODD BS009000 A,M A2,1 MAKE ODD UP BS009100 LA A4,R15 K-1 AN A4,A2 K-1-M=L-1 BS009300 SA A4,R3 L-1 LXM,M A1,2 A1=J=2 BS009500 LN A0,A2 -M BS009600 SSC A0,17 A0=-2M TO INCREMENT I BS009700 AU A2,A2 A3=2M BS009800 AU,M A3,4 A3 = 2M+4 FOR TEST BS009900 SR22 LA,M A5,$ PICKUP ADDRESS BS010000 A A5,A3 +2M BS010100 SA,H2 A5,SR24 BS010200 AN,M A5,2 BS010300 SA,H2 A5,SR27+1 BS010400 A,M A5,1 BS010500 SA,H2 A5,SR27+4 BS010600 SA,H2 A5,SR27+5 BS010700 SR24 LA A5,$,A1 X(I2) BS010800 SR25 TLE A5,$,*A1 X(I) VS X(I2) BS010900 J SR271 SWITCH X'S BS011000 SR26 JGD R3,SR24 THRU LIST J SR20 BIG LOOP BS011200 SR271 LXM A0,A1 (J+2) TO I BS011300 SR27 LR R1,$,A0 I BS011500 SR R1,$,A0 I2 BS011600 SA A5,$,A0 I BS011700 LR R1,$,A0 I(+1) BS011800 LR R2,$,A0 I2(+1) BS011900 SR R1,$,A0 I2(+1) BS012000 SR R2,$,A0 I(+1) BS012100 TLEM A0,A4 BS012200 J SR26 BS012300 SR28 TLE A5,$,A0 I BS012400 J SR27 BS012500 JGD R3,SR24 J SR20 BIG LOOP BS012700 . FORT $(2) . . SEARCH A LINKED TABLE B054410 . VALUE SOUGHT IS IN A4 (X) B054420 . CALLING SEQUENCE B054430 . LMJ B11 CALL B054440 . L(H) START OF LINKED TABLE B054450 . J RETURN WITHOUT FINDING X B054460 . RETURN WITH A1 = LOCATION OF X B054470 . USES A0 FOR K (COUNT OF LEVELS) B054480 . SRV IS TEMPORARY TABLE WITH FLAG AND LINK B054490 . SRV = 0 OR NON -0 (=RIGHT/LEFT LINK), LINK ADDRESS 54500 SLT* L A0,(1,1) LA,1 A1,0,B11 LOC H TO TABLE SRV B054530 SA A1,SRV B054540 SLT1 LA,1 A1,1,A1 RIGHT LINK TO A1 B054550 SA A1,SRV,*A0 LINK TO SRV+K B054560 TNE,M A1,CRLC TEST FOR LAST LINK B054570 J 1,B11 END OF CHAIN - NOT FOUND B054580 SLT2 TNE A4,0,A1 COMPARE X VS A LINK VALUE B054590 J SLT2E TG A4,0,A1 TEST X LESS THAN LINK VALUE B054610 J SLT1 X GT, SET RIGHT LINKAGE B054620 SA,2 A0,SRV,A0 SET FLAG NON 0 B054630 LA,2 A1,1,A1 A1 = A LEFT LINK TO SRV+K B054640 SA,1 A1,SRV,*A0 K TO K+1 B054650 TE,M A1,CRLC ALL DONE B054660 J SLT2 NO B054670 J 1,B11 YES,X NOT IN TABLE B054680 . SEARCH 2 WORDS IN A LINKED TABLE B054700 . A4 = X1 AT ENTRY B054710 . A5 = X2 AT ENTRY (LOC(X2) = LOC(X1)+3) B054720 SL2T* L A0,(1,1) LA,H2 A1,0,B11 LOC H TO TABLE SRV B054750 SA A1,SRV B054760 SL21 LA,1 A1,1,A1 RIGHT LINK TO A1 B054770 SA A1,SRV,*A0 LINK TO SRV+K TABLE B054780 TNE,M A1,CRLC LAST LINK B054790 J 1,B11 B054800 SL22 TNE A4,0,A1 X VS A LINKED VALUE B054810 J SL24 B054820 SL23 TG A4,0,A1 X LT LINK VALUE B054830 J SL21 RIGHT LINK B054840 SA,2 A0,SRV,A0 LEFT LINK B054850 LA,2 A1,1,A1 GET LEFT LINK B054860 SA,1 A1,SRV,*A0 INSERT IN TABLE B054870 TE,M A1,CRLC B054880 J SL22 B054890 J 1,B11 B054900 SL24 TE A5,3,A1 B054910 J SL23 B054920 SLT2E TNZ,H2 CRCRFT . TEST FOR CROSS REFERENCE FILE J 2,B11 EXIT, BOTH EQUAL B054930 SLJ CRSVE S,H1 A1,SLCRX L A2,SEQNO S,H2 A2,SLCRX L A2,ST S,H1 A2,SLCRX+1 SZ,H2 SLCRX+1 L A4,MAUPFX AND,M A4,07777 L,H1 A4,0,A1 . SIMULATE L,T1 A2,0,A1 L,H1 A2,COMMAC SSL A2,6 SSL A4,6 . TNE,T3 A2,MAUPFX TNE A4,A5 TZ A2 . SIMULATE TZ,T1 COMMAC LMJ B11,TRCF . PUT ENTRY INTO CROSS REF FILE SLJ CRRSV J 2,B11 . INSERT X (IN A4 ON ENTRY) INTO LINKED TABLE, WITH B054950 . LOCATION GIVEN IN CRYSM B054960 . *A0 = K+1 ENTRY, K LATER (LINK COUNT) B054970 . A1 = V(K) B054980 . A2 = V(K-1) B054990 . A3 = V(K-2) AND TEMPORARY B055000 . *A4 = X AT ENTRY AND TEMPORARY OTHERWISE B055010 . A5 = TEMPORARY (AT ENTRY OF SL2TI = 2ND SYMBOL) B055020 . R1 = TEMPORARY B055030 . 29 = TEMPORARY (SAVES ORIGINAL CRYSM) B055040 . LMJ B11,SLTI B055050 . .. RETURN B055060 . OR B055070 . LMJ B11,SL2TI B055080 . .. RETURN B055090 SLTI* SZ A5 SET WORD 4 = 0 B055100 SL2TI* TG A0,(1,20) + 0 ERROR OUT SLTEXA L,H2 A1,CRSYM AU,M A1,8 TG,H2 A2,CRSFNX J SLTEXB L A1,CRSYM ANA,M A0,1 K-1 TO K B055120 S A4,0,A1 STORE X B055130 S,H2 A1,SRV,A0 B055140 S A1,TB . SAVE X LOC FOR OUTPUT SZ 2,A1 WORD 3, SET (A1)+4 = A1 B055160 SA A5,3,*A1 B055170 S,H2 A1,CRSYM SET FOR NEXT STORE B055180 AN,M A1,4 A1 RESET TO STORE LOC B055190 SLTINX* . ENTRY FOR MULTI LENGTH SYMBOLS L R1,(CRLC,CRLC) S R1,1,A1 LINKS = LC (S+1) B055220 L,M R1,1 B055230 S,S1 R1,2,A1 COUNT = 1 (S+2) B055240 L,M A5,CRLC A5 SET LOW CT. TEST B055250 L,H2 A2,SRV-1,A0 V(K-1) TO A2 B055260 TNZ,H1 SRV,A0 F(K)VS 0 B055270 J SLS1 RIGHT LINK B055280 SA,H1 A1,1,A2 V(K) TO L.V(K-1) B055290 TE,H2 A5,1,A2 R.V(K-1) VS (0,LC) B055300 J SLS8+1 NE, EXIT B055310 SLT3 LA,H2 A3,SRV-2,A0 V(K-2) TO A3 B055320 TZ,H1 SRV-1,A0 F(K-1) = 0 B055330 J SLT4 LEFT LINK B055340 LA,2 A3,1,A3 A3 = L.V(K-2) B055350 LA,S1 A4,2,A2 A4 = CT.V(K-1),TIME KILLER B055360 LA,S1 A5,2,A3 A5 = CT.L.V(K-2) B055370 TG,S1 A5,2,A1 CT.V(K) VS CT.L.V(K-2) B055380 J SLS5 OTHER LOOP (USES A4) B055390 LA,H2 A3,SRV-2,A0 A3 = V(K-2) B055400 LR,H1 R1,1,A1 B055410 SR,H2 R1,1,A3 L.V(K) TO R.V(K-2) B055420 LR,H2 R1,1,A1 R.V(K) TO L.V(K-1) B055430 SR,H1 R1,1,A2 B055440 SA,H1 A3,1,A1 V(K-2) TO L.V(K) B055450 SA,H2 A2,1,A1 V(K-1) TO R.V(K) B055460 J SLS7 B055470 SLT4 LA,H2 A3,1,A3 A3 = R.V(K-2) B055480 LA,S1 A4,2,A2 CT.V(K-1) (TIME KILLER) B055490 LA,S1 A5,2,A3 CT.R.V(K-2) B055500 TG,S1 A5,2,A1 CT.V(K) VSCT R.V(K-2) B055510 J SLT5 (USES A4) B055520 LA,H2 A3,SRV-2,A0 A3 = V(K-2) B055530 LR,H2 R1,1,A2 B055540 SR,H1 R1,1,A3 R.V(K-1) TO L.V(K-2) B055550 SA,H2 A3,1,A2 V(K-2) TO R.V(K-1) B055560 J SLS6 B055570 SLT5 AA,M A4,1 CT.V(K-1)+1 B055580 SA,S1 A4,2,A2 CT.V(K-1)+1 TO CT.V(K-1) B055590 LA,H2 A2,SRV-2,A0 A2 = NEW V(K-1) B055600 LA,H2 A1,SRV-1,A0 A1 = NEW V(K) B055610 LA,H2 A3,1,A2 A3 = NEW R.V(K-1) B055620 ANA,M A0,1 SET K-1 TO K(NEW) B055630 LA,S1 A5,2,A3 A5 = CT.R.V(K-1) B055640 TG,S1 A5,2,A1 CT.V(K) VS CT.R.V(K-1) B055650 J SLS8+1 EXIT B055660 J SLT3 GO AROUND AGAIN B055670 SLS1 SA,H2 A1,1,A2 V(K) TO R.V(K-1) B055680 TE,H1 A5,1,A2 R.V(K-1) VS (0,LC) B055690 J SLS8+1 EXIT B055700 SLS3 LA,H2 A3,SRV-2,A0 A3 = V(K-2) B055710 TNZ,H1 SRV-1,A0 F(K-1) B055720 J SLS4 RT. LINK B055730 LA,H2 A3,1,A3 A3= R.V(K-2) B055740 LA,S1 A4,2,A2 A4 = CT.V(K-1)-TIME KILLER B055750 LA,S1 A5,2,A3 A5= CT.R.V(K-2) B055760 TG,S1 A5,2,A1 CT.V(K) VS CT. R.V(K-2) B055770 J SLT5 B055780 LA,H2 A3,SRV-2,A0 A3 = V(K-2) B055790 LR,H2 R1,1,A1 B055800 SR,H1 R1,1,A3 R.V(K) TO L.V(K-2) B055810 LR,H1 R1,1,A1 B055820 SR,H2 R1,1,A2 L.V(K) TO R.V(K-1) B055830 SA,H2 A3,1,A1 V(K-2) TO R.V(K) B055840 SA,H1 A2,1,A1 V(K-1) TO L.V(K) B055850 J SLS7 B055860 SLS4 LA,2 A3,1,A3 A3 = L.V(K-2) B055870 LA,S1 A4,2,A2 A4 = CT.V(K-1),TIME KILLER B055880 LA,S1 A5,2,A3 A5 = CT.L.V(K-2) B055890 TG,S1 A5,2,A1 CT.V(K) VS. CT.L.V(K-2) B055900 J SLS5 (USES A4) B055910 LA,H2 A3,SRV-2,A0 A3 = V(K-2) B055920 LR,H1 R1,1,A2 B055930 SR,H2 R1,1,A3 L.V(K-1) TO R.V(K-2) B055940 SA,H1 A3,1,A2 V(K-2) TO L.V(K-1) B055950 J SLS6 B055960 SLS5 AA,M A4,1 B055970 SA,S1 A4,2,A2 CT.V(K-1)+1 TO CT.V(K-1) B055980 LA,H2 A2,SRV-2,A0 A2 = NEW V(K-1) B055990 LA,H2 A1,SRV-1,A0 A1 = NEW V(K) B056000 LA,H1 A3,1,A2 A3 = L.V(K-1) B056010 ANA,M A0,1 K-1 TO K (NEW) B056020 LA,S1 A5,2,A3 A5 = CT.L.V(K-1) B056030 TG,S1 A5,2,A1 CT.V(K) VS. CT.L.V(K-1) B056040 SLT8 J SLS8+1 EXIT B056050 J SLS3 GO AROUND AGAIN B056060 SLS6 SA,1 A2,SRV,A0 V(K-1) TO V(K) B056070 LA A1,A2 B056080 SLS7 LA,13 A5,2,A3 CT V(K-2) B056090 ANA,14 A5,1 -1 B056100 SA,13 A5,2,A3 B056110 LA,S1 A5,2,A1 B056120 AA,M A5,1 +1 B056130 SA,S1 A5,2,A1 B056140 LA,1 A2,SRV-3,A0 A1 = V(K-3) B056150 TZ,H1 SRV-2,A0 FLAG FOR 2 LEVELS BACK B056160 J SLS8 B056170 SA,1 A1,1,A2 V(K) TO R.V(K-3) B056180 LA,H2 A1,TB . EXIT J $+3 SLS8 SA,2 A1,1,A2 B056210 LA,H2 A1,TB . EXIT TNZ,H2 CRCRFT J 0,B11 B056230 SLS8CR SLJ CRSVE . SAVE REGISTERS L A1,TB . SYM REFERENCE S,H1 A1,SLCRX L A0,SEQNO . INTERNAL SEQUENCE NUMBER S,H2 A0,SLCRX . OF INSERTION JN A1,0,B11 . NO CROSS REFERENCE FOR LONG NAMES L A0,ST S,H1 A0,SLCRX+1 L,M A0,2 S,S1 A0,SLCRX+1 . FLAG FOR INSERTION L A4,MAUPFX AND,M A4,07777 L,H1 A4,0,A1 . SIMULATE L,T1 A2,0,A1 L,H1 A2,COMMAC SSL A2,6 SSL A4,6 . TNE,T3 A2,MAUPFX TNE A4,A5 TZ A2 . SIMULATE TZ,T1 COMMAC LMJ B11,TRCF . PUT ENTRY INTO CROSS REFERNCE SLJ CRRSV . RESTORE REGISTERS J 0,B11 SLTEXB S A0,SVA0 S A4,SVA4 SLJ SYMEXP J SYMOFA L A0,SVA0 L A4,SVA4 J SLTEXA TSCSYM* J $-$ . TEST IF ROOM AVAIL. FOR TSCSYA S A0,SVA0 L,H2 A0,CRSYM A,M A0,8 TLE,H2 A0,CRSFNX J TSCSYB DS A1,SVA1 S A3,SVA3 SLJ SYMEXP J SYMOFA DL A1,SVA1 L A3,SVA3 TSCSYB L A0,SVA0 J *TSCSYM SYMEXP* J $-$ L,S1 A0,SYMBRK TG,S3 A0,SYMBRK J SYMEXA NO MORE EXPANSIONS POSSIBLE L,H2 A1,SYMBRK+1,A0 AU,M A1,05000 TG,H2 A2,SYMBRK J SYMEXA NO ROOM LEFT TO EXPAND IN A,M A1,3 SSL A1,2 LSSL A1,2 MAKE ADDRESS MOD 4 S,H1 A1,SYMBRK+2,A0 L,H2 A3,CRSYM CURRENT LAST ADDRESS S,H1 A3,SYMBRK+1,A0 S,H2 A1,CRSYM SET NEW VALUE OF CRSYM S,H2 A2,SYMBRK+2,A0 AN,M A2,1 S,H2 A2,CRSFNX A,M A0,1 S,S1 A0,SYMBRK L A0,A2 ER MCORE$ L A0,SYMEXP A,M A0,1 J 0,A0 SYMEXA J *SYMEXP ERROR EXIT NO SPACE AVAILABLE SYMOF* SYMOFA* NOP . L A0,(0204,ERMSG) ER PRINT$ S R15,CRFL L A0,N0CCTL TE,M A0,1 J RP6 L,M A0,(040100,0) . END OF FILE ITEM FOR F60 L,M A1,1 . LENGTH IS ONE L,M A2,0 . NO TRAILING CONTROL WORDS L,M A3,0 . FORCE TO FIELDATA LMJ B11,W60F . PLACE ITEM IN F60 WF60B . WRITE LAST BLOCK, CLOSE FILE J RP6 ERMSG 'SYMBOL TABLE OVERFLOW' . PRQEST: REQUEST PERMENANT SPACE IN SYM REENT . TRQEST: REQUEST TEMPERARY SPAVE IN SYM REENT . ON ENTRY: A0= NUMBER OF WORDS REQUESTED REENT . ON EXIT: A0=(TOP OF BLOCK,BOTTOM OF BLOCK) REENT . CALLING SEQUENCE: A LMJ B11,PRQEST/TRQEST REENT . A+1 ERROR RETURN REENT MPRQST* . REQUEST PERMANT SPACE FOR MACROS S A0,SVA0 LMJ A3,SYMAAF . LOOK FOR SPACE J $+2 J RQST11 . SET UP DEFINITIONS OF SPACE L A0,SVA0 . A+2 NORMAL RETURN REENT . REENT PRQEST* LN A0,A0 . AT END: COUNT + IMPLIES PRQEST ENTRY REENT TRQEST* LN A0,A0 . COUNT - IMPLIES TRQEST ENTRY REENT DS A1,SVA1 S A3,SVA3 RQST10 L,H2 A1,CRSFNX . NEXT SYM ADDR REENT L,M A2,1,A1 . NEXT SYM ADDR+1 REENT ANM,XM A2,0,A0 TG,H2 A2,CRSYM . ENOUGH ROOM? REENT J RQST15 . YES REENT S A0,SVA0 LM,M A0,0,A0 TP SVA0 L,M A0,1,A0 . ONE GREATER FOR TRQEST SZ MCEXPD . IF EXPANSION TAKES PLACE NOTHING TO GI LMJ A3,SYMALC J RQST12 . NOT AVAILABLE, TRY SYMEXP. RQST11 TN SVA0 J $+3 LMJ A3,SYMFRE . FOR TRQEST. RELEASE SPACE. L,M A1,1,A1 . PROTECT FQE. L A2,A1 . LOWEST ADDR ('TOP') AM A2,SVA0 AN,M A2,1 . HIGHEST ('BOTTOM') DSC A1,36 J RQST50 RQST12 SLJ SYMEXP J RQST90 . SORRY CAN'T REENT L A0,SVA0 J RQST10 . OK, START AGAIN REENT RQST15 ANU,M A2,1 . ADJUST PTR REENT TN A0 . SKIP IF TRQEST ENTRY REENT S,H2 A3,CRSFNX . NO, PRQEST ENTRY REENT RQST50. LXI A0,A2 . TOP OF BLOCK REENT LXM A0,A1 . BOTTOM OF BLOCK REENT A,M B11,1 . FOR NORMAL RETURN REENT RQST90 DL A1,SVA1 L A3,SVA3 J 0,B11 . EXIT REENT . REENT . MTCT: MOVE TO CONTIGUIOUS TABLE REENT . ON ENTRY: A0=(LENGTH OF TABLE,LOCATION OF TABLE) REENT . IF LNG IS + THEN TABLE IS PUT IN UP-SIDE-DOWN REENT . IF LNG IS - THEN TABLE IS PUT IN RIGHT SIDE UP REENT . ON EXIT: A0=(TOP OF BLOCK,BOTTOM OF BLOCK) REENT . CALLING SEQUENCE A LMJ B11,MTCT REENT . A+1 ERROR RETURN REENT . A+2 NORMAL RETURN REENT . REENT MTCT* DS A1,SVA1 S A3,SVA3 MTCT10 LM A1,A0 . REENT SSL A1,18 . A1=WORD COUNT REENT L R1,A1 REENT L,H2 A2,CRSFNX . NEXT ADDR IN SYM REENT ANU,M A2,0,A1 . COMPUTE TOP-1 REENT TG,H2 A3,CRSYM . ENOUGH ROOM? REENT J MTCT15 . YES REENT S A0,SVA0 LM,M A0,0,A1 LMJ A3,SYMALC J MTCT12 CAN'T L A3,A1 LOW ADDR ('TOP') L A2,A1 A A2,A0 AN,M A2,1 HIGH ADDR ('BOT') L A0,SVA0 J MTCT17 MTCT12 SLJ SYMEXP J MTCT90 . SORRY CAN'T REENT L A0,SVA0 J MTCT10 . OK, START AGAIN REENT MTCT15 S,H2 A3,CRSFNX . UPDATE SYM PTR REENT A,M A3,1 . TOP REENT MTCT17. LXI A2,(-1) . SYM INCREMENT REENT LXM A1,A0 . SOURCE ADDR REENT LXI,M A1,1 . SOURCE ADDR REENT LXM A0,A2 . BOTTOM REENT JP A0,MTCT20 . WORD COUNT +? REENT LXM A2,A3 . SYM ADDR (TOP) REENT LXI,M A2,1 . SYM INCREMENT REENT MTCT20 LXI A0,A3 . TOP REENT BT A2,0,*A1 . MOVE TO SYM REENT A,M B11,1 . FOR NORMAL RETURN REENT MTCT90 DL A1,SVA1 L A3,SVA3 J 0,B11 . EXIT REENT . REENT . MTLT: MOVE TO LINKED TABLE REENT . ON ENTRY: A0=(LENGTH OF TABLE,LOCATION OF TABLE) REENT . IF LNG IS + THEN TABLE IS PUT IN UP-SIDE-DOWN REENT . IF LNG IS - THEN TABLE IS PUT IN RIGHT SIDE UP REENT . MLINK=TABLE LINK FLAG REENT . ON EXIT: A0=(TOP OF TABLE,BOTTOM OF TABLE) REENT . AND GROUP IS FULLY LINKED IN TABLE REENT . CALLING SEQUENCE: A LMJ B11,MTLT REENT . A+1 ERROR RETURN REENT . A+2 NORMAL RETURN REENT . REENT MTLT* DS A1,SVA1 DS A3,SVA3 S A5,SVA5 S R2,SVR2 MTLT10 LM A1,A0 . REENT SSL A1,18 . A1=WORD COUNT REENT L R1,A1 REENT A,M A1,1 . ADD 1 TO COUNT FOR LINK REENT L,H2 A2,CRSFNX . NEXT ADDR IN SYM REENT ANU,M A2,0,A1 . TOP OF TABLE - 1 REENT TG,H2 A3,CRSYM . ENOUGH ROOM? REENT J MTLT15 . YES REENT S A0,SVA0 LM,M A0,0,A1 LMJ A3,SYMALC J MTLT12 L A3,A1 AN,M A3,1 LOW ADDR -1 L A2,A3 A A2,A0 HIGH ADDR. L A0,SVA0 J MTLT17 MTLT12 SLJ SYMEXP J MTLT90 . SORRY CAN'T REENT L A0,SVA0 J MTLT10 . OK, START AGAIN REENT MTLT15 S,H2 A3,CRSFNX . UPDATE SYM PTR REENT MTLT17. L R2,A2 LOCATION TO LINK TO REENT L A4,MLINK REENT LXM,M A1,0,A0 . SOURCE ADDRESS REENT LXI,M A1,1 . INCREMENT REENT LXM A0,A2 . BOTTOM REENT JP A0,MTLT20 . COUNT +? REENT LXI,M A2,1 . SYM INCREMENT REENT LXM,M A2,2,A3 . BEGIN REENT LXI A0,A2 . TOP REENT J MTLT25 REENT MTLT20 LXI,M A0,1,A3 . TOP REENT LXI A2,(-1) . SYM INCREMENT REENT MTLT25 BT A2,0,*A1 . MOVE TO SYM REENT TN A2 L,M A2,1,A3 S A4,1,A3 . STORE LINK FLAG REENT LM A4,A4 REENT AND A4,(077,0) . PICK UP INDEX FROM LINK REENT SSL A5,18 . MOVE INDEX TO H2 REENT L A1,A5 . GET IT IN INDEX REG REENT L,H2 A3,*MTLT99,A1 . OLD END REENT JZ A3,MTLT30 . JUMP IF FIRST TIME THRU REENT S,H2 R2,0,A3 . LINK UP REENT J MTLT35 REENT MTLT30 S,H1 R2,*MTLT99,A1 . BEGIN REENT MTLT35 S,H2 A2,*MTLT99,A1 . NEW END REENT A,M B11,1 . FOR NORMAL RETURN REENT MTLT90 DL A1,SVA1 DL A3,SVA3 L A5,SVA5 L R2,SVR2 J 0,B11 . EXIT REENT $(2) . MTLT99 +0 REENT +CRSFL REENT +AREFI REENT +EQVTI REENT +0 REENT +COMVB . POINTER TO COMMON VARIABLES +CRLNLB . (-106) LINK FOR LABELLED COMMON +CRLNAR (-107) LINK FOR DUMMY ARGUMENTS +CRLNSB (-108) LINK FOR SUBROUTINE ENTRIES +CRLNIF (-109) LINK FOR INTERNAL FUNCTIONS $(2) . . SYMAAF* . SYMALO. THIS ROUTINE ALLOCATES NUMBER OF WORDS IN A0 FROM THE FREE . SPACE POOL IN SYM. RETURNS TO NEXT INS IF NOT AVALABLE, NEXT . INS + 1 WITH LOC IN A1 IF SUCCESSFUL. CALL BY LMJ A3. A0 PRESER . S,H2 A3,('SYMALS') L,M A1,FQEHLK . A1 -- LAST FQE. SYMAL1 L,H2 A2,0,A1 . A2 -- CURRENT FQE. TZ,H1 0,A2 J $+3 SYMALX L,H2 A3,('SYMALS') . UNSUCCESSFUL. J 0,A3 TNE,XH1 A0,0,A2 J SYMAL2 . EXACTLY EQUAL. TLE,H1 A0,0,A2 J $+3 . GOOD ENOUGH. LDSL A1,36 . ADVANCE TO NEXT FQE. J SYMAL1 AU A2,A0 . A3 -- NEW FQE. S,H2 A3,0,A1 . LINK LAST TO NEW. L A1,0,A2 . OLD FQE. LSSL A0,18 AN A1,A0 . MAKE NEW FQE, STASH. S A1,0,A3 SSL A0,18 . REALIGN LENGTH. J $+3 SYMAL2 L,H2 A3,0,A2 . REMOVE THIS FQE FROM QUEUE. S,H2 A3,0,A1 LDSL A1,36 . RESULT IN A1. L,H2 A3,('SYMALS') J 1,A3 . SYMFRE*. THIS ROUTINE RELEASES NUMBER OF WORDS IN A0 AT LOC IN A1 AND . ADDS TO THE SYM FREE SPACE POOL. CALL LMJ A3. A1 PRESERVED. . S,H2 A3,('SYMALS') S,H1 A0,0,A1 . START TENTATIVE FQE. L,M A2,FQEHLK . A2 -- POSSIBLE NEXT-LOWER. L,H2 A3,0,A2 IF NEXT FOE TZ,XH1 0,A3 . IS HEADLINK TLE,H2 A1,0,A2 . OR IS PAST NEW FREE AREA, J $+3 . WE'RE WHERE WE WANT TO BE. L,H2 A2,0,A2 J $-5 . TRY NEXT. S,H2 A3,0,A1 . LINK EVERYONE UP. S,H2 A1,0,A2 . A A0,A1 . SEE IF CURRENT CAN BE TE A0,A3 . COMBINED WITH NEXT. J SYMFR1 . NO. L,H1 A0,0,A1 . YES. LSSL A0,18 . MODIFY FOLLOWING FQE A A0,0,A3 . WITH NEW LENGTH S A0,0,A1 . AND REPLACE NEW. SYMFR1 L,M A0,0,A2 . SEE IF CURRENT A,H1 A0,0,A2 . CAN COMBINE WITH LAST. TE A0,A1 J SYMALX . NO. L,H1 A0,0,A2 . YES. MODIFY NEW FQE LSSL A0,18 . WITH LENGTH OF LAST. A A0,0,A1 S A0,0,A2 J SYMALX . RETURN. . SYMALC. THIS ROUTINE ALLOCATES LENGTH IN A0 FROM FREE STORAGE POOL IF . AVAILABLE... IF NOT, MACROS ARE RELEASED UNTIL IT IS. . L A0,LENGTH . LMJ A3,SYMALC . J ERROR . --- GOOD. A0 PRESERVED, A1 -- LOWEST ADDR OF ALLOCATION. . S,H2 A3,SYMALT S A0,('A0SV02') SALC1 LMJ A3,SYMALO ATTEMPT ALLOCATION. J $+3 WHOOPS. SALC1J L,H2 A3,SYMALT J 1,A3 L,M A3,0 BEST PRIORITY. L,M A2,0 BEST LOCATOR. L,H2 A1,MLBHL FIRST LOCATOR. SALC2 TNZ A1 J SALC3 OUT OF LOCATORS. TZ,H2 2,A1 IN CORE AND TZ,S3 0,A1 AVAILABLE? J $+3 NO. TG,H1 A3,2,A1 THIS ONE BETTER? J $+3 YES L,H2 A1,0,A1 NO J SALC2 L,H1 A3,2,A1 NEW BEST. L,M A2,0,A1 J $-4 NSALC3* . REFERENCED FROM N1MAC SALC3 TNZ A2 DID WE GET ONE? J SALC6 NO S B8,('TEMPB8') YES. GET SET TO RELEASE IT. L,H2 B8,2,A2 SZ,H2 2,A2 SALC4 TNZ B8 J SALC5 DONE RELEASING. L,H1 A0,0,B8 A,M A0,1 L,M A1,0,B8 L,H2 B8,0,B8 LMJ A3,SYMFRE J SALC4 SALC5 L B8,('TEMPB8') L A0,('A0SV02') TNZ,H1 SYMALT . TEST FOR ENTRANCE FROM MACRO J SALC1 GO GIVE IT ANOTHER TRY. SZ,H1 SYMALT J SALC1J SALC6 L A0,('A0SV02') L,H2 A3,SYMALT J 0,A3 . FNLBCK* J $-$ . COMMON ROUTINE TO FIND LABELLED COMMON BLOCK DS A0,N0RGSA . FREE UP SOME REGISTERS TE,H2 A13,CRLPLB TEST EQUAL LAST BLOCK J $+3 L,H1 B10,CRLPLB J SCTBLB L,H1 B10,CRLNLB . LINK TO LABELLED COMMON TNZ B10 +0 . TRAP CONTINGENCY IN EACH PHASE SCTBLA AN,M B10,3 L,M A0,07777 . SIMULATE TNE,T3 A13,1,B10 AND A0,1,B10 TNE A13,A1 J SCTBLB L,H2 B10,0,B10 TP,XM 0,B10 +0 . TRAP CONTINGENCY J SCTBLA SCTBLB S,H2 A13,CRLPLB . LAST COMMON BLOCK NUMBER S,H1 B10,CRLPLB . LOCATION OF LAST BLOCK DL A0,N0RGSA . RELOAD REGISTERS J *FNLBCK CRSVE* J $-$ . SAVE REGISTERS FOR CROSS REFERENCE ENTRY DS A0,SLSV DS A2,SLSV+2 DS A4,SLSV+4 S B11,SLSV+6 J *CRSVE CRRSV* J $-$ DL A0,SLSV DL A2,SLSV+2 DL A4,SLSV+4 L B11,SLSV+6 J *CRRSV TRCF* . THIS SECTION PUTS 2 WORDS INTO CROSS REFERENCE FILE S,H2 B11,TRCRX L,H2 A1,TSYM TP SLCRX+1 J $+5 JZ A1,$+4 AN,M A1,1 TLE,H1 A1,SLCRX J TRCRX L A1,CRCRFJ L A2,CRCRFI TRCRB JGD A2,$+2 . COUNT NUMBER OF 2 WORD ENTRIES J TRCRA L A4,CREFCT COUNT XREF ENTRIES A,M A4,1 S A4,CREFCT DL A4,SLCRX DS A4,0,*A1 S A1,CRCRFJ S A2,CRCRFI TRCRX L,M B11,$-$ J 0,B11 TRCRA L A0,CRCRFT L,H2 A2,6,A0 LOC OF ACTIVE BUFFER L,M A1,BUFN SSL A1,1 S A1,1,A2 NUMBER OF ENTRIES IN BUFFER L,H2 A0,CRCRFT LOC OF FCT LMJ B11,RFPW$ WRITE SLJ F30ERX ERROR L A0,CRCRFT L,H2 A1,6,A0 AH A1,(2,NBCW) L,M A2,BUFN SSL A2,1 . NUMBER OF ENTRIES IN BUFFER J TRCRB . REENT . ERROR STORING PROGRAM B056250 . 1 STORES DOUBLE WORD ENTRIES IN ERRT B056260 . 2 UPDATES CRE FOR FATAL, NON-FATAL ERRORS B056270 . 3 SETS CRFG FOR STOP, FATAL ERRORS B056280 . 4 INSERTS FINAL ERROR COMMENT WHEN NUMBER B056290 . OF ERRORS = MAXE, AND THEN ONLY COUNTS B056300 . ERRORS IN CRE B056310 . LMJ B11,ERFG B056320 . + L(WORD 1 OF 2 WORD ERROR INFO) B056330 . NORMAL RETURN B056340 . ERROR (ERRT) INSERTER B056350 ERFP* S A2,ERFPS LA,S4 A0,*0,B11 . WD 1 OF CALL AND,M A0,3 B056380 L A0,CRE . SIMULATE LA,XT3 SSC A0,12 SSA A0,24 . A0 = CRE (2*E) J $+1,A1 B056400 J ERF1 NOT FATAL B056410 J $+4 ERROR J $+2 NO STOP FATAL B056420 J ERF1 REMARK SX,H2 B11,CRFL STOP FATAL B056430 LA A1,(0100,0) FATAL +1 B056440 ERF2 AT A1,CRE B056450 SA A1,CRE B056460 LA A1,0,B11 A1 = LOCATION OF WD1 B056470 TG,H2 A0,CRME B056480 J ERF3 B056490 LA A2,0,A1 B056500 SA A2,ERRT,A0 B056510 LA A2,1,A1 B056520 SA A2,ERRT+1,A0 B056530 AA,M A0,2 Z*E+Z = Z*E B056540 ERFXT SA,XT3 A0,CRE B056550 L A2,ERFPS J 1,B11 B056570 ERF1 LA,M A1,010000 B056580 J ERF2 B056590 ERF3 AN,M A0,2 B056600 TG,H2 A0,CRME B056610 J 1,B11 EXIT, ALREADY FILLED ERRT B056620 L A1,(0,01023) ALL ERRORS NOT LISTED SA A1,ERRT,A0 INDICATES ERROR NO = 7777 B056640 SZ ERRT+1,A0 NO PARAMETERS B056650 SZ,H2 ERF3 A,M A0,2 J ERFXT B056670 $(2) . SLSV . USES FOLLOWING 7 WORDS SVA0 +0 SVA1 +0 SVA2 +0 SVA3 +0 SVA4 +0 SVA5 +0 SVR2 +0 SYMALT* +0 . REFERENCED FROM N1MAC NOSTB* . ENTERED FROM MACRO CODE TB +0 . USED TO STORE A1 ERFPS +0 . TEMP STORAGE FOR A2 LIT END