*DECK S$GNCHK 
          IDENT  S$GNCHK
          TITLE  S$GNCHK - GENERATE OWN5 COMPARE CODE 
          COMMENT  GENERATE OWN5 COMPARE CODE.
  
*CALL LBLPTR
  
  
**        S$GNCHK - GENERATE OWN5 COMPARE CODE
* 
*     CALLING SEQUENCE- 
*         S$GNCHK(REC$LK1, REC$LK2);
* 
*     GIVEN-
*         REC$LK1 AND REC$LK2 
* 
*     DOES- 
*         GENERATES CODE TO COMPARE THE CURRENT WINNER
*         WHOSE DESCRIPTOR IS *X6 WITH THE PREVIOUS WINNER
*         WHOSE KEY BITS ARE STORED AT -OLDDESC-. 
*         IF THE KEYS ARE EQUAL, IT SETS *X7 TO ZERO. 
*         OTHERWISE, IT SETS *X7 TO 1.
  
  
          ENTRY  S$GNCHK
 S$GNCHK  SUBR               ENTRY/EXIT WORD
  
* ON ENTRY, *X6 CONTAINS DESCRIPTOR OF CURRENT WINNER 
* AND THE OLD KEYS ARE STORED AT -OLDDESC-
  
          SA2    X1 
          BX7    X2 
          SA7    HOLDLK1
          SA2    A1+B1
          SA2    X2 
          BX7    X2 
          SA7    HOLDLK2
  
          SA4    S$LR 
          SX4    X4+2 
          GEN    (MX4 0),X4  MX4 LR+2 
          GEN    (BX5 -X4*X6) 
          GEN    (BX3 X6)              *X3 HAS COPY OF DESC.
  
          SA5    HOLDLK1
          IX4    X4+X5
          GEN    (MX4 0),X4 
          GEN    (BX5 X5*X4) *X5 IS ONLY KEY BITS NOW 
          GEN    (SA2 "OLDDESC")
          GEN    (IX0 X2-X5)
          NEWLBL NEXT 
          GEN    (NZ X0,"NEXT") 
  
* AT THIS POINT, THE DESCRIPTORS ARE EQUAL IN VALUE 
* SO NOW WE COMPARE SOME MORE IF NECESSARY
* LEAVE *A2 POINTING AT -OLDDESC- 
  
          SA5    HOLDLK2     VALUE OF REC$LK2 
          SB7    X5          B5 = REC$LK2 
  
          IFTHEN  B7>B0 
            SA2    S$ORSA      X2 = ORSA
            SB7    X2          B7 = ORSA
  
            SA2    S$IRRL      X2 = IRRL
            SB6    X2          B6 = IRRL
            SB3    B7-B6       B3 = ORSA-IRRL 
  
            SA4    S$LR        X4 = LR
            BX5    -X4         X5 = -LR 
  
            GEN    (SX2 0),B6            (*X2 = IRRL) 
            GEN    (MX4 60),X5           (*X4 = MASK 60-LR) 
  
*         OBTAIN ADDRESS OF FIRST RSA WORD OF CURRENT RECORD
  
            GEN    (LX6 1+1),X4          *X6 = DESCR.OF CURR. RECORD
            GEN    (BX6 -X4*X6)          (*X6 = RECORD NUMBER)
            GEN    (IX6 X2*X6)           (*X6 = RN*IRRL)
            IFTHEN B3\0        IF ORSA >= IRRL
              GEN    (SX6 X6+0),B3        *SX6 X6+(ORSA-IRRL) 
              ELSE- 
              GEN    (SX6 X6-0),B3        *SX6 X6-(IRRL-ORSA) 
              ENDIF.
            GEN    (SB6 B2+X6)            (*B6 = ADDRESS) 
            SA5    HOLDLK2                VALUE OF REC$LK2
            SB3    X5 
            GEN    (SA1 B6-B1)      *GET READY TO LOOP
            GEN    (MX4 60)         *X2 = NORMALLY COMPLETE MASK
LBL2        GEN    (SA1 A1+B1)      *GET (ANOTHER) WORD 
            SB3    B3-60            *WE ARE COMPARING 60 MORE BITS
            IFTHEN    B3<B0 
              SB2    B3+60          B2 = NUMBER OF GOOD BITS IN *X1 
              GEN    (MX4 0),B2 
              ENDIF.
            GEN    (BX7 X1*X4)        *TRANSFER KEY BITS TO *X7 
            GEN    (SA2 A2+B1)        *GET NEXT WORD FROM -OLDDESC- 
            GEN    (IX5 X7-X2)        *COMPARE CURRENT AND PREVIOUS 
            GEN    (NZ X5,"NEXT")     *IF KEYS ARE NOT EQUAL
            IFTHEN    B3>B0           IF MORE KEY BITS TO COMPARE 
              EQ LBL2 
              ENDIF.
            ENDIF.
  
          NEWLBL NEXT2
          GEN    (SB7 0)     0 MEANS EQUAL KEYS 
          GEN    (EQ "NEXT2") 
          GENLBL NEXT 
          GEN    (SB7 1)
          GENLBL NEXT2
  
* AT THIS POINT, *B7 CONTAINS THE RESULT AND THE COMPARISON IS
* FINISHED. SO NOW WE NEED TO MOVE THE CURRENT WINNER'S KEYS
* TO -OLDDESC- FOR THE NEXT TIME AROUND 
  
          GEN    (BX6 X3)       *RETURN DESCRIPTOR TO *X6 
***** 
* 
*  FIRST, MOVE KEYS FROM THE DESCRIPTOR TO WORD 1 OF -OLDDESC-
* 
***** 
          SA4    S$LR           FOR EXAMPLE, 12 BITS
          SX4    X4+2           TWO BITS AT LEFT ARE NOT KEYS 
*                               SO RESULT IS NOW 14 
          GEN    (MX4 0),X4     MX4 LR+2
          GEN    (BX3 -X4*X6)   *X6 = CURRENT DESCRIPTOR
*                               *X3 = KEYS AND DATA NOW 
          SA5    HOLDLK1        VALUE OF REC$LK1
          IX4    X4+X5          X4=16 BITS FOR RN + KEY BITS
          GEN    (MX4 0),X4     *MX4 NUMBER OF KEY BITS IN *X6
          GEN    (BX7 X3*X4)    *X7 = KEYS ONLY NOW 
          GEN    (SA7 "OLDDESC")  SAVE THE KEYS IN WORD 1 
***** 
* 
*  NOW, MOVE ANY KEY BITS IN THE REMAINING WORDS
* 
***** 
  
          SA5    HOLDLK2     VALUE OF REC$LK2 
          SB7    X5          B7 := REC$LK2
  
          IFTHEN  B7>B0 
            SA2    S$ORSA      X2 = ORSA
            SB7    X2          B7 = ORSA
  
            SA2    S$IRRL      X2 = IRRL
            SB6    X2          B6 = IRRL
            SB3    B7-B6       B3 = ORSA-IRRL 
  
            SA4    S$LR        X4 = LR
            BX5    -X4         X5 = -LR 
  
            GEN    (SX2 0),B6            (*X2 = IRRL) 
            GEN    (MX4 60),X5           (*X4 = MASK 60-LR) 
  
*         OBTAIN ADDRESS OF FIRST RSA WORD OF CURRENT RECORD
  
            GEN    (LX6 1+1),X4          *X6 = DESCR.OF CURR. RECORD
            GEN    (BX6 -X4*X6)          (*X6 = RECORD NUMBER)
            GEN    (IX6 X2*X6)           (*X6 = RN*IRRL)
            IFTHEN B3\0        IF ORSA >= IRRL
              GEN    (SX6 X6+0),B3        *SX6 X6+(ORSA-IRRL) 
              ELSE- 
              GEN    (SX6 X6-0),B3        *SX6 X6-(IRRL-ORSA) 
              ENDIF.
            GEN    (SB6 B2+X6)            (*B6 = ADDRESS) 
            SA5    HOLDLK2                VALUE OF REC$LK2
            SB3    X5 
            GEN    (SA1 B6-B1)      *GET READY TO LOOP
            GEN    (MX2 60)         *X2 = NORMALLY COMPLETE MASK
LBL3        GEN    (SA1 A1+B1)      *GET (ANOTHER) WORD 
            SB3    B3-60            *WE ARE MOVING 60 MORE BITS 
            IFTHEN    B3<B0 
              SB2    B3+60          B2 = NUMBER OF GOOD BITS IN *X1 
              GEN    (MX2 0),B2 
              ENDIF.
            GEN    (BX7 X1*X2)        *TRANSFER KEY BITS TO *X7 
            GEN    (SA7 A7+B1)        *STORE IN -OLDESC-
            IFTHEN    B3>B0           IF MORE KEY BITS TO MOVE
              EQ LBL3 
              ENDIF.
            ENDIF.
  
          GEN    (SX7 B7)            RESTORE COMPARE RESULTS TO *X7 
  
          EXIT
  
 HOLDLK1  BSSZ   1
 HOLDLK2  BSSZ   1
  
 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 
