*DECK S$GNOM1 
          IDENT  S$GNOM1
          TITLE  S$GNOM1  - GENERATE USER MERGE CODE PART 1 
          COMMENT  GENERATE USER MERGE CODE PART 1. 
  
*CALL LBLPTR
  
          B1=1
  
  
**        S$GNOM1  - GENERATE USER MERGE CODE PART 1
* 
*     CALLING SEQUENCE- 
*         S$GNOM1(LTRN, REC$LR, OUTFIT, OREC, SMT$, VERIFY);
* 
*     GIVEN-
*         WSAO$LTRN = NUMBER OF TOURNAMENT ENTRIES
*         REC$LR   =  NUMBER OF BITS TO HOLD
*                     INDEX TO RECORD STORAGE AREA
*         SPEC$OUTFIT = ADDRESS OF OUTPUT FIT, OR ZERO
*         WSAO$OREC = OFFSET OF AREA TO HOLD EXTERNAL RECORD
*         SMT$ - TABLE OF FILES FOR ONE-PASS MERGE
*         SPEC$VERIFY - SET TO 1 IF VERIFICATION WANTED 
* 
*     DOES- 
*         GENERATE USER MERGE CODE PART 1 
* 
*         GENERATED CODE DOES-
*         SAVE ADDRESS OF WSA$
*         OPEN OUTPUT FILE, IF ANY. 
*         REWIND AND OPEN ALL INPUT FILES 
*         INITIALIZE TRN TO NULL ENTRIES: 1/1, LR/RN , ... /0 
*         SET X6 TO LAST RECORD INITIALIZED (ARBITRARY WINNER)
* 
  
  
          ENTRY  S$GNOM1
 S$GNOM1  SUBR               ENTRY/EXIT WORD
          SB1    1           CONSTANT 1 
* 
* GET AND SAVE PARAMETERS 
* 
          SA2    X1          X2=VALUE OF *LTRN* 
          SA0    X2          A0 := VALUE OF *LTRN*
          SA2    A1+B1       ADDRESS OF *LR*
          SA2    X2          X2 := VALUE OF *LR*
          SB2    X2          B2 := VALUE OF *LR*
          SA2    A1+2        ADDRESS OF SPEC$OUTFIT 
          SA2    X2          VALUE OF SPEC$OUTFIT 
          SB3    X2          B3= SPEC$OUTFIT
          SA2    A1+3        ADDRESS OF WSAO$OREC 
          SA2    X2          VALUE OF WSAO$OREC 
          SB4    X2          B4= WSAO$OREC
          SA2    A1+4        ADDRESS OF SMT$
          BX6    X2          SAVE ADDRESS OF SMT$ 
          SA6    SAVESMT     SAVE ADDRESS OF SMT$ 
          SA2    X2          VALUE OF SMT$ (1ST WORD) 
          SB5    X2          B5 := SMT$NFILES 
          SA2    A1+5        ADDRESS OF SPEC$VERIFY 
          SA2    X2          VALUE OF SPEC$VERIFY 
          BX6    X2 
          SA6    SAVEVFY     HOLD IT FOR LATER
* 
          NEWLBL RECDESC     THIS IS GENERATED IN S$GNRTN 
          NEWLBL EOF         THIS IS GENERATED IN S$GNGOM 
          NEWLBL ORD         THIS IS GENERATED IN S$GNORD 
          NEWLBL ERROR4                 *GENLBL DONE IN GNOM4 
          NEWLBL ERROR156               DITTO 
          NEWLBL ERRORZ                 DITTO 
  
          GENLBL TRUMRG 
          GENMAC (DATA -0)             *ENTRY/EXIT WORD 
          GEN    (SB1 1)               *CONSTANT 1
                                       *SAVE ADDR OF WSA
          GEN    (BX6 X1) 
          NEWLBL WSA
          GEN    (SA6 "WSA")
          GEN    (SB2 X1)              *SAVE IN B2
  
                                       *OPEN OUTPUT FILE, IF ANY
          IFTHEN B3"0                  IF WE HAVE AN OUTPUT FILE
            GEN    (SX6 B2+0),B4       *X6=ADDR FOR EXTERNAL RECORD 
            GEN    (SA0 0),B3          *A0 = ADDRESS OF OUTPUT FIT
            GENMAC (STORE A0,WSA=X6)
            GENMAC (STORE A0,PD=IO) 
            GENMAC (FETCH A0,OC,X5)    *CHECK WHETHER FILE IS OPEN
            GEN    (SX5 X5-1)          * 1=#OPE#,CODE FOR OPENED
            NEWLBL INT1 
            GEN    (ZR X5,"INT1")      *IF ALREADY OPENED 
  
            GENMAC (FETCH A0,LFN,X0)
            NEWLBL INT3                *IN S$GNOM4
            GEN    (SA5 "INT3")        *36/6LOUTPUT,24/0
            GEN    (IX0 X0-X5)
            NEWLBL INT2 
            GEN    (ZR X0,"INT2")      *IF FILE NAME IS *OUTPUT*
  
            NEWLBL NEXT 
            GEN    (SB6 "NEXT") 
 #HAVEB6    SET    1                 TELL GENMAC TO NOT GENERATE SB6 *+2
          GENMAC (FETCH A0,OF,X5) 
          GEN    (SB3 X5) 
          NEWLBL NEXT2
          GEN    (SB3 B3-B1)
          GEN    (EQ B3,B0,"NEXT2") 
          GENMAC (OPENM A0,OUTPUT,N)
          GENLBL NEXT2
            GENMAC (OPENM A0,OUTPUT)    *OPEN FILE WITH REWIND
            GENLBL NEXT 
            GEN    (EQ "INT1")
  
  
            GENLBL INT2 
            GEN    (SB6 "INT1") 
 #HAVEB6    SET    1                 TELL GENMAC TO NOT GENERATE SB6 *+2
            GENMAC (OPENM A0,OUTPUT,N)    *OPEN FILE W/O REWIND 
            GENLBL INT1 
            GEN    (SA2 "WSA")
            GEN    (SB2 X2) 
            ENDIF.
  
          SA1    SAVESMT
          SA1    X1          FIRST WORD OF SMT
          SB5    X1          B5 := NFILES 
 GNOM1.1  SA1    SAVESMT
          SA2    X1 
          SA2    A2+B5       GET LFN, FIT ADDRESS 
          MX3    42 
          BX0    -X3*X2      MASK OUT LFN 
          SB7    X0 
          GEN    (SA0 0),B7  TRANSFER FIT ADD TO GENERATED CODE 
          GENMAC (FETCH A0,OC,X5)    *CHECK WHETHER FILE IS OPEN
          GEN    (SX5 X5-1)          * 1=#OPE#,CODE FOR OPENED
          NEWLBL INT1 
          GEN    (ZR X5,"INT1")      *IF ALREADY OPENED 
          NEWLBL NEXT 
          GEN    (SB6 "NEXT") 
 #HAVEB6  SET    1
          GENMAC (OPENM A0,INPUT,R) 
          GENLBL INT1 
          GEN    (SB6 "NEXT") 
 #HAVEB6  SET     1 
          GENMAC (REWINDM A0) 
          GENLBL NEXT 
          GEN    (SX6 "EOF")
          GENMAC (STORE A0,DX=X6) 
          SB5    B5-B1
          NE     B5,B0,GNOM1.1
  
          NEWLBL NEXT 
          GEN    (EQ "NEXT") JUMP AROUND DATA WORD
          NEWLBL SMT
          GENLBL SMT
          SA1    SAVESMT
          GENWD  X1          TRANSFER SMT PTR TO GEN CODE 
          GENLBL NEXT 
  
          GEN    (SA2 "WSA")
          GEN    (SB2 X2) 
                                       *INITIALIZE TRN TO ZERO
          SB7    A0-1        LTRN-1 
          GEN    (SB3 0),B7            *LTRN-1
          GEN    (MX7 0)               *ZERO WORD MASK
  
          GENLBL FNL1 
          GEN    (SA7 B2+B3)
          GEN    (SB3 B3-B1)           *DECREMENT INDEX 
          GEN    (GE B3,B0,"FNL1")     *IF MORE WORDS IN TRN,LOOP 
  
                                       *INITIALIZE TRN TO NULL ENTRIES
          GEN    (SB3 0),A0            *LTRN
          GEN    (SX1 B3)              *COPY OF LTRN IN X1
          GEN    (SB4 B0) 
  
  
          NEWLBL FNL4 
          GENLBL FNL2 
          GEN    (SB4 B4+B1)
          GEN    (SX2 B4+B1)           *  RN+1
          GEN    (AX2 1)               * (RN+1)/2 
          GEN    (IX2 X1-X2)           *  LTRN-(RN+1)/2 
  
          GENLBL FNL3 
          GEN    (SA3 X2+B2)           *X3=TRN ENTRY
          GEN    (ZR X3,"FNL4")        *IF ZERO ENTRY,SKIP
          GEN    (AX2 1)               *NEXT LEVEL
          GEN    (PL X2,"FNL3")        *CHECK ENTRY AT NEXT LEVEL 
          GEN    (PS)                  *** DEBUG TRAP *** 
  
          GENLBL FNL4 
          GEN    (SX2 B4)              *X2=RN 
          SB7    -B2         -LR
          GEN    (LX2 60-1-1),B7       *60-1-1-LR 
          GEN    (MX0 1)               *SET 59TH BIT
          GEN    (BX6 X0+X2)
          GEN    (SA6 A3)              *DEPOSIT ENTRY IN TRN
          GEN    (LT B4,B3,"FNL2")     *IF MORE TRN ENTRY,LOOP
  
          NEWLBL TRUMRG2
          GEN    (EQ "TRUMRG2")        *GOTO TRUMRG PART 2
  
          NEWLBL PRUEOD 
          GENLBL TRUMRG1
  
          SA1    SAVEVFY
          SB2    X1 
          IFTHEN B2=B1
            NEWLBL  NEXT
            GEN    (ZR X6,"NEXT") 
            NEWLBL  VERIFY
            GEN    (RJ "VERIFY")
            GENLBL  NEXT
            ENDIF.
          EXIT
  
 SAVESMT  BSSZ   1                     HOLD ADDRESS OF SMT$ 
 SAVEVFY  BSSZ   1                     HOLD SPEC$VERIFY 
  
          END 
