*DECK     SSFCBS
PROC SSFCBS( FET, AVAIL, DATA );
# TITLE SSFCBS - CHECK BUFFER SPACE.   #
  
      BEGIN # SSFCBS #
# 
**    SSFCBS - CHECK BUFFER SPACE.
* 
*     S. H. FISCHER.         81/10/08.
* 
*     THIS PROCEDURE COMPUTES THE NUMBER OF 60 BIT WORDS AVAILABLE
*     IN THE SPECIFIED CIO BUFFER AND THE NUMBER OF DATA WORDS PRESENT. 
* 
*     PROC SSFCBS( FET, AVAIL, DATA)
* 
*     ENTRY:  
*       FET = FILE ENVIRONMENT TABLE. 
* 
*     EXIT: 
*       AVAIL = NUMBER OF 60 BIT WORDS FREE IN BUFFER.
*       DATA = NUMBER OF 60 BIT WORDS VALID IN BUFFER.
* 
*     NOTES:  
*       THIS PROCEEDURE IS USEFUL WHEN *READW* AND *WRITEW* ARE BEING US
*       AND THE CALLER MUST HAVE AN IMMEDIATE RETURN WITH NO DELAY
*       (CIO CALL) FROM THESE ROUTINES. 
* 
*     METHOD: 
*       THE SPACE BETWEEN IN AND OUT IS THE VALID DATA, SUBTRACTING 
*       THIS FROM THE TOTAL BUFFER SIZE GIVES FREE SPACE. 
* 
# 
  
  
  
  
      ARRAY FET [00:00] S(5); 
        BEGIN 
        ITEM FET$FIRST   U(01,42,18);  # ADDRESS OF FIRST WORD OF BUF  #
        ITEM FET$IN      U(02,00,60);  # IN POINTER                    #
        ITEM FET$OUT     U(03,00,60);  # OUT POINTER                   #
        ITEM FET$LIMIT   U(04,42,18);  # LINIT POINTER                 #
        END 
  
      ITEM  D     I;
      ITEM  S     I;
      ITEM  DATA  I;
      ITEM  AVAIL I;
  
  
  
  
      D = FET$IN[0] - FET$OUT[0]; 
      S = FET$LIMIT[0] - FET$FIRST[0];
  
      IF D GQ 0 
      THEN
        BEGIN 
        DATA = D; 
        AVAIL = S - D - 1;
        RETURN; 
        END 
      ELSE
        BEGIN 
        AVAIL = -D - 1; 
        DATA = S - AVAIL - 1; 
        RETURN; 
        END 
  
  
  
  
      END # SSFCBS #
      TERM
