*DECK S$GNSH1 
          IDENT  S$GNSH1
          TITLE  S$GNSH1 -  GENERATE SHORT-CODE, PART 1 
          COMMENT  GENERATE SHORT-CODE, PART 1
          B1=1               FOR *GENMAC* CODE
  
*CALL LBLPTR
  
          SPACE  4
**        S$GNSH1 -  GENERATE SHORT-CODE, PART 1
* 
*     CALLING SEQUENCE- 
*         S$GNSH1(WSAS$LTRN, REC$LR, SPEC$OUTFIT, WSAS$OREC,
*                                      SPEC$FASTOUT); 
* 
* 
  
  
          ENTRY  S$GNSH1
 S$GNSH1  SUBR
          SB1    1           CONSTANT 1 
  
*     SAVE PARAMETERS IN REGISTERS
  
          SA2    X1          VALUE OF WSAS$LTRN 
          SB2    X2          B2 = WSAS$LTRN 
          SA2    A1+B1       ADDRESS OF REC$LR
          SA2    X2          VALUE OF REC$LR
          SB3    X2          B3 = REC$LR
          SA2    A1+2        ADDRESS OF SPEC$OUTFIT 
          SA2    X2          VALUE OF SPEC$OUTFIT 
          SB4    X2          B4 = SPEC$OUTFIT 
          SA2    A1+3        ADDRESS OF WSAS$OREC 
          SA2    X2          VALUE OF WSAS$OREC 
          SB5    X2          B5 = WSAS$OREC 
          SA2    A1+4        ADDRESS OF SPEC$FASTOUT
          SA2    X2          VALUE OF SPEC$FASTOUT
          SX6    X2 
          SA6    FASTOUT     FASTOUT = SPEC$FASTOUT 
  
          NEWLBL (SHORT)     INITIALIZE ALL LABELS
          GENLBL SHORT
          GENMAC (DATA -0)             *ENTRY/EXIT WORD 
          GEN    (SB1 1)               *CONSTANT 1
          GEN    (BX6 X1)              *SAVE ADDRESS OF 
          NEWLBL WSA
          GEN    (SA6 "WSA")           *  WORKING STORAGE AREA
  
          IFTHEN B4"0        IF WE HAVE AN OUTPUT FILE, 
            GEN    (SX6 X6+0),B5       *X6 = ADDRESS FOR EXTERNAL RECORD
            GEN    (SA0 0),B4          *A0 = FIT ADDRESS
            GENMAC (STORE A0,WSA=X6)
            GENMAC (STORE A0,PD=IO) 
            GENMAC (FETCH A0,OC,X5) 
            GEN    (SX5 X5-1)            * 1=#OPE#,CODE FOR OPENED
            NEWLBL INT1 
            GEN    (ZR X5,"INT1")        *IF ALREADY OPENED 
  
            SA1    FASTOUT     NON-ZERO IFF FAST OUTPUT TO BE DONE
            IFTHEN X1"0        IF FAST OUTPUT TO BE DONE, 
              GENMAC (FETCH A0,BFS,X2) *X2 = SIZE OF 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.
  
          SA1    FASTOUT
          IFTHEN X1=0     IF RECORD MANAGER TO BE USED
            NEWLBL NEXT 
#HAVEB6     SET    1
            GEN    (SB6 "NEXT") 
            GENMAC (FETCH A0,OF,X1) 
            GEN    (SB2 X1) 
            NEWLBL NEXT2
            GEN    (SB2 B2-B1)      B2-#R#
            GEN    (EQ B2,B0,"NEXT2") 
            GEN    (SB3 2)
            NEWLBL NEXT1
            GEN    (EQ B2,B3,"NEXT1") 
            GENMAC (OPENM A0,OUTPUT,N)
            GENLBL NEXT1
            GENMAC (OPENM A0,OUTPUT,E) #EXTEND# 
            GENLBL NEXT2
            GENMAC (OPENM A0,OUTPUT,R)
            GENLBL NEXT 
            ENDIF.
            GENLBL INT1 
  
            ENDIF.
  
          NEWLBL PRUEOD 
          GEN    (SA1 "WSA")           *ADDRESS OF WSA AND TOURNAMENT 
          GEN    (SB2 X1)              *B2 = ADDRESS OF TOURNAMENT
          GEN    (SA5 B2)              *DESCRIPTOR OF LAST EOD
          GEN    (LX5 1+1),B3          *LX5 1+1+LR
          SB7    -B3         -LR
          GEN    (MX0 60),B7           *MX0 -LR 
          GEN    (BX5 -X0*X5)          *RN TO HOLD NEXT EOD 
          GEN    (SX7 X5-1) 
          GEN    (ZR X7,"PRUEOD") 
          GEN    (SX5 X5-1)            *RN -1 
          SB7    B2+B2       2*LTRN 
          GEN    (SX1 0),B7            *SET X1 = 2*LTRN 
          GEN    (IX1 X1-X5)           *2*(LTRN - (RN+1)/2) 
          GEN    (LX1 -1)              *LTRN - (RN+1)/2 WITH CARRY
  
          GENLBL SHORT1 
  
          GEN    (MX6 1)
          GEN    (IX1 X1-X6)           *GET NEXT INDEX
          GEN    (SX2 X1) 
  
                                       *CR = END-OF-DATA
          GENLBL SHORT2 
          GEN    (SA4 B2+X2)           *LL = NULL, DATA OR END-OF-DATA
          NEWLBL SHORT7 
          GEN    (ZR X4,"SHORT7")      *IF NULL 
          NEWLBL SHORT3 
          GEN    (PL X4,"SHORT3")      *IF DATA, JUMP 
                                       *CR=END-OF-DATA, LL=END-OF-DATA
          GEN    (AX2 1)               *ADVANCE TO NEXT LEVEL 
          GEN    (NZ X2,"SHORT2") 
                                       *WINNER IS END-OF-DATA, DONE 
          GEN    (EQ "PRUEOD")
  
          GENLBL SHORT3                *CR=END-OF-DATA, LL=DATA 
          GEN    (SA6 A4)              *LEAVE LL = THE END-OF-DATA
          GEN    (BX6 X4)              *LEAVE CR = THE DATA 
          NEWLBL SHORT5 
          GEN    (AX2 1)               *ADVANCE TO NEXT LEVEL 
          GEN    (ZR X2,"SHORT5")      *IF WINNER W/ DATA, GO WRITE REC.
  
          GENLBL SHORT4                *CR=DATA 
          GEN    (SA4 B2+X2)           *GET LL = DATA OR NULL OR E-O-D
          GEN    (NG X4,"SHORT5")      *IF END-OF-DATA
          GEN    (ZR X4,"SHORT7")      *IF NULL 
  
          EXIT                         *COMPARE CR=DATA VS. LL=DATA 
  
  
 FASTOUT  BSS    1           SPEC$FASTOUT 
  
  
          END 
