HP 3000 Manuals

Preprocessor Input and Output [ ALLBASE/SQL FORTRAN Application Programming Guide ] MPE/iX 5.0 Documentation


ALLBASE/SQL FORTRAN Application Programming Guide

Preprocessor Input and Output 

Regardless of the mode you use, the following input files must be
available when you invoke the FORTRAN preprocessor, as shown in Figure
2-3 :

   *   source file:  a file containing the source code of the FORTRAN
       program with embedded SQL commands for one or more DBEnvironments.
       The default input filename is:

            SQLIN

       An alternative name can be specified by using a file equation as
       shown later in this chapter.

   *   ALLBASE/SQL message catalog:  a file containing preprocessor
       messages and ALLBASE/SQL error and warning messages.  The formal
       file designator for the message catalog is as follows, with xxx 
       being the numeric representation for the current native language:

            SQLCTxxx.PUB.SYS

       When you run the preprocessor in full preprocessing mode, also
       ensure that the DBEnvironment accessed by the program is
       available.

       As Figure 2-3  points out, the FORTRAN preprocessor creates the
       following output files:

   *   modified source file:  a file containing the modified version of
       the source code in the source file.  The default filename for this
       file is:

            SQLOUT

       An alternative name can be specified by using a file equation.

   *   variable include file:  the name for this file, which contains
       variable declarations used by FORTRAN statements that the
       preprocessor inserts into the modified source file is:

            SQLVAR

       Both SQLOUT and SQLVAR are created as permanent files in order to
       invoke the FORTRAN compiler, as shown in Figure 2-4 .

   *   ALLBASE/SQL message file:  a file containing the preprocessor
       banner, error, and warning messages, and other messages.  The file
       name for this file is:

            SQLMSG

   *   installable module file:  a file containing a copy of the module
       created by the preprocessor.  The file name for this file is:

            SQLMOD

       When you run the preprocessor in full preprocessing mode, the
       preprocessor also stores a module in the DBEnvironment accessed by
       your program.  The module is used at runtime to execute
       DBEnvironment operations.

	       Click here to view figure.
          Figure 2-3.  FORTRAN Preprocessor Input and Output 

	       Click here to view figure.
          Figure 2-4.  FORTRAN Compiler Input 

If you want to preprocess several ALLBASE/SQL application programs in the
same group and account and compile and link the programs later, or you
plan to compile a preprocessed program during a future session, you
should do the following for each program:

   *   Before running the preprocessor, equate SQLIN to the name of the
       file containing the application you want to preprocess:

              :FILE SQLIN = InFile

   *   After running the preprocessor, save and rename the output files
       if you do not want them overwritten.  For example:

              :SAVE SQLOUT 
              :RENAME SQLOUT, OutFile 
              :SAVE SQLMOD 
              :RENAME SQLMOD, ModFile 
              :SAVE SQLVAR 
              :RENAME SQLVAR, VarFile 

   *   When you are ready to compile the program, you must equate the
       include file name to its standard ALLBASE/SQL name (SQLVAR).

Source File 

The preprocessor source file must contain at a minimum the following
statements:

     PROGRAM Statement
     AnyStatement 
     END

When parsing the source file, the FORTRAN preprocessor ignores all
FORTRAN statements and any FORTRAN compiler directives that are not
supported.  Only the following information is parsed by the FORTRAN
preprocessor:

   *   The PROGRAM Statement or SUBROUTINE name.  Unless you specify a
       module name in the preprocessor invocation line, the preprocessor
       uses the PROGRAM Statement or the SUBROUTINE name to name the
       module it stores.  A module name can contain as many as 20 bytes
       and must follow the rules governing ALLBASE/SQL basic names (given
       in the ALLBASE/SQL Reference Manual ).

   *   Statements found after the prefix EXEC SQL. Follow the rules given
       in Chapter 3 for how and where to embed these statements.

   *   Statements found between the BEGIN DECLARE SECTION and END DECLARE
       SECTION commands.  These commands delimit a declare section, which
       contains FORTRAN data description entries for the host variables
       used in that program or subprogram unit.  All program units (both
       main and subprogram) that contain SQL commands, regardless of
       whether or not they contain host variables, must include the BEGIN
       DECLARE SECTION and the END DECLARE SECTION commands in order to
       create the variable include file.  Host variables are described in
       Chapter 4.

   *   The FORTRAN compiler directives $SET, $IF, $ELSE, $ENDIF, and
       $INCLUDE are supported by the FORTRAN preprocessor.  All other
       compiler directives are ignored.

Figure 2-6  illustrates a source file containing a sample program
using the following SQL commands, highlighted with shading:

       INCLUDE SQLCA
       BEGIN DECLARE SECTION
       END DECLARE SECTION
       WHENEVER
       CONNECT
       BEGIN WORK
       COMMIT WORK
       RELEASE
       SQLEXPLAIN
       SELECT

As the following interactive sample dialog illustrates, the program
begins a DBE session for PartsDBE, the sample DBEnvironment.  It prompts
the user for a part number, then displays information about the part from
the table PurchDB.Parts.  Warning and error conditions are handled with
WHENEVER and SQLEXPLAIN commands.  The program continues to prompt for a
part number until the user enters a slash (/) or until a serious error is
encountered:
__________________________________________________________________________
|                                                                        |
|     Program to SELECT specified rows from the Parts table -- forex2    |
|     Event List:                                                        |
|       CONNECT TO PartsDBE                                              |
|       BEGIN WORK                                                       |
|       SELECT specified row from the Parts table until user enters a "/"|
|       COMMIT WORK                                                      |
|       RELEASE PartsDBE                                                 |
|                                                                        |
|     CONNECT TO PartsDBE                                                |
|                                                                        |
|     Enter PartNumber from Parts table or / to STOP > 1123-P-01         |
|     BEGIN WORK                                                         |
|     SELECT PartNumber, PartName, SalesPrice                            |
|       Part Number:  1123-P-01                                          |
|       Part Name:    Central Processor                                  |
|       Sales Price:      500.00                                         |
|     Was retrieved from the PurchDB.Parts table!                        |
|     COMMIT WORK                                                        |
|                                                                        |
|     Enter PartNumber from Parts table or / to STOP > 1323-D-01         |
|     BEGIN WORK                                                         |
|     SELECT PartNumber, PartName, SalesPrice                            |
|       Part Number:  1323-D-01                                          |
|       Part Name:    Floppy Diskette Drive                              |
|       Sales Price:      200.00                                         |
|     Was retrieved from the PurchDB.Parts table!                        |
|     COMMIT WORK                                                        |
|                                                                        |
|     Enter PartNumber from Parts table or / to STOP > 1954-LP-01        |
|     BEGIN WORK                                                         |
|     SELECT PartNumber, PartName, SalesPrice                            |
|     Row not found!                                                     |
|     COMMIT WORK                                                        |
|                                                                        |
|     Enter PartNumber from Parts Table or / to STOP > 1823-PT-01        |
|     BEGIN WORK                                                         |
|     SELECT PartNumber, PartName, SalesPrice                            |
|       Part Number:  1823-PT-01                                         |
|       Part Name:    Graphics Printer                                   |
|       Sales Price:      450.00                                         |
|     Was retrieved from the PurchDB.Parts table!                        |
|     COMMIT WORK                                                        |
|                                                                        |
|     Enter PartNumber from Parts table or / to STOP > /                 |
|     RELEASE PartsDBE                                                   |
|     END OF PROGRAM                                                     |
__________________________________________________________________________

          Figure 2-5.  Runtime Dialog of Program forex2 
______________________________________________________________________
|                                                                    |
|           PROGRAM forex2                                           |
|     C                                                              |
|     C     *********************************************************|
|     C     *  This program illustrates the use of SQL's SELECT     *|
|     C     *  command to retrieve one row or tuple of data at      *|
|     C     *  a time. This program executes a BEGIN WORK command   *|
|     C     *  before the SELECT command, and a COMMIT WORK command *|
|     C     *  after executing the SELECT command. An indicator     *|
|     C     *  variable is also used for SalesPrice.                *|
|     C     *********************************************************|
|     C                                                              |
|           EXEC SQL INCLUDE SQLCA                                   |
|     C                                                              |
|     C            (* Begin SQL Communication Area *)                |
|     C                                                              |
|                CHARACTER           Done                            |
|                CHARACTER           Abort                           |
|                INTEGER             MultipleRows                    |
|                INTEGER             Deadlock                        |
|                CHARACTER*16        Response                        |
|     C                                                              |
|     C     ****************************************************     |
|     C     *  Data Type Conversions :                         *     |
|     C     *    Character         = SQL Char(1)               *     |
|     C     *    Character*n       = SQL Char(n)               *     |
|     C     *    Character*n       = SQL VarChar               *     |
|     C     *    Double Precision  = SQL Float                 *     |
|     C     *    Double Precision  = SQL Decimal               *     |
|     C     *    Integer           = SQL Integer               *     |
|     C     *    Integer*2         = SQL SmallInt              *     |
|     C     ****************************************************     |
|     C                                                              |
|     C             (* Begin Host Variable Declarations *)           |
|     C                                                              |
|           EXEC SQL BEGIN DECLARE SECTION                           |
|           CHARACTER*16         PartNumber                          |
|           CHARACTER*30         PartName                            |
|           DOUBLE PRECISION     SalesPrice                          |
|           SQLIND               SalesPriceInd                       |
|           CHARACTER*80         SQLMessage                          |
|           EXEC SQL END DECLARE SECTION                             |
|     C                                                              |
|     C            (* End Host Variable Declarations *)              |
|     C                                                              |
|     C                                                              |
|     C                                                              |
|     C                                                              |
|                                                                    |
______________________________________________________________________

          Figure 2-6.  Program forex2 
_______________________________________________________________________________
|                                                                             |
|     C                                                                       |
|     C            (* Beginning of the Main Program *)                        |
|     C                                                                       |
|           WRITE (*,*) CHAR(27), 'U'                                         |
|           WRITE (*,*) 'Program to SELECT specified rows from the Parts Table|
|          1 -- forex2'                                                       |
|           WRITE (*,*) ' '                                                   |
|           WRITE (*,*) 'Event List:'                                         |
|           WRITE (*,*) '  CONNECT TO PartsDBE'                               |
|           WRITE (*,*) '  CONNECT TO ../sampledb/PartsDBE'                   |
|           WRITE (*,*) '  BEGIN WORK'                                        |
|           WRITE (*,*) '  SELECT specified row from the Parts table until use|
|          1r enters a "/"'                                                   |
|           WRITE (*,*) '  COMMIT WORK'                                       |
|           WRITE (*,*) '  RELEASE PartsDBE'                                  |
|     C                                                                       |
|           CALL ConnectDBE                                                   |
|           CALL QueryTable                                                   |
|           CALL ReleaseDBE                                                   |
|     C                                                                       |
|           STOP                                                              |
|           END                                                               |
|     C                                                                       |
|     C     (* Beginning of the Sub-Routines *)                               |
|     C                                                                       |
|           SUBROUTINE ConnectDBE                                             |
|     C            (* Subroutine to Connect to PartsDBE *)                    |
|     C                                                                       |
|           EXEC SQL INCLUDE SQLCA                                            |
|     C                                                                       |
|     C            (* Begin SQL Communication Area *)                         |
|     C                                                                       |
|     C            (* Begin Host Variable Declarations *)                     |
|     C                                                                       |
|           EXEC SQL BEGIN DECLARE SECTION                                    |
|           EXEC SQL END DECLARE SECTION                                      |
|     C                                                                       |
|           EXEC SQL WHENEVER SQLERROR GOTO 500                               |
|     C                                                                       |
|           WRITE (*,*) ' '                                                   |
|           WRITE (*,*) 'CONNECT TO PartsDBE'                                 |
|           EXEC SQL CONNECT TO 'PartsDBE'                                    |
|           GOTO 600                                                          |
|     500   CALL SQLStatusCheck                                               |
|           CALL EndTransaction                                               |
|           CALL ReleaseDBE                                                   |
|     C                                                                       |
_______________________________________________________________________________

          Figure 2-6.  Program forex2 (page 2 of 8) 
__________________________________________________________
|                                                        |
|     600   RETURN                                       |
|           EXEC SQL WHENEVER SQLERROR CONTINUE          |
|           END                                          |
|     C     (* End of ConnectDBE Subroutine *)           |
|     C                                                  |
|           SUBROUTINE BeginTransaction                  |
|     C            (* Subroutine to Begin Work *)        |
|     C                                                  |
|           EXEC SQL INCLUDE SQLCA                       |
|     C                                                  |
|     C            (* Begin SQL Communication Area *)    |
|     C                                                  |
|     C            (* Begin Host Variable Declarations *)|
|     C                                                  |
|           EXEC SQL BEGIN DECLARE SECTION               |
|           EXEC SQL END DECLARE SECTION                 |
|     C                                                  |
|           EXEC SQL WHENEVER SQLERROR GOTO 500          |
|     C                                                  |
|           WRITE (*,*) 'BEGIN WORK'                     |
|           EXEC SQL BEGIN WORK                          |
|           GOTO 600                                     |
|     500   CALL SQLStatusCheck                          |
|           CALL EndTransaction                          |
|           CALL ReleaseDBE                              |
|     600   RETURN                                       |
|           EXEC SQL WHENEVER SQLERROR CONTINUE          |
|           END                                          |
|     C     (* End BeginTransaction Subroutine *)        |
|     C                                                  |
|           SUBROUTINE EndTransaction                    |
|     C     (* Subroutine to Commit Work *)              |
|     C                                                  |
|           EXEC SQL INCLUDE SQLCA                       |
|     C                                                  |
|     C            (* Begin SQL Communication Area *)    |
|     C                                                  |
|     C            (* Begin Host Variable Declarations *)|
|     C                                                  |
|           EXEC SQL BEGIN DECLARE SECTION               |
|           EXEC SQL END DECLARE SECTION                 |
|     C                                                  |
|           EXEC SQL WHENEVER SQLERROR GOTO 500          |
|           WRITE (*,*) 'COMMIT WORK'                    |
__________________________________________________________

          Figure 2-6.  Program forex2 (page 3 of 8) 
__________________________________________________________
|                                                        |
|           EXEC SQL COMMIT WORK                         |
|           GOTO 600                                     |
|     500   CALL SQLStatusCheck                          |
|           CALL ReleaseDBE                              |
|     C                                                  |
|     600   RETURN                                       |
|           EXEC SQL WHENEVER SQLERROR CONTINUE          |
|           END                                          |
|     C     (* End EndTransaction Subroutine *)          |
|     C                                                  |
|           SUBROUTINE ReleaseDBE                        |
|     C     (* Subroutine to Release PartsDBE *)         |
|     C                                                  |
|           EXEC SQL INCLUDE SQLCA                       |
|                                                        |
|     C            (* Begin SQL Communication Area *)    |
|     C                                                  |
|     C            (* Begin Host Variable Declarations *)|
|     C                                                  |
|           EXEC SQL BEGIN DECLARE SECTION               |
|           EXEC SQL END DECLARE SECTION                 |
|     C                                                  |
|           EXEC SQL WHENEVER SQLERROR GOTO 500          |
|     C                                                  |
|           WRITE (*,*) 'RELEASE PartsDBE'               |
|           EXEC SQL RELEASE                             |
|           GOTO 600                                     |
|     500   CALL SQLStatusCheck                          |
|           CALL EndTransaction                          |
|     C                                                  |
|     600   RETURN                                       |
|           EXEC SQL WHENEVER SQLERROR CONTINUE          |
|           END                                          |
|     C     (* End ReleaseDBE Subroutine *)              |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|                                                        |
|                                                        |
__________________________________________________________

          Figure 2-6.  Program forex2 (page 4 of 8) 
______________________________________________________________________
|                                                                    |
|     C                                                              |
|           SUBROUTINE DisplayRow (PartNumber,PartName,SalesPrice,   |
|          1SalesPriceInd)                                           |
|     C     (* Subroutine to Display a Selected Row *)               |
|     C                                                              |
|           EXEC SQL INCLUDE SQLCA                                   |
|     C                                                              |
|     C            (* Begin SQL Communication Area *)                |
|     C                                                              |
|     C            (* Begin Host Variable Declarations *)            |
|     C                                                              |
|           EXEC SQL BEGIN DECLARE SECTION                           |
|           CHARACTER*16     PartNumber                              |
|           CHARACTER*30     PartName                                |
|           DOUBLE PRECISION SalesPrice                              |
|           SQLIND           SalesPriceInd                           |
|           CHARACTER*80     SQLMessage                              |
|           EXEC SQL END DECLARE SECTION                             |
|     C                                                              |
|           WRITE(*,100) PartNumber                                  |
|           WRITE(*,110) PartName                                    |
|           IF (SalesPriceInd .LT. 0) THEN                           |
|           WRITE (*,*) 'Sales Price is NULL'                        |
|           ELSE                                                     |
|           WRITE(*,120) SalesPrice                                  |
|           ENDIF                                                    |
|           WRITE (*,*) 'Was retrieved from the PurchDB.Parts table!'|
|     100   FORMAT('   Part Number:    ',A16)                        |
|     110   FORMAT('   Part Name:      ',A30)                        |
|     120   FORMAT('   SalesPrice:     ',F10.2)                      |
|     C                                                              |
|           RETURN                                                   |
|           END                                                      |
|     C     (* End DisplayRow Subroutine *)                          |
|     C                                                              |
|           SUBROUTINE SQLStatusCheck                                |
|     C     (* Subroutine to Check the Status of DeadLocks *)        |
|     C                                                              |
|           EXEC SQL INCLUDE SQLCA                                   |
|     C                                                              |
|     C            (* Begin SQL Communication Area *)                |
|     C                                                              |
|           LOGICAL             Abort                                |
|           INTEGER             DeadLock                             |
|     C                                                              |
______________________________________________________________________

          Figure 2-6.  Program forex2 (page 5 of 8) 
__________________________________________________________
|                                                        |
|     C                                                  |
|     C                                                  |
|     C            (* Begin Host Variable Declarations *)|
|     C                                                  |
|           EXEC SQL BEGIN DECLARE SECTION               |
|           CHARACTER*80        SQLMessage               |
|           EXEC SQL END DECLARE SECTION                 |
|     C                                                  |
|     C            (* End Host Variable Declarations *)  |
|     C                                                  |
|           DeadLock = -14024                            |
|           Abort = .TRUE.                               |
|           WRITE (*,*) Abort                            |
|           IF (SQLCode .LT. DeadLock) THEN              |
|     Abort = .TRUE.                                     |
|           ELSE                                         |
|     Abort = .FALSE.                                    |
|           ENDIF                                        |
|           DO WHILE (SQLCode .NE. 0)                    |
|           EXEC SQL SQLExplain :SQLMessage              |
|           WRITE (*,*) SQLMessage                       |
|           END DO                                       |
|           IF (Abort) THEN                              |
|     CALL EndTransaction                                |
|     CALL ReleaseDBE                                    |
|           ENDIF                                        |
|           RETURN                                       |
|           END                                          |
|     C     (* End of SQLStatusCheck Subroutine *)       |
|     C                                                  |
|           SUBROUTINE QueryTable                        |
|     C     (* Subroutine to Query the Parts table *)    |
|     C                                                  |
|           EXEC SQL INCLUDE SQLCA                       |
|     C                                                  |
|     C            (* Begin SQL Communication Area *)    |
|     C                                                  |
|           INTEGER              DeadLock                |
|           INTEGER              MultipleRows            |
|           INTEGER              NotFound                |
|           INTEGER              OK                      |
|     C                                                  |
|     C                                                  |
|     C                                                  |
|                                                        |
|                                                        |
|                                                        |
__________________________________________________________

          Figure 2-6.  Program forex2 (page 6 of 8) 
_______________________________________________________________________________
|                                                                             |
|     C                                                                       |
|     C             (* Begin Host Variable Declarations *)                    |
|           EXEC SQL BEGIN DECLARE SECTION                                    |
|           CHARACTER*16         PartNumber                                   |
|           CHARACTER*30         PartName                                     |
|           DOUBLE PRECISION     SalesPrice                                   |
|           SQLIND               SalesPriceInd                                |
|           CHARACTER*80         SQLMessage                                   |
|           EXEC SQL END DECLARE SECTION                                      |
|     C                                                                       |
|     C            (* End Host Variable Declarations *)                       |
|     C                                                                       |
|           MultipleRows = -10002                                             |
|           DeadLock = -14024                                                 |
|           NotFound = 100                                                    |
|           OK = 0                                                            |
|     C                                                                       |
|           DO WHILE (PartNumber .NE. '/')                                    |
|      WRITE(*,100)                                                           |
|     100      FORMAT(/$,' Enter PartNumber from Parts table or / to STOP > ')|
|      READ(*,110) PartNumber                                                 |
|     110      FORMAT (A16)                                                   |
|     C                                                                       |
|      IF (PartNumber .NE. '/' ) THEN                                         |
|     C                                                                       |
|         CALL BeginTransaction                                               |
|         WRITE(*,*) 'SELECT PartNumber, PartName, SalesPrice'                |
|     C                                                                       |
|         EXEC SQL SELECT  PartNumber, PartName, SalesPrice\                  |
|          1                 INTO :PartNumber,\                               |
|          2                      :PartName,\                                 |
|          3                      :SalesPrice :SalesPriceInd\                 |
|          4                 FROM  PurchDB.Parts\                             |
|          5                WHERE  PartNumber = :PartNumber                   |
|     C                                                                       |
|         IF ((SQLWarn(3) .EQ. 'w') .OR. (SQLWarn(3) .EQ. 'W')) THEN          |
|            WRITE (*,*) 'SQL WARNING has occurred. The following row'        |
|            WRITE (*,*) 'of data may not be valid!'                          |
|            CALL DisplayRow (PartNumber,PartName,SalesPrice,                 |
|          1            SalesPriceInd)                                        |
|         ENDIF                                                               |
|     C                                                                       |
|     C                                                                       |
|     C                                                                       |
|     C                                                                       |
|     C                                                                       |
|     C                                                                       |
_______________________________________________________________________________

          Figure 2-6.  Program forex2 (page 7 of 8) 
________________________________________________________________
|                                                              |
|     C                                                        |
|         IF (SQLCode .EQ. OK) THEN                            |
|            CALL DisplayRow (PartNumber, PartName, SalesPrice,|
|        1SalesPriceInd)                                       |
|         ELSEIF (SQLCode .EQ. NotFound) THEN                  |
|            WRITE (*,*) 'Row not found!'                      |
|         ELSEIF (SQLCode .EQ. MultipleRows) THEN              |
|            WRITE(*,*) 'WARNING: More than one row qualifies!'|
|         ELSE                                                 |
|            CALL SQLStatusCheck                               |
|         ENDIF                                                |
|         CALL EndTransaction                                  |
|      ENDIF                                                   |
|           END DO                                             |
|           RETURN                                             |
|           END                                                |
|     C     (* End QueryTable Subroutine *)                    |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
________________________________________________________________

          Figure 2-6.  Program forex2 (page 8 of 8) 

Output File Attributes 

When the source file illustrated in Figure 2-6  is preprocessed, the
attributes of the output files are created as follows:

     :listftemp,2 

       TEMPORARY FILES FOR SOMEUSER.SOMEACCT,SOMEGRP

       ACCOUNT=  SOMEACCT    GROUP=  SOMEGRP
       FILENAME  CODE  ----------LOGICAL RECORD---------  ----SPACE----
                       SIZE  TYP       EOF     LIMIT R/B  SECTORS #X MX

       SQLMOD          250W  FB         3       1023  1       208  1 10 (TEMP)
       SQLMSG          254B  VA        14       1023  1       128  1  8 (TEMP)
       SQLOUT           80B  FA       646      10000  16      384  3 32 (TEMP)
       SQLVAR           80B  FA         8       2048  16      128  1 26 (TEMP)

Modified Source File 

As the FORTRAN preprocessor parses the source file, it copies lines from
the source file into the modified source file, comments out embedded SQL
commands, and inserts information around each embedded SQL command.
Figure 2-7 illustrates the modified source file generated for the source
file pictured in Figure 2-6 .  The shaded lines contain information
generated by the FORTRAN preprocessor.

In both preprocessing modes, the FORTRAN preprocessor:

   *   Inserts a C in column 1 on each line containing an embedded SQL
       command to comment out the SQL command for the FORTRAN compiler.

   *   Inserts one include FORTRAN compiler directive after the Type
       Declaration Section.  This directive references the preprocessor
       generated include file (variable include file) during compilation.

   *   Inserts a "Start SQL Preprocessor" comment before, and an "End SQL
       Preprocessor" comment after code that it modifies.

In full preprocessing mode, the preprocessor also:

   *   Generates a FORTRAN COMMON BLOCK declaration of SQLCA following
       the EXEC SQL INCLUDE SQLCA command.

   *   Generates FORTRAN statements providing conditional instructions
       following SQL commands encountered after one of the following SQL
       commands:  WHENEVER SQLERROR, WHENEVER SQLWARNING, and WHENEVER
       NOT FOUND.

   *   Generates FORTRAN statements that call ALLBASE/SQL external
       procedures at runtime.  These calls reference the module stored by
       the preprocessor in the DBEnvironment for execution at runtime.
       Variables used by these external calls are defined in the variable
       declaration include file.

   *   Inserts a "Start Inserted Statements" comment before generated
       information.


CAUTION Although you can access the modified source file and the variable declaration file with an editor, you should never change the information generated by the FORTRAN preprocessor. Your DBEnvironment or other files on the system could be damaged at runtime if preprocessor generated statements are altered.
If you change non-preprocessor generated statements in the modified source file, make the changes to the source file, re-preprocess the source file, and re-compile the output files before putting the application program into production. ________________________________________________________ | | | C**** Start SQL Preprocessor ****\ | | $ALIAS SQLXCNHF = 'SQLXCNHF' PASCAL \ \ | | $ (%REF,%REF,%VAL,%VAL)\ | | $ALIAS SQLXCO = 'SQLXCO' PASCAL \ \ | | $ (%REF,%VAL,%REF)\ | | $ALIAS SQLXEXIF = 'SQLXEXIF' PASCAL \ \ | | $ (%REF,%REF,%VAL)\ | | $ALIAS SQLXEXUF = 'SQLXEXUF' PASCAL \ \ | | $ (%REF,%REF,%VAL,%REF,%VAL,%VAL,%REF,%VAL)\| | $ALIAS SQLXFE = 'SQLXFE' PASCAL \ \ | | $ (%REF,%REF,%REF,%VAL,%REF,%VAL,%VAL,%VAL)\| | $ALIAS SQLXID = 'SQLXID' PASCAL \ \ | | $ (%REF,%REF,%REF,%VAL,%REF,%VAL,%VAL)\ | | $ALIAS SQLXOPKF = 'SQLXOPKF' PASCAL \ \ | | $ (%REF,%REF,%REF,%VAL,%REF,%VAL,%VAL)\ | | $ALIAS SQLXPLNF = 'SQLXPLNF' PASCAL \ \ | | $ (%REF,%REF,%VAL,%VAL)\ | | $ALIAS SQLXPREF = 'SQLXPREF' PASCAL \ \ | | $ (%REF,%REF,%VAL,%REF,%VAL)\ | | $ALIAS SQLXSECF = 'SQLXSECF' PASCAL \ \ | | $ (%REF,%REF,%REF,%VAL)\ | | $ALIAS SQLXST = 'SQLXST' PASCAL \ \ | | $ (%REF)\ | | $ALIAS SQLXSVPF = 'SQLXSVPF' PASCAL \ \ | | $ (%REF,%VAL,%REF,%REF)\ | | C**** End SQL Preprocessor **** | ________________________________________________________ Figure 2-7. Modified Source File for Program forex2 ______________________________________________________________________ | | | PROGRAM forex2 | | C *********************************************************| | C * This program illustrates the use of SQL's SELECT *| | C * command to retrieve one row or tuple of data at *| | C * a time. This program executes a BEGIN WORK command *| | C * before the SELECT command, and a COMMIT WORK command *| | C * after executing the SELECT command. An indicator *| | C * variable is also used for SalesPrice. *| | C *********************************************************| | C**** Start SQL Preprocessor ****\ | | C EXEC SQL INCLUDE SQLCA\ | | C (* Begin SQL Communication Area *)\ | | C**** Start Inserted Statements ****\ | | CHARACTER SQLCAID*8\ | | INTEGER SQLCABC\ | | INTEGER SQLCODE\ | | INTEGER SQLERRL\ | | CHARACTER SQLERRM*256\ | | CHARACTER SQLERRP*8\ | | INTEGER SQLERRD(6)\ | | CHARACTER SQLWARN(0:7)\ | | INTEGER SQLEXT(2) | ______________________________________________________________________ Modified Source File for Program forex2 ___________________________________________________________________ | | | CHARCTER SQLWARN0,SQLWARN1,SQLWARN2,SQLWARN3,\ | | 1 SQLWARN4,SQLWARN5,SQLWARN6,SQLWARN7\ | | EQUIVALENCE (SQLWARN0,SQLWARN(0)),\ | | 1 (SQLWARN1,SQLWARN(1)),\ | | 2 (SQLWARN2,SQLWARN(2)),\ | | 3 (SQLWARN3,SQLWARN(3)),\ | | 4 (SQLWARN4,SQLWARN(4)),\ | | 5 (SQLWARN5,SQLWARN(5)),\ | | 6 (SQLWARN6,SQLWARN(6)),\ | | 7 (SQLWARN7,SQLWARN(7))\ | | COMMON /SQLCA/ SQLCAID,SQLCABC,SQLCODE,SQLERRL,\ | | 1 SQLERRM,SQLERRP,SQLERRD,SQLWARN,SQLEXT\| | C**** End SQL Preprocessor **** | | CHARACTER Done | | CHARACTER Abort | | INTEGER MultipleRows | | INTEGER Deadlock | | CHARACTER*16 Response | | C | | C **************************************************** | | C * Data Type Conversions : * | | C * Character = SQL Char(1) * | | C * Character*n = SQL Char(n) * | | C * Character*n = SQL VarChar * | | C * Double Precision = SQL Float * | | C * Double Precision = SQL Decimal * | | C * Integer = SQL Integer * | | C * Integer*2 = SQL SmallInt * | | C **************************************************** | | C (* Begin Host Variable Declarations *) | | C | | C**** Start SQL Preprocessor ****\ | | C EXEC SQL BEGIN DECLARE SECTION\ | | C**** End SQL Preprocessor ****\ | | CHARACTER*16 PartNumber\ | | CHARACTER*30 PartName\ | | DOUBLE PRECISION SalesPrice\ | | INTEGER*2 SalesPriceInd\ | | C SQLIND SalesPriceInd | | CHARACTER*80 SQLMessage | | C**** Start SQL Preprocessor ****\ | | C EXEC SQL END DECLARE SECTION | | C | | C (* End Host Variable Declarations *) | | C | | C (* Beginning of the Main Program *) | | C | | C**** End SQL Preprocessor **** | ___________________________________________________________________ Figure 2-7. Modified Source File for Program forex2 (page 2 of 13) _______________________________________________________________________________ | | | INCLUDE 'SQLVAR' | | WRITE (*,*) CHAR(27), 'U' | | WRITE (*,*) 'Program to SELECT specified rows from the Parts Table| | 1 -- forex2' | | WRITE (*,*) ' ' | | WRITE (*,*) 'Event List:' | | WRITE (*,*) ' CONNECT TO PartsDBE' | | WRITE (*,*) ' BEGIN WORK' | | WRITE (*,*) ' SELECT specified row from the Parts table until use| | 1r enters a "/"' | | WRITE (*,*) ' COMMIT WORK' | | WRITE (*,*) ' RELEASE PartsDBE' | | C | | CALL ConnectDBE | | CALL QueryTable | | CALL ReleaseDBE | | C | | STOP | | END | | C | | C (* Beginning of the Sub-Routines *) | | C | | SUBROUTINE ConnectDBE | | C (* Subroutine to Connect to PartsDBE *) | | C | | C**** Start SQL Preprocessor ****\ | | C EXEC SQL INCLUDE SQLCA | | C | | C (* Begin SQL Communication Area *) | | C (* Begin Host Variable Declarations *) | | C | | C**** Start Inserted Statements ****\ | | CHARACTER SQLCAID*8\ | | INTEGER SQLCABC\ | | INTEGER SQLCODE\ | | INTEGER SQLERRL\ | | CHARACTER SQLERRM*256\ | | CHARACTER SQLERRP*8\ | | INTEGER SQLERRD(6)\ | | CHARACTER SQLWARN(0:7)\ | | INTEGER SQLEXT(2)\ | | CHARACTER SQLWARN0,SQLWARN1,SQLWARN2,SQLWARN3,\ | | 1 SQLWARN4,SQLWARN5,SQLWARN6,SQLWARN7\ | | EQUIVALENCE (SQLWARN0,SQLWARN(0)),\ | | 1 (SQLWARN1,SQLWARN(1)),\ | | 2 (SQLWARN2,SQLWARN(2)),\ | | 3 (SQLWARN3,SQLWARN(3)), | _______________________________________________________________________________ Figure 2-7. Modified Source File for Program forex2 (page 3 of 13) ________________________________________________________________________________ | | | 4 (SQLWARN4,SQLWARN(4)),\ | | 5 (SQLWARN5,SQLWARN(5)),\ | | 6 (SQLWARN6,SQLWARN(6)),\ | | 7 (SQLWARN7,SQLWARN(7))\ | | COMMON /SQLCA/ SQLCAID,SQLCABC,SQLCODE,SQLERRL,\ | | 1 SQLERRM,SQLERRP,SQLERRD,SQLWARN,SQLEXT\ | | C**** End SQL Preprocessor ****\ | | C**** Start SQL Preprocessor ****\ | | C EXEC SQL BEGIN DECLARE SECTION\ | | C**** End SQL Preprocessor ****\ | | C**** Start SQL Preprocessor ****\ | | C EXEC SQL END DECLARE SECTION\ | | C\ | | C**** End SQL Preprocessor ****\ | | INCLUDE 'SQLVAR'\ | | C**** Start SQL Preprocessor ****\ | | C EXEC SQL WHENEVER SQLERROR GOTO 500\ | | C\ | | C**** Start Inserted Statements ****\ | | C**** End SQL Preprocessor **** | | WRITE (*,*) ' ' | | WRITE (*,*) 'CONNECT TO PartsDBE' | | C**** Start SQL Preprocessor ****\ | | C EXEC SQL CONNECT TO 'PartsDBE'\ | | C**** Start Inserted Statements ****\ | | CALL SQLXCO(SQLCAID,264,'00AE0000506172747344424520202020202020202\| | 1020202020202020202020202020202020202020202020202020202020202020202\| | 2020202020202020202020202020202020202020202020202020202020202020202\| | 3020202020202020202020202020202020202020202020202020202020202020202\| | 40202020202020202020202020')\ | | IF (SQLCODE .LT. 0) THEN\ | | GO TO 500\ | | END IF\ | | C**** End SQL Preprocessor **** | | GOTO 600 | | 500 CALL SQLStatusCheck | | CALL EndTransaction | | CALL ReleaseDBE | | C | | 600 RETURN | | C**** Start SQL Preprocessor ****\ | | C EXEC SQL WHENEVER SQLERROR CONTINUE\ | | C**** Start Inserted Statements ****\ | | C**** End SQL Preprocessor **** | | END | | C (* End of ConnectDBE Subroutine *) | | SUBROUTINE BeginTransaction | | C (* Subroutine to Begin Work *) | ________________________________________________________________________________ Figure 2-7. Modified Source File for Program forex2 (page 4 of 13)


MPE/iX 5.0 Documentation