*DECK  INIT15 
          IDENT  INIT15 
          TITLE  INIT15 - CALL SYMPL INITIALIZER
          COMMENT  INIT15 - CALL SYMPL INITIALIZER
          SST 
          LIST   F
          SPACE  4
 THISOVL  MICRO  1,, 15      DECK RESIDENCE (FOR CCON MACRO). 
                                                                         21FEB77
*CALL COMSTUF                                                            21FEB77
          ENTRY  INIT15 
 INIT15   BSS    0
  
*         BUILD YTEXT ACCESS TABLE IN *CONTROL* IF YAT IS EMPTY 
*         AND YNT IS NON-EMPTY. 
  
          SA1    =XYAT       IF YAT EMPTY (FIRST WORD = -1) 
          MX0    59 
          IX2    X1-X0
          ZR     X2,I15.1 
          EQ     I15.2
 I15.1    SA1    =XYNT       AND YNT NON-EMPTY (FIRST WORD " 0),
          NZ     X1,I15.3    GO TO I15.3 TO BUILD YAT;
 I15.2    NZ     X2,I15.4    ELSE IF YAT EMPTY AND YNT EMPTY, 
          MX6    0
          SA6    =XYAT       NULLIFY YAT
          EQ     I15.4       AND GO TO I15.4. 
  
 I15.3    RJ     BYT         BUILD YTEXT ACCESS TABLE.
  
 I15.4    BSS    0
  
*         BUILD USETEXT TABLE (UTT) IF USETEXT
*         DIRECTIVES ARE DETECTED ON THE SOURCE FILE. 
  
          RJ     PUD
  
*         ALLOCATE SYMBOL TABLE AT END OF LONGEST OVERLAY 
  
  
  
          IFEQ   SYMTBLV,0,2
          SA4    =XSYMTAB    FWA OF SYMBOL TABLE
          SKIP   1
          SX4    HASHSIZ1    SIZE OF HASHTAB IN LCM 
          SA5    SYFL        SYMBOL TABLE FL. 
          SX7    X4 
          SX6    X5-1 
          SA6    CELL2       LWA=FL-1 
          SA7    CELL1       FWA OF SYMBOL TABLE
          SA1    PARSYMT
          RJ     =XVSYMIN 
          RJ     =XINITS                                                 SYMPL
  
*         IF USETEXT TABLE IS NON-EMPTY, INITIATE USETEXT PROCESSING. 
  
          MX6    0
          SA6    UTT.ER      REINITIALIZE UTT.ER = 0. 
          SA1    UTT         IF UTT IS EMPTY, 
          ZR     X1,I15.5    GO TO I15.5; 
          RJ     =XUSETEXT   ELSE CALL USETEXT. 
          SA1    SYFL        AFTER USETEXT PROCESSING,
          SX6    X1-1        SET CELL2 IN VSYMIN APLIST TO FL-1,
          SA6    CELL2
          MX6    0           SET CELL1 TO 0 (INDICATES NOT FIRST CALL 
          SA6    CELL1       TO VSYMIN),
          SA1    PARSYMT
          RJ     =XVSYMIN    AND CALL VSYMIN AGAIN. 
  
 I15.5    BSS    0
*         WE OPEN THE ILN, PST, AND CRF FILES HERE TO 
*         SAVE ROOM IN (1,6), WHICH IS A LONGER OVERLAY.
  
  
*         INITIALIZE ILN AND ILNFAT POINTERS
  
          SB1    1
          SX6    B1 
          MX7    0
          SA6    =XILN-4     NUMBER OF WORDS ON ILN + 1 
          SX6    =XILNFAT 
          SA6    A6+2        ILN-2 = HEAD OF ILNFAT CHAIN 
          SA7    X6          MAKE SURE LINK FIELD OF FIRST ENTRY = 0
          SA7    A6+B1       ILN-1 = NO WORDS LEFT IN RECORD TO READ
  
          SETFIL FILE=(=XF.ILN),MODE=INIT,FWA=(=XILNBUF)
          OPEN   =XF.ILN,WRITE,R
  
*         SET THE RANDOM ACDESS BIT FOR THE ILN HERE.  THE ILN IS 
*         WRITTEN SEQUENTIALLY BUT READ RANDOMLY
  
          SETRAB =XF.ILN
  
          SETFIL FILE=(=XF.PST),MODE=INIT,FWA=(=XPSTBUF)
          OPEN   =XF.PST,WRITE,R
          SETFIL FILE=(=XF.CRF),MODE=INIT,FWA=(=XCRFBUF)
          OPEN   =XF.CRF,WRITE,R
 SKIPOPN  BSS    0
  
          JP     =XAFTPH15   RETURN TO PHASE10
          TITLE  AFL - ADJUST FIELD LENGTH
**        AFL - ADJUST FIELD LENGTH 
* 
*         CALLED BY GST.  AFL ADJUSTS THE FIELD LENGTH OF THE SYMBOL
*         TABLE SPACE.  FL CAN NOT BE INCREASED ABOVE AN FL OR EC 
*         JOBCARD PARAMETER.  AFL ABORTS IF THE REQUIRED FL IS NOT
*         AVAILABLE.  FL IS NEVER DECREASED BELOW ANY USER RFL. 
* 
*         INPUT VALUES (BOTH ARE LOCAL VARIABLES IN INIT15) --
*         FL.AMT = NUMBER OF WORDS BY WHICH TO ADJUST FL. 
*         FL.ACT = ACTION REQUESTED (INCREASE OR DECREASE). 
* 
  
 AFL      ENTRY. *
  
          SA1    FL.ACT      IF FL.ACT EQ DECR, CONTINUE; 
          SA2    FL.AMT 
          NZ     X1,AFL2     ELSE GO TO AFL2. 
  
          SA1    SYFL        IF SYFL NQ STRTFLD,
          SA3    STRTFLD     FL SHOULD BE DECREASED,
          IX4    X1-X3
          NZ     X4,AFL1     SO GO TO AFL1; 
  
          SA1    AFREE       ELSE JUST INCREASE AFREE.
          IX6    X1+X2       AFREE = AFREE + FL.AMT.
          SA6    A1 
          EQ     AFL         RETURN.
  
 AFL1     SA5    AFREE
          BX7    X5 
          IX6    X1-X2       NEWFL = SYFL - FL.AMT. 
          IX4    X3-X6       (X4) = STRTFLD - NEWFL.
          NG     X4,AFL4     IF NEWFL GQ STRTFLD, 
          ZR     X4,AFL4     GO TO AFL4.
          IX7    X5+X4       AFREE = AFREE + (STRTFLD - NEWFL). 
          BX6    X3          NEWFL = STRTFLD. 
          EQ     AFL4        GO TO AFL4.
  
 AFL2     SA5    AFREE
          IX6    X5-X2
          NG     X6,AFL3     IF FL.AMT LQ AFREE,
          SA6    A5          AFREE = AFREE - FL.AMT.
          EQ     AFL         RETURN.
  
 AFL3     BX6    -X6         FL.AMT = FL.AMT - AFREE (NOT SAVED). 
          MX7    0           AFREE = 0. 
          SA1    SYFL 
          IX6    X1+X6       NEWFL = SYFL + FL.AMT. 
  
 AFL4     BSS    0
 #LEV     IFEQ   SYMTBLV,0   FOR SCM SYMBOL TABLE 
          SX5    X6+77B      ROUND NEWFL UP TO A MULTIPLE OF 100B.
          AX5    6
          LX5    6
 #LEV     ELSE               FOR LCM SYMBOL TABLE 
          SX5    X6+777B     ROUND NEWFL UP TO A MULTIPLE OF 1000B. 
          AX5    9
          LX5    9
 #LEV     ENDIF 
  
          IX6    X5-X6
          IX7    X7+X6
          SA7    A5          AFREE = AFREE + (ROUNDED NEWFL - NEWFL). 
          BX6    X5 
          SA6    A1          SYFL = NEWFL.
  
          SA1    SYMAX       MAXIMUM FL.
          IX1    X1-X6
          PL     X1,AFL5     IF SYFL GR SYMAX.....
 #LEV     IFEQ   SYMTBLV,0   FOR SCM SYMBOL TABLE 
          MESSAGE  (=C* -SYMPL-  INSUFFICIENT SCM FL*),,R 
          SA1    ABT873      ISSUE DIAGNOSTIC 873 
 #LEV     ELSE               FOR LCM SYMBOL TABLE 
          MESSAGE  (=C* -SYMPL-  INSUFFICIENT LCM FL*),,R 
          SA1    ABT874      ISSUE DIAGNOSTIC 874 
 #LEV     ENDIF 
          RJ     =XSYMABT    AND ABORT. 
  
 AFL5     LX6    30          SET UP MEM REQUEST WORD
          SA6    ANS         AND REQUEST NEW FL.
          MEMORY "SYMRES",ANS,R 
  
          EQ     AFL         RETURN.
          TITLE  BYT - BUILD YTEXT ACCESS TABLE 
**        BYT - BUILD YTEXT ACCESS TABLE
* 
*         READ SEQUENTIALLY EACH FILE SPECIFIED BY Y CONTROL CARD 
*         PARAMETERS.  FOR EACH SYMPL TEXT RECORD FOUND, ENSURE THAT
*         THE LFN OF THE CURRENT FILE IS ENTERED INTO THE YAT, AND
*         MAKE A YAT ENTRY FOR THE SYMPL TEXT RECORD.  ISSUE
*         DIAGNOSTICS AND ABORT IF THE YAT OVERFLOWS OR IF A Y FILE 
*         RESIDES ON A NON-RANDOM ACCESS DEVICE.
* 
  
 BYT      ENTRY. *
  
 BYT1     SA1    YNT.ER      BYT OUTER CONTROL..... 
          SB2    7           IF YNT.ER LS 7 
          SB3    X1          AND YNT[YNT.ER] NQ 0,
          EQ     B2,B3,BYT   CONTINUE BYT;
          SA1    X1+=XYNT 
          ZR     X1,BYT      ELSE RETURN. 
          LX1    18          LEFT-JUSTIFY LFN.
  
 #RM      IFEQ   CP#RM,0     SET UP FET/FIT AND OPEN CURRENT YFIL.....
          SX0    3           FET/FIT LFN = YNT[YNT.ER] LFN. 
          BX7    X1+X0       LFN + MODE AND COMPLETE BITS.
          SA7    F.YFIL      UPDATE FET.
 #RM      ELSE
          STORE  FI.YFIL,LFN=X1        OR UPDATE FIT. 
 #RM      ENDIF 
          SETFIL FILE=F.YFIL,MODE=INIT,FWA=YFILBUF
          OPEN   F.YFIL,READ,R         OPEN CURRENT YFIL. 
  
 #RM      IFEQ   CP#RM,0
          SA1    F.YFIL      ENSURE YFIL IS ON RANDOM DEVICE..... 
 #RM      ELSE
          SA1    FI.YFIL
 #RM      ENDIF 
          MX0    42          SET UP FILINFO REQUEST.
          BX2    X1*X0
          SX1    5
          LX1    12 
          BX6    X2+X1
          SA6    FIB
          FILINFO  FIB       REQUEST YFIL INFORMATION.
 BYT2     SA1    FIB
          LX1    59 
          PL     X1,BYT2     LOOP UNTIL INFO ARRIVES. 
          SA1    A1+1        IF BIT 15 OF FIB+1 = 1,
          LX1    44          THE DEVICE IS MASS STORAGE,
          NG     X1,BYT3     SO GO TO BYT3; 
          MESSAGE  (=C* -SYMPL-  Y FILE NOT ON RANDOM DEVICE*),,R 
          SA1    ABT870      ELSE ISSUE DIAGNOSTIC
          RJ     =XSYMABT    AND ABORT. 
  
 BYT3     MX6    0
          SA6    LFNF        LFNF = FALSE.
  
 BYT4     BSS    0           SET FILPOS = CURRENT YFIL POSITION.....
 #RM      IFEQ   CP#RM,0     #CIO#
          SA1    F.YFIL      REINITIALIZE FIB 
          MX0    42          FOR FILINFO REQUEST. 
          BX2    X0*X1
          SX1    5
          LX1    12 
          BX6    X2+X1
          SA6    FIB
          FILINFO  FIB       REQUEST YFIL INFORMATION.
 BYT4.1   SA1    FIB
          LX1    59 
          PL     X1,BYT4.1   LOOP UNTIL INFO ARRIVES. 
          SA1    A1+3 
          MX0    30          EXTRACT CURRENT PRU POSITION.
          BX6    -X0*X1 
          AX6    6           RIGHT-ADJUST CPRU. 
          SA6    FILPOS      FILPOS = CPRU. 
 #RM      ELSE               #CRM#
          GETPOS FI.YFIL,X6  GET CURRENT YFIL POSITION. 
          SA6    FILPOS      FILPOS = POSITION. 
 #RM      ENDIF 
  
 #RM      IFEQ   CP#RM,0
          SB1    1           READ A RECORD FROM YFIL..... 
          SA1    F.YFIL 
          SX6    20B         CLEAR EOR BIT OF YFIL FET. 
          BX6    -X6*X1 
          SA6    A1 
          SA1    A1+B1       SET OUT = IN = FIRST.
          SX6    X1 
          SA6    A1+B1
          SA6    A6+B1
          READ   F.YFIL,R    READ RECORD IDENTIFICATION INFORMATION 
          SA1    F.YFIL      INTO YFILBUF.
          LX1    50 
          NG     X1,BYT8     IF EOI, GO TO BYT8.
 #RM      ELSE
          SX1    YFILBUF
          SX2    L$PRFX+2 
          GETWP  FI.YFIL,X1,X2  READ IN PREFIX TABLE
          SKIPFL FI.YFIL,1   SKIP TO NEXT SYSTEM RECORD 
          FETCH  FI.YFIL,FP,X1
          SX2    X1-#EOI# 
          ZR     X2,BYT8
 #RM      ENDIF 
  
 #RM      IFEQ CP#RM,0       POSITION TO EOR OF CURRENT RECORD..... 
          LX1    5           IF YFIL POSITION = EOR,
          NG     X1,BYT5     GO TO BYT5;
          SKIPF  F.YFIL,1,0,R    ELSE SKIP TO EOR.
 #RM      ENDIF 
  
 BYT5     SA1    YFILBUF     CHECK RECORD TO SEE IF IT IS 
          MX0    6           A SYMPL TEXT.....
          BX1    X0*X1
          BX6    X0-X1       77 TABLE 
          NZ     X6,BYT4
          SA6    A1          (PREVENT REDUNDANT YAT ENTRIES)
          SA1    YFILBUF+7
          SA2    =1HT        TYPE = T 
          IX1    X2-X1
          NZ     X1,BYT4
          SA1    YFILBUF+L$PRFX    ASCM TABLE (1,2) 
          SA2    =50000102000000000000B 
          IX1    X1-X2       IF YES ON ALL THE ABOVE, IT MUST BE A SYMPL
          NZ     X1,BYT4     TEXT; IF IT IS NOT, GO TO BYT4.
  
          SA1    LFNF        ENSURE YAT LFN ENTRY IS ESTABLISHED..... 
          NZ     X1,BYT7     IF LFNF = TRUE, GO TO BYT7;
          SA1    YAT.ER      ELSE 
          SX2    X1-L.YAT    IF YAT.ER NOT LS L.YAT,
          PL     X2,BYT6     GO TO BYT6;
          SA2    X1+=XYAT    ELSE 
          SA3    YNT.ER      YAT[YAT.ER] LFN = YNT[YNT.ER] LFN. 
          SA4    X3+=XYNT 
          MX0    18 
          BX2    X0*X2
          BX6    X4+X2
          SA6    A2 
          SX7    1           LFNF = TRUE. 
          SA7    LFNF 
          SX6    X1+1        YAT.ER = YAT.ER + 1. 
          SA6    A1 
          EQ     BYT7        GO TO BYT7.
  
 BYT6     MESSAGE (=C* -SYMPL-  MORE THAN 64 SYMPL TEXTS ON Y FILES*),,R
          SA1    ABT871      YTEXT ACCESS TABLE OVERFLOW. 
          RJ     =XSYMABT    ISSUE DIAGNOSTIC AND ABORT.
  
 BYT7     SA1    YAT.ER      MAKE YAT TEXT RECORD ENTRY.....
          SX2    X1-L.YAT+1  IF YAT.ER NOT LS L.YAT-1,
          PL     X2,BYT6     GO TO BYT6;
          SA2    YFILBUF+1         ELSE 
          SA3    YFILBUF+L$PRFX+1  YAT[YAT.ER] = TXTNAME AND TTLENGTH.
          MX0    42 
          BX2    X0*X2
          BX3    -X0*X3 
          BX6    X2+X3
          SA6    X1+=XYAT 
          SA2    FILPOS      YAT[YAT.ER+1] = FILE POSITION
          BX6    X2          OF CURRENT SYMPL TEXT RECORD.
          SA6    A6+1 
          SX6    X1+2 
          SA6    A1          YAT.ER = YAT.ER + 2. 
          EQ     BYT4        GO TO BYT4.
  
 BYT8     SA1    YNT.ER      INCREMENT YNT.ER.....
          SX6    X1+1        YNT.ER = YNT.ER + 1. 
          SA6    A1 
          EQ     BYT1        GO TO BYT1.
          TITLE  GST - GET SYMPL TEXT 
**        GST - GET SYMPL TEXT
* 
*         CALLED BY USETEXT.  GST OBTAINS THE SYMPL TEXT WHOSE NAME 
*         IS CURRENTLY POINTED TO BY THE LOCAL UTT.ER.  THE TEXT TABLE
*         IS PLACED INTO THE SYMBOL TABLE SPACE, AND THE TEXT CONTROL 
*         TABLE IS MOVED INTO THE USETEXT DATA AREA.  IF THE UTT.ER 
*         BECOMES GREATER THAN THE LENGTH OF THE UTT, OR IF UTT[UTT.ER] 
*         IS ZERO, THE GST OUTPUT PARAMETER IS SET TRUE TO INDICATE 
*         ALL TEXTS HAVE BEEN PROCESSED.
* 
*         THE SYMPL CALLING SEQUENCE TO GST IS
*         XREF PROC GST;
*         GST(DONE);
* 
*         OUTPUT PARAMETER -- 
*         DONE = TRUE IF ALL SYMPL TEXTS HAVE BEEN PROCESSED. 
* 
  
 GST      ENTRY. ** 
  
          SX6    X1          SAVE ADDR OF DONE (OUTPUT PARAMETER).
          SA6    DONE.ER
  
          SA1    UTT.ER      IF UTT.ER LQ L.UTT 
          SB2    L.UTT       AND UTT[UTT.ER] NQ 0,
          SB3    X1          CONTINUE;
          EQ     B3,B2,GST18
          SA1    X1+UTT 
          ZR     X1,GST18    ELSE GO TO GST18.
  
          BX6    X1 
          SA6    STEXT       STEXT = UTT[UTT.ER]. 
  
          SB1    1
          SB2    B0          (B2) USED FOR YAT INDEX. 
          MX0    42 
          MX7    59 
 GST1     SA2    B2+=XYAT    SEARCH YAT FOR STEXT.....
          IX5    X2-X7       IF END OF YAT, STEXT NOT ON A Y=FILE,
          ZR     X5,GST7     SO GO TO GST7. 
          PL     X2,GST2     IF YAT[INDEX] NEGATIVE, IT IS A
          BX3    X2          FILENAME ENTRY, SO RETAIN LFN, 
          SB2    B2+B1       INCREMENT YAT INDEX, 
          EQ     GST1        AND GO TO GST1.
 GST2     BX4    X2*X0       ISOLATE YAT TEXTNAME.
          IX4    X4-X1       IF TEXTNAME = STEXT, 
          ZR     X4,GST3     GO TO GST3;
          SB2    B2+2        ELSE INCREMENT YAT INDEX 
          EQ     GST1        AND GO TO GST1.
  
 GST3     SB2    B2+B1       RPP = POSITION OF STEXT ON Y=LFN.....
          SA1    B2+=XYAT 
          BX6    X1 
          SA6    RPP
  
          LX3    18          FET/FIT LFN = YAT LFN..... 
          BX3    X3*X0
 #RM      IFEQ   CP#RM,0
          SX7    13B         (READ + MODE AND COMPLETE BITS). 
          IX6    X3+X7
          SA6    F.YFIL 
          SETRAB F.YFIL      SET RANDOM ACCESS BIT IN YFIL FET. 
 #RM      ELSE
          STORE  FI.YFIL,LFN=X3 
          OPENM  FI.YFIL,,N  ENSURE YFIL IS OPEN. 
 #RM      ENDIF 
  
          BX6    -X0*X2      SAVE TTLENGTH OF STEXT.....
          SA6    TTLEN
  
          SX6    X6+L$TCT+8  SET VALUES FOR AFL CALL..... 
          SA6    FL.AMT      FL.AMT = TTLENGTH + L$TCT + 8. 
          SX6    INCR 
          SA6    FL.ACT      FL.ACT = INCR. 
  
          RJ     AFL         ADJUST FIELD LENGTH (SYMBOL TABLE SPACE).
  
 #LEV     IFEQ   SYMTBLV,0   MOVE L$PRFX WORDS FROM 
          SA1    NXTAV       NXTAV + COM08. - L$PRFX TO STWSA.....
          SB2    X1+COM08.-L$PRFX  (WHEN THE SYMPL TEXT IS READ IN, 
          SB3    L$PRFX-1    THE PRFX TABLE WILL OCCUPY THE SYMBOL
          SB4    STWSA       TABLE SPACE JUST BELOW NXTAV.) 
 GST4     SA1    B2+B3
          BX6    X1 
          SA6    B4+B3
          SB3    B3-1 
          GE     B3,B0,GST4 
 #LEV     ELSE
          SA0    STWSA       SAME MOVE AS ABOVE FOR 
          SA1    NXTAV       LCM SYMBOL TABLE.
          SX0    X1+COM08.-L$PRFX 
          RL     L$PRFX      (BLOCK XFER LCM TO SCM.) 
 #LEV     ENDIF 
  
 #RM      IFEQ   CP#RM,0     #CIO#
          SA1    RPP         FET RECORD REQUEST FIELD = 
          SA2    F.YFIL+I.RAN1     STEXT RELATIVE PRU POSITION. 
          MX0    30 
          BX2    X0*X2
          BX6    X2+X1
          SA6    A2 
  
          SA1    NXTAV       READ STEXT INTO SYMBOL TABLE 
          SX1    X1+COM08.-L$PRFX    AREA L$PRFX WORDS BELOW NXTAV. 
          SA2    TTLEN
          SX2    X2+L$PRFX+L$TCT
          READW  F.YFIL,X1,X2 
          RECALL F.YFIL 
  
 #RM      ELSE               #CRM#
  
          SA1    RPP         POSITION TO STEXT RECORD.
          POSITION  FI.YFIL,X1
  
          SA1    NXTAV       CALCULATE WSAL ADDRESS.
          SX1    X1+COM08.-L$PRFX 
 #LEV     IFNE   SYMTBLV,0
          MX0    1
          LX0    22          SET BIT 21 OF WSAL 
          BX1    X1+X0       TO FLAG IT AS AN LCM ADDRESS.
 #LEV     ENDIF 
          SA2    TTLEN       STEXT RECORD LENGTH. 
          SX2    X2+L$PRFX+L$TCT   READ STEXT INTO SYMBOL TABLE AREA
          SA4    =10         SET MRL TO SIZE OF TEXT IN CHARACTERS
          IX2    X2*X4
          STORE  FI.YFIL,MRL=X2 
*         WE LOOP TO READ IN THE TEXT BECAUSE OF A BUG IN COPYL WHICH 
*         SPLITS THE RECORD.
          MX5    0           ACCUMULATE NUMBER OF CHARS IN X5 
 GST4.1   GETW   FI.YFIL,X1,X3  RETURNS NUMBER OF WORDS IN X3 
          IX0    X3*X4       CONVERT TO CHARS 
          IX5    X5+X0
          IX0    X5-X2
          PL     X0,GST4.2   ALL READ IN
          IX1    X1+X3
          EQ     GST4.1 
 GST4.2   BSS    0
 #RM      ENDIF 
  
************************************************************************
*         WARNING.....                                                 *
*         THE CURRENT (78/4/27 CPS/R5 L466 R6B) STATE OF AFFAIRS IS    *
*         THAT FOR A CYBER 176, THE SYMBOL TABLE RESIDES IN SCM.  IF   *
*         THAT SHOULD BE CHANGED TO LCM (AS IT ONCE WAS), THE          *
*         PRECEDING CODE WHICH READS SYMPL TEXTS INTO THE SYMBOL TABLE *
*         AREA MUST BE EXTENDED TO ACCOMMODATE THE CIO/LCM COMBINATION.*
************************************************************************
  
 #LEV     IFEQ   SYMTBLV,0   MOVE L$PRFX WORDS FROM STWSA 
          SA1    NXTAV       TO NXTAV + COM08. - L$PRFX.....
          SB2    X1+COM08.-L$PRFX  THIS MOVE RESTORES THE SYMBOL
          SB3    L$PRFX-1          TABLE BLOCK THAT WAS PREVIOUSLY
          SB4    STWSA             SAVED, THUS OVER-WRITING THE 
 GST5     SA1    B4+B3       PRFX TABLE.
          BX6    X1 
          SA6    B2+B3
          SB3    B3-1 
          GE     B3,B0,GST5 
 #LEV     ELSE               SAME MOVE AS ABOVE FOR LCM SYMBOL TABLE. 
          SA0    STWSA
          SA1    NXTAV
          SX0    X1+COM08.-L$PRFX 
          WL     L$PRFX      (BLOCK XFER SCM TO LCM.) 
 #LEV     ENDIF 
  
 #LEV     IFEQ   SYMTBLV,0   MOVE TEXT CONTROL TABLE TO 
          SA1    NXTAV       THE TCT ARRAY IN PROC USETEXT..... 
          SA2    TTLEN
          IX1    X1+X2
          SB2    X1+COM08.
          SB3    L$TCT-1
          SB4    =XTCT
 GST6     SA1    B2+B3
          BX6    X1 
          SA6    B4+B3
          SB3    B3-1 
          GE     B3,B0,GST6 
 #LEV     ELSE               SAME MOVE AS ABOVE FOR LCM SYMBOL TABLE. 
          SA0    =XTCT
          SA1    NXTAV
          SA2    TTLEN
          IX1    X1+X2
          SX0    X1+COM08.
          RL     L$TCT       (BLOCK XFER LCM TO SCM.) 
 #LEV     ENDIF 
  
          SA1    AFREE
          SX6    X1+L$TCT    AFREE = AFREE + L$TCT. 
          SA6    A1 
  
          EQ     GST17       GO TO GST17. 
  
  
 GST7     SA1    =XZNT       SYMPL TEXT ON LIBRARY..... 
          NG     X1,GST16    IF ZNT = -1 (Z=0), GO TO GST16.
  
 #LEV     IFEQ   SYMTBLV,0   LOAD SYMPL TEXT INTO SCM SYMBOL TABLE..... 
          SX6    ZTXTFL      (ZTXTFL DEFINED IN SYMTEXT.) 
          SA6    FL.AMT      FL.AMT = ZTXTFL. 
          SX6    INCR 
          SA6    FL.ACT      FL.ACT = INCR. 
  
          RJ     AFL         ADJUST FIELD LENGTH (SCM). 
  
          SA1    LPA.1
          BX6    X1          INITIALIZE LPA + 1  (WITH N = 0).
          MX5    42 
          SA2    STEXT
          SA1    =XZNT       IF ZNT NQ 0, GO TO GST8; 
          NZ     X1,GST8     ELSE SET UP LPA FOR LOAD FROM
          BX7    X2          CURRENT GLOBAL LIBRARY SET.....
          SA7    LPA         LPA  NAME = STEXT NAME.
          EQ     GST9        GO TO GST9.
 GST8     BX7    X1          SET UP LPA FOR LOAD FROM Z=LIBNAME.....
          SA7    LPA         LPA  NAME = LIBNAME. 
          MX0    1
          LX0    47 
          BX6    X6+X0       LPA+1  N = 1.
          SA1    LPA+2
          BX1    -X5*X1 
          BX7    X1+X2
          SA7    A1          LPA+2  OVLNAME = STEXT NAME. 
 GST9     SA1    NXTAV
          SX1    X1+COM08.   LPA+1  FWA = NXTAV + COM08.. 
          BX6    X6+X1       ASSEMBLE LPA+1 
          SA6    LPA+1       AND STORE IT.
  
          LOADREQ  LPA,RECALL      LOAD SYMPL TEXT. 
          SA1    LPA+1
          LX1    59-36
          PL     X1,GST9.1   IF FATAL LOADER ERROR OCCURRED,
          EQ     GST16       ABORT
  
 GST9.1   SA1    NXTAV       MOVE TEXT CONTROL TABLE TO 
          SX1    X1+COM08.   THE TCT ARRAY IN USETEXT.....
          SA2    X1+1 
          SX2    X2          (TTLENGTH) 
          IX1    X1+X2       NXTAV + COM08. + TTLENGTH =
          SB2    X1          ADDRESS OF TEXT CONTROL TABLE. 
          SB3    L$TCT-1
          SB4    =XTCT
 GST10    SA1    B2+B3
          BX6    X1 
          SA6    B4+B3
          SB3    B3-1 
          GE     B3,B0,GST10
  
          SX1    ZTXTFL-8    DECREASE SCM FL TO JUST BEYOND 
          IX6    X1-X2       THE END OF THE TEXT TABLE..... 
          SA6    FL.AMT      FL.AMT = ZTXTFL - 8 - TTLENGTH.
          SX6    DECR 
          SA6    FL.ACT      FL.ACT = DECR. 
  
          RJ     AFL         ADJUST FIELD LENGTH (SCM). 
  
          EQ     GST17       GO TO GST17. 
  
 #LEV     ELSE
  
          SX6    LWA15       LOAD SYMPL TEXT INTO SCM FREE SPACE..... 
          SX6    X6+22B 
          SA6    TEXTFWA     LWA OF 1,5 OVL + SPACE FOR LOADER. 
  
          SA1    LPA.1       INITIALIZE LPA+1  (WITH N = 0).
          BX6    X1 
          MX5    42 
          SA2    STEXT
          SA1    =XZNT       IF ZNT NQ 0, GO TO GST11;
          NZ     X1,GST11    ELSE SET UP LPA FOR LOAD FROM
          BX7    X2          CURRENT GLOBAL LIBRARY SET.....
          SA7    LPA         LPA  NAME = STEXT NAME.
          EQ     GST12       GO TO GST12. 
 GST11    BX7    X1 
          SA7    LPA         LPA  NAME = LIBNAME. 
          MX0    1
          LX0    47 
          BX6    X6+X0       LPA+1  N = 1.
          SA1    LPA+2
          BX1    -X5*X1 
          BX7    X1+X2
          SA7    A1          LPA+2  OVLNAME = STEXT NAME. 
 GST12    SA1    TEXTFWA
          BX6    X6+X1       ASSEMBLE LPA+1 
          SA6    LPA+1       AND STORE IT.
  
          LOADREQ  LPA,RECALL      LOAD SYMPL TEXT. 
          SA1    LPA+1
          LX1    59-36
          PL     X1,GST12.1  IF FATAL LOADER ERROR OCCURRED,
          EQ     GST16       ABORT
  
 GST12.1  SA1    TEXTFWA     MOVE TEXT CONTROL TABLE TO 
          SA2    X1+1        THE TCT ARRAY IN USETEXT.....
          SX2    X2          (TTLENGTH) 
          IX1    X1+X2       TEXTFWA + TTLENGTH = 
          SB2    X1          ADDR OF TEXT CONTROL TABLE.
          SB3    L$TCT-1
          SB4    =XTCT
 GST13    SA1    B2+B3
          BX6    X1 
          SA6    B4+B3
          SB3    B3-1 
          GE     B3,B0,GST13
  
          SX6    X2+8        MOVE SYMPL TEXT TO LCM SYM TAB SPACE.....
          SA6    FL.AMT      FL.AMT = TTLENGTH + 8. 
          SX6    INCR 
          SA6    FL.ACT      FL.ACT = INCR. 
  
          RJ     AFL         ADJUST FIELD LENGTH (LCM). 
  
          SA1    TEXTFWA     MOVE WORDS 
          SA0    X1          IN BLOCKS OF 1777B 
          SA1    NXTAV       FROM SCM TEXTFWA TO
          SX0    X1+COM08.   LCM NXTAV + COM08......
          SA1    A0+1        SCMFWA = TEXTFWA.  LCMFWA = NXTAV + COM08..
          SB2    X1          N = TTLENGTH (TOTAL WORDS TO MOVE).
          SB3    1777B       M = 1777B (BLOCK SIZE PER MOVE). 
 GST14    GE     B2,B3,GST15   IF N GQ M, GO TO GST15.
          EQ     B2,B0,GST17   IF N EQ 0, GO TO GST17 (MOVE COMPLETE).
          SB3    B2          M = N. 
 GST15    WL     B3          MOVE M WORDS FROM SCMFWA TO LCMFWA.
          SA0    A0+B3       SCMFWA = SCMFWA + M. 
          SX0    X0+B3       LCMFWA = LCMFWA + M. 
          SB2    B2-B3       N = N - M. 
          EQ     GST14       GO TO GST14. 
  
 #LEV     ENDIF 
 GST16    MESSAGE  (=C*SYMPL TEXT NOT FOUND*),,R
          SA1    ABT872      STEXT NOT IN YAT OR LIBRARY
          RJ     =XSYMABT    SO ISSUE DIAG 872 AND ABORT. 
  
 GST17    SA1    DONE.ER     SET OUTPUT PARAMETER.
          MX6    0           DONE = FALSE.
          SA6    X1 
  
          SA1    UTT.ER      UTT.ER = UTT.ER + 1. 
          SX6    X1+1 
          SA6    A1 
  
          EQ     GST         RETURN.
  
 GST18    SA1    DONE.ER     SET OUTPUT PARAMETER 
          SX6    1           DONE = TRUE. 
          SA6    X1 
  
          EQ     GST         RETURN.
          TITLE  PUD - PROCESS USETEXT DIRECTIVES 
**        PUD - PROCESS USETEXT DIRECTIVES
* 
*         CHECK SOURCE CARD IMAGE TO SEE IF IT IS A USETEXT 
*         DIRECTIVE.  IF IT IS NOT, RETURN; ELSE PLACE
*         THE SYMPL TEXT NAMES DESIGNATED ON THE USETEXT
*         DIRECTIVE INTO THE USETEXT TABLE (LEFT-JUSTIFIED, ZERO-FILL). 
*         ISSUE A DAYFILE DIAGNOSTIC AND ABORT IF MORE THAN 
*         16 NAMES ARE ACCUMULATED. 
* 
*         NO ENTRY NOR EXIT PARAMETERS. 
* 
  
 PUD      ENTRY. *
  
*         CHECK FOR PRESENCE OF USETEXT DIRECTIVE OR BLANK CARD.
  
 PUD1     SA1    =XPREREAD   IF PREREAD = 0,
          PL     X1,PUD16    SKIP TO PUD16 TO READ A SOURCE CARD; 
*                            ELSE CONTINUE. 
          SB1    1           (B1) = 1.
          SA1    SORCARD     GET STRING (FIRST WORD OF CARD IMAGE). 
          SA2    =7LUSETEXT  CHECK TO SEE IF STRING 
          MX0    18          IS A USETEXT DIRECTIVE.
          LX0    18 
          BX3    -X0*X1 
          IX4    X2-X3       IF IT IS, SKIP TO PUD2 
          ZR     X4,PUD2     TO PROCESS USETEXT DIRECTIVE;
          RJ     PUD17       ELSE CHECK FOR AN ALL-BLANK CARD.
          ZR     X4,PUD16    IF BLANK,
*                            SKIP TO PUD16 TO READ ANOTHER SOURCE CARD; 
          EQ     PUD         ELSE RETURN. 
  
  
 PUD2     BSS    0           PROCESS THE USETEXT DIRECTIVE. 
  
*         INITIALIZE. 
  
          MX0    6           (X0) = MASK FOR LEFTMOST CHARACTER.
          SA2    =1L         (X2) = LEFT-ADJUSTED BLANK.
          SA3    =1L,        (X3) = LEFT-ADJUSTED COMMA.
          SX6    0           (X6) = NAME (OF TEXT). 
          SB2    0           (B2) = STARTL (START LIST PROCESSING). 
          SB3    60          (B3) = CP (CHARACTER POSITION IN NAME).
          SB4    6           (B4) = CL (CHARACTER LENGTH).
          SB5    0           (B5) = SI (SORCARD INDEX). 
          SB6    6           (B6) = ENDL (END LIST PROCESSING). 
          SB7    0           (B7) = WORDEND (CHARACTER COUNTER).
  
*         PROCESS 9TH AND 10TH CHARACTERS OF STRING (SORCARD[0]). 
  
          LX1    48          LEFT-ADJUST TO 9TH CHARACTER OF STRING.
          BX4    X1*X0       (X4) = CHAR = MASK OF STRING.
          BX5    -X4*X2      IF CHAR IS A BLANK,
          ZR     X5,PUD3     SKIP TO PUD3;
          BX6    X6+X4       ELSE *OR* CHAR INTO NAME,
          SB3    B3-B4       ADJUST CP (CP = CP - CL), AND SET
          SB2    B1          STARTL (LIST PROCESSING HAS STARTED).
 PUD3     LX1    6           LEFT-ADJUST TO 10TH CHARACTER OF STRING. 
          BX4    X1*X0       CHAR = MASK OF STRING. 
          EQ     PUD7        SKIP TO PUD7 FOR CHARACTER ANALYSIS. 
  
*         START PROCESSING NEW SORCARD WORD (WORDS 2 THRU 7). 
  
 PUD4     SB7    10          WORDEND = 10.
 PUD5     SB5    B5+B1       SI = SI + 1. 
          SA1    B5+SORCARD  STRING = SORCARD[SI].
 PUD6     BX4    X1*X0       CHAR = MASK OF STRING. 
          SB7    B7-B1       WORDEND = WORDEND - 1. 
          LX1    6           ADJUST STRING TO NEXT CHARACTER. 
  
*         CHARACTER ANALYSIS. 
  
 PUD7     BX5    -X4*X2      IF CHAR IS NOT A BLANK,
          NZ     X5,PUD8     SKIP TO PUD8;
*                            ELSE IF STARTL = 0,
          EQ     B2,B0,PUD9  SKIP TO PUD9 FOR PROCESS-CONTROL;
          SB6    B0          ELSE SET ENDL = 0 (END OF LIST) AND
          EQ     PUD14       SKIP TO PUD14 TO WRITE A UTT ENTRY.
 PUD8     BX5    -X4*X3      IF CHAR IS A COMMA,
          ZR     X5,PUD14    SKIP TO PUD14 TO WRITE A UTT ENTRY;
*                            ELSE CONTINUE. 
          LX4    B3          LEFTSHIFT CHAR CP BITS TO ALIGN
*                            WITH NEXT CHARACTER OF NAME. 
          SB3    B3-B4       ADJUST CP (CP = CP - CL), AND SET
          SB2    B1          STARTL (LIST PROCESSING IN PROGRESS).
          BX6    X6+X4       *OR* CHAR INTO NAME. 
  
*         PROCESS-CONTROL.
  
 PUD9     NE     B7,B0,PUD6  IF WORDEND " 0, SKIP TO PUD6 TO
*                            GET ANOTHER CHARACTER; 
          GE     B5,B6,PUD10 ELSE IF SI GQ ENDL, SKIP TO PUD10
          EQ     PUD4        TO CONTINUE; ELSE SKIP TO PUD4 
*                            TO GET ANOTHER SORCARD WORD. 
 PUD10    LT     B6,B5,PUD11 IF ENDL LT SI, SKIP TO PUD11 
*                            TO GET CHARACTER 72; 
          SB7    B1          ELSE SET WORDEND = 1 AND 
          EQ     PUD5        SKIP TO PUD5 TO GET CHARACTER 71.
  
*         PROCESS CHARACTER 72 OF SORCARD.
  
 PUD11    BX4    X1*X0       CHAR = MASK OF STRING. 
          BX5    -X4*X2      IF CHAR IS NOT A BLANK,
          NZ     X5,PUD12    SKIP TO PUD12; ELSE IF STARTL = 0, 
          EQ     B2,B0,PUD16 SKIP TO PUD16 TO READ NEXT CARD; 
          EQ     PUD13       ELSE SKIP TO PUD13.
 PUD12    LX4    B3          LEFTSHIFT CHAR CP BITS TO ALIGN
*                            WITH NEXT CHARACTER OF NAME. 
          BX6    X6+X4       *OR* CHAR INTO NAME. 
 PUD13    SB6    B0          ENDL = 0 (END OF LIST).
  
*         WRITE A UTT (USETEXT TABLE) ENTRY.
  
 PUD14    SA5    UTT.ER 
          SX7    X5-L.UTT     IF UTT.ER < L.UTT,
          NZ     X7,PUD15    SKIP TO PUD15 TO CONTINUE; 
          MX7    0           ELSE PRINT CURRENT SOURCE CARD IMAGE,
          SA7    =XPREREAD   .
          SA1    PUD.ERR     .
          BX6    X1          .
          SA6    EOF         .
          SA1    GTSRCPL     .
          RJ     =XGTSRC     .
 PUD.ERR  BSS    0           ISSUE DAYFILE DIAGNOSTIC,
          MESSAGE (=C* -SYMPL-  MORE THAN 64 TEXTS ON USETEXT*),,R
          SA1    ABT869 
          RJ     =XSYMABT    AND ABORT. 
 PUD15    SA6    X5+UTT      UTT[UTT.ER] = NAME.
          SX7    X5+1 
          SA7    UTT.ER      UTT.ER = UTT.ER + 1. 
          EQ     B6,B0,PUD16 IF ENDL = 0, SKIP TO PUD16 TO
*                            READ NEXT CARD;
          SB3    60          ELSE SET CP = 60,
          MX6    0           CLEAR NAME, AND SKIP TO
          EQ     PUD9        PUD9 FOR PROCESS-CONTROL.
  
*         READ NEXT SOURCE STATEMENT. 
  
 PUD16    MX7    0
          SA7    =XPREREAD   SET PREREAD TO RETURN NEXT CARD. 
          SA1    GTSRCPL     APLIST FOR GTSRC.
          RJ     =XGTSRC     PRINT PREVIOUS SOURCE CARD (OPTIONAL)
*                            AND READ THE NEXT ONE. 
          MX7    59 
          SA7    =XPREREAD   SET PREREAD TO RETURN SAME CARD ON NEXT
*                            READ IN CASE IT-S NOT A USETEXT DIRECTIVE. 
          EQ     PUD1        SKIP TO PUD1 TO CHECK FOR ANOTHER USETEXT. 
  
  
  
*         CHECK FOR PRESENCE OF AN ALL-BLANK CARD IMAGE.  (THE SYMPL
*         COMPILER CROAKS IF A COMPILATION MODULE CONSISTS OF ONLY
*         BLANK CARDS, SO WE HANDLE THAT CASE HERE IN THE EXECUTIVE.) 
  
 PUD17    ENTRY. *
          MX0    7           INITIALIZE L = LOOP CONTROL VALUE. 
          SA2    A1          GET SORCARD WORD.
          SA3    =10H             BLANKS. 
 PUD18    BX4    -X2*X3      IF SORCARD WORD IS NON-BLANK,
          NZ     X4,PUD17    RETURN;
          SA2    A2+B1       ELSE GET NEXT SORCARD WORD.
          LX0    1           L = L - 1. 
          NG     X0,PUD18    IF L " 0, LOOP TO PUD18. 
          MX0    12          ELSE CHECK CHARACTERS 71 AND 72. 
          BX2    X2*X0       IF 71 AND 72 ARE BLANK, THE WHOLE CARD WAS 
          BX3    X3*X0       BLANK, AND X4 NOW CONTAINS ZERO, WHICH WILL
          BX4    -X2*X3      IMMINENTLY CAUSE THE CURRENT CARD IMAGE TO 
*                            BE BYPASSED. 
          EQ     PUD17       RETURN.
          TITLE  INIT15 - DATA AREA 
*         APLIST FOR VSYMIN CALL
  
 PARSYMT  VFD    60/CELL1 
          VFD    60/CELL2 
  
 CELL1    DATA   0           FWA OF SYMBOL TABLE
 CELL2    DATA   0              FIELD LENGTH-1
  
          USE    /CRDCOM/ 
  
*         /CRDCOM/ IS DEFINED AND INITIALIZED IN CONTROL. 
  
          BSS    2
 SORCARD  BSS    10          SOURCE CARD IMAGE. 
  
          USE    *
  
 GTSRCPL  VFD    60/SORCARD 
 EOF      VFD    60/=XINPTEOF 
  
 L.UTT    EQU    64           LENGTH OF USETEXT TABLE 
 UTT      BSSZ   L.UTT        USETEXT TABLE.
*                            (TEXT NAMES LEFT-JUSTIFIED WITH ZERO FILL) 
 UTT.ER   BSSZ   1           USETEXT TABLE POINTER. 
  
 YNT.ER   BSSZ   1           Y=FILE NAME TABLE POINTER. 
 YAT.ER   BSSZ   1           YTEXT ACCESS TABLE POINTER.
 L.YAT    EQU    135         LENGTH OF YTEXT ACCESS TABLE.
 LFNF     BSS    1           TRUE = YAT LFN ESTABLISHED.
  
 FL.AMT   BSS    1           AMOUNT FOR AFL REQUESTS. 
 FL.ACT   BSS    1           ACTION FOR AFL REQUESTS. 
 INCR     EQU    1           INCREASE SYMBOL TABLE FL.
 DECR     EQU    0           DECREASE SCM FL. 
  
 FILPOS   BSS    1           CURRENT YFIL POSITION. 
 DONE.ER  BSS    1           ADDR OF DONE (PARAM FROM USETEXT). 
 STEXT    BSS    1           GST NAME OF CURRENT SYMPL TEXT.
 TTLEN    BSS    1           TTLENGTH OF CURRENT SYMPL TEXT.
 RPP      BSS    1           POSITION OF STEXT ON Y=FILE. 
 LPA      BSSZ   3           LOADREQ PARAMETER AREA.
 LPA.1    VFD    17/0        LPA+1 INITIAL SETUP. 
          VFD    1/1           U = 1. 
          VFD    1/1           V = 1. 
          VFD    41/0 
          IFEQ   SYMTBLV,2,1
 TEXTFWA  BSS    1           FWA OF TEXT LOADED INTO 1,5 FREESPACE. 
 STWSA    BSS    L$PRFX+2    SYMPL TEXT WORKING STORAGE AREA. 
 FIB      EQU    STWSA       FILE INFORMATION BLOCK.
  
 J869     DATA   869         SYMABT DIAGNOSTIC 869. 
 ABT869   VFD    60/J869
          VFD    60/=C*MORE THAN 64 TEXTS ON USETEXT (INIT15)*
          VFD    60/=38 
 J870     DATA   870         SYMABT DIAGNOSTIC 870. 
 ABT870   VFD    60/J870
          VFD    60/=C*Y FILE NOT ON RANDOM DEVICE (INIT15)*
          VFD    60/=36 
 J871     DATA   871         SYMABT DIAGNOSTIC 871. 
 ABT871   VFD    60/J871
          VFD    60/=C*MORE THAN 64 SYMPL TEXTS ON Y FILES (INIT15)*
          VFD    60/=44 
 J872     DATA   872         SYMABT DIAGNOSTIC 872. 
 ABT872   VFD    60/J872
          VFD    60/=C*SYMPL TEXT NOT FOUND (INIT15)* 
          VFD    60/=29 
 #LEV     IFEQ   SYMTBLV,0
 J873     DATA   873         SYMABT DIAGNOSTIC 873. 
 ABT873   VFD    60/J873
          VFD    60/=C*INSUFFICIENT SCM FL (INIT15) * 
          VFD    60/=29 
 #LEV     ELSE
 J874     DATA   874         SYMABT DIAGNOSTIC 874. 
 ABT874   VFD    60/J874
          VFD    60/=C*INSUFFICIENT LCM FL (INIT15) * 
          VFD    60/=29 
 #LEV     ENDIF 
  
*         THE FOLLOWING FET/FIT AND BUFFER ARE USED BY INIT15 FOR 
*         PROCESSING ALL Y=FILES. 
  
          ENTRY  YFILBUF
 YFILBUF  BSS    LC.YFIL
  
          FET    YFIL,YFILBUF,BINARY
 #RM      IFNE   CP#RM,0
          ENTRY  FI.YFIL
 FI.YFIL  FILE   LFN="YFIL",RT=W,MRL=(LC.YFIL*10),OF=R,CF=R,EO=D
 #RM      ENDIF 
  
  
          USE    END15       LAST LOCAL BLOCK OF INIT15.
  
 LWA15    BSS    0           LAST WORD ADDRESS OF 1,5 OVERLAY.
  
************************************************************************
*         $LWA15$ IS USED TO CALCULATE FWA OF THE LOADABLE AREA        *
*         FOLLOWING THE 1,5 OVERLAY.  LWA15 MUST THEREFORE BE THE      *
*         RELATIVE ADDRESS OF THE LAST WORD OF INIT15, AND INIT15      *
*         MUST BE THE LAST PROGRAM LOADED IN OVERLAY(1,5).             *
************************************************************************
  
          END    INIT15 
