





                  @    @     @ @     @
                 @ @   @@   @@  @   @
                @   @  @ @ @ @   @ @
               @     @ @  @  @    @
               @@@@@@@ @     @   @ @
               @     @ @     @  @   @
               @     @ @     @ @     @





                @    @  @    @  @@@@@
                @    @  @@   @  @    @
                @    @  @ @  @  @    @
                @    @  @  @ @  @    @
                @    @  @   @@  @    @
                 @@@@   @    @  @@@@@





               @@@@@@@ @@@@@@@ @@@@@@@
               @       @    @  @    @
               @           @       @
               @@@@@      @       @
               @         @       @
               @         @       @
               @         @       @











                J .   W e n z l a f f

                Z K I   d e r   A d W
                 K u r s t r .   3 3
               -----------------------
               B E R L I N ,   1 0 8 6








                                   - 1 -








     ING_DB 6.3/4                                       AMX(FORTRAN77)



     EINLEITUNG
          Fuer die Einbindung von Datenbankaktionen in FORTRAN77 unter
          UNIX  bsd 2.9 stehen die AMX-Compiler `amxf' und `oamxf' zur
          Verfuegung.  `oamxf' ist die overlay-Version von `amxf'.
          Die Datenbankaktionen werden in AMX/C programmiert  und  mit
          `amxf'  uebersetzt,  alle  anderen  Programmteile koennen in
          FORTRAN77 geschrieben werden.  Sie werden mit  `f77'  ueber-
          setzt und mit `amxf' bzw. `oamxf' gelinkt (verbunden).
          Die Verwendung von `amxf' zur  Programmerstellung  erfordert
          keine  Angabe  einer  speziellen  AMX-Bibliothek  (analog zu
          `amx').  Die Verwendung von `oamxf' erfordert vom Nutzer

               1.   die Angabe des Flags `-V' beim Uebersetzen der  zu
                    ueberlagernden Moduln

               2.   die Angabe der ueberlagerbaren AMX-Bibliotheken
                    -lova1 bzw. `.../lib/libova1.a'
                    -lova2 bzw. `.../lib/libova2.a'
                    -lova3 bzw. `.../lib/libova3.a'
                    -lova4 bzw. `.../lib/libova4.a'
                    wobei der Pfad `.../' das home-directory  des  Da-
                    tenbanksystems ING_DB 6.3 angeben soll.

          Jede Bibliothek belegt  ein  Textsegment  (8  KByte).   Ent-
          sprechend  der  Ueberlagerungsstruktur  koennen  die Biblio-
          theken verteilt werden.  Die Nummerierung schreibt aber  die
          Reihenfolge der Angabe beim Verbinden vor.


     EIN-/AUSGABEN
          Solange in FORTRAN77 und C jeweils verschiedene Dateien  an-
          gesprochen  werden, koennen ohne Sprachmixprobleme beliebige
          Ein-/Ausgabeoperationen ausgefuehrt werden.  Gleiche Dateien
          koennen  nur  dann  in  beiden Sprachen angesprochen werden,
          wenn es sich um die Standard-Ein-  oder  -Ausgabedatei  han-
          delt.

               FORTRAN77           C
               ---------           ---------------------
               Einheit 5           stdin  (Deskriptor 0)
               Einheit 6           stdout (Deskriptor 1)
               Einheit 0           stderr (Deskriptor 2)

          Einheit 5, 6 oder 0 in FORTRAN77 darf dabei  keiner  anderen
          Datei  zugewiesen werden, wie auch stdin, stdout oder stderr
          bzw. Deskriptor 0, 1 oder 2 in C.  In C  sollten  die  Stan-
          darddateien auch nicht gepuffert werden (s. SETBUF(III)).






                                   - 1 -








     ING_DB 6.3/4                                       AMX(FORTRAN77)



     FELDER
          In FORTRAN77 beginnen Indizes von  Felder  (Vektoren)  immer
          mit 1, in C dagegen mit 0.

          Beispiel
               FORTRAN77:     array(n)   hat die Indizes 1 .. n
               C              array[n]   hat die Indizes 0 .. (n - 1)

          Probleme koennen immer dann auftreten, wenn ueber  Argumente
          ein  Index  uebermittelt wird, der den Bearbeitungsstand des
          Feldes ausdruecken soll.  Die Uebermittlung  der  Kardinali-
          taet  des Feldes (Anzahl der Feldelemente) bringt keine Pro-
          bleme.
          In mehrdimensionalen Feldern hat  in  FORTRAN77  Spalte  vor
          Zeile, in C Zeile vor Spalte Vorrang.

          FORTRAN77
                           +-----------------------------------+
                  a(2,3)   | 1,1 | 1,2 | 1,3 | 2,1 | 2,2 | 2,3 |
                  a(3,2)   | 1,1 | 1,2 | 2,1 | 2,2 | 3,1 | 3,2 |
                  a(6)     |  1  |  2  |  3  |  4  |  5  |  6  |
                           +-----------------------------------+
          C
                           +-----------------------------------+
                  a[6]     |  0  |  1  |  2  |  3  |  4  |  5  |
                  a[2,3]   | 0,0 | 1,0 | 0,1 | 1,1 | 0,2 | 1,2 |
                  a[3,2]   | 0,0 | 1,0 | 2,0 | 0,1 | 1,1 | 2,1 |
                           +-----------------------------------+


     FORTRAN77 KONVENTIONEN
          Der Eintrittspunkt in das FORTRAN77-Programm ist

                    subroutine amx()

          Damit wird  eine  ordnungsgemaesse  Datenbankinitialisierung
          und -beendigung gesichert.
          Fuer  FORTRAN77  gibt  es  keine  weiteren  Konventionen  zu
          beachten, folgende Hinweise sollen die Arbeit etwas erleich-
          tern:

               -    Vermeiden Sie die Verwendung von  Funktionen,  die
                    in C geschrieben sind und von FORTRAN77 aufgerufen
                    werden, solange  Sie  den  Mechanismus  der  Argu-
                    mentuebergabe nicht vollstaendig verstanden haben.

               -    Stringvariablen in FORTRAN77,  die  Zeichenketten-
                    domaenen  aufnehmen  sollen,  muessen  ein Zeichen
                    laenger sein, als die  Laenge  der  Zeichenketten-
                    domaene  in der Datenbank, auch wenn FORTRAN77 das
                    Abschlusszeichen `\0' fuer die Zeichenkette  nicht


                                   - 2 -








     ING_DB 6.3/4                                       AMX(FORTRAN77)


                    benoetigt.

               -    Schon sehr kleine AMX/FORTRAN77-Programme  belegen
                    den  vollen  Adressraum.  Benutzen Sie von vornhe-
                    rein die Ueberlagerungsstrukturen.

               -    Benutzen Sie fuer AMX/F-Austauschobjekte  vom  Typ
                    `integer' immer `integer*2' bzw. `integer*4'.


     C KONVENTIONEN
          Vom   C-Teil   der   C/FORTRAN77-Programmen   koennen   alle
          FORTRAN77-Objekte   (Routinen,  Daten),  vom  FORTRAN77-Teil
          koennen nur bestimmte C-Objekte benutzt werden.


     NAMEN
          FORTRAN77-Namen (Symbole) duerfen  maximal  6  Zeichen  lang
          sein.   In  C  muss an den FORTRAN77-Namen ein zusaetzlicher
          Unterstrich `_' angehaengt werden, um FORTRAN77-Objekte in C
          zu erreichen.

               z.B.   FORTRAN77     name   string   func
                      C             name_  string_  func_

          Normalerweise wird in FORTRAN77 Gross-  und  Kleinschreibung
          nicht  unterschieden, d.h. der FORTRAN77-Compiler uebersetzt
          alle  Gross-  in  Kleinbuchstaben.   Das   `f77'-Flag   `-U'
          gestattet die Verwendung von Gross- und Kleinbuchstaben.


     TYPKONVERSIONEN
          Fuer die Typen in FORTRAN77 und C gelten folgende  Zuordnun-
          gen:

               integer*2                short bzw. short int
               integer                  long bzw. long int
                                        oder
                                        short bzw. short int
                                        (siehe `f77'-Flag `-i2')
               integer*4                long bzw. long int
               logical                  long bzw. long int
                                        oder
                                        short bzw. short int
                                        (siehe `f77'-Flag `-i2')
               real                     float
               double precision         double
               complex                  struct { float r, i; }
               double complex           struct { double r, i; }
               character*n              char [n]




                                   - 3 -








     ING_DB 6.3/4                                       AMX(FORTRAN77)



     ARGUMENTKONVERSIONEN
          In   FORTRAN77   werden   Parameter   grundsaetzlich   durch
          Adressverweise  (Call By Reference) uebergeben, einige Para-
          meter (Funktionen, Parameter vom Typ  character*n)  erzeugen
          einen  zusaetzlichen Laengenparameter vom Typ integer*4 bzw.
          long.

          subroutine f(..., x, ...)     f_(..., x, ...)
          integer*2 x                   short *x;

          subroutine f(..., x, ...)     f_(..., x, ...)
          integer x                     long *x;
                                        oder
                                        short *x;
                                        (siehe `f77'-Flag `-i2')

          subroutine f(..., x, ...)     f_(..., x, ...)
          integer*4 x                   long *x;

          subroutine f(..., x, ...)     f_(..., x, ...)
          logical x                     long *x;
                                        oder
                                        short *x;
                                        (siehe `f77'-Flag `-i2')

          subroutine f(..., x, ...)     f_(..., x, ...)
          real x                        float *x;

          subroutine f(..., x, ...)     f_(..., x, ...)
          double precision x            double *x;

          subroutine f(..., x, ...)     f_(..., x, ...)
          complex x                     struct {float r, i; } *x;

          subroutine f(..., x, ...)     f_(..., x, ...)
          double complex x              struct {double r, i; } *x;

          subroutine f(..., x, ...)     f_(..., x, ..., xlen)
          character*(*) x               char x[];
                                        long xlen;

          subroutine f(..., x, ...)     f_(..., x, ..., xnull)
          subroutine x                  int (*x)();
                                        long xnull; /* == 0L */









                                   - 4 -








     ING_DB 6.3/4                                       AMX(FORTRAN77)


     FUNKTIONSKONVERSIONEN
          Fuer die Uebergabe von Funktionswerten an aufrufende  Routi-
          nen gelten folgende Zuordnungen:

          integer*2 function f(...)          short f_(...)

          integer function f(...)            long f_(...)
                                             oder
                                             short f_(...)
                                             (siehe `f77'-Flag `-i2')

          integer*4 function f(...)          long f_(...)

          logical function f(...)            long f_(...)
                                             oder
                                             short f_(...)
                                             (siehe `f77'-Flag `-i2')

          real function f(...)               nicht  darstellbar,  weil
                                             float    in   Ausdruecken
                                             immer in double  umgewan-
                                             delt wird

          double precision function f(...)   double f_(...)

          complex function f(...)            f_(r, ...)
                                             struct {float r, i;} *r;

          double complex function f(...)     f_(r, ...)
                                             struct {double r, i;} *r;

          character*n function f(...)        f_(r, l...)
                                             char r[];
                                             long l;




















                                   - 5 -




