*DECK S$GTFIT 
          IDENT  S$GTFIT
          TITLE  S$GTFIT -  GET FIT ADDRESS 
          COMMENT  GET FIT ADDRESS
          SST                ACCESS #IO#
          SPACE  4
**        S$GTFIT -  GET FIT ADDRESS
* 
*     CALLING SEQUENCE- 
*         S$GTFIT(0/1, BIN, LFN, ADDR); 
* 
*     GIVEN-
*         0/1 = 0 IF FILE IS OUTPUT 
*             = 1 IF FILE IS SORT OR MERGE INPUT
*         BIN " 0 FOR BINARY OPEN 
*             = 0 FOR FORMATTED OPEN
*         LFN = FILE NAME, LEFT-JUSTIFIED, BLANK-FILLED,
*               OR AN INTEGER BETWEEN 1 AND 99. 
*         ADDR = AN INTEGER VARIABLE. 
* 
*     DOES- 
*         IF FORTRAN IS LOADED
*          AND *LFN* IS A FORTRAN FILE, 
*             GETS THE FIT ADDRESS VIA FORTRAN, 
*             OPENS THE FILE VIA FORTRAN, 
*             SAVES CERTAIN FIT FIELDS IN S$FITF, AND 
*             INCREMENTS LENGTH OF S$FITF (FIRST WORD)
*         ELSE
*             ALLOCATES A FIT VIA CMM.
  
  
          ENTRY  S$GTFIT
 S$GTFIT  SUBR
          SB1    1           B1=1 FOR FORTRAN 
          SX6    A1          SAVE ADDRESS OF ACTUAL PARAMETER LIST
          SA6    APLIST 
  
*     IF <FILE-SPECIFIER> IS A FILE NAME, STRIP BLANKS
  
          MX0    -18         77777777777777000000B
          SA2    A1+2        ADDRESS OF LFN 
          SA2    X2          FILE NAME OR INTEGER 
          BX3    X0*X2       FILE NAME OR 0 
          IFTHEN X3"0        IF FILE NAME 
            MX0    -6          77777777777777777700B
            LX0    18          77777777777700777777B
            SX2    1R          00000000000000000055B
            LX2    18          00000000000055000000B
            DUP    6
            BX5    -X0*X3      EXTRACT CURRENT CHARACTER
            IX5    X5-X2       COMPARE AGAINST BLANK
            NZ     X5,GTFIT1   IF NON-BLANK, SKIP 
            BX3    X3-X2       BLANK, SO DELETE IT
            LX0    6           MOVE MASK TO NEXT CHARACTER
            LX2    6           MOVE BLANK TO NEXT CHARACTER 
            ENDD
 GTFIT1     BSS    0
            BX2    X3          LEAVE STRIPPED FILE NAME IN X2 
            ENDIF.
          BX6    X2          SAVE FILE NAME 
          SA6    GTFITA 
  
*     IF FORTRAN IS NOT LOADED, 
*         GO CREATE FIT 
  
          SX1    =Y_Q2NTRY.  FORTRAN 4
          SX2    =Y_Q5NTRY.  FORTRAN 5
          IFTHEN X1<0        IF FORTRAN 4 NOT LOADED
           ANDIF X2<0         AND FORTRAN 5 NOT LOADED, 
            EQ     GTFIT2      GO CREATE FIT
       ENDIF. 
  
*     TRY TO GET FORTRAN FIT
  
          SA1    GTFITB      1/1, 41/, 18/ADDRESS OF GTFITA 
          RJ     =XUGTFIT.   SET X1 = 0 OR FIT
          ZR     X1,GTFIT2   IF FIT NOT FOUND, GO CREATE FIT
  
*     SET *ADDR* TO ADDRESS OF FORTRAN FIT
  
          SX6    X1          FIT ADDRESS
          SA2    APLIST      A2 = ORIGINAL VALUE OF A1
          SA2    X2+3        ADDRESS OF *ADDR*
          SA6    X2          SET *ADDR* TO ADDRESS OF FIT 
  
          SA3    =XS$MRL     X3 = MRL FROM SMSORT 
          STORE  X1,MRL=X3
  
  
*     OPEN THE FILE VIA FORTRAN 
  
                             X1 = FIT ADDRESS 
          SA2    APLIST 
          SA5    X2          ADDRESS OF 0/1 
          SA5    X5          0/1
          SB6    X5          B6 = 0 FOR OUTPUT
          SA5    X2+1        ADDRESS OF BIN 
          SA5    X5          BIN
          BX6    X5          X6 " 0 FOR BINARY OPEN 
          SA3    =XS$MRL     X3 = MAXIMUM RECORD LENGTH FOR BINARY OPEN 
          RJ     =XSM5XXX.   OPEN THE FILE VIA FORTRAN
  
          EXIT
  
  
*     NOT A FORTRAN FILE, SO CREATE A FIT 
  
GTFIT2    SX2    35          BLOCK SIZE NEEDED FOR A FIT
          SX3    200B        CODE = SHRINKABLE AT LWA 
          CALL   CMM.ALF     SET X1 = BLOCK FWA 
         *SAVES  A0,X0,B2,B3,X5 
          SX6    X1          FIT ADDRESS
          SA2    APLIST      ORIGINAL VALUE OF A1 
          SA2    X2+3        ADDRESS OF *ADDR*
          SA6    X2          SET *ADDR* TO FIT ADDRESS
          SA2    GTFITA      FILE NAME OR INTEGER 
          MX0    42 
          BX3    X0*X2       FILE NAME OR 0 
          IFTHEN X3=0        IF LFN WAS INTEGER 
            SB6    X2          INTEGER
            SB7    10 
            IFTHEN  B6<B7      IF ONE DIGIT  (E.G. N) 
              SA3    =0LTAPE0 
              LX2    5*6
              IX2    X3+X2       TAPEN
            ELSE-              IF TWO DIGITS  (E.G. MN) 
              SA3    =0LTAPE00
              SX0    1S20/10+1   1/10 * 2**20 
              IX4    X0*X2       MN/10 * 2**20
              AX4    20          MN/10 = M
              BX5    X0          M
              SX0    10 
              IX4    X0*X4       10*M 
              IX4    X2-X4       MN - 10*M = N
              LX5    6
              BX5    X5+X4
              LX5    4*6
              IX2    X3+X5       TAPEMN 
              ENDIF.           X2 = TAPEN OR TAPEMN 
            ENDIF.           X2 = FILE NAME 
          SX6    1           COMPLETE BIT 
          BX6    X6+X2       LFN + COMPLETE BIT 
          SA6    X1          STORE LFN IN FIRST WORD OF FIT 
  
          EXIT
          SPACE  4
 APLIST   BSS    1           ADDRESS OF ACTUAL PARAMETER LIST 
 GTFITA   BSS    1           FILE NAME OR NUMBER
 GTFITB   VFD    1/1,41/,18/GTFITA
          SPACE  4
          END 
