Regole per chiamare i sottoprogrammi
Queste regole descrivono i requisiti e il comportamento dei sottoprogrammi chiamati o collegati da un programma COBOL. Le regole applicabili dipendono dal modo in cui il controllo viene trasferito al sottoprogramma, sia esso tramite un EXEC CICS LINK comando, una chiamata statica COBOL o una chiamata dinamica COBOL.
Posizione del sottoprogramma
- LINK EXEC CICS®
- Il sottoprogramma può essere remoto.
- Chiamata statica o dinamica all' COBOL
- Il sottoprogramma deve essere locale.
Traduzione
Se si utilizza un compilatore con traduttore integrato, la traduzione non è necessaria.
- LINK ALL' CICS E DI ESECUZIONE
- Il sottoprogramma collegato deve essere tradotto se esso, o qualsiasi sottoprogramma invocato da esso, contiene funzioni CICS.
- Chiamata statica o dinamica all' COBOL
- Il sottoprogramma chiamato deve essere tradotto se contiene comandi CICS o riferimenti al blocco di interfaccia EXEC (DFHEIBLK) o all'area di comunicazione CICS (DFHCOMMAREA).
Compilazione
È necessario utilizzare sempre l'opzione del compilatore NODYNAM (impostazione predefinita) quando si compila un programma COBOL da eseguire con CICS, anche se il programma emette chiamate dinamiche.
link editing
- LINK ALL' CICS E DI ESECUZIONE
- Il sottoprogramma collegato deve essere compilato e modificato come programma separato.
- Chiamata statica COBOL
- Il sottoprogramma chiamato deve essere collegato al programma chiamante per formare un unico modulo di caricamento (ma i programmi possono essere compilati separatamente). Questo può produrre moduli di programma di grandi dimensioni e impedisce a due programmi che chiamano lo stesso programma di condividere una copia del programma stesso.
- Chiamata dinamica all' COBOL
- Il sottoprogramma chiamato deve essere compilato e collegato come modulo di caricamento separato. Può risiedere nell'area del link pack o in una libreria condivisa con altre regioni CICS e CICS CICS allo stesso tempo.
Voci CICS CSD senza autoinstallazione del programma
Se si utilizza l'autoinstallazione del programma, non è necessaria una voce nel CSD. Tuttavia, se non si utilizza l'autoinstallazione del programma, assicurarsi di definirli nel CSD.
- LINK ALL' CICS E DI ESECUZIONE
- Il sottoprogramma collegato deve essere definito con RDO. Se il sottoprogramma collegato è sconosciuto o non disponibile, LINK fallisce con la condizione PGMIDERR.
- Chiamata statica COBOL
- Il programma chiamante deve essere definito nel CSD. Il sottoprogramma fa parte del programma chiamante, quindi non è necessario inserire un CSD.
- Chiamata dinamica all' COBOL
- Il programma chiamante deve essere definito nel CSD. Il sottoprogramma chiamato deve essere definito nel CSD. Se il sottoprogramma chiamato non può essere caricato o non è disponibile, COBOL emette un messaggio e si interrompe (1029).
Chiamate ricorsive nell' COBOL
Se il programma A chiama il programma B e il programma B tenta di chiamare il programma A, Language Environment® invia un messaggio IGZ0064S a CEEMSG e un abend (4038).
Se il programma A e il programma B hanno la parola chiave RECURSIVE nel PROGRAM-ID, le chiamate ricorsive sono consentite.
Passaggio di parametri a un sottoprogramma
I dati possono essere passati da uno qualsiasi dei metodi CICS standard (COMMAREA, TWA, TCTUA, code TS) se il sottoprogramma chiamato o collegato viene elaborato dal traduttore CICS.
- LINK ALL' CICS E DI ESECUZIONE
- Se si utilizza la COMMAREA, il suo indirizzo deve essere passato nel comando LINK. Se il sottoprogramma collegato utilizza un indirizzamento a 24 bit e COMMAREA si trova al di sopra della riga da 16 MB, CICS lo copia al di sotto della riga da 16 MB e lo ricopia al ritorno.
- Chiamata statica COBOL
- L'istruzione CALL può passare DFHEIBLK e DFHCOMMAREA come primi due parametri, se il programma chiamato deve emettere richieste EXEC CICS, oppure il programma chiamato può emettere comandi EXEC CICS ADDRESS. Il COMMAREA è facoltativo, ma se vengono passati altri parametri, deve essere passato anche un COMMAREA fittizio. Le regole per i programmi annidati possono essere diverse.
- Chiamata dinamica all' COBOL
- L'istruzione CALL può passare DFHEIBLK e DFHCOMMAREA come primi due parametri, se il programma chiamato deve emettere richieste EXEC CICS, oppure il programma chiamato può emettere comandi EXEC CICS ADDRESS. Il COMMAREA è facoltativo, ma se vengono passati altri parametri, deve essere passato anche un COMMAREA fittizio. Se il sottoprogramma chiamato utilizza l'indirizzamento a 24 bit e uno qualsiasi dei parametri supera la linea dell' 16MB, COBOL emette un messaggio e si interrompe (1033).
Ritorno da un sottoprogramma
- LINK ALL' CICS E DI ESECUZIONE
- Il sottoprogramma collegato deve restituire utilizzando o EXEC CICS RETURN un comando di ritorno in linguaggio nativo come l'istruzione COBOLGOBACK.
- Chiamata statica o dinamica all' COBOL
- Il sottoprogramma chiamato deve restituire utilizzando un'istruzione di ritorno in linguaggio nativo, come l'istruzione GOBACKCOBOL o EXIT PROGRAM . L'uso di EXEC CICS RETURN nel sottoprogramma chiamato termina il programma chiamante.
Storage
- LINK ALL' CICS E DI ESECUZIONE
- A ogni ingresso nel sottoprogramma collegato, viene fornita una nuova copia inizializzata della sua WORKING-STORAGE SECTION e l'unità di esecuzione viene reinizializzata (in alcune circostanze, ciò può causare un calo delle prestazioni).
- Chiamata statica o dinamica all' COBOL
- Al primo ingresso del sottoprogramma chiamato in un livello logico CICS, viene fornita una nuova copia inizializzata della sua WORKING-STORAGE SECTION. Nei successivi accessi al sottoprogramma chiamato allo stesso livello logico, lo stesso STORAGE DI LAVORO viene fornito nel suo ultimo stato utilizzato, cioè non viene liberato, acquisito o inizializzato alcuno storage. Se le prestazioni con i comandi LINK non sono soddisfacenti, le chiamate COBOL potrebbero dare risultati migliori.
Gestione delle condizioni, degli AID e degli abend di CICS
- LINK ALL' CICS E DI ESECUZIONE
- All'ingresso del sottoprogramma chiamato, non è attiva la gestione delle interruzioni o delle condizioni. All'interno del sottoprogramma, si applicano le normali regole CICS. Per stabilire un ambiente di gestione delle condizioni o di interruzione, che esista per tutta la durata del sottoprogramma, è necessario emettere un nuovo comando HANDLE all'ingresso del sottoprogramma. L'ambiente così creato rimane in vigore finché non viene emesso un altro comando HANDLE o il sottoprogramma restituisce il controllo al chiamante.
- Chiamata statica o dinamica all' COBOL
- Se il programma COBOL chiamato dinamicamente va in errore, con Language Environment e CBLPSHPOP ON, all'ingresso nel sottoprogramma chiamato, non è attiva alcuna gestione degli errori o delle condizioni. All'interno del sottoprogramma, si applicano le normali regole CICS. All'entrata nel sottoprogramma chiamato, COBOL emette un PUSH HANDLE per impilare la condizione del programma chiamante o i gestori di errore. Per stabilire un ambiente di gestione degli abend o delle condizioni che esista per tutta la durata del sottoprogramma, è necessario emettere un nuovo comando HANDLE all'ingresso del sottoprogramma. L'ambiente creato rimane in vigore finché non viene emesso un altro comando HANDLE o il sottoprogramma restituisce il controllo al chiamante. Quando il controllo viene restituito al programma chiamante dal sottoprogramma, COBOL rimuove dallo stack la condizione e i gestori di errore utilizzando un POP HANDLE.
- Se il programma COBOL chiamato dinamicamente termina con CBLPSHPOP OFF e la condizione, AID o la gestione dell'errore per il programma chiamante è attiva, il programma termina con il codice di errore APC2.
- Per un programma chiamato staticamente COBOL, la condizione, l'AID e la gestione dell'abbandono rimangono in vigore, indipendentemente dall'impostazione di CBLPSHPOP.