Query Language commands may be invoked from a Fortran program by calls to the routine mfcall specifying the database directory and the Empress SQL statement.
mfcall (database_directory, query_language_statement)
Both the database directory and the Empress SQL statement are in the form of strings which may be dynamically built by the application program. mfcall returns 0 if the statement succeeds, and a non-zero exit status if it fails, for example, due to a syntax error in the Query Language statement, or an invalid attribute or table name is given.
A description of mfcall is included in the chapter Manual Pages.
The header file msfer.h or msf.h, which are shown below, must be included at the beginning of each program using mfcall. It has the definitions for mfcall, as well as all the mf functions (the Database Manipulation Language Interface). You should use the full pathname for this file, which resides in the include directory under the directory where Empress is installed, unless your system provides other conventions for including files.
The header file msfer.h contains:
logical mfcpi, mfchka, mftrst logical mfadd, mfdel,mfgetb, mfopen logical mfptvs, mfptvi, mfputi, mfsrtb, mfput logical mfqatr, mfqc, mfqci, mfqmch logical mfqnul, mfqrg, mfqrgi integer mfcomp, mfgtvi, mfgetv, mfigta integer mfget, mfprev, mfrget, mfrprv integer mfoper external mfcall, mfstop, mfinit, mfexit, mfcln external mfadd, mfdel, mfgetb, mfcpi, mfchka, mfopen external mfptvs, mfptvi, mfputi, mfsrtb, mfput external mfcomp, mfgtvi, mfgetv, mfigta external mfget, mfprev, mfrget, mfrprv external mfgete, mfclos, mfacls, mfsetn, mfqand, mfqor external mfqnot, mfqatr, mfqc, mfqci, mfqmch, mfqnul external mfqrg, mfqrgi, mfqieq, mfqseq external mftrst, mftrcn, mftrcm external mferrt, mfoper, mfprte
The header file msf.h contains:
logical mfcpi, mfchka, mftrst integer mfcomp, mfgtvi, mfgetv, mfigta integer mfget, mfprev, mfrget, mfrprv external mfcall, mfstop, mfinit, mfexit, mfcln external mfadd, mfdel, mfgetb, mfcpi, mfchka, mfopen external mfptvs, mfptvi, mfputi, mfsrtb, mfput external mfcomp, mfgtvi, mfgetv, mfigta external mfget, mfprev, mfrget, mfrprv external mfgete, mfclos, mfacls, mfsetn, mfqand, mfqor external mfqnot, mfqatr, mfqc, mfqci, mfqmch, mfqnul external mfqrg, mfqrgi, mfqieq, mfqseq external mftrst, mftrcn, mftrcm
There are two ways to organize a program using mfcall.
You can have the main program unit defined for you by naming the entry point of your program subroutine mfmain. Initialization and cleanup will then be taken care of. If you do this, you should also replace the stop call, if any, with a call to mfstop.
You can write your own main program unit, calling mfinit before using the interface routines and mfcln before stop. These calls are necessary to carry out various initialization and cleanup tasks.
empf77 and empf90 compiles a Fortran program invoking the Empress libraries. It invokes the appropriate Fortran compiler and searches the Empress libraries. The syntax for empf77 and empf90 are:
empf77 [compiler_options] ... file ... empf90 [compiler_options] ... file ...
Refer to the Manual Pages for more detail description of empf77 and empf90.
2.4 Examples Using the Command Language Interface
The database name in the following examples is a logical database named repairs. The physical location of the database could be anywhere on the system, such as:
/usr/joe/repairs
In the following examples, the header file is indicated as HEADER_FILE and you should substitute this with the full pathname of the header file. For example:
include '/usr/empress/include/msfer.h'
The following program, names.f, selects the names of all employees in the personnel table.
subroutine mfmain include 'HEADER_FILE' call mfcall ('repairs', 'select name & from personnel') call mfstop end
The following program, employees.f, selects the names and phone numbers of all employees in the personnel table, counts them, and prints suitable headings.
subroutine mfmain include 'HEADER_FILE' print 10 10 format ('Current Employees',// '') call mfcall ('repairs', 'select name, & phone from personnel') print 20 20 format ('Total Number of Employees = ') call mfcall ('repairs', 'select count & from personnel dump') call mfstop end