*DECK S$STBFS 
          IDENT  S$STBFS
          TITLE  S$STBFS -  SET BFS IN FIT
          COMMENT  SET BFS IN FIT 
          SPACE  4
**        S$STBFS -  SET BFS IN FIT 
* 
*     CALLING SEQUENCE- 
*         S$STBFS(ADDR);
* 
*     GIVEN-
*         ADDR = VARIABLE CONTAINING ADDRESS OF FIT.
* 
*     DOES- 
*         IF RT=W,
*             SETS BFS = 513
*         ELSE (ASSUMING RT=F), 
*             ROUNDS UP BFS SO THAT AN EXACT MULTIPLE OF FL-LENGTH
*             RECORDS WILL FIT IN BFS-1 WORDS, AND SO THAT AND EXACT
*             MULTIPLE OF PRU-S WILL ALSO FIT IN BFS-1 WORDS. 
  
  
          ENTRY  S$STBFS
 S$STBFS  SUBR
          SB1    1
          SA1    X1          X1 = ADDRESS OF FIT
          BX7    X1 
          SA7    HOLDFIT     SAVE THE FIT ADDRESS 
  
          FETCH  X1,RT,X2    X2 = RT
         *USES   AX5-6,X7 
          IFTHEN X2=0        IF RT=W, 
            SX3    513
            STORE  X1,BFS=X3
_____       EXIT
            ENDIF.
  
*     X4 := FL
*     WHILE (X4 MOD 10) > 0 DO
*         X4 := X4 + FL 
*    SETS X4 := MULTIPLE OF FL *AND* 10 
          FETCH  X1,FL,X2 
         *USES AX5,AX6,X7 
          BX4    X2          HOLDS FL AND MULTIPLES OF FL 
          BX3    X2          X3 := FL 
STBFS1    SX0    1S20/10+1         1/10 * 2**20 
          IX2    X4*X0             X4/10 * 2**20
          AX2    20                INTEGER X4/10
          SX0    10 
          IX2    X2*X0             (X4/10)*10 
          IX0    X4-X2             X4-((X4/10)*10) := X4 MOD 10 
          IFTHEN X0"0        IF X0 > 0 (X0 NEVER < 0) 
            IX4   X4+X3      X4 := X4 + FL
            EQ     STBFS1 
            ENDIF.
  
*     X3 := X4
*     WHILE (X3 MOD 640) > 0 DO 
*         X3 := X3 + X4 
*    SETS X3 := MULTIPLE OF X4 *AND* PRU
  
          BX3    X4          X3 := X4 
STBFS2    SX0    1S26/640+1        1/640 * 2**26
          IX2    X3*X0             X3/640 * 2**26 
          AX2    26                INTEGER X3/640 
          SX0    640
          IX2    X2*X0             (X3/640)*640 
          IX0    X3-X2             ((X3/640)*640) := X3 MOD 640 
          IFTHEN X0"0        IF X3 > 0  (X3 NEVER < 0)
            IX3    X3+X4
_____       EQ     STBFS2 
            ENDIF.
* 
*    SET X3 TO THE NUMBER OF WORDS, NOT BYTES 
* 
          SX0    1S20/10+1
          IX2    X3*X0       X3/10 * 2 ** 20
          AX2    20          INTEGER X3/10
          BX3    X2          X3 := X3/10
  
*     BFS := BFS ROUNDED UP TO NEAREST X3 
  
          SA1    HOLDFIT     GET BACK FIT ADDRESS 
          FETCH  X1,BFS,X2   X2 := BFS IN FIT 
          IX2    X2+X3       BFS IN FIT + X3
          SX2    X2-1        BFS + (X3 - 1) 
          PX2 
          NX2 
          PX4    X3 
          NX4 
          FX2    X2/X4       (BFS + (X3 - 1))/X3 (FLOAT)
          UX2    X2,B7
          LX2    X2,B7       (BFS + (X3 - 1))/X3 (INTEGER)
          IX2    X2*X3       ((BFS + (X3 -1))/X3)*X3
          SX2    X2+B1
          STORE  X1,BFS=X2
          EXIT
  
HOLDFIT   DATA   0           SAVE THE FIT ADDRESS 
  
  
          END 
