*DECK S$GNLG3 
          IDENT  S$GNLG3
          TITLE  S$GNLG3  - GENERATE LONG CODE PART 3 
          COMMENT  GENERATE LONG CODE PART 3. 
  
*CALL LBLPTR
  
          B1=1
  
  
**        S$GNLG3  - GENERATE LONG CODE PART 3
* 
*     CALLING SEQUENCE- 
*         S$GNLG3(LTRN,LR); 
* 
*     GIVEN-
*         LTRN = N0 OF TOURNAMENT ENTRIES 
*         LR = N0 OF BITS TO HOLD INDEX TO RECORD STORAGE AREA
* 
*     CALLING SEQUENCE- 
*         S$GNLG3;
* 
*     DOES- 
*         GENERATE LONG CODE PART 3 
* 
*         GENERATED CODE EXPECTS- 
*         X7 = LW - CR (I.E. (X4)-(X6) ) SET BY COMPARE CODE
* 
*         GENERATED CODE DOES-
*         IF X7<0 (I.E. CR>LW ) 
*         SET BIT 59 OF X6 (CR) TO "NEXTSTR" FLAG 
*         COMPUTE X2= NEW INDEX TO TRN
*         SET X4=LL FROM TRN+X2 
*         IF LL=END-OF-DATA, GOTO "LONG7" TO CHECK NEXT LEVEL 
*         IF CR=END-OF-DATA, GOTO "LONG6" TO SWAP CR AND LL 
*         IF LL AND CR ARE BOTH DATA RECORDS, 
*            IF THEY ARE ON DIFFERENT STRINGS, GOTO "LONG5" 
*               ELSE FALLS THRU TO COMPARE CODE TO COMPARE KEYS 
* 
  
  
          ENTRY  S$GNLG3
 S$GNLG3  SUBR               ENTRY/EXIT WORD
          SB1    1           CONSTANT 1 
  
* GET PARAMETERS
* 
          SA4    X1          X4=VALUE OF *LTRN* 
          SA5    A1+B1       X5=ADDR OF *LR*
          SA5    X5          X5=VALUE OF *LR* 
  
*     GENERATED COMPARE CODE HAS EFFECTIVELY SET X7 = LW - CR 
*      (I.E.(X4)-(X6) ) 
  
          GEN    (SA2 "NEXTSTR")       *ASSUME CR CANNOT FIT
          GEN    (BX6 X6+X2)           *  ON CURRENT STRING 
          GEN    (PL X7,"LONG3")       *IF ASSUMPTION CORRECT,SKIP
          GEN    (MX0 1)
          GEN    (BX6 X6-X0)           *NOTE CR IS ON THIS STRING 
  
          GENLBL LONG3
                             COMPUTE INDEX TO LL
                             FROM RN IN X4
          GEN    (SA4 "RECDESC")       *GET LW DESCRIPTOR 
          GEN    (LX4 1+1),X5          *LX4 1+1+LR FOR RIGTH-JUS RN 
          BX0    -X5         -LR
          GEN    (MX0 60),X0
          GEN    (BX2 -X0*X4)          *X2=RN 
          GEN    (SX2 X2+B1)           *RN+1
          GEN    (AX2 1)               *(RN+1)/2
          GEN    (SX5 0),X4            *LTRN
          GEN    (IX2 X5-X2)           *INDEX TO LL 
          GEN    (SA4 "WSA")
          GEN    (SB2 X4)              *B2=ADDR OF TOUR. AREA 
          GENLBL LONG4
          GEN    (SA4 X2+B2)           *X4=LL 
          NEWLBL LONG7
          GEN    (ZR X4,"LONG7")       *IF LL=EOD 
                             *LL<>EOD 
          NEWLBL LONG6
          GEN    (ZR X6,"LONG6")       *IF CR=EOD 
                             *LL<>EOD,CR<>EOD 
          GEN    (BX3 X4-X6)           *X3>=0 IF SAME STRING
          NEWLBL LONG5
          GEN    (NG X3,"LONG5")       * IF DIFFERENT STRING
* 
* GENERATE CODE HAS REGISTERS 
* B1=1
* X4=LL 
* X6=CR 
* 
          EXIT
          END 
