A new translator option LEASM (valid only for assembler programs) allows you to specify that this program is to be translated using the macros that will make it a Language Environment-conforming program, ready for assembly as a MAIN program.
Specification of LEASM results in the setting of a new assembler global &DFHEILE. A fourth positional parameter LE has been added to the DFHEIGBL macro that the translator inserts at the top of every output file. DFHEIGBL changes to set &DFHEILE on if LEASM is specified.
The translator sets a value (X'12') for the language in ARG0 when LEASM has been specified. The output from the translator will be identical to that produced without specifying LEASM in every other way.
If &DFHEILE is set, the DFHEISTG, DFHEIENT, DFHEIRET and DFHEIEND macros expand differently to create an LE environment rather than a normal CICS® environment. This allows your programs that have used NOPROLOG and NOEPILOG and coded their own DFHEIENT and other macros to take advantage of Language Environment support without changing their program source. For example, all programs that require more than one code base register fall into this category because the translator does not support multiple code base registers.
CEEENTRY does not allow the use of registers 2 or 12 for code addressability. Register 12 must always contain the address of the Language Environment CAA during execution of a Language Environment program. Register 2 is not generally used as a code base because it is modified by instructions such as TRT. DFHEIENT will generate an error message if Register 2 or Register 12 is specified on CODEREG in a program translated using the LEASM option.
*ASM XOPTS(LEASM)
DFHEISTG DSECT
OUTAREA DS CL200 DATA OUTPUT AREA
*
EIASM CSECT ,
MVC OUTAREA(40),MSG1
MVC OUTAREA(4),EIBTRMID
EXEC CICS SEND TEXT FROM(OUTAREA) LENGTH(43) FREEKB ERASE
EXEC CICS RECEIVE
MVC OUTAREA(13),MSG2
EXEC CICS SEND TEXT FROM(OUTAREA) LENGTH(13) FREEKB ERASE
EXEC CICS RETURN
*
MSG1 DC C'xxxx: ASM program invoked. ENTER TO END.'
MSG2 DC C'PROGRAM ENDED'
END
*ASM XOPTS(LEASM)
DFHEIGBL ,,,LE INSERTED BY TRANSLATOR
*,&DFHEIDL; SETB 0 1 MEANS EXEC DLI IN PROGRAM 01-DFHEI
*,&DFHEIDB; SETB 0 1 MEANS BATCH PROGRAM 01-DFHEI
*,&DFHEIRS; SETB 0 1 MEANS RSECT 01-DFHEI
*,&DFHEILE; SETB 1 1 MEANS LE MAIN 01-DFHEI
DFHEISTG DSECT
DFHEISTG INSERTED BY TRANSLATOR
***********************************************************************
* EXEC INTERFACE DYNAMIC STORAGE *
***********************************************************************
DFHEISTG DSECT EXEC INTERFACE STORAGE @BBAC81A 01-DFHEI
USING *,DFHEIPLR ESTABLISH ADDRESSABILITY @BBAC81A 01-DFHEI
*
**********************************************************************
* D Y N A M I C S T O R A G E A R E A ( D S A ) *
**********************************************************************
*
CEEDSA DS 0D Just keep the same label for formulae 02-CEEDS
*
CEEDSAFLAGS DS XL2 DSA flags 02-CEEDS
CEEDSALNGC EQU X'1000' C library DSA 02-CEEDS
CEEDSALNGP EQU X'0800' PL/I library DSA 02-CEEDS
CEEDSAEXIT EQU X'0008' An Exit DSA 02-CEEDS
CEEDSAMEMD DS XL2 Member defined 02-CEEDS
CEEDSABKC DS A Addr of DSA of caller 02-CEEDS
CEEDSAFWC DS A Addr of DSA of last called rtn 02-CEEDS
***********************************************************************
* *
* CONTROL BLOCK NAME = DFHEIBLK *
* *
* NAME OF MATCHING PL/AS CONTROL BLOCK = None *
* *
* DESCRIPTIVE NAME = %PRODUCT EXEC Interface Block. *
* *
* @BANNER_START 02 *
* Licensed Materials - Property of IBM *
* *
* "Restricted Materials of IBM" *
* *
* 5697-E93 *
* *
* (C) Copyright IBM Corp. 1990, 1993 *
* *
* *
* *
* *
* @BANNER_END *
* *
* STATUS = %XA20 *
* *
* FUNCTION = EXEC Interface Block. *
* *
* The exec interface block contains information on the *
* transaction identifier, the time and date, and the cursor *
* position on a display device. Some of the other fields are *
* set indicating the next action that a program should take *
* in certain circumstances. *
* DFHEIBLK also contains information that will be helpful *
* when a dump is being used to debug a program. *
* This control block is included automatically by an *
* application program using the command-level interface. *
* EISEIBA in the EIS addresses the EIB. *
* *
* *
* *
* NOTES : *
* DEPENDENCIES = S/370 *
* MODULE TYPE = Control block definition *
* PROCESSOR = Assembler *
* *
*-------------------------------------------------------------------- *
* *
* CHANGE ACTIVITY : *
* £SEG(DFHEIBLK),COMP(COMMAND),PROD(%PRODUCT) : *
* *
* PN= REASON REL YYMMDD HDXXIII : REMARKS *
* £L1= 550 %0G 900515 HDFSPC : Add an EIB length equate *
* £D1= I05119 %B1 930226 HDDHDMA : Correct comments for date field *
* £P1= M60581 %B0 900116 HDAEGB : Change for PLXMAP to data areas *
* *
***********************************************************************
* EXEC INTERFACE BLOCK *
***********************************************************************
DFHEIBLK DSECT EXEC INTERFACE BLOCK @BBAC81A 01-DFHEI
USING *,DFHEIBR @BBAC81A 01-DFHEI
EIBTIME DS PL4 TIME IN 0HHMMSS FORMAT @BBAC81A 01-DFHEI
EIBDATE DS PL4 DATE IN 0CYYDDD+ FORMAT, @D1C 01-DFHEI
* where C is the century @D1A
* indicator (0=1900, 1=2000), @D1A
* YY is the year, DDD is the @D1A
* day number and '+' is the @D1A
* sign byte (positive) @D1A
EIBTRNID DS CL4 TRANSACTION IDENTIFIER @BBAC81A 01-DFHEI
EIBTASKN DS PL4 TASK NUMBER @BBAC81A 01-DFHEI
EIBTRMID DS CL4 TERMINAL IDENTIFIER @BBAC81A 01-DFHEI
EIBRSVD1 DS H RESERVED @BBAC81A 01-DFHEI
EIBCPOSN DS H CURSOR POSITION @BBAC81A 01-DFHEI
EIBCALEN DS H COMMAREA LENGTH @BBAC81A 01-DFHEI
EIBAID DS CL1 ATTENTION IDENTIFIER @BBAC81A 01-DFHEI
EIBFN DS CL2 FUNCTION CODE @BBAC81A 01-DFHEI
EIBRCODE DS CL6 RESPONSE CODE @BBAC81A 01-DFHEI
EIBDS DS CL8 DATASET NAME @BBAC81A 01-DFHEI
EIBREQID DS CL8 REQUEST IDENTIFIER @BBAC81A 01-DFHEI
EIBRSRCE DS CL8 RESOURCE NAME @BBDIA0U 01-DFHEI
EIBSYNC DS C X'FF' SYNCPOINT REQUESTED @BBDIA0U 01-DFHEI
EIBFREE DS C X'FF' FREE REQUESTED @BBDIA0U 01-DFHEI
EIBRECV DS C X'FF' RECEIVE REQUIRED @BBDIA0U 01-DFHEI
EIBSEND DS C RESERVED @BM13417 01-DFHEI
EIBATT DS C X'FF' ATTACH RECEIVED @BBDIA0U 01-DFHEI
EIBEOC DS C X'FF' EOC RECEIVED @BBDIA0U 01-DFHEI
EIBFMH DS C X'FF' FMHS RECEIVED @BBDIA0U 01-DFHEI
EIBCOMPL DS C X'FF' DATA COMPLETE 01-DFHEI
EIBSIG DS C X'FF' SIGNAL RECEIVED 01-DFHEI
EIBCONF DS C X'FF' CONFIRM REQUESTED 01-DFHEI
EIBERR DS C X'FF' ERROR RECEIVED 01-DFHEI
EIBERRCD DS CL4 ERROR CODE RECEIVED 01-DFHEI
EIBSYNRB DS C X'FF' SYNC ROLLBACK REQ'D 01-DFHEI
EIBNODAT DS C X'FF' NO APPL DATA RECEIVED 01-DFHEI
EIBRESP DS F INTERNAL CONDITION NUMBER 01-DFHEI
EIBRESP2 DS F MORE DETAILS ON SOME RESPONSES 01-DFHEI
EIBRLDBK DS CL1 ROLLED BACK 01-DFHEI
*
EIBLENG EQU *-EIBTIME Length of EIB @L1A 01-DFHEI
***********************************************************************
* END OF EXEC INTERFACE BLOCK *
***********************************************************************
DFHEIBR EQU 11 EIB REGISTER @BA02936 01-DFHEI
@01A 02-CEEEN
***********************************************************************
* PROLOG CODE FOR EXEC INTERFACE *
***********************************************************************
*&DFHEICS; CEEENTRY PPA=DFHPPA,MAIN=YES,PLIST=OS,
* BASE=&CODEREG;,
* AUTO=(DFHEIEND-DFHEISTG)
TESTLE CSECT , 02-CEEEN
TESTLE RMODE ANY 02-CEEEN
TESTLE AMODE ANY 02-CEEEN
ENTRY TESTLE 02-CEEEN
PUSH USING 02-CEEEN
DROP , @02A 02-CEEEN
USING *,15 02-CEEEN
B CEEZ0007 02-CEEEN
DC X'00C3C5C5' 02-CEEEN
CEEY0007 DC A((((DFHEIEND-DFHEISTG)+7)/8)*8) X02-CEEEN
. Size of automatic storage.
DC A(DFHPPA-TESTLE) . Address of PPA for this program 02-CEEEN
B 1(,15) 02-CEEEN
CEEZ0007 EQU * 02-CEEEN
STM 14,12,CEEDSAR14-CEEDSA(13) 02-CEEEN
L 2,CEEINPL0007 5@01D @01C 02-CEEEN
L 15,CEEINT0007 @01C 02-CEEEN
DROP 15 @01A 02-CEEEN
BALR 14,15 02-CEEEN
LR 2,1 02-CEEEN
L 14,752(,12) 02-CEEEN
OI 8(14),X'80' 02-CEEEN
BALR 3,0 @01A 02-CEEEN
USING *,3
L 3,CEEOEPV0007 @01A 02-CEEEN
POP USING @01A 02-CEEEN
USING TESTLE,3 @01A 02-CEEEN
L 1,CEEDSANAB-CEEDSA(,13) Get the current NAB 02-CEEEN
L 0,CEEY0007 02-CEEEN
ALR 0,1 Compute new value. 02-CEEEN
CL 0,CEECAAEOS-CEECAA(,12) Compare with EOS. 02-CEEEN
BNH CEEX0007 02-CEEEN
L 15,CEECAAGETS-CEECAA(,12) Get address overflow routine 02-CEEEN
BALR 14,15 Get another stack segment. 02-CEEEN
LR 1,15 02-CEEEN
B CEEX0007 Branch around statics @01A 02-CEEEN
CEEINPL0007 DC A(CEEINPL) @01A 02-CEEEN
CEEINT0007 DC V(CEEINT) @01A 02-CEEEN
CEEOEPV0007 DC A(TESTLE) @01A 02-CEEEN
CEEX0007 EQU * 02-CEEEN
ST 13,CEEDSABKC-CEEDSA(,1) Set back chain. 02-CEEEN
ST 0,CEEDSANAB-CEEDSA(,1) Set new NAB value 02-CEEEN
XC CEEDSAFLAGS-CEEDSA(,1),CEEDSAFLAGS-CEEDSA(1) . Clear 02-CEEEN
ST 1,CEEDSAFWC-CEEDSA(,13) Set forward chain. 02-CEEEN
LR 13,1 Set save area address 02-CEEEN
USING CEEDSA,13 Addresability to SF V1R2M0 02-CEEEN
MVC CEEDSALWS,CEECAALWS-CEECAA(12) Get LWS addr V1R2M0 02-CEEEN
LR 1,2 02-CEEEN
BAL 1,*+8 @L2A 01-DFHEI
* The following gives an assembler message if DFHEISTG is too big @P7A
DS 0S((DFHEISTG+65264-DFHEIEND-4096)/4096) @04C 01-DFHEI
DC AL2(DFHEIEND-DFHEISTG) LENGTH OF STORAGE @L2A 01-DFHEI
DC H'0' Parameter list version number @P6C 01-DFHEI
***********************************************************************
* ESTABLISH DATA ADDRESSIBILITY *
***********************************************************************
DFHEIPLR EQU 13 PARAMETER LIST REGISTER @BBAC81A 01-DFHEI
LR DFHEIPLR,15 @BBAC81A 01-DFHEI
USING DFHEISTG,13 @BBAC81A 01-DFHEI
MVC DFHEIBP(L'DFHEIBP+L'DFHEICAP),0(1) @D3AX01-DFHEI
COPY EIB AND CA PTRS @D3A
***********************************************************************
* ESTABLISH EIB ADDRESSIBILITY *
***********************************************************************
L DFHEIBR,DFHEIBP @BBAC81A 01-DFHEI
USING DFHEIBLK,DFHEIBR @BBAC81A 01-DFHEI
***********************************************************************
* END OF PROLOG CODE FOR EXEC INTERFACE *
***********************************************************************
MVC OUTAREA(40),MSG1
MVC OUTAREA(4),EIBTRMID
* EXEC CICS SEND TEXT FROM(OUTAREA) LENGTH(43) FREEKB ERASE
DFHECALL =X'180660000800C20000082204000020',,(______RF,OUTAREA*
),(FB_2,=Y(43))
***********************************************************************
DS 0H 01-DFHEC
LA 1,DFHEIPL 01-DFHEC
LA 14,=X'180660000800C20000082204000020' 01-DFHEC
SR 15,15 01-DFHEC
LA 0,OUTAREA 01-DFHEC
STM 14,0,0(1) 01-DFHEC
LA 14,=Y(43) 01-DFHEC
ST 14,12(,1) 01-DFHEC
OI 12(1),X'80' LAST ARGUMENT 01-DFHEC
L 15,=V(DFHEI1) 01-DFHEC
BALR 14,15 INVOKE EXEC INTERFACE 01-DFHEC
***********************************************************************
* EXEC CICS RECEIVE
DFHECALL =X'040200000800000014000040000000'
***********************************************************************
DS 0H 01-DFHEC
LA 1,DFHEIPL 01-DFHEC
LA 14,=X'040200000800000014000040000000' 01-DFHEC
ST 14,0(,1) 01-DFHEC
OI 0(1),X'80' LAST ARGUMENT 01-DFHEC
L 15,=V(DFHEI1) 01-DFHEC
BALR 14,15 INVOKE EXEC INTERFACE 01-DFHEC
***********************************************************************
MVC OUTAREA(13),MSG2
* EXEC CICS SEND TEXT FROM(OUTAREA) LENGTH(13) FREEKB ERASE
DFHECALL =X'180660000800C20000082204000020',,(______RF,OUTAREA*
),(FB_2,=Y(13))
***********************************************************************
DS 0H 01-DFHEC
LA 1,DFHEIPL 01-DFHEC
LA 14,=X'180660000800C20000082204000020' 01-DFHEC
SR 15,15 01-DFHEC
LA 0,OUTAREA 01-DFHEC
STM 14,0,0(1) 01-DFHEC
LA 14,=Y(13) 01-DFHEC
ST 14,12(,1) 01-DFHEC
OI 12(1),X'80' LAST ARGUMENT 01-DFHEC
L 15,=V(DFHEI1) 01-DFHEC
BALR 14,15 INVOKE EXEC INTERFACE 01-DFHEC
***********************************************************************
* EXEC CICS RETURN
DFHECALL =X'0E0800000800001000'
***********************************************************************
DS 0H 01-DFHEC
LA 1,DFHEIPL 01-DFHEC
LA 14,=X'0E0800000800001000' 01-DFHEC
ST 14,0(,1) 01-DFHEC
OI 0(1),X'80' LAST ARGUMENT 01-DFHEC
L 15,=V(DFHEI1) 01-DFHEC
BALR 14,15 INVOKE EXEC INTERFACE 01-DFHEC
***********************************************************************
*
MSG1 DC C'xxxx: ASM program invoked. ENTER TO END.'
MSG2 DC C'PROGRAM ENDED'
DFHEIRET INSERTED BY TRANSLATOR
***********************************************************************
* EPILOG CODE FOR EXEC INTERFACE *
***********************************************************************
DS 0H @BBAC81A 01-DFHEI
LA 1,CEET0014 Get address of termination list 02-CEETE
L 15,=V(CEETREC) Get address of termination rtn 02-CEETE
BALR 14,15 Call termination routine. 02-CEETE
CEET0014 DC A(*+8) Parm 1 02-CEETE
DC A(*+8+X'80000000') Parm 2 02-CEETE
DC A(0) Enc_Modifier 02-CEETE
DC A(0) Return code. 02-CEETE
CEEMAIN CSECT 02-CEETE
CEEMAIN RMODE ANY 02-CEETE
CEEMAIN AMODE ANY 02-CEETE
DC A(TESTLE) @04A 02-CEETE
DC F'0' 02-CEETE
TESTLE CSECT 02-CEETE
***********************************************************************
* END OF EPILOG CODE FOR EXEC INTERFACE *
***********************************************************************
LTORG , @BBAC81A 01-DFHEI
=V(DFHEI1)
=V(CEETREC)
=Y(43)
=Y(13)
=X'180660000800C20000082204000020'
=X'040200000800000014000040000000'
=X'0E0800000800001000'
DS 0H @F8E1S @L1C 01-DFHEI
DFHEISTG INSERTED BY TRANSLATOR
DFHEIEND INSERTED BY TRANSLATOR
*
**********************************************************************
* P R O G R A M P R O L O G A R E A 1 ( P P A 1) *
**********************************************************************
*
PPA10018 DS 0F 02-CEEPP
DFHPPA DS 0F 02-CEEPP
DC AL1(PPANL0018-*) Offset to the entry name length 02-CEEPP
DC X'CE' Language Environment Indicator. 02-CEEPP
DC B'10100000' . PPA flags 02-CEEPP
* Bit 0 0 = Internal Procedure
* 1 = External Procedure
* Bit 1 0 = Primary Entry Point
* 1 = Secondary Entry Point
* Bit 2 0 = Block doesn't have a DSA
* 1 = Block has a DSA
* Bit 3 0 = compiled object
* 1 = library object
* Bit 4 0 = sampling interrupts to library
* 1 = sampling interrupts to code
* Bit 5 0 = not an exit DSA
* 1 = Exit DSA
* Bit 6 0 = own exception model
* 1 = inherited (callers) exception model
* Bit 7 Reserved
DC X'00' Member flags 02-CEEPP
DC A(PPA20018) Addr of Compile Unit Block (PPA2) 02-CEEPP
DC A(0) 02-CEEPP
DC A(0) Data Descriptors for this entry point 02-CEEPP
DS 0H 02-CEEPP
PPANL0018 DC AL2(6) . Length of Entry Point Name 02-CEEPP
DC CL6'TESTLE' . Entry Point Name 02-CEEPP
CEEINPL DS 0D 02-CEEPP
DC A(PPA2M0018) 02-CEEPP
DC A(CEEINPLSTST-CEEINPL) 02-CEEPP
CEEINPLSTST DS 0F 02-CEEPP
DC X'00' Control Level @01A 02-CEEPP
DC X'00' ENCLAVE=NO @01A 02-CEEPP
DC X'00' @01A 02-CEEPP
DC X'07' Number of items. @01C 02-CEEPP
DC A(PPA2M0018) . A of A(first entry point in comp unit) 02-CEEPP
DC V(CEESTART) . A(Address of CEESTART) 02-CEEPP
DC V(CEEBETBL) 02-CEEPP
DC A(15) . Memeber id 02-CEEPP
DC A(0) 02-CEEPP
DC XL4'00070000' . EXECOPS(ON), PLIST 02-CEEPP
DS 0H 02-CEEPP
*
**********************************************************************
* P R O G R A M P R O L O G A R E A 2 ( P P A 2) *
**********************************************************************
*
EXTRN CEESTART 02-CEEPP
PPA20018 DS 0F 02-CEEPP
DC AL1(15) Member ID 02-CEEPP
DC AL1(0) Sub ID 02-CEEPP
DC AL1(0) Member defined 02-CEEPP
DC AL1(1) Level of PPAx control blocks 02-CEEPP
PPA2S0018 DC A(CEESTART) A(CEESTART for this load module) 02-CEEPP
DC A(0) A(Compile Debug Information (CDI) ) 02-CEEPP
DC A(CEETIMES-PPA20018) A(Offset to time stamp) 02-CEEPP
PPA2M0018 DC A(TESTLE) . A(first entry point in comp. unit) 02-CEEPP
*
**********************************************************************
* T I M E S T A M P *
**********************************************************************
*
* Time Stamp
*,Time Stamp = 2004/06/17 08:51:00 02-CEEPP
*,Version 1 Release 1 Modification 0 02-CEEPP
CEETIMES DS 0F 02-CEEPP
DC CL4'2004' Year 02-CEEPP
DC CL2'06' Month 02-CEEPP
DC CL2'17' Day 02-CEEPP
DC CL2'08' Hours 02-CEEPP
DC CL2'51' Minutes 02-CEEPP
DC CL2'00' Seconds 02-CEEPP
DC CL2'1' Version 02-CEEPP
DC CL2'1' Release 02-CEEPP
DC CL2'0' Modification 02-CEEPP
***********************************************************************
* C O M M O N A N C H O R A R E A ( C A A ) *
***********************************************************************
***********************************************************************
***********************************************************************
LEPTRLEN EQU 4 03-CEEDN
*
CEECAA DSECT , CAA mapping 02-CEECA
(Definition of LE CAA removed)
* TERMINATE DEFINITION OF DYNAMIC STORAGE *
DFHEISTG DSECT @BBAC81A 01-DFHEI
ORG 01-DFHEI
DFHEIEND DS 0X END OF DYNAMIC STORAGE @BBAC81A 01-DFHEI
END