Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

CALL-Anweisung

&pagelevel(4)&pagelevel

Funktion

Die CALL-Anweisung übergibt die Steuerung an ein aufgerufenes Programm. Wahlweise können Operanden angegeben werden, um dem aufgerufenen Programm den Zugriff auf Daten des aufrufenden Programms zu ermöglichen.
Mit der CALL-Anweisung (Format 4) ist es auch möglich von einem COBOL-Programm aus BS2000-Systemkommandos auszuführen.

Format 1


CALL {bezeichner-1 | literal-1} [USING { [BY REFERENCE] {bezeichner-2|dateiname-1}... 
                                        | BY VALUE {bezeichner-5}...
                                        | BY CONTENT {bezeichner-2|literal-2}...
                                       }...]
  [RETURNING bezeichner-3]
  [ON OVERFLOW unbedingte-anweisung-1]
  [END-CALL]


Format 2


CALL {bezeichner-1 | literal-1} [USING { [BY REFERENCE] {bezeichner-2|dateiname-1}... 
                                        | BY VALUE {bezeichner-5}...
                                        | BY CONTENT {bezeichner-2|literal-2}...
                                       }...]
  [RETURNING bezeichner-3] 
  [ON EXCEPTION unbedingte-anweisung-1] 
  [NOT ON EXCEPTION unbedingte-anweisung-2]

  [END-CALL]


Syntaxregeln für beide Formate

  1. literal-1 muss ein alphanumerisches Literal sein. Es darf jedoch keine figurative Konstante sein.

    Ist literal-1 der Programmname eines einzelnen Programms bzw. des äußersten Programms eines geschachtelten Programms, muss es mit einem alphabetischen Zeichen beginnen und darf nur Großbuchstaben und Ziffern enthalten. Die Namenslänge ist abhängig vom Modulformat (siehe COBOL-Benutzerhandbuch [1]).
    Ist literal-1 der Programmname für ein inneres Programm eines geschachtelten Programms, muss es mit einem alphabetischen Zeichen beginnen, darf Groß- und Kleinbuchstaben sowie Ziffern enthalten und darf eine Länge von maximal 30 Zeichen haben.

  2. bezeichner-1 muss als Programmzeiger oder als alphanumerisches Datenfeld definiert sein. Der Inhalt des alphanumerischen Datenfeldes muss ein gültiger Programmname, wie in 1. beschrieben, sein. Der Inhalt des Programmzeigers wird als Adresse des Einsprungpunkts interpretiert.

  3. Die USING-Angabe in einer CALL-Anweisung darf nur angegeben werden, wenn nach der dazugehörenden PROCEDURE DIVISION-Überschrift oder in der ENTRY-Anweisung des aufgerufenen Programms eine USING-Angabe geschrieben wurde. Die Anzahl der Operanden in jeder USING-Angabe muss gleich sein, sonst ist das Ergebnis undefiniert.

  4. Jede in der USING-Angabe angegebene Operand muss in der FILE SECTION, WORKING-STORAGE SECTION, LOCAL-STORAGE SECTION, LINKAGE SECTION oder SUB-SCHEMA SECTION definiert sein. Er kann die Stufennummer 01 oder 77 haben. Der Compiler erlaubt jedoch jede Stufennummer außer 88.
    Für die Ausrichtung von Datenelementen mit USAGE INDEX, BINARY, COMPUTATIONAL, COMPUTATIONAL-5, COMPUTATIONAL-1, COMPUTATIONAL-2 im LINKAGE-Kapitel werden alle Elemente auf der 01-Stufe als auf Doppelwortgrenze ausgerichtet angenommen. Deshalb muss der Benutzer sicherstellen, dass diese Operanden in der USING-Angabe entsprechend ausgerichtet sind.

  5. dateiname-1 ist nur sinnvoll, wenn das aufgerufene Programm in einer anderen Programmiersprache als COBOL geschrieben ist.

  6. bezeichner-2 darf kein Funktionsbezeichner sein.

  7. bezeichner-3 darf nicht in der REPORT SECTION definiert sein.

  8. bezeichner-3 ist ein Empfangsfeld.

  9. Als Parameter dürfen auch Objektreferenzen, Zeiger oder stark typisierte Datengruppen verwendet werden. Sie dürfen nur BY CONTENT als USING-Parameter übergeben werden.

  10. bezeichner-5 muss als 2 oder 4 Byte langes Datenfeld mit USAGE COMP-5 oder als 1 Byte langes Datenfeld definiert sein. Andernfalls ist das Ergebnis der Parameterübergabe unbestimmt.
    Diese Art der Parameterübergabe ist nur sinnvoll, wenn das aufgerufene Programm in einer anderen Sprache als COBOL geschrieben ist (siehe Beispiel 8-25).

  11. literal-2 muss ein alphanumerisches oder nationales Literal sein oder eine der figurativen Konstanten SPACE, LOW-VALUE, HIGH-VALUE.

  12. bezeichner-2, bezeichner-3 und bezeichner-5 dürfen nicht mit der ANY LENGTH-Klausel definiert sein.

Allgemeine Regeln für beide Formate

  1. literal-1 oder bezeichner-1 enthält den Namen des aufgerufenen Programms. Das Programm, das eine CALL-Anweisung enthält, ist das aufrufende Programm. Ist das aufgerufene Programm ein COBOL-Programm, müssen literal-1 bzw. bezeichner-1 den im PROGRAM-ID-Paragrafen oder in der ENTRY-Anweisung stehenden Programmnamen enthalten. Ist bezeichner-1 als Programmzeiger definiert, dann enthält er die Adresse eines Einsprungpunktes in ein Programm.

  2. Bei der Ausführung der CALL-Anweisung wird die Steuerung an das aufgerufene Programm übergeben. Nach der Rückgabe der Steuerung vom aufgerufenen Programm wird, falls vorhanden, unbedingte-anweisung-2 ausgeführt und dann zum Ende der CALL-Anweisung verzweigt. Falls NOT ON EXCEPTION fehlt, wird zum Ende der CALL-Anweisung verzweigt.

  3. Ist während der Ausführung einer CALL-Anweisung das aufgerufene Programm nicht verfügbar oder bereits aktiv, ohne dass es rekursiv ist, wird eine der folgenden Aktionen durchgeführt:

    1. Ist ON OVERFLOW bzw. ON EXCEPTION angegeben, geht die Steuerung zu unbedingte-anweisung-1 über. Nach Beendigung von unbedingte-anweisung-1 geht die Steuerung zum Ende der CALL-Anweisung über.

    2. Ist ON OVERFLOW bzw. ON EXCEPTION nicht angegeben, wird der Programmablauf nach Ausgabe einer Fehlermeldung abgebrochen.

  4. Haben zwei Programme in einer Ablaufeinheit denselben Namen, so muss mindestens eines davon ein inneres Programm eines geschachtelten Programms sein. Der Aufruf eines Programms, das einen mehrfach verwendeten Programmnamen besitzt, ist nur unter folgenden Bedingungen erfolgreich:

    1. Das aufgerufene Programm ist in dem aufrufenden Programm direkt enthalten.

    2. Das aufgerufene Programm besitzt das COMMON-Attribut und wird vom direkt übergeordneten Programm oder von einem seiner Geschwisterprogramme oder deren Abkömmlingen aufgerufen.

    3. Das aufrufende Programm ist ein inneres Programm eines Schachtelprogramms und ruft ein getrennt übersetztes Programm einer Ablaufeinheit auf.

  5. Die vom aufrufenden Programm an das aufgerufene Programm als Parameter zu übergebenden Daten werden in der USING-Angabe der CALL-Anweisung mit bezeichner-2... angegeben. Anzahl und Reihenfolge der Parameter müssen mit denen in der USING-Angabe der PROCEDURE DIVISION-Überschrift bzw. der ENTRY-Anweisung übereinstimmen. Eine Ausnahme bilden die Indizes, die Tabellen zugeordnet sind (INDEXED BY-Angabe): Die Indizes in einem aufrufenden und in einem aufgerufenen Programm weisen immer auf getrennte Indizes hin.

  6. Wird dateiname-1 in der Liste der USING-Angabe angegeben, wird an das aufgerufene Programm die Anfangsadresse des System-Dateisteuerungsblocks der jeweiligen Datei übergeben.

  7. Die Angaben BY CONTENT und BY REFERENCE können zusammen verwendet werden; die Angabe BY CONTENT oder BY REFERENCE gilt für alle folgenden Parameter, bis eine andere BY CONTENT- oder BY REFERENCE-Angabe hinzukommt. Ist weder BY CONTENT noch BY REFERENCE angegeben, wird BY REFERENCE angenommen.

  8. Wird ein Parameter BY REFERENCE übergeben, so belegt er im aufrufenden und im aufgerufenen Programm denselben Speicherplatz. Die Beschreibung des Datenfeldes im aufgerufenen Programm muss dieselbe Anzahl von Zeichenpositionen aufweisen wie die des entsprechenden Datenfeldes im aufrufenden Programm.

  9. Wird ein Parameter BY CONTENT übergeben, erstellt das aufrufende Programm eine Kopie des Parameters und übergibt die Kopie des Parameters BY REFERENCE.
    Die Datenbeschreibung des entsprechenden Parameters im aufgerufenen Programm muss dabei wie folgt gewählt werden:

    • bei Angabe von bezeichner-2:die gleiche wie die von bezeichner-2

    • bei Angabe von figurativen Konstanten: PIC X

    • bei Angabe eines alphanumerischen Literals: PIC X(n). Der Wiederholungsfaktor n darf dabei höchstens so groß wie die Länge des Literals sein. Im Gegensatz zum Verhalten bei sonstigen Übertragungen, kann hier das Literal am Ende nicht mit Leerzeichen auf die Länge des entsprechenden Parameters aus dem Unterprogramm aufgefüllt werden.

    • bei Angabe eines nationalen Literals: PIC N(n). Der Wiederholungsfaktor n darf dabei höchstens so groß wie die Länge des Literals sein. Im Gegensatz zum Verhalten bei sonstigen Übertragungen, kann hier das Literal am Ende nicht mit Leerzeichen auf die Länge des entsprechenden Parameters aus dem Unterprogramm aufgefüllt werden.

  10. Die Angabe BY VALUE ermöglicht die C-konforme, direkte Wertübergabe an C-Programme. Die Parameterübergabe „by value“ bewirkt, dass nur der Wert des Parameters an das aufgerufene C-Programm übergeben wird. Das aufgerufene Programm kann auf diesen Wert zugreifen und ihn verändern, wobei der Wert des Parameters im COBOL-Programm unverändert bleibt.

  11. Aufgerufene Programme können CALL-Anweisungen enthalten. Ein aufgerufenes Programm darf aber keine CALL-Anweisung ausführen, die direkt oder indirekt das aufrufende Programm über die Standard-Einsprungstelle oder eine mit der ENTRY-Anweisung generierte Einsprungstelle aufruft.

  12. Ist die RETURNING-Angabe definiert, wird das Ergebnis des aktuellen Programms in bezeichner-5 abgelegt.

Format 3


CALL { bezeichner-1 | literal-1 } ASNESTED | programmprototypname-1 }
       [USING {  [BY REFERENCE] { bezeichner-2 | OMITTED } 
               | [BY  CONTENT] { bezeichner-4 | arithmetischer-ausdruck-1 | literal-2 }
               | [BY  VALUE] { bezeichner-4 | arithmetischer-ausdruck-1 | literal-2 }
              }...]
[RETURNING bezeichner-3] 
[ON EXCEPTION unbedingte-anweisung-1] 
[NOT ON EXCEPTION unbedingte-anweisung-2]
[END-CALL]


Syntaxregeln

  1. literal-1 muss ein alphanumerisches Literal sein. Es darf jedoch keine figurative Konstante sein.

    Ist literal-1 der Programmname eines einzelnen Programms bzw. des äußersten Programms eines geschachtelten Programms, muss es mit einem alphabetischen Zeichen beginnen und darf nur Großbuchstaben und Ziffern enthalten. Die Namenslänge ist abhängig vom Modulformat (siehe Handbuch „COBOL2000 Benutzerhandbuch“ [1]).

    Ist literal-1 der Programmname für ein inneres Programm eines geschachtelten Programms, muss es mit einem alphabetischen Zeichen beginnen, darf Groß- und Kleinbuchstaben sowie Ziffern enthalten und darf eine Länge von maximal 30 Zeichen haben.

  2. bezeichner-1 muss als Programmzeiger oder als alphanumerisches Datenfeld definiert sein. Als alphanumerisches Datenfeld muss sein Wert ein gültiger Programmname, wie in 1. beschrieben, sein. Der Inhalt des Programmzeigers wird als Adresse des Einsprungpunkts interpretiert.

  3. Die NESTED-Angabe darf nur in einer Programm-Definition spezifiziert werden.

  4. NESTED darf nur zusammen mit literal-1 angegeben werden. literal-1 muss identisch sein mit programm-name, der im PROGRAM-ID Paragrafen eines geschachtelten Programms definiert ist.

  5. Ist programmprototypname-1 angegeben, so muss im REPOSITORY-Paragrafen ein Eintrag für diesen Namen vorhanden sein.

  6. bezeichner-4 und jeder Bezeichner in arithmetischer-ausdruck-1 ist ein sendender Operand.

  7. Ist BY CONTENT oder BY REFERENCE für ein Argument spezifiziert, so muss die BY REFERENCE-Angabe in der PROCEDURE DIVISION-Überschrift für den entsprechenden formalen Parameter gelten.

  8. BY CONTENT darf nicht ausgelassen werden, wenn bezeichner-4 als Empfangsfeld zulässig ist.

  9. Ist BY VALUE für ein Argument angegeben, so muss die BY VALUE-Angabe in der PROCEDURE DIVISION-Überschrift für den entsprechenden formalen Parameter angegeben sein.

  10. Ist bezeichner-4 oder der entsprechende formale Parameter in der PROCEDURE DIVISION-Überschrift mit BY VALUE angegeben, so muss bezeichner-4 von der Klasse numerisch, objekt oder zeiger sein.

  11. Ist OMITTED angegeben oder ein Argument ganz weggelassen, so muss in der PROCEDURE DIVISION-Überschrift für den entsprechenden formalen Parameter die Angabe OPTIONAL gemacht sein.

  12. bezeichner-2 und bezeichner-3 dürfen nicht mit der ANY LENGTH-Klausel definiert sein.

  13. Wenn bezeichner-2 oder der korrespondierende formale Parameter mit einer BY VALUE-Angabe spezifiziert ist, darf er nur von der Klasse numerisch, objekt oder zeiger sein.

  14. bezeichner-2 muss auf einen Adressbezeichner oder ein Datenelement verweisen, die in der File Section, Working-Storage Section, Local-Storage Section oder Linkage Section definiert sind.

  15. Wenn die BY REFERENCE-Angabe für bezeichner-2, der kein Adressbezeichner ist, spezifiziert oder impliziert ist, stellt bezeichner-2 sowohl ein Sende-, als auch Empfangsfeld dar. Andernfalls spezifiziert bezeichner-2 ein Sendefeld.

    Anmerkung:
    Die Angabe BY REFERENCE ADDRESS OF datenname wird behandelt wie BY CONTENT ADDRESS OF datenname.

  16. bezeichner-3 darf nicht in der REPORT SECTION definiert sein.

  17. bezeichner-3 ist ein Empfangsfeld.

  18. Konformität von Parametern und Rückgabe-Elementen (siehe "Konformität von Parametern und Rückgabe-Elementen ") muss gewährleistet sein.

Allgemeine Regeln

Grundsätzlich sind auch die Regeln für Format 1 und 2 zutreffend. Zusätzlich gelten noch folgende Regeln:

  1. Die Angaben BY REFERENCE, BY CONTENT und BY VALUE beziehen sich nur auf das direkt nachfolgende Argument.

  2. Ist ein Argument weder mit BY REFERENCE oder BY CONTENT noch mit BY VALUE angegeben, so wird es folgendermaßen behandelt:

    1. es wird BY REFERENCE angenommen, wenn die BY REFERENCE-Angabe für den entsprechenden formalen Parameter in der PROCEDURE DIVISION-Überschrift definiert und das Argument ein Bezeichner ist, der als Empfangsfeld zugelassen ist.

    2. es wird BY CONTENT angenommen, wenn die BY REFERENCE-Angabe für den entsprechenden formalen Parameter in der PROCEDURE DIVISION-Überschrift definiert ist und das Argument ein Literal, ein arithmetischer Ausdruck oder sonst ein Bezeichner ist, der nicht als Empfangsfeld zugelassen ist.

    3. es wird BY VALUE angegeben, wenn die BY VALUE-Angabe für den entsprechenden formalen Parameter in der PROCEDURE DIVISION-Überschrift angegeben ist.

  3. Ein Argument am Ende der USING-Liste darf auch ganz weggelassen werden (d.h. es muss dafür nicht OMITTED angegeben werden), wenn auch alle nachfolgenden Argumente weggelassen worden sind (Syntaxregel 11 beachten!).

  4. Ist OMITTED angegeben oder ist ein Argument ganz weggelassen, dann ist die Omitted-Argument Bedingung für dieses Argument in einem gerufenen Programm wahr.

  5. Ist für ein Argument die Omitted-Argument Bedingung wahr und wird darauf in einem gerufenen Programm (außer in einer Omitted-Argument Bedingung) Bezug genommen, so ist das Verhalten undefiniert.

  6. Bei der Ausführung der CALL-Anweisung wird die Steuerung an das aufgerufene Programm übergeben. Nach der Rückgabe der Steuerung vom aufgerufenen Programm wird, falls vorhanden, unbedingte-anweisung-2 ausgeführt und dann zum Ende der CALL-Anweisung verzweigt. Falls NOT ON EXCEPTION fehlt, wird zum Ende der CALL-Anweisung verzweigt.

  7. Ist während der Ausführung einer CALL-Anweisung das aufgerufene Programm nicht verfügbar oder bereits aktiv, ohne dass es rekursiv ist, wird eine der folgenden Aktionen durchgeführt:

    1. Ist ON EXCEPTION angegeben, geht die Steuerung zu unbedingte-anweisung-1 über. Nach Beendigung von unbedingte-anweisung-1 geht die Steuerung zum Ende der CALL-Anweisung über.

    2. Ist ON EXCEPTION nicht angegeben, wird der Programmablauf nach Ausgabe einer Fehlermeldung abgebrochen.

Format 4


CALL UPON SYSTEM USING { bezeichner-1 | literal-1 } [bezeichner-2]

   [STATUS bezeichner-3]

   [ON EXCEPTION unbedingte-anweisung-1]
   [NOT ON EXCEPTION unbedingte-anweisung-2]

       [END-CALL]


Syntaxregeln

  1. bezeichner-3 muss ein numerisches Datenfeld sein, das mit PIC S9(8) SYNC und USAGE COMP, USAGE COMP-5 oder USAGE BINARY beschrieben ist.

  2. bezeichner-2 darf kein Funktionsbezeichner sein.

  3. bezeichner-3 muss ein numerisches Datenfeld sein, das mit PIC S9(8) SYNC und USAGE COMP, USAGE COMP-5 oder USAGE BINARY beschrieben ist.

  4. bezeichner-2 darf kein Funktionsbezeichner sein.

Allgemeine Regeln

  1. literal-1 bzw. bezeichner-1 enthält das auszuführende BS2000-Kommando.
    Der Schrägstrich (/) vor dem Kommando kann angegeben werden. Kleinbuchstaben werden nicht in Großbuchstaben umgesetzt.

  2. Mit bezeichner-2 wird ein Bereich zur Aufnahme von Systemausgaben spezifiziert.Dieser Antwortbereich sollte groß genug angelegt werden, um die vollständige Ausgabe des angegebenen BS2000-Kommandos aufnehmen zu können.
    Ist bezeichner-2 variabel lang und enthält das DEPENDING ON-Feld, dann wird die maximale Länge von bezeichner-2 verwendet.

  3. Ist bezeichner-2 nicht angegeben oder ist seine aktuelle Länge 0, dann erfolgt die Ausgabe nach SYSOUT.

  4. Tritt bei der Ausführung des Kommandos ein Fehler auf, enthält der Antwortbereich, falls er groß genug angelegt wurde, den Fehlermeldungstext des Systems.

  5. Mit bezeichner-3 kann ein Statusfeld angegeben werden, in dem bestimmte Werte das Resultat der Kommandoausführung anzeigen. Folgende Werte können auftreten:

    00Erfolgreiche Ausführung des Kommandos
    04Das Kommando wurde ausgeführt, aber auf Grund des zu klein angelegten Antwortbereichs konnten ein oder mehrere Sätze nicht eingetragen werden.
    30Fehler bei der Ausführung des Kommandos; keine weitere Information verfügbar
    34Das Kommando darf nicht in einem Programm angegeben werden.
    40Die aktuelle Länge von bezeichner-1 ist ungültig (<= 0 oder > 32767 Byte).
    41Die aktuelle Länge von bezeichner-2 ist ungültig (< 0).
    90Es ist nicht genügend Arbeitsspeicher zur Ausführung des Kommandos verfügbar; Abhilfe: kleinere Bereiche (bezeichner-1 oder bezeichner-2) angeben
  6. Ist während der Ausführung der CALL-Anweisung ein Fehler aufgetreten, wird eine der folgenden Aktionen durchgeführt:

    1. Ist ON EXCEPTION angegeben, wird unbedingte-anweisung-1 ausgeführt. Nach Beendigung von unbedingte-anweisung-1 geht die Steuerung zum Ende der CALL-Anweisung über.

    2. Ist ON EXCEPTION nicht angegeben, wird der Programmablauf ohne Fehlermeldung fortgesetzt.

  7. Wurde die CALL-Anweisung erfolgreich ausgeführt, wird eine der folgenden Aktionen durchgeführt:

    1. Ist NOT ON EXCEPTION angegeben, wird unbedingte-anweisung-2 ausgeführt.

    2. Ist NOT ON EXCEPTION nicht angegeben, wird zum Ende der CALL-Anweisung verzweigt.

Die Ausgabe des Systems besteht aus variablen Sätzen mit Längenfeldern und Sonderzeichen zur Vorschubsteuerung o.ä.; ein Satz entspricht i.d.R. mehreren Zeilen am Bildschirm. In den Antwortbereich werden immer nur vollständige Sätze eingetragen; der nicht belegte Rest des Antwortbereichs wird gelöscht. Zu Strukturen und Weiterverarbeitung des Antwortbereichs siehe Benutzerhandbuch „Makroaufrufe an den Ablaufteil - CMD-Makro“ [12].

Beispiel 8-24

für die Anwendung der CALL-Anweisung im Format CALL bezeichner-1

Hauptprogramm:

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
    TERMINAL IS T.
DATA DIVISION.
WORKING-STORAGE SECTION.
01   CALL-OPERAND PIC X(8) VALUE SPACE.
01   TABLE-FUNCTION.
     02  FUNCTION-1 PIC X(8) VALUE "ADDREC".
     02  FILLER     PIC X(72) VALUE SPACE.
     02  FUNCTION-2 PIC X(8) VALUE "DELREC".
     02  FILLER     PIC X(72) VALUE SPACE.
     02  FUNCTION-3 PIC X(8) VALUE "CHGREC".
     02  FILLER     PIC X(72) VALUE SPACE.
01   RECORD-NUMBER PIC 9(8).
PROCEDURE DIVISION.
P1 SECTION.
HAUPT.
     PERFORM UNTIL CALL-OPERAND = FUNCTION-1 OR FUNCTION-2
                                            OR FUNCTION-3
       DISPLAY "Bitte gewaehlte Funktion eingeben" UPON T
       DISPLAY TABLE-FUNCTION UPON T
       ACCEPT CALL-OPERAND FROM T
     END-PERFORM
     PERFORM UNTIL RECORD-NUMBER NUMERIC
       DISPLAY "Bitte Satznummer eingeben"
                "(numerisch, achtstellig)" UPON T
       ACCEPT RECORD-NUMBER FROM T
     END-PERFORM
     CALL CALL-OPERAND USING RECORD-NUMBER
     END-CALL
     STOP RUN.

Unterprogramm ADDREC:

IDENTIFICATION DIVISION.
PROGRAM-ID. ADDREC.
ENVIRONMENT DIVISION.
DATA DIVISION.
...
LINKAGE SECTION.
01 RECORD-NUMBER PIC 9(8).
PROCEDURE DIVISION USING RECORD-NUMBER.
    ...
    EXIT PROGRAM.

Unterprogramm DELREC:

IDENTIFICATION DIVISION.
PROGRAM-ID. DELREC.
ENVIRONMENT DIVISION.
DATA DIVISION.
...
LINKAGE SECTION.
01  RECORD-NUMBER PIC 9(8).
PROCEDURE DIVISION USING RECORD-NUMBER.
    ...
    EXIT PROGRAM.

Unterprogramm CHGREC:

IDENTIFICATION DIVISION.
PROGRAM-ID. CHGREC.
ENVIRONMENT DIVISION.
DATA DIVISION.
...
LINKAGE SECTION.
01  RECORD-NUMBER PIC 9(8).
PROCEDURE DIVISION USING RECORD-NUMBER.
    ...
    EXIT PROGRAM.

Beispiel 8-25

für die Verwendung von CALL ... USING BY VALUE

Hauptprogramm:

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
ENVIRONMENT DIVISION.
     CONFIGURATION SECTION.
     SPECIAL-NAMES.
         TERMINAL IS T.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  C  PIC  9(4) USAGE COMP-5 VALUE 1.
01  D  PIC  9(9) USAGE COMP-5 VALUE 1.
01  E  PIC  S9(4) USAGE COMP-5 VALUE -1.
01  F  PIC  S9(9) USAGE COMP-5 VALUE -1.
01  RTC  PIC S9(10) SIGN IS LEADING SEPARATE.
PROCEDURE DIVISION.
1ST SECTION.
1.
CALL "C1" USING BY VALUE C, D.
    MOVE RETURN-CODE TO RTC.
    DISPLAY "RETURN-CODE = " RTC UPON T.
    CALL "D1" USING BY VALUE E, F.
    MOVE RETURN-CODE TO RTC.
    DISPLAY "RETURN-CODE = " RTC UPON T.
    MOVE 0 TO RETURN-CODE.

Unterprogramm C1:

Unterprogramm D1:

long C1(unsigned short c,
          unsigned long d)
{
long ret_val;
if (c && d)
   ret_val = 1;
else
   ret_val = -1;
return ret_val;
}
long D1(signed short c, signed long d)
{
long ret_val;
if (c && d)
   ret_val = 1;
else
   ret_val = -1;
return ret_val;
}

Beispiel 8-26

Dateinamen-Zuweisung mit dem SET-FILE-LINK-Kommando im Dialog und Status-Abfrage:

IDENTIFICATION DIVISION.
PROGRAM-ID.  CMD.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
    TERMINAL IS T.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  LINKFILE.                                                       (1) 
  02  FILLER  PIC X(30) VALUE "ADD-FILE-LINK LINK=XXX,F-NAME=".
  02  FILNAM  PIC X(54).  
01  RTC       PIC S9(8) SYNC BINARY.                                (2) 
01 RTC-ED     PIC Z(6)99.
01 TFT-CMD    PIC X(40) VALUE "SHOW-FILE-LINK".
01 RESP       PIC X(2000) VALUE ALL SPACE.                          (3) 
PROCEDURE DIVISION.
MAIN SECTION.
PARA.
    DISPLAY "BITTE DATEINAMEN EINGEBEN X(54)" UPON T.
    ACCEPT FILNAM FROM T.
    CALL UPON SYSTEM USING LINKFILE
                           STATUS RTC
      ON EXCEPTION 

         MOVE RTC TO RTC-ED
         DISPLAY "FEHLER BEIM KOMMANDOAUFRUF, STATUS= "
                    RTC-ED UPON T
    END-CALL
    CALL UPON SYSTEM USING TFT-CMD
                           RESP
    END-CALL.
    DISPLAY "ANTWORTBEREICH RESP" RESP UPON T.
FIN.
    STOP RUN.

(1)

Beschreibung von bezeichner-1 mit Unterstrukturen für BS2000-Systemkommando und Dateiname.

(2)

Beschreibung von bezeichner-3 (Statusfeld RTC)

(3)

Beschreibung von bezeichner-2 (Antwortbereich RESP)