*DECK S$GNIV8 
          IDENT  S$GNIV8
          TITLE  FINISH UP INVERSION - VARIABLE 
          COMMENT FINISH UP INVERSION - VARIABLE
*CALL LBLPTR
          SPACE  4
*         S$GNIV8 - FINISH UP INVERSION, VARIABLE LENGTH RECORDS
* 
*    CALLING SEQUENCE - 
*         S$GNIV8;
* 
*    GIVEN -
*         NOTHING 
* 
*    DOES - 
*         GENERATES CODE
* 
*    GENERATED CODE DOES -
*         GENERATES LABELS GOTREC AND GOTIREC 
*         FINISHES UP INVERSION PROCESSING FOR VARIABLE RECORDS 
* 
          ENTRY  S$GNIV8
S$GNIV8   SUBR
          SB1    1           CONSTANT 1 
  
*         IF *X6 IS NOT THE RECORD DESCRIPTOR,
*         PUT *X6 WHERE IT BELONGS AND MOVE THE 
*         DESCRIPTOR TO *X6.
* 
*         SINCE THESE ARE VARIABLE-LENGTH RECORDS,
*         FIGURE OUT HOW MANY BITS HAVE BEEN INVERTED - NBITS:  
*          NBITS := 2 + LR + VBITS
  
          GEN    (SA2 "VBITS")       *X2 := VBITS 
          GEN    (SA3 S$LR) 
          GEN    (SX4 2)
          GEN    (IX3 X3+X2)
          GEN    (IX3 X3+X4)        2 + LR + VBITS
* 
*         WE HAVE THREE POSSIBLE CASES FOR NBITS: 
*           1. NBITS LQ 60
*               -- THE DESCRIPTOR IS ALREADY IN *X6 
*           2. NBITS LQ 120 
*               -- THE DESCRIPTOR IS IN RECDESC 
*                  THERE IS GOOD STUFF IN *X6 
*                  REGISTER *A6 HAS NOT BEEN SET
*           3. NBITS GR 120 
*               -- THE DESCRIPTOR IS IN RECDESC 
*                  THERE IS GOOD STUFF IN *X6 
*                  REGISTER *A6 HAS BEEN SET (BY S$GNAPN) 
* 
*            ......NOW LETS FIND OUT WHICH IS THE CASE
* 
          GEN    (SX2 60) 
          NEWLBL IV8LBL1
          GEN    (IX2 X2-X3)     TEST IF LQ 60
          GEN    (PL X2,"IV8LBL1")   JUMP IF LQ 60
* 
          GEN    (SX2 120)
          NEWLBL IV8LBL2
          GEN    (IX2 X2-X3)     TEST IF LQ 120 
          GEN    (PL X2,"IV8LBL2")    JUMP IF LQ 120
* 
*         BY THIS POINT, WE KNOW NBITS IS GREATER THAN 120, 
*         SO *A6 IS ALREADY SET 
* 
          GEN    (SA6 A6+B1)     STORE *X6 IN RSA 
          GEN    (SA3 "RECDESC")
          GEN    (BX6 X3)        PUT DESCRIPTOR IN *X6
          GEN    (EQ "IV8LBL1") 
  
          GENLBL IV8LBL2        WE GET HERE IF NBITS LQ 120 
          GEN    (SA3 "RECDESC")
          SA1    S$LR 
          GEN    (LX3 1+1),X1 
          SA1    S$LR 
          BX1    -X1
          GEN    (MX4 60-0),X1
          GEN    (BX3 -X4*X3) 
          SA1    S$IRRL 
          GEN    (SX4 0),X1 
          GEN    (IX3 X3*X4)
              SA1    S$ORSA 
              SA2    S$IRRL 
              IX1    X1-X2                 ORSA-IRRL
  
              IFTHEN X1\0        IF POSITIVE MODIFIER 
                GEN    (SX3 X3+0),X1       * (RN*IRRL)+(ORSA-IRRL)
              ELSE- 
                MX0    -17         MASK ALL EXCEPT LO 17 BITS 
                BX1    -X0*X1      SO THAT A NEGATIVE MODIFIER
                                   DOES NOT PROPAGATE THE SIGN BIT
                                   INTO OP CODE FIELD OF GEN CODE 
                GEN    (SX3 X3+400000B),X1   * (RN*IRRL)+(ORSA-IRRL)
                ENDIF.
          GEN    (SA4 "WSA")
          GEN    (IX3 X3+X4)
          GEN    (SA6 X3) 
          GEN    (SA3 "RECDESC")
          GEN    (BX6 X3) 
  
          GENLBL IV8LBL1
* 
          GENLBL GOTIREC
          GENLBL GOTREC 
* 
* 
* 
          EXIT
  
  
 S$IRRL   EXTERNAL           NUMBER OF WORDS PER SLOT IN THE RECORD 
                              STORAGE AREA  (I.E. REC$IRRL) 
 S$LK     EXTERNAL           NUMBER OF BITS OF INFORMATION THAT HAVE
                              BEEN PREVIOUSLY APPENDED
 S$LR     EXTERNAL           NUMBER OF BITS RESERVED FOR RECORD NUMBER
                              (REC$LR)
 S$ORSA   EXTERNAL           WORD OFFSET WITHIN WSA$ OF RECORD
                              STORAGE AREA  (WSAS$ORSA) 
          END 
