*DECK     READRL
          IDENT  READRL 
 RRL      TITLE  READRL - RLIST FILE READ ROUTINES
*CALL     SSTCALL 
          PASS2TM 
 B=RRL    RPVDEF
 RRL      SPACE  3
**        READRL - RLIST FILE READ ROUTINES 
  
 L.RLB    EQU    200B        LENGTH OF INTERMEDIATE RLIST BUFFER
  
 RLI      ENTRY.             DESCRIPTOR AND RLIST WORDS 
          BSS    2
  
 O.MAC    ENTRY. 0           ADDRESS OF MACRO REFERENCE 
          SPACE  3
*         THE SIZE OF *EMRB* MUST BE SET LARGE ENOUGH AS TO ACCOMIDATE
*                A) THE LARGEST MACRO IN *MACROX* 
*                B) A *IXFN* MACRO WITH 7 DIMENSIONS ( 7*4+... )
*                C) I/O LIST DEF MACROS OF UP TO 30D WORDS. 
*         DO NOT DISTURB THE CELLS BETWEEN F.MAC AND BP . 
  
 F.MAC    CON    0           LWA+1 OF MACRO EXPANSION 
 MACWDS   ENTRY. 0           - ( NUMBER OF WORDS REMAINING )
 MACTYP   ENTRY.             MACRO TYPE 
 MACINS   ENTRY.             NUMBER OF INSTRUCTIONS IN MACRO
          ENTRY  O.EMRB 
 O.EMRB   BSS    30D        *EMR* EXPANSION BUFFER ( MUST PRECEED *RLB*)
 RLB      BSS    L.RLB       RLIST BUFFER 
 RLBL     BSS    0           LWA+1 OF THE BUFFER
 BP       CON    0           RLB POINTER ( NEGATIVE INDEX ) 
 MB       CON    0           MACRO BIAS 
 RRL      TITLE  RRL - READ RLIST FILE
**        RRL - READ NEXT *IL* INSTRUCTION OR RMACRO FROM RLIST FILE
* 
*         EXIT   (RLI - RLI+2) = DESCRIPTOR, R1 AND R2 WORDS OF NEXT
*                *IL* INSTRUCTION, OR IN THE CASE OF A MACRO -
*                (RLI+1) = MACRO HEADER WORD
*                (O.MAC) = FWA OF THE MACRO IN *EMRB* 
  
 RRL      ENTRY.
          QUAL   CODE 
          RJ     ROW         READ A WORD
          UX5    B2,X7
          SA7    RLI+1
          PL     B2,RRL3     IF NOT A MACRO 
  
*         MACRO - SEE IF IS CONTAINED IN THE BUFFER 
  
          SA1    BP 
          AX5    R1.INP      POSITION WORD COUNT
          SX6    RLBL-1+X1
          SA6    O.MAC       SET ADDRESS OF MACRO REFERENCE 
          IX7    X5+X1       WDS IN MACRO - WDS LEFT IN BUFFER
          SA7    A1 
          MI     X7,RRL      IF MACRO IS IN THE BUFFER
          ZR     X7,RRL 
          SA7    MB          SAVE MACRO BIAS
          SX4    X1-1 
          BX1    -X4         N.WDS OF MACRO IN BUFFER 
          SX6    RLB+X4      MACRO START ADDRESS
          SA6    A6          RESET O.MAC
          MOVE   X1,RLBL+X4,X6     MOVE MACRO DOWN
          RJ     RFB         REFILL BUFFER
          SA1    BP 
          SA2    MB          ADJUST BP TO ACCOUNT FOR PARTIAL MACRO 
          IX6    X2+X1       AT THE BEGINNING OF THE BUFFER 
          SA6    A1 
          EQ     RRL
  
*         *IL* INSTRUCTION - SET DESCR IN OUTPUT BUFFER AND GET 
*         SECOND WORD FOR TYPE 3 ENTRIES. 
  
 RRL3     SA1    =XF.RDT+B2 
          MX0    -D.TYL 
          BX6    X1 
          AX1    D.TYP
          SA6    A7-B1       RLI = DESCR(OC)
          BX4    X0+X1
          IX7    X7-X7
          SX3    X4+B1
          SA7    A7+B1       [RLI+2] = 0
          NZ     X3,RRL      IF NOT TYPE 3
          RJ     ROW
          SA7    RLI+2       STORE THE SECOND WORD
          EQ     RRL
 ROW      SPACE  3,8         ROW
**        ROW - READ ONE WORD OF RLIST FROM MACRO BUFFER/*RLB*
*         EXIT   (X3) = (X7) = WORD READ
  
 ROW0     SA2    F.MAC
          SX6    X1+B1       ADVANCE BUFFER POINTER 
          IX4    X2+X1
          SA3    X4          FETCH WORD 
          BX7    X3 
          SA6    A1+0 
 ROW      ROUTINE 
          SA1    MACWDS 
          SA2    BP 
          NZ     X1,ROW0     IF READING FROM A MACRO EXPANSION
          SA3    RLBL+X2     FETCH WORD 
          SX6    X2+B1       ADVANCE BUFFER POINTER 
          BX7    X3 
          SA6    A2+0 
          MI     X2,ROW      IF WORD WAS FROM THE BUFFER
          RJ     RFB         REFILL THE BUFFER
          SA2    BP 
          SA3    RLBL+X2
          SX6    X2+B1       ADVANCE BUFFER INDEX 
          BX7    X3 
          SA6    A2 
          EQ     ROW
 RFB      SPACE  3           RFB
**        RFB - REFILL BUFFER 
  
 RFB      ROUTINE 
          SX6    -L.RLB 
          SA6    BP 
          BX4    -X6
          READW  =XF.RLST,RLBL+X6,X4  REFILL BUFFER 
          EQ     RFB
 EMR      TITLE  EMR - EXPAND MACRO REFERENCE 
**        EMR - EXPAND MACRO REFERENCE
* 
*         ENTRY  (X1) = FWA OF MACRO  REFERENCE 
* 
*         EXIT   (MACWDS) = N.WORDS IN MACRO
*                (MACTYP) = MACRO TYPE ( FROM *ENDR* CARD ) 
*                (MACINS) = N.*IL* INSTRUCTION IN MACRO 
*                (F.MAC) = LWA+1 OF MACRO EXPANSION 
*                THE R1 AND R2 WORDS OF THE *IL* INSTRUCTIONS IN THE
*                MACRO ARE STORED IN *EMRB*.
  
 OC       MICRO  1,,/B2/     REGISTER USEAGE
 SY       MICRO  1,,/B3/
 RN       MICRO  1,,/B4/
 CA       MICRO  1,,/B5/
 IR       MICRO  1,,/B6/
  
          EXT    SBUF,RBUF,CBUF,F.MACD
 EMR      SPACE  2
 EMR0     SX7    A7+1        (F.MAC) = LWA+1 OF MACRO EXPANSION 
          SA7    F.MAC
  
          QUAL
 EMR      ENTRY.
          QUAL   CODE 
          SA1    X1          FIRST WORD OF THE MACRO REF
          UX2    "OC",X1
          SA4    =XNIRN      NEXT INTERMEDIATE R-NUMBER 
          MX0    -6 
          S"OC"  -"OC"       MAKE OPCODE POSITIVE 
          SA3    F.MACD+"OC" (X3) = MACRO DESCRIPTOR WORD 
          S"IR"  X4-100001B  (B6) = BASE OF INTERMEDIATE R NUMBERS
          SA5    X3          (X5) = MACRO TEXT WORD 
          AX3    18 
          BX7    X0+X3       - WORD COUNT 
          AX3    6
          SA7    MACWDS 
          BX7    -X0*X3 
          AX3    6
          SA7    A7+B1       MACRO TYPE 
          BX7    -X0*X3 
          SB7    X7          (B7) = NUMBER OF WORDS LEFT IN MACRO SKELTO
          SA7    A7+B1       NUMBER OF INSTRUCTIONS 
          AX3    6
          BX2    -X0*X3      NUMBER OF GENERATED R NUMBERS
          AX3    6
          IX6    X2+X4       ADVANCE RNUMBER COUNTER
          SA6    A4 
  
*         UNPACK MACRO PARAMS TO THEIR BUFFERS
  
          BX4    -X0*X3 
          MX6    0
          SA1    A1+B1
          ZR     X4,EMR2     IF NO SYM PARAMS 
          SA6    SBUF 
          MX7    -RM.IHL
          SB4    X4 
          SB2    RM.IHL 
 EMR1     BX6    -X7*X1 
          SA6    A6+B1       STORE SYM PARAMS 
          LX2    B2,X1
          SA1    A1+B1       NEXT MACRO REF WORD
          SB4    B4-2 
          BX6    -X7*X2 
          SA6    A6+B1
          GT     B4,EMR1
  
 EMR2     AX3    6
          SX6    B1 
          MX7    -RM.RIL
          BX4    -X3+X0 
          SA6    RBUF+1 
          SB3    -3 
          SB4    X4 
          SB2    RM.RIL 
          GE     B4,B3,EMR4  IF -N \ -3 
 EMR3     BX6    -X7*X1 
          AX1    B2,X1
          SA6    A6+B1
          BX6    -X7*X1 
          SA6    A6+B1
          AX2    B2,X1
          SA1    A1+B1
          SB4    B4-B3
          BX6    -X7*X2 
          SA6    A6+B1
          LT     B4,B3,EMR3 
  
 EMR4     JP     EMR5+B4
+         BX6    -X7*X1 
          SA6    A6+B1
          AX1    B2,X1
+         BX6    -X7*X1 
          SA6    A6+B1
          AX1    B2,X1
+         BX6    -X7*X1 
          SA1    A1+B1
          NO
          SA6    A6+B1
  
 EMR5     AX3    6
          BX4    -X3+X0 
          ZR     X4,EMR6     IF NO PARAMETRIC CONS / FINISHED 
          MX7    -RM.CAL
          SB4    X4 
          MX6    0
          SB2    RM.CAL 
          SA6    CBUF 
          GE     B4,B3,EMR4  IF -N \ -3 
          EQ     EMR3 
  
**        EXPAND THE MACRO REFERENCE
*         X5 = MACRO TEXT WORD , B7 = NUMBER OF WORDS LEFT , A7 = STORE 
  
 EMR6     S"SY"  SBUF        INITIALIZE REGISTERS FOR THE EXPANSION 
          S"RN"  RBUF 
          MX0    -R1.RIL
          S"CA"  CBUF 
          MX6    -R1.CAL
  
 EMR7     UX4    "OC",X5
          SA1    F.RDT+"OC"  FETCH DESCRIPTOR 
          LX1    58-D.TYP 
          IX2    X1+X1
          MI     X1,EMR15    IF TYPES 3 OR 4
  
*         EXPAND A TYPE 1 RLIST INST
  
          BX3    -X0*X5      RI 
          LX5    -R1.RIL
          SX4    X3+"IR"
          BX1    -X0*X5      RK 
          MI     X5,EMR8     IF A GENERATED R 
          SA4    "RN"+X3
 EMR8     PX7    "OC",X4
          MI     X2,EMR12    IF TYPE 2
          LX5    -R1.RIL
          SX2    X1+"IR"
          MI     X5,EMR9     IF A GENERATED R 
          SA2    "RN"+X1
 EMR9     BX3    -X0*X5      EXTRACT RJ 
          LX5    -R1.RIL
          SX4    "IR"+X3
          LX2    R1.RKP 
          BX7    X2+X7
          MI     X5,EMR10    IF A GENERATED R 
          SA4    "RN"+X3
 EMR10    SA5    A5+B1       NEXT TEXT WORD 
          LX4    R1.RJP 
          SB7    B7-B1       I = I - 1
          BX7    X4+X7
          SA7    A7+B1
          GT     B7,EMR7     IF MORE TO PROCESS 
          EQ     EMR0 
  
*         EXPAND A TYPE 2 REFERENCE 
  
 EMR12    MX2    -R1.SOL+1
          BX4    -X2*X5      EXTRACT *SO* FIELD 
          LX5    -R1.SOL
          BX3    -X6*X5      EXTRACT CA 
          LX4    R1.SOP 
          PL     X5,EMR13    IF A CON 
          SA3    "CA"+X3     PARAMETRIC VALUE 
 EMR13    LX3    R1.CAP 
          SA5    A5+B1       NEXT TEXT WORD 
          BX4    X7+X4
          SB7    B7-B1       I = I - 1
          IX7    X3+X4
          SA7    A7+B1
          GT     B7,EMR7     IF MORE TO PROCESS 
          EQ     EMR0 
  
*         EXPAND A TYPE 3 REFERENCE 
*         MACRO SKELTON WORD IS - 12/OC,3/SY,12/CA,1/CAF,16/RF,16/RI
  
 EMR15    MI     X2,EMR19    IF TYPE 4
          BX3    -X0*X5      RI 
          LX5    -R1.RIL
          SX2    "IR"+X3
          MI     X5,EMR16    IF A GENERATED R 
          SA2    "RN"+X3     GET PARAMETRIC RI
 EMR16    BX3    -X0*X5      RF 
          AX4    45 
          PX7    "OC",X2
          LX5    -R1.RIL
          SX2    "IR"+X3
          MI     X5,EMR17    IF A GENERATED R 
          SA2    "RN"+X3
 EMR17    LX2    IH.RFP 
          SA4    "SY"+X4     FETCH SY VALUE 
          LX5    2*R1.RIL+15       CA TO TOP BIT
          SB7    B7-B1       I = I - 1
          AX5    2*R1.RIL+15       SIGN EXTEND CA 
          SA7    A7+B1       STORE FIRST WORD 
          BX3    X2+X4
          LX5    -1 
          BX1    -X6*X5 
          PL     X5,EMR18    IF AN ACTUAL CA
          SA1    "CA"+X1
 EMR18    SA5    A5+B1       NEXT TEXT WORD 
          LX1    IH.CAP 
          BX7    X1+X3
          SA7    A7+B1       STORE SECOND WORD
          GT     B7,EMR7     IF MORE TO PROCESS 
          EQ     EMR0 
  
*         EXPAND A TYPE 4 REFERENCE 
  
 EMR19    SA1    "SY"+X5     IH VALUE 
          LX5    -R1.CAP
          SA4    "CA"+X5     GET FORMAL CA ( ALWAYS ) 
          PX3    "OC",X1
          SB7    B7-B1       I = I - 1
          LX4    R1.CAP 
          SA5    A5+B1       NEXT TEXT WORD 
          BX7    X4+X3       COMBINE FIELDS 
          SA7    A7+1 
          GT     B7,EMR7     IF MORE TO PROCESS 
          EQ     EMR0 
  
          END 
