*DECK S$GNIM2 
          IDENT  S$GNIM2
          TITLE  S$GNIM2  - GENERATE INTERMEDIATE MERGE CODE PART 2 
          COMMENT  GENERATE INTERMEDIATE MERGE CODE PART 2. 
  
*CALL LBLPTR
  
          B1=1
  
  
**        S$GNIM2  - GENERATE INTERMEDIATE MERGE CODE PART 2
* 
*     CALLING SEQUENCE- 
*         S$GNIM2 ; 
* 
*     DOES- 
*         GENERATE INTERMEDIATE MERGE CODE PART 2 
* 
*     GENERATED CODE IS-
  
*         "INTMRG4":         X2 = INDEX TO TRN FOR REC DESCRIBED BY X6
*                            X6 = 0 FOR END-OF-DATA (EOD) 
*                               < 0 FOR NULL ( 1/1, LR/<RN>,...)
*                               > 0 FOR DATA RECORD (CURRENT RECORD CR )
                             B1 = 1 
*                            B2 = ADDRESS OF WORKING STORAGE AREA (WSA) 
* 
*                    IF CR IS NULL (I.E. X6<0 ),
*                        WE HAVE A WINNER SO GO TO "INTMRG3"
*                    SET LL (X4) TO TOURNAMENT ENTRY  AT B2+X2. 
*                    IF LL IS END-OF-DATA (I.E. X4=0),
*                        CR (X6) REMAINS CURRENT
*                        COMPETE AT NEXT LEVEL SO GO TO "INTMRG5".
*                    IF LL IS NULL (I.E. X4<0), 
*                        SWAP CR AND LL (I.E. (X6) AND (X4) ),
*                        NULL ENTRY IS WINNER SO GO TO "INTMRG3". 
*                    (LL IS A DATA RECORD, I.E. X4>0),
*                    IF CR IS END-OF-DATA,
*                        SWAP CR AND LL (I.E. (X6) AND (X4) ),
*                        COMPETE AT NEXT LEVEL SO GO TO "INTMRG5".
*     GENERATED CODE LEAVES REGISTERS:  
*                B1=1 
*                B2=ADDRESS OF WSA$ 
*                X2=INDEX TO TRN
*                X4=DESCRIPTOR OF LAST LOSER (LL) 
*                X6=DESCRIPTOR OF CURRENT RECORD (CR) 
* 
  
  
          ENTRY  S$GNIM2
 S$GNIM2  SUBR               ENTRY/EXIT WORD
          SB1    1           CONSTANT 1 
  
          GENLBL INTMRG4
          GEN    (NG X6,"INTMRG3")     *IF X6=NULL
          GEN    (SA4 X2+B2)
          NEWLBL INTMRG5
          GEN    (ZR X2,"INTMRG5")         *IF ONE WAY MERGE
          GEN    (ZR X4,"INTMRG5")     *IF X4=EOD 
          NEWLBL INT1 
          GEN    (PL X4,"INT1")        *IF X4=DATA
          GEN    (SA6 A4)              *X4 IS NULL HERE 
          GEN    (BX6 X4)              *   SO SWAP CR AND LL
          GEN    (EQ "INTMRG3")        *GOTO COMPUTE NEW TRN INDEX
  
          GENLBL INT1 
          NEWLBL INT2 
          GEN    (NZ X6,"INT2")        *IF X6"EOD 
          GEN    (SA6 A4)              *X6 IS EOD HERE
          GEN    (BX6 X4)              *   SO SWAP CR AND LL
          GEN    (EQ "INTMRG5")        *GOTO NEXT LEVEL 
  
          GENLBL INT2 
  
          EXIT
          END 
