|   |  | KSAM/3000 Reference Manual: HP 3000 MPE/iX Computer Systems > Chapter 4 USING KSAM FILES IN SPL PROGRAMS   FGETINFO | 
| 
 
 | 
 Requests access and status information about a file. 
 Once a file is opened on any device, the FGETINFO intrinsic can be used to request access and status information about that file. 
 
 
 
 
 By calling FGETINFO you can return to your program any or all of the items listed as parameters. Except for the identifying filenumber, each of these parameters is optional. When omitted, embedded parameters are indicated by commas. Parameters omitted from the end of the list need not be so indicated. For example, to locate the number of records in the file by finding the end of file, you can call FGETINFO as follows: 
 The value returned to LSTREC is the number of records in the file. The value LSTREC is also the chronological number of the last record in the file. This number can be used to read the last chronological record with FREADC or FREADDIR. Another useful parameter of FGETINFO is recpt. This parameter returns the chronological record number of the record last read. The example in Figure 4-4 FGETINFO Example illustrates both these parameters. First, FGETINFO is used to determine the total number of records in the file using the parameter eof. Then, each record in the file is read in sequential order by primary key. Following each sequential read, FGETINFO retrieves the chronological record number of the record just read. In the output from the program (refer to Figure 4-4 FGETINFO Example), note that the record number returned by FGETINFO is the chronological number. For instance, the first record written to the file was the record with record number 1. This record, which contains the primary key value "NOLAN JACK", is the fourth consecutive record in key sequence. Figure 4-4 FGETINFO Example  
$CONTROL MAIN=JEXAMPLS 
<<*********************************************************>> 
<<*                                                       *>> 
<<*                        EXAMPLE 5                      *>> 
<<*      FIND NUMBER OF RECORDS & RECORD NUMBER           *>> 
<<*                                                       *>> 
<<*********************************************************>> 
INTEGER FILNUM: 
INTEGER ERRORCODE,LENGTH; 
BYTE ARRAY FILNAME(0:9):="JEXAMFIL "; 
ARRAY MESSAGE(0:35); 
ARRAY INPUT(0:39); 
ARRAY OUTPUT(*)=INPUT; 
 DOUBLE EOP,RECPTR; 
 INTRINSIC FOPEN,FCLOSE,FREAD,FGETINFO,DASCII; 
 INTRINSIC PRINT,TERMINATE,FCHECK,FERRMSG; 
<<************************>> 
<<* OPEN THE KSAM FILE   *>> 
<<************************>> 
FILNJM:=FOPEN(FILNAME,3); <<OPEN THE KSAM FILE>> 
IF FILNUM=0 
THEN BEGIN <<CANNOT OPEN KSAM FILE>> 
       MOVE MESSAGE:="CANNOT OPEN KSAM FILE"; 
       PRINT (MESSAGE,-21,0); 
       FCHECK(FILNUM,ERRORCODE): <<GET ERROR NUMBER>> 
       FERRMSG(ERRORCODE,MESSAGE,LENGTH0;<<CONVERT TO STRING>> 
       PRINT (MESSAGE,-LENGTH,0); <<PRINTOUT ERROR MESSAGE>> 
       TERMINATE; 
     END; 
<<****************************************************>> 
<<* FIND NUMBER OF RECORDS WRITTEN TO FILE           *>> 
<<****************************************************>> 
 FGETINFO(FILNUM,,,,,,,,,,EOF); 
 IF  < >
 THEN BEGIN 
        MOVE MESSAGE:="ERROR OCCURRED FINDING NUMBER 
            OF RECORDS"; 
        PRINT(MESSAGE,-40,00; 
        FCHECK(FILNUM,ERRORCODE); 
        FERRMSG(ERRORCODE,MESSAGE,LENGTH); 
        PRINT(MESSAGE,-LENGTH,0); 
        TERMINATE; 
      END; 
<<****************************************************>> 
<<* PRINT NUMBER OF RECORDS IN FILE                  *>> 
<<****************************************************>> 
 MOVE MESSAGE:="RECORDS IN ENTITY = "; 
 DASCII(EOF,10,MESSAGE(9)); 
 PRINT(MESSAGE,-20,0); 
L1; 
<<****************************************************>> 
<<* READ KSAM SEQUENTIALLY                           *>> 
<<****************************************************>> 
FREAD(FILNUM,INPUT,-72); 
IF >                   <<END OF DATA>> 
THEN BEGIN 
       FCLOSE(FILNUM,0,0);    <<CLOSE THE KSAM FILE>>
       IF <> THEN 
         BEGIN 
            MOVE MESSAGE:="CANNOT CLOSE THE KSAM FILE"; 
            PRINT(MESSAGE,-22,0); 
            FCHECK(FILNUM,ERRORCODE); <<GET ERROR NUMBER>> 
            FERRMSG(ERRORCODE,MESSAGE,LENGTH);<<CINVERT TO STRING>> 
            PRINT(MESSAGE,-LENGTH,0); <<PRINTOUT ERROR MESSAGE>> 
         END;
       TERMINATE;
     END; 
IF < 
THEN BEGIN 
       MOVE MESSAGE:="ERROR OCCURRED WHILE READING KSAM FILE": 
       PRINT(MESSAGE,-37,0); 
       FCHECK(FILNUM,ERRORCODE); <<GET ERROR NUMRER>> 
       FERRMSG(ERRORCODE,MESSAGE.LENGTH);<<CONVERT TO STRING>> 
       PRINT(MESSAGE#-LENGTH,0): <<PRINTOUT ERRUR MESSAGE>> 
       TERMINATE; 
     END; 
<<**************************************************>> 
<<* WRITE THE DATA JUST READ FROM KSAM FILE        *>> 
<<**************************************************>> 
PRINT(OUTPUT;-72,0): 
<<**********************************************************>> 
<<* TO FIND OUT RECORD NUMBER OF THE RECORD JUST READ      *>> 
<<**********************************************************>> 
FGETINFO(FTLENUM,,,,,,,,,RECPTR): 
IF  < >
THEN BEGIN 
       MOVE MESSAGE:="ERROR OCCURRED FINDING RECORD NUMBER": 
       PRINT(MESSAGE,-36,0); 
       FCHECK(FILNUM,ERRORCODE); 
       FERRMGG(ERRORCODE,MESSAGE,LENGTH); 
       PRINT(MESSAGE,-LENGTH,0); 
       TERMINATE; 
     END; 
<<***********************************************>> 
<<* PRINT THE RECORD NUMBER OF LAST RECORD READ *>> 
<<***********************************************>> 
MOVE MESSAGE:="RECORD# = ";  
DASCII(RECPTR,10,MESSAGE(5) );  
PRINT(MESSAGE,-12,0); 
<<***********************************>> 
<<* GO BACK TO GET ANOTHER RECORD   *>> 
<<***********************************>> 
GO TO L1; 
!EOD; 
!EOD 
When Executed, the Following Output is Printed: 
RECORDS IN FILE= 10 
CARDIN RICK 578-7018 11100 WOLFF ROAD CUPERTINO CA. 94053 
RECORD# = 4  
ECKSTETN LEO 287-5137 5303 STEVENS CREEK SANTA CLARA CA. 95050  
RECORD# = 3  
HOSODA JOE 227-8214 1180 SAINT PETER CT. LOS ALTOS CA. 94022  
RECORD# = 2  
NOLAN JACK 923-4975 967 REED AVE. SUNNYVALE CA. 94087  
RECORD# = 1  
PASBY LINDA 295-1187 TOWN & CNTRY VILLAGEF SAN JOSE CA. 94102  
RECORD# = 5  
ROBERT GERRY 259-5535 12345 TELEGRAPH AVE BERKELEY CA. 90871  
RECORD# = 7  
SEELY HENRY 293-4220 1144 LEBERTY ST. EL CERRITO CA. 94053  
RECORD# = 6  
TURNEWR IVAN 984-8498 22905 EMERSON ST. OAKLAND CA. 98234  
RECORD# = R  
WESTEP ELDER 287-4598 1256 KTNGFISHER ST. SUNNYVALE CA. 43098  
RECORD# = 10  
WHITE GORDON 398-0301 4350 ASHBY AVE. BERKELEY CA. 91234  
RECORD# = 9  
 END OF PROGRAM  
 | ||||||||||||||||||||||||||||||||||||||||||