*DECK S$GNIN1 
          IDENT  S$GNIN1
          TITLE  S$GNIN1 - GENERATE INIT-CODE (PART 1)
          COMMENT  GENERATE INIT-CODE (PART 1)
  
*CALL LBLPTR
  
          B1=1   FOR BOTH S$GNIN1 AND GENERATED CODE
          SPACE  4
**        S$GNIN1 - GENERATE INIT-CODE (PART 1) 
* 
*     CALLING SEQUENCE- 
*         S$GNIN1(LTRN, INFIT, OREC, LR, FASTIN, RETAIN); 
* 
*     GIVEN-
*         WSAS$LTRN = NUMBER OF ENTRIES IN TOURNAMENT 
*         INFIT = ADDRESS OF (FIRST) INPUT FIT, IF ANY
*               = ZERO, IF NONE.
*         WSAS$OREC = OFFSET FROM WSA FOR EXTERNAL RECORD 
*         REC$LR = NUMBER OF BITS TO HOLD INDEX TO TOURNAMENT.
*         SPEC$FASTIN " 0 IF FAST INPUT IS TO BE DONE.
*         SPEC$RETAIN " 0 IF RETAIN IS SPECIFIED
* 
*     DOES- 
*         GENERATES THE FIRST PART OF INIT-CODE.
*             THIS CODE CLEARS EACH ENTRY IN THE TOURNAMENT TO ZERO,
*             INDICATING A NULL ENTRY.  IT ALSO SETS THE RECORD NUMBER
*             *RECDESC* TO ZERO.
  
  
          ENTRY  S$GNIN1
 S$GNIN1  SUBR               ENTRY/EXIT WORD
          SB1    1           CONSTANT 1 
          SA2    X1          X2 = VALUE OF *LTRN* 
          SB2    X2          B2 = LTRN
          SA4    A1+B1       ADDRESS OF ADDRESS OF (FIRST) INPUT FIT
          SA4    X4          ADDRESS OF (FIRST) INPUT FIT, OR ZERO
          SA5    A1+2        ADDRESS OF VALUE OF *OREC* 
          SA5    X5          X5 = VALUE OF *OREC* 
          SA2    A1+3        ADDRESS OF REC$LR
          SA2    X2          VALUE OF REC$LR
          SB4    X2          B4 = VALUE OF REC$LR 
          SA2    A1+4        ADDRESS OF SPEC$FASTIN 
          SA2    X2          VALUE OF SPEC$FASTIN 
          SB5    X2          B5 = SPEC$FASTIN 
          SA2    A1+5        ADDR OF SPEC$RETAIN
          SA2    X2          VALUE OF SPEC$RETAIN 
          BX7    X2          SAVE IN X7 
  
          NEWLBL RECDESC               *TO HOLD DESCRIPTOR OF NEXT RECORD 
          GENLBL INIT                  * (INIT SUBR)
          GENMAC (DATA -0)
          GEN    (SB1 1)               *CONSTANT 1
          GEN    (BX6 X1) 
          NEWLBL WSA
          GEN    (SA6 "WSA")
          GEN    (SA2 A1+2) 
          GEN    (BX6 X2) 
          NEWLBL IFIT 
          NEWLBL INDXFIT
          GEN    (SA6 "INDXFIT")
          GEN    (SA2 A1+B1)
          GEN    (BX6 X2) 
          NEWLBL ADRSHORT 
          GEN    (SA6 "ADRSHORT") 
  
          GEN    (SA2 A1+3) 
          GEN    (BX6 X2) 
          NEWLBL ADDRORD
          GEN    (SA6 "ADDRORD")
  
          IFTHEN X7"0    IF RETAIN=YES
            GEN    (MX6 0)
            NEWLBL ORD
            GEN    (SA6 "ORD")
            ENDIF.
  
          IFTHEN X4"0        IF INPUT FILE(S) 
            NEWLBL EOF
            GEN    (SX6 "EOF")
            GEN    (SA0 0),X4          *ADDRESS OF (FIRST) INPUT FIT
            GENMAC (STORE A0,DX=X6) 
            GEN    (SA5 "WSA")
            GEN    (SX5 X5+0),X5       *SX5 (WSA)+OREC
            GENMAC (STORE A0,WSA=X5)
            GENMAC (FETCH A0,OC,X5)    *CHECK FILE OPEN CONDITION 
            GEN    (SX5 X5-1)          * 1=#OPE#,CODE FOR OPENED
            NEWLBL GRIMOVE1 
            GEN    (ZR X5,"GRIMOVE1")    *IF FILE OPENED
            IFTHEN B5"0        IF FAST INPUT IS TO BE DONE
              GENMAC (FETCH A0,BFS,X2) *X2 = SIZE FOR BUFFER
              GEN    (SB2 X2)          *PRESERVE BFS IN B2
              GEN    (MX3 0)           *X3 = GROUP-ID, SIZE-CODE
              GEN    (CALL CMM.ALF)    *SET X1 = BLOCK FWA
                     *SAVES AX0,X5,B2-3 
              GENMAC (STORE A0,FWB=X1) *FIRST 
                     *USES AX5-6,X7 
              GEN    (SX6 X1) 
              GEN    (SA6 A0+2)        *IN
              GEN    (SA6 A6+B1)       *OUT 
              GEN    (SX1 X1+B2)       *FWB + BFS 
              GEN    (SA5 A6+B1)       *WORD WITH LIMIT 
              GEN    (MX6 -18)
              GEN    (BX6 X6*X5)
              GEN    (BX6 X6+X1)
              GEN    (SA6 A5)          *LIMIT 
              GEN    (MX6 1)             *CLEAR EP BIT FOR FASTIO 
              GEN    (LX6 45) 
              GEN    (SA5 A0+1)          *EP BIT IS IN FET + 1
              GEN    (BX6 -X6*X5)        *CLEAR EP BIT IN FET 
              GEN    (SA6 A5)            *STORE BACK IN FET + 1 
              ENDIF.
            GENMAC (FETCH A0,LFN,X0)
          NEWLBL INT1 
          GEN    (SA5 "INT1")          *INPUT     * 
            GEN    (IX0 X0-X5)
            NEWLBL GRIMOVE2 
            GEN    (ZR X0,"GRIMOVE2")    *IF FILE IS *INPUT*
            IFTHEN B5"0        IF FAST INPUT IS TO BE DONE, 
              GENMAC (REWIND A0,RECALL) 
              PL     B5,GNIN1.1   IF RT=F, SKIP 
              GEN    (SA1 A0+B1)     IN CASE FASTIO<0 
              GEN    (MX6 0)
              GEN    (SA6 X1) 
              GENMAC (READ A0,RECALL) 
              GEN    (SA1 A0+3)              *OUT 
              GEN    (SX6 X1+B1)             *SKIP BLOCK CONTROL WORD 
              GEN    (SA6 A1) 
 GNIN1.1      BSS    0
            ELSE-              IF RECORD MANAGER TO BE USED,
              NEWLBL NEXT 
              GEN    (SB6 "NEXT") 
 #HAVEB6      SET    1           TELL GENMAC TO NOT GENERATE SB6 *+2
              GENMAC  (OPENM A0,INPUT)  * SET PD=INPUT,OPEN WITH REWIND 
              GENLBL NEXT 
              ENDIF.
            NEWLBL GRIMOVE3 
            GEN    (EQ "GRIMOVE3")
  
  
            GENLBL GRIMOVE2 
            IFTHEN B5"0        IF FAST INPUT TO BE USED 
              PL     B5,GNIN1.2   IF RT=F, SKIP 
              GEN    (SA1 A0+B1)     IN CASE FASTIN<0 
              GEN    (MX6 0)
              GEN    (SA6 X1) 
              GENMAC (READ A0,RECALL) 
              GEN    (SA1 A0+3)              *OUT 
              GEN    (SX6 X1+B1)             *SKIP BLOCK CONTROL WORD 
              GEN    (SA6 A1) 
 GNIN1.2      BSS    0
            ELSE-              IF RECORD MANAGER TO BE USED 
              NEWLBL NEXT 
              GEN    (SB6 "NEXT") 
 #HAVEB6      SET    1           TELL GENMAC TO NOT GENERATE SB6 *+2
              GENMAC (OPENM A0,INPUT,N) *OPEN WITHOUT REWIND
              GENLBL NEXT 
              ENDIF.
            GEN    (EQ "GRIMOVE3")
  
            GENLBL GRIMOVE1 
            GENMAC (FETCH A0,LFN,X0)
          GEN    (SA5 "INT1")          *INPUT     * 
            GEN    (IX0 X0-X5)
  
            GEN    (ZR X0,"GRIMOVE3")      *IF FILE = *INPUT* 
  
            NEWLBL NEXT 
            GEN    (SB6 "NEXT") 
 #HAVEB6  SET    1
            GENMAC (REWINDM A0)        *REWIND FILES EXCEPT *INPUT* 
            GENLBL NEXT 
            GENLBL GRIMOVE3 
            ENDIF.
          SX1    B2-1        LTRN - 1 
          GEN    (SB7 0),X1            *INDEX TO CLEAR TOURNAMENT 
          GEN    (SA5 "WSA")           *X5 = ADDRESS OF TOURNAMENT
          GEN    (MX6 0)               *PREPARE TO STORE NULL ENTRIES 
  
          GENLBL INIT1
          GEN    (SA6 X5+B7)           *CLEAR ANOTHER ENTRY 
          GEN    (SB7 B7-B1)           *DECREMENT INDEX 
          GEN    (GE B7,B0,"INIT1")    *IF MORE TO CLEAR, LOOP
          GEN    (SA6 "RECDESC")       *SET RECORD NUMBER TO ZERO 
          GENLBL INIT2
          GEN    (SA1 "RECDESC")       *INCREMENT RECORD NUMBER 
          GEN    (SX6 B1) 
          SB7    -B4         -LR
          GEN    (LX6 60-1-1),B7       *LX6 60-1-1-LR 
          GEN    (IX6 X1+X6)
          GEN    (SA6 A1) 
  
  
          EXIT
  
  
          END 
