*DECK     GFL 
          IDENT  GFL
          TITLE  GFL - GET FILE LENGTH IN DISPLAY CODE. 
          SST 
          SYSCOM B1 
          ENTRY  GFL
  
*COMMENT  GFL - GET FILE LENGTH IN DISPLAY CODE.
          COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1994. 
          SPACE  4,10 
**        GFL - GET FILE LENGTH IN DISPLAY CODE.
* 
*         J. G. CLARK        79/12/17.
          SPACE  4,10 
**        COMMON DECKS. 
* 
*         COMCMAC - CPU SYSTEM MACROS.
*         COMQCAE - RHF COMMAND AND ATTRIBUTES EQUIVALENCES.
*         COMQMAC - RHF APPLICATION MACRO DEFINITIONS.
  
  
*CALL COMCMAC 
*CALL COMCCAE 
 GFL      SPACE  4,10 
**               GFL RETURNS A GIVEN FILE-S LENGTH IN *PRUS*.  THE
*         LENGTH IS RETURNED AS DECIMAL DISPLAY CODE, LEFT JUSTIFIED
*         AND ZERO FILLED.  THERE IS NO ZERO SUPPRESSION.  THE NUMBER 
*         OF DIGITS RETURNED IS DETERMINED BY THE APPLICATION 
*         LEVEL 7 PROTOCOL PARAMETER FOR FILE SIZE.  GFL IS 
*         A FORTRAN CALLABLE ROUTINE WHICH RETURNS THE LENGTH 
*         AS A FUNCTION REFERENCE.
* 
*         CALL FORMAT 
*                 LEN = GFL(FILENAM,DD) 
* 
*         ENTRY - (A1) = PARAMETER LIST.
*                        FILENAM = LFN OF FILE. 
*                        DD = CHARACTER TYPE. 
* 
*         PARAMETER LIST FORMAT 
*         FILENAM  - DISPLAY CODE FILE NAME, LEFT JUSTIFIED ZERO FILL.
* 
*         EXIT   (X6) = DECIMAL DISPLAY CODED LENGTH
*                (X7) = ACTUAL FILE LENGTH (BINARY NUMBER)
*                     = -1 IF INTERACTIVE FILE OR FILE TYPE = *OTHER* 
*                (X5) = FILINFO STATUS AND FILE TYPE WORD.
* 
*         USES   A - 1,2,5,6. 
*                B - 1. 
*                X - 1,2,4,5,6,7. 
* 
*         CALLS  CDZ=.
* 
*         MACROS FILINFO. 
  
  
 GFL      SUBRL  (#FILENAM,#DD) 
          SA1    X1 
          MX6    42 
 NOS      IFEQ   OS$NOS 
          SX2    5S12+1      SET LENGTH OF LIST AND COMPLETE BIT
 NOS      ELSE
          SX2    5S12        SET LENGTH OF PARAMETER LIST 
 NOS      ENDIF 
          BX6    X1*X6
          BX6    X2+X6
          SB1    1
          SA6    GFLA        SET RETURN AREA FIRST WORD 
          FILINFO  A6 
          SA1    GFLA+1 
          SA2    GFLB 
          MX7    0           FILE LENGTH = 0 (IF NEW FILE)
          ZR     X1,GFL2     IF NEW FILE (NONEXISTENT)
          MX7    -1          FILE LENGTH = -1 (IF WRONG TYPE) 
          SA5    GFLA+3 
          BX4    X1*X2
          AX5    30          RIGHT JUSTIFY WORD COUNT 
          NZ     X4,GFL2     IF INCORRECT FILE TYPE 
          LX1    X5,B1       X1 = WORDS*2 
          LX5    3           X5 = WORDS*8 
          IX1    X1+X5       X1 = WORDS*10
          SA3    "DD" 
          SA2    X3          GET DATA DECLARATION 
          SX4    X2-3 
          ZR     X4,GFL1     IF *C6* FILE TRANSFER
          AX1    1           X1 = WORDS*5 
          PL     X4,GFL1     IF *C8* FILE TRANSFER
          BX3    X1 
          AX1    1           X1 = WORDS*2.5 
          IX1    X1+X3       X1 = WORDS*7.5 
 GFL1     MX4    -10         X4 = -1023 
          IX1    X1-X4       ROUND UP BYTES TO NEXT KILOBYTE
          AX1    10          X1 = BYTES/1024
          RJ     =XCDZ       CONVERT FILE LENGTH
          LX6    59-/AP/SIZEL*6+1  LEFT JUSTIFY 
          AX5    6+3         X5 = PRU COUNT 
          BX7    X5          SET FILE LENGTH
          SA5    GFLA+1      X5 = FILE STATUS 
          EQ     GFLX        RETURN 
  
 GFL2     SA1    A2+B1       RETURN LENGTH OF ZERO
          BX6    X1 
          SA5    GFLA+1      X5 = FILE STATUS 
          EQ     GFLX        RETURN 
  
 GFLA     BSS    5           FILE INFORMATION RETURN AREA 
 GFLB     CON    1S16+7S3    INTERACTIVE FILE + FILE TYPE=OTHER 
          DATA   10H0000000000
  
          QUAL   *
          SPACE  4
          END 
