Function
The PROGRAM-ID paragraph contains the name by which a program or program prototype is identified. The program can be assigned the appropriate attributes with the INITIAL, COMMON or RECURSIVE clause.
Format 1
PROGRAM-ID. programmname [ IS {|COMMON | {INITIAL |
RECURSIVE
} |} PROGRAM].
Format 2
PROGRAM-ID. programmprototypname-1 IS PROTOTYPE.
Syntaxregeln
programmname muss ein 1-30 Zeichen langer benutzerdefinierter Name sein. Er muss mit einem Buchstaben beginnen.
Anmerkung:
Ein Programmname sollte nicht mit dem Buchstaben „I“ beginnen, damit er nicht mit Namen von COBOL-Laufzeitmoduln bzw. Moduln anderer Laufzeitsysteme in Konflikt gerät.Die Programme eines geschachtelten Programms müssen verschiedene Namen tragen.
Die COMMON-Klausel darf nur für die inneren Programme eines geschachtelten Programms angegeben werden. Im äußersten Programm darf sie nicht angegeben werden.
Die INITIAL-Klausel darf in keinem Programm angegeben werden, das direkt oder indirekt in einem rekursiven Programm enthalten ist.
Die RECURSIVE-Klausel darf in keinem Programm angegeben werden, das direkt oder indirekt in einem Programm enthalten ist, das die INITIAL-Klausel enthält.
Allgemeine Regeln für Format 1
Die INITIAL-Klausel bewirkt, dass sich das Programm bei jedem Aufruf im Initialzustand befindet (siehe Abschnitt „Initialzustand bei der Programmkommunikation").
Die COMMON-Klausel bestimmt, dass das Programm das Attribut COMMON besitzt. Ein derartiges Programm kann nicht nur von dem direkt übergeordneten Programm aufgerufen werden, sondern auch von seinen „Geschwisterprogrammen“ und deren „Abkömmlingen“.
Die RECURSIVE-Klausel gibt an, dass das Programm und alle Programme, die in diesem enthalten sind, rekursiv sind. Das Programm kann gerufen werden während es bereits aktiv ist und es kann sich selbst rufen. Ist die RECURSIVE-Klausel in einem Programm angegeben oder implizit für dieses Programm gültig, darf das Programm gerufen werden, während es schon aktiv ist.
Allgemeine Regel für Format 2
programmprototypname-1 spezifiziert den Programm-Prototyp.
Zusatzregeln, abhängig vom Modulformat
Wird das Format *OMF generiert (siehe Handbuch „COBOL2000 Benutzerhandbuch“ [1]), dann gilt für programmname bzw. programmprototypname-1:
Das achte Zeichen darf kein Bindestrich sein.
Vom Betriebssystem werden nur die ersten 8 Zeichen des Namens zur Modulidentifizierung verwendet. Deshalb sollten diese Zeichen eindeutig sein für jeden Namen in einer bestimmten Modul-/Programmbibliothek.
Bei Erzeugung von shared code werden nur die ersten 7 Zeichen des Namens verwendet.
Beispiel 5-1
für die Wirkung der INITIAL-Klausel
Aufrufendes Programm:
IDENTIFICATION DIVISION. PROGRAM-ID. MAIN. ... DATA DIVISION. WORKING-STORAGE SECTION. ... PROCEDURE DIVISION. ... CALL "UPROG1" USING... ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯(1) ... ... CALL "UPROG1" USING... ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯(2)
Aufgerufenes Programm:
IDENTIFICATION DIVISION. PROGRAM-ID. UPROG1 IS INITIAL PROGRAM. ... DATA DIVISION. WORKING-STORAGE SECTION. 01 USER-DATE PIC X(8) VALUE SPACE. ... PROCEDURE DIVISION USING ... ... MOVE "26.10.49" TO USER-DATE. ... EXIT PROGRAM.
(1) (2) | ist der erste Aufruf von UPROG1 durch HAUPT. ist der zweite Aufruf von UPROG1 durch HAUPT; wie beim ersten Aufruf ist das Unterprogramm UPROG1 hier im Initialzustand. So ist z.B. der Inhalt von BENUTZER-DATUM wieder SPACE, auch wenn BENUTZER-DATUM beim ersten Aufruf verändert wurde. |
Beispiel 5-2
für die Wirkung der COMMON-Klausel
Struktur eines geschachtelten Programms A:
Aufrufmöglichkeiten innerhalb des oben skizzierten geschachtelten Programms:
aufgerufenes Programm | aufrufendes Programm | |||||||||||||||
A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | |
A | ||||||||||||||||
B | x | |||||||||||||||
C | x | |||||||||||||||
D | x | x | ||||||||||||||
E | x | |||||||||||||||
F | x | |||||||||||||||
G | x | x | x | x | x | x | x | x | x | |||||||
H | x | x | x | x | x | x | ||||||||||
J | x | |||||||||||||||
K | x | |||||||||||||||
L | x | |||||||||||||||
M | x | x | ||||||||||||||
N | x | |||||||||||||||
O | x | x | x | |||||||||||||
P | x | |||||||||||||||
Q | x |
x = erlaubter Aufruf