f77_help

Werbung
<PLAINTEXT>
IBM-FORTRAN (Ryan-McFarland)
===========
Sprachbeschreibung (Fortran 77) s. Manual (Kurzfassung unten)
1. Quellcode erzeugen (mit einem Editor, z.B. MS oder SPFPC)
--> XXX.FOR
2. Programm kompilieren
PROFORT XXX
-->
XXX.OBJ
evtl. mit Optionen:
/B /C n /D /E /F /I /L /M /P n /T /W /X /Z
/I
/D
/L
INTEGER bedeutet INTEGER*2 (default *4)
conditionally compile statements with D in column 1
Listing + Map (allocation, subprograms,
labels, statements)
/L/M
Listing mit ausfuehrlicher Map
/F
DO-loops mit count=0 werden durchgefuehrt
/L/X
Listing mit Cross References
3. Linken mit LINK
-->
XXX.EXE
LINK XXX <Enter>
Run File [XXX.EXE] <Enter>
List File [NUL.MAP] <Enter>
(keine Map)
Libraries [.LIB] <Enter>
FTN-Kommandos (IBM Ryan-McFarland)
=============
ASSIGN statement-label TO integer-variable
BACKSPACE ( unit [, IOSTAT=..., ERR=label]) ein Record zurueck
BLOCKDATA [name] block-data-subprogram
CALL subroutine-name [([ aktuelle Argumente ])]
CHARACTER[*n] = String aus n (>=1) 8-bit-Characters ('...''...')
CLOSE ( unit [, IOSTAT=v_int*4, STATUS=..., ERR=label])
Anm. optional STATUS = 'KEEP' | 'DELETE' .
COMMON [ /name/ ] common-item-list
COMPLEX = COMPLEX*8 (2 real*4)
CONTINUE
DATA variable-list /constant-list/
DIMENSION (up to 7 dimensions)
DO statement-label variable=initial-val.,terminal-val. [,increm.]
DOUBLEPRECISION = REAL*8, auf 16 Stellen genau, Bereich D(+-)308
ELSE
ELSEIF (logical-expression)
END
ENDFILE ( unit [, IOSTAT=..., ERR=label]) schreibt EOF-Marke
ENDIF
ENTRY name [ ( [dummy-Argumente] ) ]
EQUIVALENCE ( equiv-item, equiv-item )
EXTERNAL external-procedure
(zur Spezifikation externer Proz.)
FORMAT ( format-list )
repeatable: Dw.d, Ew.d[Ee], Fw.d, Gw.d[Ee], Iw[.m],
Lw, A[w];
nonrepeatable: ', nH, T, TL, TR, nX, /, :, S, SP, SS, kP,
BN | BZ .
FUNCTION - [type] FUNCTION name ( [dummy-Argumente] )
GOTO statement-number | assigned goto | GOTO (label-list)[,]int.
IF - arithmetic-if | logical-if | block-if
IF (arithm. exp.) label, label, label
(fuer LT, EQ, GT 0)
IF (log. exp.) executable-statement
IF (log. exp.) THEN
(mit ELSEIF, ELSE, ENDIF)
IMPLICIT INTEGER (I-N) (z.B.; entspricht Default)
INCLUDE 'filename' [not standard]
INQUIRE ( <unit | FILE=name> [, IOSTAT=v_int*4, RECL=v_int*4,
NEXTREC=v_int*4, NUMBER=v_int*4, EXIST=v_log,
OPENED=v_log, NAMED=v_log, NAME=v_char, ACCESS=v_char,
SEQUENTIAL=v_char, DIRECT=v_char, FORM=v_char,
FORMATTED=v_char, UNFORMATTED=v_char, BLANK=v_char,
ERR=label])
Anm.: IOSTAT=0 falls alles okay, -1 bei EOF.
INTEGER = INTEGER*4 (oder integer*2 bei Compiler-Option /I)
INTEGER*4 -2147483648 bis +2147483647
INTEGER*2 -32768 bis +32767
INTEGER*1 -128 bis +127
INTRINSIC intrinsic-function
LOGICAL = LOGICAL*4, .FALSE. oder .TRUE. (F oder T in I/O)
LOGICAL*2
LOGICAL*1
OPEN ( unit [, IOSTAT=v_int*4, RECL=int*4, FILE=name, STATUS=...,
ACCESS=..., FORM=..., BLANK=..., ERR=label])
Anm.: entweder 'FORMATTED' oder 'UNFORMATTED';
ACCESS='SEQUENTIAL' ohne RECL (default 'FORMATTED'),
ACCESS='DIRECT': RECL def. (default 'UNFORMATTED');
STATUS= 'NEW' | 'OLD' | 'SCRATCH' | 'UNKNOWN' (default)
(Anm.: 'SCRATCH' ohne Filename!).
PARAMETER ( constant-name = expression, ...)
PAUSE [ digit-string | character-constant ] (-> DOS)
PRINT format-id. [, iolist]
PROGRAM name
READ (read-write-control) [iolist] | READ format-id. [, iolist]
(unit [,format, REC=..., IOSTAT=..., END=label, ERR=label])
REAL = REAL*4, auf 7 Stellen genau, Bereich E(+-)38
RETURN [ integer-expression ]
REWIND ( unit [, IOSTAT=..., ERR=label]) zum Anfang des Files
SAVE [ /block-name/ variable-name ]
(hier ueberfluessig!)
STOP [ digit-string | character-constant ]
SUBROUTINE name [(dummy-Argumente)]
TO (vgl. ASSIGN)
WRITE (read-write-control) [iolist]
(unit [,format, REC=..., IOSTAT=..., ERR=label])
Extensions provided by IBM-Fortran
INCLUDE 'filename'
(.NEQV. entspricht der Wirkung von XOR)
Date and time:
GETDAT,SETDAT,GETTIM,SETTIM
Hollerith constants (though obsolete) are supported (5HHello)
UNIT=5 or 6 is treated as * in READ/WRITE
Variablennamen: max. 8 Character fuer globale, 31 fuer lokale.
Integer-Konstanten auch hexadezimal (Z'34AF'); in I/O: Z[w]
Sonstige Kommandos/Worte in F77
'DELETE'
'KEEP'
'DIRECT'
'SEQUENTIAL'
'YES'
'NO'
'UNKNOWN'
'ZERO'
'NULL'
'FORMATTED'
'UNFORMATTED'
'NEW'
'OLD'
'SCRATCH'
UNIT=
FMT=
REC=
IOSTAT=
END=
ERR=
STATUS=
ACCESS=
FORM=
RECL=
BLANK=
EXIST=
OPENED=
NUMBER=
NAMED=
NAME=
NEXTREC=
OPEN(u,FILE=...,STATUS='OLD'),CLOSE(u,STATUS='D-')
(in STATUS=)
(random access; RECL= muss spezifiziert werden)
(in ACCESS=)
(autom. 'SCRATCH'/'OLD'/'NEW'; oder kein STATUS=)
seq. num. Input: Blanks werden zu 0
seq. num. Input: Blanks werden ignoriert
(in FORM=)
(in FORM=)
(in STATUS=; File darf nicht existieren!)
(in STATUS=; File muss existieren)
(ohne FILE=; interner Workfile)
Nummer 0...255
label (Format-Anweisung)
direct access: Record-Nr. (1,2,3,...)
0: kein Fehler, <0: EOF, >0: Fehler
label (EOF-Abfrage, nur bei sequential READ)
label (Fehler-Abfrage)
'NEW','OLD','SCRATCH','UNKNOWN';'KEEP','DELETE'
'DIRECT','SEQUENTIAL'
'FORMATTED','UNFORMATTED'
Record-Laenge in Byte (formatted: max. 255)
'NULL' (default) oder 'ZERO'
(logical)
(logical)
(unit identifier)
(logical)
(Filename)
Nr. des naechsten Records (direct access)
Standardfunktionen
ABS(x)
ACOS(x)
AIMAG(x)
AINT(x)
ALOG(x)
ALOG10(x)
AMAX0(x,y,...)
|x|
arccos(x)
Im(x)
int(x)
ln(x)
lg(x)
max
R(R)
R(R)
R(C)
R(R)
R(R)
R(R)
R(I)
AMAX1(x,y,...)
AMIN0(x,y,...)
AMIN1(x,y,...)
AMOD(x,y)
ANINT(x)
ASIN(x)
ATAN(x)
ATAN2(x,y)
BTEST(x,y)
CABS(x)
CCOS(x)
CEXP(x)
CHAR(x)
CLOG(x)
CMPLX(x[,y])
CONJG(x)
COS(x)
COSH(x)
CSIN(x)
CSQRT(x)
DABS(x)
DACOS(x)
DASIN(x)
DATAN(x)
DATAN2(x,y)
DBLE(x)
DCOS(x)
DCOSH(x)
DDIM(x,y)
DEXP(x)
DIM(x,y)
DINT(x)
DLOG(x)
DLOG10(x)
DMAX1(x)
DMIN1(x)
DMOD(x,y)
DNINT(x)
DPROD(x,y)
DSIGN(x,y)
DSIN(x)
DSINH(x)
DSQRT(x)
DTAN(x)
DTANH(x)
EXP(x)
FLOAT(x)
HFIX(x)
I(x,y)
IABS(x)
IBCHNG(x,y)
IBCLR(x,y)
IBSET(x,y)
ICHAR(char)
max
R(R)
min
R(I)
min
R(R)
mod(x/y)
R(R)
int(x0.5)
R(R)
arcsin(x)
R(R)
arctan(x)
R(R)
arctan(x/y)
R(R)
true if bit y in x is 1
L(I)
abs(x)
R(C)
cos(x)
C(C)
exp(x)
C(C)
character
char(I)
ln(x)
C(C)
complex(Re,Im) C(...)
cmplx(Re,-Im) C(C)
cos(x)
R(R)
cosh(x)
R(R)
sin(x)
C(C)
x
C(C)
|x|
D(D)
arccos(x)
D(D)
arcsin(x)
D(D)
arctan(x)
D(D)
arctan(x/y)
D(D)
double prec.
D(...)
cos(x)
D(D)
cosh(x)
D(D)
x-y if >0
D(D)
exp(x)
D(D)
x-y if >0
R(R)
int(x)
D(D)
ln(x)
D(D)
lg(x)
D(D)
max
D(D)
min
D(D)
mod(x/y)
D(D)
int(x0.5)
D(D)
x*y
D(R)
|x|*sign(y)
D(D)
sin(x)
D(D)
sinh(x)
D(D)
x
D(D)
tan(x)
D(D)
tanh(x)
D(D)
exp(x)
R(R)
real
R(I)
short integer H(...)
logical product
I(I)
|x|
I(I)
reverse bit y in x I(I)
set bit y in x to 0
I(I)
set bit y in x to 1
I(I)
ASCII
I(char)
IDIM(x,y)
IDINT(x)
IDNINT(x)
IEOR(x,y)
IFIX(x)
INDEX(a1,a2)
INT(x)
IOR(x,y)
ISHA(x,y)
ISHC(x,y)
ISHFT(x,y)
ISHL(x,y)
ISIGN(x,y)
JFIX(x)
LEN(a)
LGE(a,b)
LGT(a,b)
LLE(a,b)
LLT(a,b)
LOG(x)
LOG10(x)
MAX(x,y,...)
MAX0(x,y,...)
MAX1(x,y,...)
MIN(x,y,...)
MIN0(x,y,...)
MIN1(x,y,...)
MOD(x,y)
NINT(x)
REAL(x)
SIGN(x,y)
SIN(x)
SINH(x)
SNGL(x)
SQRT(x)
TAN(x)
TANH(x)
x-y if >0
I(I)
integer
I(D)
int(x0.5)
I(D)
exclusive or
I(I)
integer
I(R)
index(a2 in a1)I(char)
integer
I(R)
inclusive or
I(I)
shift x arithmetically left y bits
rotate x left y bits
I(I)
= ISHL
shift x logically left y bits
|x|*sign(y)
I(I)
long integer
J(...)
length
I(char)
lex(>=)
L(char)
lex(>)
L(char)
lex(<=)
L(char)
lex(<)
L(char)
ln(x)
R(R)(?)
lg(x)
R(R)(?)
max
I(I)(?)
max
I(I)
max
I(R)
min
I(I)(?)
min
I(I)
min
I(R)
mod(x/y)
I(I)
int(x0.5)
I(R)
real
R(I)
|x|*sign(y)
R(R)
sin(x)
R(R)
sinh(x)
R(R)
real
R(D,C)
x
R(R)
tan(x)
R(R)
tanh(x)
R(R)
I(I)
I(I)
weitere Intrinsic Routines (Achtung: Argumente als INTEGER*2)
GETTIM(ihour,iminute,isecond,ihundredsecond)
SETTIM(...)
GETDAT(iyear,imonth,iday)
SETDAT(...)
IBM-F77: Anmerkungen
Dimensionierung von Arrays (default l.b.=1, max. 7 Dimensionen):
DIMENSION ARRAY([lower_bound:]upper-bound{,...})
Files:
formatted sequential:
auf Disk endet jedes Record mit CRLF
(Unit 6 oder *: Spezialfall)
unformatted sequential: Record-Laenge in 4-Byte Header + Trailer
direct-access:
alle Records muessen die gleiche Laenge haben
(definiert mit RECL)
formatted direct-access: entweder RECL=1 oder Record-Laenge = RECL+2
mit abschliessendem CRLF
unformatted direct-access: Record-Laenge = RECL
READ/PRINT/WRITE auf Terminal: * als Unit (oder 5 bzw. 6)
spezielle I/O-Dateinamen:
CON
(display, keyboard)
PRN (LPT1,LPT2,LPT3)
(Drucker)
AUX (COM1,COM2)
(RS-232)
Device identifications/units:
unit=5 or *
standard input (CON)
unit=6 or *
standard output (CON)
0
standard error output (CON)
1-4
FORT1-FORT4
7-255
FORT7-FORT255
Achtung: bei Ausgabe auf * oder 6 (standard output) wird das
erste Zeichen in der FORMAT-Anweisung als Vorschubsteuerung
interpretiert; sonst nicht! (Standard output: Zeilenvorschub vor
der WRITE-Ausgabe, sonst nach der WRITE-Ausgabe.)
Vorschubsteuerung fuer Drucker
blank
0
1
+
Vorschub zur naechsten Zeile (CRLF,...)
Vorschub zur uebernaechsten Zeile (CRLFLF,...)
Vorschub zur naechsten Seite
kein Zeilenvorschub (CR,...)
unformatted i/o:
[FORM='UNFORMATTED']
OPEN(7,FILE='DAFL',ACCESS='DIRECT',RECL=100)
WRITE(7,REC=1)
...
interne Datei:
character*150 intern
write(intern,'(I4)') A,B,C,D
(zur Umwandlung von Datentypen)
Operatoren:
arithmetische Operatoren: + - * / **
Character Concatenation:
//
Vergleichsoperatoren: .LT. .LE. .EQ. .NE. .GE. .GT.
logische Operatoren: .NOT.
.AND. .OR.
.EQV. .NEQV.
lower-case / upper-case: gleichwertig ausser in Character-Konst.
einige Anmerkungen zum IBM-Fortran:
Apostrophs (') in Strings ('...'): zwei Apostrophs (''), nicht ".
Substrings, character variable: v(p1:p2)
v(:) bedeutet v (gesamter String)
array element a(s1,s2,...)(p1:p2)
Kommentar: C oder c oder * in Spalte 1.
alternate returns:
CALL VALJMP(*200,*600,A,*100)
...
SUBROUTINE VALJMP(*,*,X,*)
IF(X.GT.0.0) RETURN 1
IF(X.EQ.0.0) RETURN 2
RETURN 3
END
Runtime out-of-range: hex 8000
Herunterladen