HP 3000 Manuals

CREATING A KSAM FILE WITH A CALL TO FOPEN [ KSAM/3000 Reference Manual ] MPE/iX 5.0 Documentation


KSAM/3000 Reference Manual

CREATING A KSAM FILE WITH A CALL TO FOPEN 

A KSAM file can be created with the >BUILD command of the KSAMUTIL
program or it can be created programmatically through a call to the file
system intrinsic FOPEN. Figure 5-1 contains a FORTRAN program that uses
the intrinsic FOPEN to create and open a Ele, and the intrinsic FWRITE to
write to the open file.  It checks for errors with the FCHECK and FERRMSG
intrinsics, and closes the file with a call to FCLOSE.

The file is named FEXAMFIL and the associated key file is named FKEYFILE.
Two keys are used, a primary key of 20 characters starting in byte 1 of
each data record, and an alternate key of eight characters starting in
byte 21 of the data record.  The primary key contains a name, the
alternate key a phone number (refer to the input data in Figure 5-1).

DEFINING KSAMPARAM 

The parameter ksamparam describes the key file in an array that contains
many different types of data (refer to Table 4-7).  Because the data
differs, the EQUIVALENCE statement is used to equate the word-array
KSAMPARAMA to the byte-array KSAMPARAM to the double-word-array
KSAMPARAMD. The keyfile name is in the first eight bytes and this is
equivalenced to the beginning of the array.  The key device is defined in
word 7 of KSAMPARAMA, and the key descriptions begin in word 18.

The flag word (word 17) has the octal value 2.  This means that only bit
14 is set to 1.  The flagword defines the following options for the KSAM
file:

bit 13 = 0       file is permanently saved in system directory

bit 14 = 1       record numbers in file start with 1, not zero

bit 15 = 0       records can be written in random order

If you compare this ksamparam definition to that in the SPL sample
program (Figure 4-5), you will note that the index values into the array
differ.  This is because, SPL arrays begin numbering with zero whereas
FORTRAN arrays begin numbering with one.

CALLING FOPEN 

In the FOPEN call, the first parameter is the KSAM file name that
identifies the data file and the KSAM file as a whole.  The second
parameter specifies the file options (foptions) parameter as octal 4004:

	       Click here to view figure.
This defines the following file options:

New KSAM file                               (bit 4=1)

Allow :FILE                                 (bit 5=0)

Fixed-Length Records                        (bits 8,9=00)

ASCII code                                  (bit 13=1)

New file                                    (bits 14,15=00)

_________________________________________________________________________________
|                                                                               |
|     C***********************************************************************  |
|     C                                                                      *  |
|     C                           EXAMPLE 1 *                                *  |
|     C                      BUILD A KSAM FILE *                             *  |
|     C                                                                      *  |
|     ************************************************************************  |
|               SYSTEM INTRINSIC FOPEN,FCLOSE,FWRITE,FERRMSG,FCHECK             |
|               INTEGER KSAMPARAMA(26)                                          |
|               INTEGER KEYDESCRIPTION(8)                                       |
|               CHARACTER KSAMPARAM(52)                                         |
|               INTEGER*4 KSAMPARAMD(13)                                        |
|               CHARACTER*8 KEYFILENAME                                         |
|               CHARACTER*17 KEYDEVICEE                                         |
|               EQUIVALENCE ((KSAMPARAMA,KSAMPARAM,KSAMPARAMD,KEYFILENAME)      |
|               EQUIVALENCE (KEYDEVICE,KSAMPARAMA(7))                           |
|               EQUIVALENCE (KSAMPARAMA(18),KEYDESCRIPTION)                     |
|               INTEGER FILNUM                                                  |
|               INTEGER LENGTH                                                  |
|               CHARACTER FILENAME*10                                           |
|               CHARACTER DEVICE*10                                             |
|               CHARACTER*72 INPUT                                              |
|               LOGICAL OUTPUT(36)                                              |
|               CHARACTER MESSAGE(72)                                           |
|               EQUIVALENCE MESSAGEW(36)                                        |
|               EQUIVALENCE (MESSAGE,MESSAGEW)                                  |
|               EQUIVALENCE (INPUT,OUTPUT)                                      |
|               DATA FILENAME/"FEXAMFIL  "/ <---------- filename                |
|               DATA DEVICE/"DISC  "/ device                                    |
|               DATA KEYDEVICE/"DISC  "/ device                                 |
|               DATA KEYFILENAME/"FKEYFILE"                                     |
|               DATA KSAMPARAMD(3)/100J/ <-------------- file size              |
|               DATA KSAMPARAMA(16)/2/ <---------------- flagword               |
|               DATA KSAMPARAMA(17)/2/ <--------------------- no. of keys       |
|               DATA KEYDESCRIPTION/%{4/1,12/20], 1,%[1/0,15/4],0,   key        |
|              1                    %[4/1,12/ 8],21,%[1/0,15/4], 0/ descriptions|
|     C***********************************************************************  |
|     C                                                                      *  |
|     C                      OPEN THE KSAM FILE                              *  |
|     C                                                                      *  |
|     C***********************************************************************  |
|             FILNUM=FOPEN(FILENAME,*4004L,%101L,-72,DEVICE,KSAMPARAM,M,        |
|            1              ,10,,100J)                                          |
|             IF (FILNUM .EQ. 0)  GO TO 400                                     |
_________________________________________________________________________________

          Figure 5-1.  Creating and Writing to KSAM File in FORTRAN 
_______________________________________________________________________________
|                                                                             |
|     ************************************************************************|
|     C                                                                      *|
|     C                       READ DATA FROM $STDIN                          *|
|     C                                                                      *|
|     ************************************************************************|
|              20 READ (5,300,END=30,ERR=40)   INPUT                          |
|     ************************************************************************|
|     C                                                                      *|
|     C           WRITE THE DATA JUST READ TO THE KSAM FILE                  *|
|     C                                                                      *|
|     C***********************************************************************|
|               50 DISPLAY INPUT                                              |
|                         CALL FWRITE(FILNUM,OUTPUT,-72,%0L)                  |
|                         IF (.CC.) 70,20,70                                  |
_______________________________________________________________________________

          Creating and Writing to KSAM File in FORTRAN 
________________________________________________________________________________
|                                                                              |
|      ************************************************************************|
|     C                                                                      * |
|     C                            ERROR MESSAGE                             * |
|     C                                                                      * |
|     C*********************************************************************** |
|                                                                              |
|               70 STOP "ERROR OCCURRED WHILE WRITING KSAM FILE"               |
|              100 STOP  "END OF JOB"                                          |
|               30 CALL FCLOSE(FILNUM,0,0)                                     |
|                  IF (.CC.) 33,100,33                                         |
|               33 STOP "CAN NOT CLOSE THE KSAM FILE"                          |
|               40 STOP "ERROR OCCURRED WHILE READING INPUT"                   |
|              400 CALL FCHECK (FILNUM,IERRNUM)                                |
|                  CALL FERRMSG (IERRNUM,MESSAGEW,LENGTH)                      |
|                  WRITE(6,200) (MESSAGE(I),I=1,LENGTH)                        |
|                  STOP "CAN NOT OPEN KSAM FILE"                               |
|              300 FORMAT(A72)                                                 |
|              200 FORMAT(1X,72A1)                                             |
|                  END                                                         |
|                                                                              |
|                  Output from Program Execution:                              |
|                                                                              |
|               NOLAN     JACK    923-4975  967 REED AVE.          SUNNYVALE   |
|               HOSODA    JOE     227-8214  1180 SAINT PETER CT.   LOS ALTOS   |
|               ECKSTEIN  LEO     287-5137  5303 STEVENS CREEK     SANTA CLARA |
|               CARDIN    RICK    578-7018  11100 WOLFE ROAD       CUPERTINO   |
|               PASBY     LINDA   295-1187  TOWN & CNTRY VILLAGE  SAN JOSE     |
|               SEELY     HENRY   293-4220  1144 LEBERTY ST.       EL CERRITO  |
|               ROBERT    GERRY   259-5535  12345 TELEGRAPH AVE.   BERLELEY    |
|               TURNEWR   IVAN    984-8498  22905 EMERSON ST.      OAKLAND     |
|               WHITE     GORDON  398-0301  4350 ASHBY AVE.        BERKELEY    |
|               WESTEP    ELDER   387-4598  1256 KINGFISHER ST.    SUNNYVALE   |
|     STOP END OF JOP                                                          |
________________________________________________________________________________

The next parameter defines the access options (aoptions) as the octal
value 101:

	       Click here to view figure.
This defines the following access options:

KSAM access expected                        bit 3=0)

Exclusive access                            bits 8,9=01)

No dynamic locking                          bit 10=0)

Write only access                           bits 12-15=0001)

A new file contains no information and is always opened for write access.
Before accessing the file for reading or update, it must be reopened.
Such an open specifies that the file is an old file in the foptions 
parameter.  Depending on the type of access expected, aoptions can be
omitted or can specify a particular access type.



MPE/iX 5.0 Documentation