Utilizzo dei moduli di interfaccia EXEC per le applicazioni AMODE (24) e AMODE (31)

Per le applicazioni AMODE (24) e AMODE (31), le istruzioni CALL che i traduttori del linguaggio generano richiamano i moduli di interfaccia EXEC che forniscono la comunicazione tra il codice e il programma di interfaccia EXEC CICS® , DFHEIP.

Un traduttore di lingua legge il programma di origine e ne crea uno nuovo. Le istruzioni di linguaggio normali rimangono invariate, ma i comandi CICS vengono convertiti in istruzioni CALL del formato richiesto dalla lingua in cui si sta codificando. Le chiamate richiamano i moduli di interfaccia EXEC forniti da CICSo stub ; cioè, sezioni di codice dipendenti dalla funzione utilizzate dall'interfaccia di programmazione di alto livello CICS . Lo stub, fornito nella libreria SDFHLOAD, deve essere collegato al programma di applicazione. Questi stub vengono richiamati durante l'esecuzione dei comandi EXEC CICS e EXEC DLI. Gli stub vengono forniti per ogni linguaggio di programmazione.

Tabella 1. Moduli di interfaccia (stub)
Lingua Nome modulo interfaccia
Assembler DFHELII e DFHEAI0
Tutti i linguaggi HLL e i programmi Assembler MAIN che utilizzano l'opzione LEASM DFAIDII

Le routine stub fornite da CICSfunzionano con un'interfaccia di programmazione interna, l'interfaccia a livello di comando CICS , che non è mai stata modificata in modo incompatibile. Di conseguenza, questi moduli stub sono compatibili con versioni precedenti e successive e i moduli dell'applicazione CICS non devono mai essere ricollegati per includere un livello successivo di tali stub.

Ad eccezione di DFHEAI0, questi stub forniscono tutti la stessa funzione, che è quella di fornire un link dai comandi EXEC CICS al servizio CICS richiesto. A tale scopo, gli stub forniscono diversi punti di entrata richiamati dai comandi EXEC CICS tradotti, quindi eseguono una sequenza di istruzioni che passano il controllo alla funzione dell'interfaccia EXEC di CICS.

DFHELII contiene più punti di ingresso, la maggior parte dei quali fornisce la compatibilità per le vecchie versioni del traduttore PL/I CICS . Contiene le voci DFHEXEC (per programmi di applicazione C e C + +), DFHEI1 (per COBOL e Assembler) e DFHEI01 (per PL/I).

Ogni stub inizia con un eyecatcher a 8 byte nel formato DFHY xnnn , dove x indica il linguaggio supportato dallo stub (A indica Assembler e I indica che lo stub è indipendente dalla lingua) e nnn indica la release CICS da cui lo stub è stato incluso. La lettera Y in eyecatcher indica che lo stub è di sola lettura. Gli stub forniti con release molto iniziali di CICS contenevano eyecatcher nel formato DFHE xxxx , in cui la lettera E indica che lo stub non è di sola lettura. L'eyecatcher per DFHELII in CICS Transaction Server per z/OS®, Versione 5 Release 6 è DFHYI 730.

L'eyecatcher può essere utile per determinare la release CICS in cui è stato collegato più di recente un modulo di caricamento dell'applicazione CICS .

COBOL

Ogni comando EXEC viene convertito in un'istruzione COBOL CALL che fa riferimento alla voce DFHEI1.

Il seguente esempio mostra l'output generato dal convertitore quando si elabora un comando EXEC CICS RETURN semplice:
 *EXEC CICS RETURN END-EXEC
Call 'DFHEI1' using by content x'0e0800000600001000'
end-call.
Il riferimento a DFHEI1 viene risolto mediante l'inclusione della routine stub DFHELII nel passo dell'editor di collegamento delle procedure fornite da CICScome DFHYITVL o DFHZITCL.

PL/I

Quando si traducono programmi PL/I, ogni comando EXEC genera una chiamata al punto di immissione DFHEI01. Ciò viene eseguito utilizzando un punto di ingresso variabile DFHEI0 associato alla voce DFHEI01. Il programma di traduzione lo abilita inserendo le seguenti istruzioni vicino all'inizio di ogni programma tradotto:
 DCL DFHEI0 ENTRY VARIABLE INIT(DFHEI01) AUTO;
DCL DFHEI01 ENTRY OPTIONS(INTER ASSEMBLER);
Il convertitore crea un nome voce univoco basato su DFHEI0 per ogni comando EXEC convertito correttamente. Il seguente esempio mostra l'output generato dal convertitore quando elabora un comando EXEC CICS RETURN semplice:
 /* EXEC CICS RETURN TRANSID(NEXT) */
DO;
DCL DFHENTRY_B62D3C38_296F2687 BASED(ADDR(DFHEI0)) OPTIONS(INTER ASSEM
BLER) ENTRY(*,CHAR(4));
CALL DFHENTRY_B62D3C38_296F2687('xxxxxxxxxxxxxxxxx' /* '0E 08 80 00 03
00 00 10 00 F0 F0 F0 F0 F0 F0 F1 F0 'X */, NEXT);
END;

Nell'esempio precedente, DFHENTRY_B62D3C38_296F2687 si basa sulla variabile di immissione DFHEI0 associata alla voce reale DFHEI01. Questa tecnica consente al convertitore di creare un elenco di descrittori dati PL/I per ogni nome di voce di variabile. Il compilatore PL/I può quindi verificare che i nomi di variabile a cui si fa riferimento nei comandi EXEC siano definiti con attributi coerenti con gli attributi definiti dal convertitore nell'elenco dei descrittori dati. In questo esempio, ENTRY (*, CHAR (4)) specifica che la variabile (denominata NEXT) associata all'opzione TRANSID deve essere una stringa di caratteri con una lunghezza di quattro.

Il riferimento a DFHEI01 viene risolto includendo la routine stub DFHELII nel passo dell'editor di collegamento di una delle procedure fornite da CICScome DFHYITPL.

C e C++

In un programma C e C++, ciascun comando EXEC CICS viene convertito dal convertitore di comandi in una chiamata alla funzione DFHEXEC.

Il programma di traduzione lo abilita inserendo le seguenti istruzioni vicino all'inizio di ogni programma tradotto:
#pragma linkage(DFHEXEC,OS) /* force OS linkage */
void DFHEXEC(); /* function to call CICS */
Il seguente esempio mostra l'output generato dal convertitore quando si elabora un comando EXEC CICS RETURN semplice:
 /* EXEC CICS RETURN */
{
DFHEXEC(
"\x0E\x08\x00\x2F\x00\x00\x10\x00\xF0\xF0\xF0\xF0\xF1\xF8\xF0\xF0");
}

Il riferimento a DFHEXEC viene risolto mediante l'inclusione della routine stub DFHELII nel passo dell'editor di collegamento di una delle procedure fornite da CICScome DFHYITDL, DFHZITDL, DFHZITEL, DFHZITFL o DFHZITGL.

Linguaggio Assembler

Ogni comando EXEC viene convertito in un richiamo della macro DFHECALL.

Il seguente esempio mostra l'output generato dal convertitore quando si elabora un comando EXEC CICS RETURN semplice:
* EXEC CICS RETURN
DFHECALL =X'0E0800000800001000'
L'assemblaggio del richiamo della macro DFHECALL come mostrato genera codice che crea un elenco di parametri indirizzato dal registro 1, carica l'indirizzo della voce DFHEI1 nel registro 15 ed emette un'istruzione BALR per chiamare la routine stub.
 DS 0H
LA 1,DFHEITPL
LA 14,=x'0E08000008001000'
ST 14,0(,1)
OI 0(1),x'80'
L 15,=V(DFHEI1)
BALR 14,15
Il riferimento a DFHEI1 viene risolto dall'inclusione della routine stub DFHEAI nel passo dell'editor di collegamento di uno delle procedure fornite da CICS, come DFHEITAL. Il eyecatcher per DFHEAI in CICS Transaction Server per z/OS, Versione 5 Release 6 è DFHYA 730 , con i numeri di release che indicano che questo stub è stato fornito con CICS Transaction Server per z/OS, Versione 5 Release 6 .

Lo stub DFHEAI0 per i programmi applicativi assembler è incluso dalla funzione di chiamata automatica del programma di utilità binder o dell'editor di collegamento. Viene richiamato dal codice generato dalle macro DFHEIENT e DFHEIRET per ottenere e liberare, rispettivamente, un'area di storage dinamico del programma applicativo assembler. Questo stub è richiesto solo nei programmi di applicazione assembler; non vi sono stub richiesti o forniti per fornire una funzione equivalente per i programmi scritti nei linguaggi di alto livello.

Per informazioni sull'inclusione di DFHEAI, consultare DFHEAI.