P8000/WEGA/contrib/ingres/dbs/tmp/f77/f77.nr

470 lines
9.9 KiB
Plaintext

.pl 66
.ll 65
.ns
.po 5
.nr in 5
.de i0
.in \n(in
..
.de lp
.i0
.if !\n(.V .ta \\$2+1
.if \n(.V .ta \\$2
.in \\$1
.ti -\\$2
..
.de s1
.sp 1
.ne 4
..
.de s2
.sp 1
..
.de fo
'sp 2
'tl ''- % -''
'bp
..
.de th
.de x1
.rs
'sp 4
'tl '\\*(II/\\$3''\\$1(\\$2)'
'sp 2
\\..
.wh -7 fo
.wh 0 x1
.pn 1
'fi
'ad
.bp
.in \n(in
.dt
..
.de sh
.i0
.s1
.ne 5
.ti 0
\\$1
.br
..
.de dt
.ta 8 16 24 32 40 48 56 64
..
.ds II ING_DB 6.3
.ds UU UNIX
.ds AA AMX
.ds FF FORTRAN77
.if !\n(.V .ds +- +-
.if \n(.V .ds +- \(+-
.ds ** *
.ds - -
.ds _ _
.ds v |
.hy 0
.so f77.um
.nf
.fi
.sp 5
.nf
@ @ @ @ @
@ @ @@ @@ @ @
@ @ @ @ @ @ @ @
@ @ @ @ @ @
@@@@@@@ @ @ @ @
@ @ @ @ @ @
@ @ @ @ @ @
.fi
.sp 5
.nf
@ @ @ @ @@@@@
@ @ @@ @ @ @
@ @ @ @ @ @ @
@ @ @ @ @ @ @
@ @ @ @@ @ @
@@@@ @ @ @@@@@
.fi
.sp 5
.nf
@@@@@@@ @@@@@@@ @@@@@@@
@ @ @ @ @
@ @ @
@@@@@ @ @
@ @ @
@ @ @
@ @ @
.fi
.sp 10
.nf
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
.fi
.th \*(AA \*(FF 4
.sh EINLEITUNG
F\*ur die Ein\%bin\%dung von Da\%ten\%bank\%aktio\%nen in
\*(FF unter
\*(UU bsd 2.9 stehen die
\*(AA\*-Compiler `amxf' und `oamxf' zur Ver\%f\*ugung.
`oamxf' ist die overlay\*-Ver\%sion von `amxf'.
.br
Die Da\%ten\%bank\%aktio\%nen wer\%den in
\*(AA/C pro\%gram\%miert und mit `amxf' \*uber\%setzt,
alle anderen Pro\%gramm\%tei\%le k\*on\%nen in
\*(FF ge\%schrie\%ben wer\%den.
Sie wer\%den mit `f77' \*uber\%setzt
und mit `amxf' bzw. `oamxf' gelinkt (ver\%bunden).
.br
Die Ver\%wen\%dung von `amxf' zur Pro\%gramm\%er\%stel\%lung
erfordert keine An\%ga\%be einer speziellen
\*(AA\*-Bib\%lio\%thek
(analog zu `amx').
Die Ver\%wen\%dung von `oamxf' erfordert vom Nutzer
.s2
.lp +10 5
1. die An\%ga\%be des Flags `\*-V' beim
\*Uber\%setzen der zu \*uber\%lagernden Moduln
.s2
.lp +10 5
2. die An\%ga\%be der \*uber\%la\%ger\%baren
\*(AA\*-Bib\%lio\%theken
.br
\*-lova1 bzw. `.../lib/libova1.a'
.br
\*-lova2 bzw. `.../lib/libova2.a'
.br
\*-lova3 bzw. `.../lib/libova3.a'
.br
\*-lova4 bzw. `.../lib/libova4.a'
.br
wobei der Pfad `.../' das home\*-directory
des Da\%ten\%bank\%sys\%tems \*(II an\%ge\%ben soll.
.i0
.s1
Jede Bib\%lio\%thek belegt ein Text\%seg\%ment
(8 KByte).
Ent\%sprech\%end der \*Uber\%la\%ge\%rungs\%struk\%tur k\*on\%nen
die Bib\%lio\%theken ver\%teilt wer\%den.
Die Num\%me\%rie\%rung schreibt aber
die Reihenfolge der An\%ga\%be
beim Ver\%bin\%den vor.
.s1
.sh "EIN\*-/AUSGABEN"
So\%lan\%ge in \*(FF und C jeweils ver\%schie\%dene
Da\%tei\%en an\%ge\%sprochen wer\%den,
k\*on\%nen ohne Sprach\%mix\%pro\%ble\%me
beliebige Ein\*-/Aus\%ga\%be\%ope\%ra\%tionen
ausgef\*uhrt wer\%den.
Glei\%che Da\%tei\%en k\*on\%nen nur dann
in bei\%den Spra\%chen an\%ge\%sprochen wer\%den,
wenn es sich um die Stan\%dard\*-Ein\*-
oder \*-Aus\%ga\%be\%da\%tei han\%delt.
.s2
.lp +25 20
\*(FF C
.br
.lp +25 20
\*-\*-\*-\*-\*-\*-\*-\*-\*- \*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-
.br
.lp +25 20
Einheit 5 stdin\ \ (Des\%krip\%tor 0)
.br
.lp +25 20
Einheit 6 stdout (Des\%krip\%tor 1)
.br
.lp +25 20
Einheit 0 stderr (Des\%krip\%tor 2)
.i0
.s1
Einheit 5, 6 oder 0 in \*(FF darf dabei keiner
anderen Da\%tei zugewiesen wer\%den,
wie auch stdin, stdout oder stderr
bzw. Des\%krip\%tor 0, 1 oder 2 in C.
In C soll\%ten die Stan\%dard\%da\%tei\%en auch
nicht ge\%puf\%fert wer\%den (s. SETBUF(III)).
.s1
.sh FELDER
In \*(FF beginnen Indizes von Fel\%der (Vek\%to\%ren)
immer mit 1,
in C dagegen mit 0.
.s1
Beispiel
.lp +20 15
\*(FF: array(n)\ \ \ hat die Indizes 1 .. n
.lp +20 15
C array[n]\ \ \ hat die Indizes 0 .. (n \*- 1)
.i0
.s1
Pro\%ble\%me k\*on\%nen immer dann auftreten,
wenn \*uber Ar\%gumente ein Index \*ubermittelt wird,
der den Be\%ar\%bei\%tungs\%stand des Fel\%des aus\%dr\*ucken soll.
Die \*Uber\%mitt\%lung der Kar\%di\%na\%li\%t\*at
des Fel\%des (Anzahl der Feld\%ele\%men\%te)
bringt keine Pro\%ble\%me.
.br
In mehr\%di\%men\%siona\%len Fel\%dern hat in \*(FF
Spalte vor Zei\%le,
in C Zei\%le vor Spalte Vorrang.
.s1
.nf
\*(FF
+\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-+
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 |
+\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-\*-+
.fi
.s1
.sh "\*(FF KONVENTIONEN"
Der Ein\%tritts\%punkt in das
\*(FF\*-Pro\%gramm ist
.s1
.in 15
subroutine amx()
.i0
.s2
Damit wird eine ordnungsgem\*a\*se
Da\%ten\%bank\%ini\%tia\%li\%sie\%rung und
\*-beendigung gesichert.
.br
F\*ur \*(FF gibt es keine weiteren Konventionen
zu beachten,
fol\%gen\%de Hin\%wei\%se sol\%len die Ar\%beit etwas er\%leich\%tern:
.s1
.lp +10 5
\*- Ver\%meiden Sie die Ver\%wen\%dung von Funk\%tio\%nen,
die in C ge\%schrie\%ben sind
und von \*(FF aufgerufen wer\%den,
so\%lan\%ge Sie den Me\%cha\%nis\%mus der
Ar\%gu\%ment\*uber\%ga\%be nicht voll\%st\*an\%dig ver\%stan\%den haben.
.s1
.lp +10 5
\*- Stringvariablen in \*(FF,
die Zei\%chen\%ket\%ten\%dom\*anen aufnehmen sol\%len,
m\*ussen ein Zei\%chen l\*anger sein,
als die L\*ange der Zei\%chen\%ket\%ten\%dom\*ane
in der Da\%ten\%bank,
auch wenn \*(FF das Abschlu\*szeichen `\e0'
f\*ur die Zei\%chen\%ket\%te nicht ben\*otigt.
.s2
.lp +10 5
\*- Schon sehr kleine
\*(AA/\*(FF\*-Pro\%gram\%me belegen
den vol\%len Adre\*s\%raum.
Benutzen Sie von vorn\%he\%rein die
\*Uber\%la\%ge\%rungs\%struk\%tu\%ren.
.s2
.lp +10 5
\*- Be\%nutzen Sie f\*ur \*(AA/\*FF\*-Aus\%tausch\%ob\%jek\%te
vom Typ `integer' immer `integer*2'
bzw. `integer*4'.
.s1
.sh "C KONVENTIONEN"
Vom C\*-Teil der C/\*(FF\*-Pro\%gram\%men
k\*on\%nen alle \*(FF\*-Objekte
(Rou\%ti\%nen, Da\%ten),
vom \*(FF\*-Teil k\*on\%nen nur bestimmte
C\*-Objekte benutzt wer\%den.
.s1
.sh "NAMEN"
\*(FF\*-Namen (Symbole)
d\*urfen maximal 6 Zei\%chen lang sein.
In C mu\*s an den \*(FF\*-Namen
ein zu\%s\*atz\%lich\%er Unterstrich `_'
an\%ge\%h\*angt wer\%den,
um \*(FF\*-Objekte in C zu erreichen.
.s1
.nf
z.B. \*(FF name string func
C name_ string_ func_
.fi
.s1
Normalerweise wird in \*(FF
Gro\*s\*- und Kleinschreibung
nicht unterschieden,
d.h. der \*(FF\*-Compiler \*uber\%setzt
alle Gro\*s\*- in Klein\%buch\%sta\%ben.
Das `f77'\*-Flag `\*-U' gestattet
die Ver\%wen\%dung von Gro\*s\*- und Klein\%buch\%sta\%ben.
.s1
.sh TYPKONVERSIONEN
F\*ur die Typen in \*(FF und C
gel\%ten fol\%gen\%de Zu\%ord\%nun\%gen:
.s1
.lp +30 25
integer*2 short bzw. short int
.lp +30 25
integer long bzw. long int
.br
oder
.br
short bzw. short int
.br
(siehe `f77'\*-Flag `\*-i2')
.lp +30 25
integer*4 long bzw. long int
.lp +30 25
logical long bzw. long int
.br
oder
.br
short bzw. short int
.br
(siehe `f77'\*-Flag `\*-i2')
.lp +30 25
real float
.lp +30 25
double precision double
.lp +30 25
complex struct { float r, i; }
.lp +30 25
double complex struct { double r, i; }
.lp +30 25
character*n char [n]
.i0
.s1
.sh ARGUMENTKONVERSIONEN
In \*(FF wer\%den Pa\%ra\%me\%ter grund\%s\*atz\%lich
durch Adre\*sver\%weise
(Call By Reference) \*ubergeben,
einige Pa\%ra\%me\%ter
(Funk\%tio\%nen, Pa\%ra\%me\%ter vom Typ character*n)
er\%zeu\%gen einen zu\%s\*atz\%lichen L\*an\%gen\%pa\%ra\%me\%ter
vom Typ integer*4 bzw. long.
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ...)
.lp +30 30
integer*2 x short *x;
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ...)
.lp +30 30
integer x long *x;
.br
oder
.br
short *x;
.br
(siehe `f77'\*-Flag `\*-i2')
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ...)
.lp +30 30
integer*4 x long *x;
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ...)
.lp +30 30
logical x long *x;
.br
oder
.br
short *x;
.br
(siehe `f77'\*-Flag `\*-i2')
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ...)
.lp +30 30
real x float *x;
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ...)
.lp +30 30
double precision x double *x;
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ...)
.lp +30 30
complex x struct {float r, i; } *x;
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ...)
.lp +30 30
double complex x struct {double r, i; } *x;
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ..., xlen)
.lp +30 30
character*(*) x char x[];
.br
long xlen;
.s1
.lp +30 30
subroutine f(..., x, ...) f_(..., x, ..., xnull)
.lp +30 30
subroutine x int (*x)();
.br
long xnull; /* == 0L */
.s1
.i0
.s1
.sh FUNKTIONSKONVERSIONEN
F\*ur die \*Uber\%ga\%be von Funk\%tions\%wer\%ten
an aufru\%fen\%de Rou\%ti\%nen
gel\%ten fol\%gen\%de Zu\%ord\%nungen:
.s1
.lp +35 35
integer*2 function f(...) short f_(...)
.s1
.lp +35 35
integer function f(...) long f_(...)
.br
oder
.br
short f_(...)
.br
(siehe `f77'\*-Flag `\*-i2')
.s1
.lp +35 35
integer*4 function f(...) long f_(...)
.s1
.lp +35 35
logical function f(...) long f_(...)
.br
oder
.br
short f_(...)
.br
(siehe `f77'\*-Flag `\*-i2')
.s1
.lp +35 35
real function f(...) nicht darstellbar,
weil float in Aus\%dr\*ucken immer in double
um\%ge\%wan\%delt wird
.s1
.lp +35 35
double precision function f(...) double f_(...)
.s1
.lp +35 35
complex function f(...) f_(r, ...)
.br
struct {float r, i;} *r;
.s1
.lp +35 35
double complex function f(...) f_(r, ...)
.br
struct {double r, i;} *r;
.s1
.lp +35 35
character*n function f(...) f_(r, l...)
.br
char r[];
.br
long l;
.i0
.s1