<< Inhaltsverzeichnis Suchen >>

CALL

Anweisung Typ 1

Syntax:

CALL <PROGRAMM-NAME>

Bedeutung:

Aufruf eines EBUS-Unterprogramms

Beispiel:

CALL UPROG

siehe auch:

ENDPROG, CHAIN, RUN, SHELL, SHELLW, SHARED, PUTENV, GETENV$

CALL

Anweisung Typ 2

Syntax:

CALL <CALL-NAME> [(<AUSDRUCK> [,<AUSDRUCK>]... )]

Bedeutung:

Aufruf eines Assembler- oder C-Unterprogramms

 

Beim Aufruf von Unterprogrammen sind folgende Konventionen zu beachten:

 

Call by value

Numerische Variable und numerische Ausdrücke werden per Voreinstellung 'by value' an das Unterprogramm übergeben, d.h. der Parameter wird als Wert übergeben und Veränderungen des Parameters haben im rufenden Programm keine Wirkung.

 

Call by reference

Bereiche (Arrays) und alphanu­merische Variable und Ausdrücke werden immer 'by reference' übergeben, d.h. an das Unterprogramm wird die Adresse des Parameters (Pointer) übergeben. Änderungen des Parameters im Unterprogramm wirken auch im rufenden Programm.

 

 

Numerische Variable können mit Hilfe des Adreßoperators <&> ebenfalls by reference übergeben  werden.

 

 

Beispiel: CALL  PROG7(&X)

 

Numerische Parameter

werden mit dem Typ 'double' übergeben.

 

Integer-Variablen

werden mit dem Typ 'long int' übergeben.

 

Integer-Konstanten

werden mit dem Typ 'int' übergeben.

 

Strings,
alphanumerische Variable

Bei Strings wird die Adresse einer Struktur 'STRING' übergeben, die in der INCLUDE-Datei ebus.h deklariert ist:

 

 

struct string {
unsigned len;                    /* aktuelle Länge
unsigned max;                  /* maximale Länge
char *p;                             /* Zeichenkette
 };
typedef struct string *STRING;

 

 

Soll nur die Zeichenkette und nicht die komplette Struktur übergeben werden, so muß am Ende des String-Ausdrucks "->P" angefügt werden.

Beispiel: CALL SUB("Hallo"->P)

Die Zeichenkette setzt sich aus dem im EBUS-Programm sichtbaren Teil des Strings und einem Stringterminator ‘\0’ zusammen.

 

 

Bereiche (Arrays)

Bereiche sind im C-Programm Arrays mit der um 1 erhöhten Dimension des EBUS-Programms, z.B.:

 

 

EBUS-Programm: DIM A(100)
C-Programm: double h_<nr>[101]

<nr> ist eine Zahl, die vom Programm-Generator erzeugt wird.

 

Cast-
Operatoren 

Bei Parametern, die 'by value' übergeben werden, kann der Cast-Operator 'short', 'int' oder 'long' angegeben werden. Dadurch können numerische Variable als 'short int', 'int' oder 'long' übergeben werden.

Beispiel:

/*  Übergabe von I% als short int (2 Bytes)
CALL  SHORTPROC((short) (I%))

 

/*  Übergabe der short int Adresse der long int Variablen I%
CALL  SHORTPROC2(&(short) (I%))

 

/* Übergabe des Wertes von H als short int
CALL  SHORTPROC3((short) (H))

 

/* Übergabe des Wertes von L als int
CALL INTPROC((INT)(L))

 

/* Übergabe der Integerkonstanten 23 als long
CALL LONGPROC((LONG)(23))

 

/* Übergabe mehrerer Parameter
CALL  SUB1(I,H$+"RT",27)

 

/* Übergabe eines Strings als EBUS-Struktur
CALL  SUB2(H$)

 

/* Übergabe eines Strings als Zeichenkette
CALL  SUB3(NAME$->P)