*DECK S$GNFM2 
          IDENT  S$GNFM2
          TITLE  S$GNFM2  - GENERATE FINAL MERGE CODE PART 2
          COMMENT  GENERATE FINAL MERGE CODE PART 2.
  
*CALL LBLPTR
  
          B1=1
  
  
**        S$GNFM2  - GENERATE FINAL MERGE CODE PART 2 
* 
*     CALLING SEQUENCE- 
*         S$GNFM2 (LTRN,ORSA,LR,IRRL);
* 
*     GIVEN-
*         LTRN  = N0 OF TOURNAMENT ENTRIES
*         LR    = N0 OF BITS TO HOLD INDEX TO RECORD STORAGE AREA.
*         ORSA  = OFFSET TO RECORD STORAGE AREA 
*         IRRL  = INTERNAL RECORD LENGTH
* 
*     DOES- 
*         GENERATE FINAL MERGE CODE PART 2
* 
*         GENERATED CODE EXPECTS- 
*         X6= DESCRIPTOR OF RECORD SENT TO USER.
* 
*         GENERATED CODE DOES-
*         IF X6=0, GGO TO "FNLMRG" (I.E. EXIT)
*         COMPUTE X5= RECORD NUMBER (RN) FROM X6
*         COMPUTE X2= INDEX TO TRN FROM X5
*         SET A0= ADDRESS OF FET OF INTERNAL FILE 
*         SAVE ADDRESS OF 1ST WORD IN RSA OF LAST WINNER
*             INTO "SAVEAD" 
* 
  
  
          ENTRY  S$GNFM2
 S$GNFM2  SUBR               ENTRY/EXIT WORD
          SB1    1           CONSTANT 1 
  
* GET AND SAVE PARAMETERS 
* 
          SA2    X1          X2=VALUE OF *LTRN* 
          SA0    X2          SAVE IN A0 
          SA4    A1+B1       X4=ADDR OF *ORSA*
          SA4    X4          X4=VALUE OF *ORSA* 
          SA2    A1+2        X2=ADDR OF *LR*
          SA2    X2          X2=VALUE OF *LR* 
          SB2    X2                    SAVE IN B2 
          SA5    A1+3        X5=ADDR OF *IRRL*
          SA5    X5          X5=VALUE OF *IRRL* 
* 
          GEN    (SA5 "SAVEX6") 
          GEN    (BX6 X5) 
  
          GEN    (ZR X6,"PRUEOD")      *IF X6=EOD,CLOSE FILE AND EXIT 
  
          GENLBL FNLMRG2
  
  
          SB3    -B2         -LR
          GEN    (LX6 1+1),B2          * 1+1+LR 
          GEN    (MX0 60),B3           * -LR
          GEN    (BX5 -X0*X6)          *MASK OUT TO GET RN
          GEN    (SX0 7)               *LEN OF FET
          GEN    (IX0 X0*X5)           * RN*(LEN OF FET)
          GEN    (SX0 X0-7)            *INDEX TO FET
          GEN    (SA0 X0+"FETS")       *A0=ADDR OF FET
          GEN    (SX2 X5+B1)           *RN+1
          GEN    (AX2 1)               * (RN+1)/2 
          GEN    (SX1 0),A0            *LTRN
          GEN    (IX2 X1-X2)           *LTRN-(RN+1)/2 
  
          IFTHEN X5"0        IF IRRL<>0 (MULTIPLE-WORD RECORDS) 
                                         *CALCULATE ADDR OF 1ST 
                                         *  WORD IN RSA OF RECORD 
                                         *  AND SAVE IN SAVEAD
            GEN    (BX7 X5)              * X7=RN OF LW
            GEN    (SX0 0),X5            *IRRL
            GEN    (IX7 X7*X0)           * (RN*IRRL)
            IX4    X4-X5       (ORSA-IRRL)
            IFTHEN X4\0        IF POSITIVE MODIFIER 
              GEN    (SX7 X7+0),X4       * (RN*IRRL)+(ORSA-IRRL)
            ELSE- 
              MX0    -17         MASK ALL EXCEPT LO 17 BITS 
              BX4    -X0*X4      SO THAT A NEGATIVE MODIFIER
                                 DOES NOT PROPAGATE THE SIGN BIT
                                 INTO OP CODE FIELD OF GEN CODE 
              GEN    (SX7 X7+400000B),X4   * (RN*IRRL)+(ORSA-IRRL)
              ENDIF.
            GEN    (SX7 B2+X7)           *X7=ADDR OF 1ST RSA WORD 
            ENDIF.
  
          NEWLBL SAVEAD 
          GEN    (SA7 "SAVEAD") 
  
          EXIT
          END 
