*DECK S$GNLG1 
          IDENT  S$GNLG1
          TITLE  S$GNLG1  - GENERATE LONG CODE PART 1 
          COMMENT  GENERATE LONG CODE PART 1. 
  
*CALL LBLPTR
  
*CALL LSTRTBL 
  
          B1=1
  
  
**        S$GNLG1  - GENERATE LONG CODE PART 1
* 
*     CALLING SEQUENCE- 
*         S$GNLG1(OCIOB, LCIOB, LTRN, ORSA, LR, 
*             LK2, LO2, IRRL, INFIT, RETAIN); 
* 
*     GIVEN-
*         OCIOB = OFFSET TO CIO BUFFER AREA 
*         LCIOB = LEN OF CIO BUFFER 
*         LTRN  = N0 OF TOURNAMENT ENTRIES
*         ORSA  = OFFSET TO RECORD STORAGE AREA.
*         LR    = N0 OF BITS TO HOLD INDEX TO RECORD STORAGE AREA.
*         LK2   = N0 OF BITS TO HOLD KEY (IN RSA) 
*         LO2   = N0 OF BITS TO HOLD RECORD ORDINAL (IN RSA)
*         IRRL  = INTERNAL RECORD LENGTH. 
*         INFIT = ADDRESS OF (FIRST) INPUT FIT, IF ANY
*               = ZERO, IF NONE.
*         RETAIN " 0 IF SPECIFIED.
* 
*     DOES- 
*         GENERATE LONG CODE PART 1 
* 
*         GENERATED CODE DOES-
*         SAVE ADDRESS OF TRN/WSA 
*         SAVE ADDRESS OF STRING TABLE STRTBL$
*         INITIALIZE CIO FET
*         SAVE LAST WINNER DESCRIPTOR 
  
  
          ENTRY  S$GNLG1
 S$GNLG1  SUBR               ENTRY/EXIT WORD
          SB1    1           CONSTANT 1 
  
* GET AND SAVE PARAMETERS 
* 
          SA0    A1          SAVE APLIST ADDRESS
          SA2    A1+B1       X2=ADDR OF *LCIOB* 
          SA2    X2          X2=VALUE OF *LCIOB*
          SB2    X2          SAVE IN B2 
          SA2    A1+2        X2=ADDR OF *LTRN*
          SA2    X2          X2=VALUE OF *LTRN* 
          SB3    X2          SAVE IN B3 
          SA4    A1+3        X4=ADDR OF *ORSA*
          SA4    X4          X4=VALUE OF *ORSA* 
          SA2    A1+4        X2=ADDR OF *LR*
          SA2    X2          X2=VALUE OF *LR* 
          SB5    X2          SAVE IN B5 
          SA2    A1+5        X2=ADDR OF *LK2* 
          SA2    X2          X2=VALUE OF *LK2*
          SB4    X2          SAVE IN B4 
          SA2    A1+6        X2=ADDR OF *LO2* 
          SA2    X2          X2=VALUE OF *LO2*
          SB4    X2+B4       B4= LK2+LO2
          SA5    A1+8        X5=ADDR OF ADDR OF *INFIT* 
          SA5    X5          X5=ADDR OF *INFIT* 
          BX7    X5          SAVE IN X7 
          SA5    A1+7        X5=ADDR OF *IRRL*
          SA5    X5          X5=VALUE OF *IRRL* 
  
* 
          GENLBL LONG1
          GENMAC (DATA -0)             *ENTRY/EXIT WORD 
          GEN    (SB1 1)               *CONSTANT 1
                                       *SAVE PARAMS PASSED TO LONG-CODE 
          GEN    (BX6 X1)              *TRN ADDR/WSA
          NEWLBL WSA
          GEN    (SA6 "WSA")
          GEN    (SB2 X1)              *SAVE IN B2
          GEN    (SA2 A1+2) 
          GEN    (BX6 X2) 
          NEWLBL INDXFIT
          GEN    (SA6 "INDXFIT")
          GEN    (SA2 A1+B1)           *X2=STRING TABLE ADDR
          GEN    (BX6 X2) 
          NEWLBL STRTBL 
          GEN    (SA6 "STRTBL")        *SAVE IN LOCAL STRTBL
                                       *SEE COMDECK STRTBL$ 
                                       *  FOR TABLE FORMAT
          GEN    (MX7 0)
          GEN    (SA7 X2)              *ZERO OUT STRTBL$LEN 
  
                                       *INITIALIZE WORD 1-65
                                       *  OF STRTBL$ AS CIOBUF
                                       *  FOR FILE ZZZZZ3Z
          GEN    (SX6 X2+B1)           *STRTBL$ WORD 1=BUFFER ADDR
          NEWLBL FET3Z
          GEN    (SA6 B1+"FET3Z")      *FIRST PTR 
          GEN    (SA6 A6+B1)           *IN PTR
          GEN    (SA6 A6+B1)           *OUT PTR 
          GEN    (SX6 X6+LSTRTBL+1) 
          GEN    (SA6 A6+B1)           *LIMIT PTR 
  
          SA2    A0+9        ADDR OF RETAIN 
          SA2    X2          VALUE OF RETAIN
          IFTHEN X2"0    IF RETAIN=TRUE 
            GEN    (SA2 A1+3) 
            GEN    (SA2 X2) 
            GEN    (BX6 X2) 
            NEWLBL ORD
            GEN    (SA6 "ORD")
            ENDIF.
  
  
                                       *RESET DX ADDR FOR LONG-CODE 
          IFTHEN X7"0        IF WE HAVE INPUT FILE(S) 
            NEWLBL EOF
            GEN    (SX6 "EOF")
            GEN    (SA1 "INDXFIT")
            GEN    (SA1 X1) 
            NEWLBL IFIT 
            GEN    (SA2 "IFIT") 
            GEN    (IX1 X1+X2)
            GEN    (SA1 X1) 
            GEN    (SA0 X1) 
            GENMAC (STORE A0,DX=X6) 
            ENDIF.
* 
                                       *INITIALZE CIO FET 
          SA1    A0          ORIGINAL APLIST ADDRESS
          SA2    X1          X2 = VALUE OF OCIOB
          SA0    X2 
          GEN    (SX6 B2+0),A0         *CIOBUF ADDRESS
          NEWLBL FET
          GEN    (SA4 B1+"FET")        *FIRST PTR 
          GEN    (BX6 X6+X4)
          GEN    (SA6 A4) 
          GEN    (SX6 X6)              *KEEP LO 18 BITS 
          GEN    (SA6 A6+B1)           *INPTR 
          GEN    (SA6 A6+B1)           *OUT PTR 
          GEN    (SX6 X6+0),B2         *CIOBUF ADDR+LEN 
          GEN    (SA6 A6+B1)           *LIMIT PTR 
  
          NEWLBL STRORD 
          GEN    (SX6 "STRORD")        *ADDR TO SAVE START PRU NO 
          GEN    (SA6 A6+2)            *WORD 6 OF FET 
  
          GEN    (SA4 B2)              *X4=LW DESCRIPTOR
          GEN    (BX6 X4)              *COPY IN X6
  
          NEWLBL SAVEAD 
          GENLBL LONG2
          NEWLBL RECDESC
          GEN    (SA6 "RECDESC")       *SAVE LW DESCRIPTOR
  
          SA0    -B5        -LR 
  
          IFTHEN B4=0        IF LK2+LO2=0 
            GEN  (BX4 X6) 
          ELSE- 
                                       *ENCODE INDEX TO 
                                       *   LTRN+1 INTO X4 
            GEN    (SX7 B1+0),B3       *RN=N0 OF TRN ENTRIES+1
            GEN    (LX7 60-1-1),A0       *LX7 60-1-1-LR 
            GEN    (MX0 1+1),B5          *MX0 1+1+LR
            GEN    (BX4 -X0*X6)        *COPY KEY
            GEN    (BX4 X7+X4)         *  COPY RN 
            ENDIF.
  
          IFTHEN X5"0        IF IRRL.NE.0(MULTIPLE-WORD RECORDS)
                                       *SAVE KEY OF LW
                                       * STARTING AT RSA END+1
            GEN    (BX7 X6) 
            GEN    (LX7 1+1),B5          *LX7 1+1+LR
            GEN    (MX0 60),A0         *MX0 -LR 
            GEN    (BX7 -X0*X7)        *X7=RN OF LW 
            GEN    (SX0 0),X5          *INTERNAL RECORD LEN 
            GEN    (IX7 X0*X7)
            IX4    X4-X5     ORSA-IRRL
            GEN    (SX7 X7+0),X4
            GEN    (SA5 B2+X7)         *X5=FIRST RSA WORD OF LW 
            GEN    (SX7 A5) 
            GEN    (SA7 "SAVEAD")      *SAVE ADDR OF THIS WORD
  
            ENDIF.
  
          IFTHEN B4"0        IF LK2+LO2>0 (MULTIPLE-WORD KEY) 
            GEN    (BX7 X5) 
            SX2    B3+B1     LTRN+1 
            IX5    X2*X5     (LTRN+1)*IRRL
            IX4    X4+X5     ORSA-IRRL+(LTRN+1)*IRRL
            GEN    (SA7 B2+0),X4
  
            SB5    60 
 COPYWD     GEN    (SA5 A5+B1)         *COPY NEXT RSA WORD OF LW
            GEN    (BX7 X5)            *  TO NEXT WORD OF 
            GEN    (SA7 A7+B1)         *  SAVE AREA FOLLOW RSA
            SB4    B4-B5
            GE     B4,B0,COPYWD  IF MORE WORDS TO COPY,LOOP 
            ENDIF.
          GEN    (BX7 X4) 
          NEWLBL OLDKEY 
          GEN    (SA7 "OLDKEY")        *SAVE LW DESCRIPTOR
          NEWLBL PRIENTRY 
          GEN    (EQ "PRIENTRY")       * SKIP OVER DATA AREA
  
* 
* LOCAL DATA AREA 
          GENLBL FET                   *FET OF FILE TO WRITE STRING 
          GENMAC (VFD 42/7LZZZZZ1A,18/1)
          GENMAC (VFD 13/1,29/2,18/0)  *FET WORD 1 W/ RANDOM PROCESSING 
          GENMAC (BSSZ 5)              *FET WORD 2-6
  
          GENLBL FET1A                 *TEMPLATE FOR FET
          GENMAC (VFD 36/6LZZZZZ1,24/1) 
          GENLBL FET3Z                 *FET FOR ZZZZZ3Z FOR STRTBL
          GENMAC (VFD 42/7LZZZZZ3Z,18/1)
          GENMAC (BSSZ 4) 
          GENLBL FILENUM               *KEEP COUNT OF FILE WRITTEN
          GENMAC (DATA 1)              *FILENO STARTS AT 1
          GENLBL NEXTSTR               *NEXT STRING FLAG
          GENMAC (DATA 40000000000000000000B) 
          GENLBL NWRITTN               *NO OF STRINGS DESC. WRITTEN 
          GENMAC (DATA 1) 
          GENLBL OLDKEY                *DESCRIPTOR OF OLDKEY
          GENMAC (DATA 0) 
          GENLBL RECDESC               *DESCRIPTOR OF LAST WINNER 
          GENMAC (DATA 0) 
          GENLBL SAVEAD                *PTR TO FIRST WORD OF LW IN RSA
          GENMAC (DATA 0) 
          NEWLBL SAVEX6 
          GENLBL SAVEX6                *LOCAL WORD TO SAVEX6
          GENMAC (DATA 0) 
          GENLBL STRORD                *ORDINAL OF STRING ON A FILE 
          GENMAC (DATA 1) 
          GENLBL STRORD2       2ND STRING ORDINAL FOR PRU LENGTH
          GENMAC (DATA 0) 
          GENLBL STRTBL                *WHERE ADDR OF STRTBL$ IS STORED 
          GENMAC (DATA 0) 
          GENLBL WSA                   *ADDR OF TRN/WSA 
          GENMAC (DATA 0) 
  
          EXIT
* 
          END 
