Question & Answer
Question
Now that we are on COBOL 6, our SCLM language definition from COBOL 4 doesn't work. How do we fix it?
Cause
- with COBOL V5 and V6.1, there was no separate SYSDEBUG side file. With COBOL V6.2, though, the SYSDEBUG side file is back. If the FLMALLOC for the SYSDEBUG was removed for V5.1, V5.2 or V6.1, it needs to be replaced.
- COBOL V5 and V6 have several ddnames that didn't exist in COBOL V4. You need to add the new ddnames with FLMALLOC statements.
If the ddnames are not updated correctly, one of the following errors might occur:
Abend C03000 hex occurred processing command 'FLMCMD '.
or
FLM07011 - ERROR ALLOCATING TEMPORARY DATA SET FOR TRANSLATOR: IBM COMPILER
DATA SET NUMBER: 5 CODE: 0
or
IGYCB7104-U Internal error while compiling function....
or
IGYOS4081-U DSNH005I DSNHPSRV FILE "SLxxxxxx " NO MEMBER NAME SPECIFIED
or
IEC212I 414-08,IGG0201B,jjjjjjjj,BUILD0,xxxxxxxx,uuuu,temp.data.set.name
Answer
Changes to all COBOL language definitions
Add the new required ddnames to the COBOL step of the language definition. The ddnames are documented here: Enterprise COBOL Programming Guide
Review the OPTIONS in FLMTRNSL statement, or in the data set specified by the SYSOPTF ddname. Some options no longer apply. For example, if you use option LIB, the following message is issued:
IGYOS4090-I The "LIB" option specification is no longer required.
COBOL library processing is always in effect.
Changes to COBOL language definitions with PORDER=1
If you are using PORDER=1 in the FLMTRNSL statement for IGYCRCTL, you need to add FLMALLOC statements for the new ddnames.
Here is a snippet of a language definition for COBOL V6 with PORDER=1 that includes the FLMALLOC statements:
FLMTRNSL CALLNAM='COBOL 6 COMPILER', C
FUNCTN=BUILD, C
COMPILE=IGYCRCTL, C
VERSION=6.3, C
DSNAME=COBOL.V6R3M0.SIGYCOMP, C
GOODRC=0, C
PORDER=1, C
OPTIONS=(XREF(FULL),APOST,NODYNAM,LIST,NONUMBER,NOSEQ)
*
* DDNAME ALLOCATION
*
FLMALLOC IOTYPE=O,DDNAME=SYSLIN,KEYREF=OBJ, C
RECNUM=5000,DFLTTYP=OBJ
*
FLMALLOC IOTYPE=I,DDNAME=SYSLIB,KEYREF=SINC
*
FLMALLOC IOTYPE=S,DDNAME=SYSIN,KEYREF=SINC,RECNUM=2000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT1,RECNUM=5000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT2,RECNUM=5000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT3,RECNUM=5000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT4,RECNUM=5000
*
FLMALLOC IOTYPE=A,DDNAME=SYSTERM
FLMCPYLB NULLFILE
*
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000, C
DDNAME=SYSUT5
*
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000, C
DDNAME=SYSUT6
*
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000, C
DDNAME=SYSUT7
*
FLMALLOC IOTYPE=A,DDNAME=SYSADATA
FLMCPYLB NULLFILE
*
FLMALLOC IOTYPE=A,DDNAME=SYSPUNCH
FLMCPYLB NULLFILE
*
FLMALLOC IOTYPE=A,DDNAME=SYSJAVA
FLMCPYLB NULLFILE
*
FLMALLOC IOTYPE=A,DDNAME=SYSDEBUG
FLMCPYLB NULLFILE
*
FLMALLOC IOTYPE=W,DDNAME=SYSMDECK,RECNUM=50000,RECFM=FB, C
LRECL=80
*
FLMALLOC IOTYPE=A,DDNAME=DBRMLIB
FLMCPYLB NULLFILE
*
FLMALLOC IOTYPE=A,DDNAME=SYSOPTF
FLMCPYLB NULLFILE
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT8, C
RECFM=FB,LRECL=80,RECNUM=50000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT9, C
RECFM=FB,LRECL=80,RECNUM=50000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT10, C
RECFM=FB,LRECL=80,RECNUM=50000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT11, C
RECFM=FB,LRECL=80,RECNUM=50000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT12, C
RECFM=FB,LRECL=80,RECNUM=50000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT13, C
RECFM=FB,LRECL=80,RECNUM=50000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT14, C
RECFM=FB,LRECL=80,RECNUM=50000
*
FLMALLOC IOTYPE=W,DDNAME=SYSUT15, C
RECFM=FB,LRECL=80,RECNUM=50000
*
FLMALLOC IOTYPE=O,DDNAME=SYSPRINT,KEYREF=LIST, C
RECFM=FBA,LRECL=133,RECNUM=50000,PRINT=Y,DFLTTYP=LIST
Changes to COBOL language definitions with PORDER=3
If you are using PORDER=3 in the FLMTRNSL statement for IGYCRCTL, you need to update the statement to make sure the ddnames are presented to the compiler in the correct order.
Here is a snippet of a language definition for COBOL V6 with PORDER=3 that includes the FLMALLOC statements:
FLMTRNSL CALLNAM='COBOL 6 COMPILER', C
FUNCTN=BUILD, C
COMPILE=IGYCRCTL, C
GOODRC=4, C
PORDER=3, C
VERSION=6.3, C
DSNAME=COBOL.V6R3M0.SIGYCOMP, C
OPTIONS=(XREF(FULL),APOST,NODYNAM,LIST,NONUMBER,NOSEQ)
*
* DDNAME ALLOCATION (USING DDNAMELIST SUBSTITUTION)
*
* 1 (* SYSLIN *)
FLMALLOC IOTYPE=O,KEYREF=OBJ,RECFM=FB,LRECL=80, C
RECNUM=5000,DFLTTYP=OBJ
* 2 (* N/A *)
FLMALLOC IOTYPE=N
* 3 (* N/A *)
FLMALLOC IOTYPE=N
* 4 (* SYSLIB *)
FLMALLOC IOTYPE=I,KEYREF=SINC,DDNAME=SYSLIB
* 5 (* SYSIN *)
FLMALLOC IOTYPE=S,KEYREF=SINC,RECNUM=2000
* 6 (* SYSPRINT *)
FLMALLOC IOTYPE=O,KEYREF=LIST,RECFM=FBA,LRECL=133, C
RECNUM=250000,PRINT=Y,DFLTTYP=LIST
* 7 (* SYSPUNCH *)
FLMALLOC IOTYPE=A
FLMCPYLB NULLFILE
* 8 (* SYSUT1 *)
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000
* 9 (* SYSUT2 *)
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000
* 10 (* SYSUT3 *)
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000
* 11 (* SYSUT4 *)
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000
* 12 (* SYSTERM *)
FLMALLOC IOTYPE=A,DDNAME=SYSTERM
FLMCPYLB NULLFILE
* 13 (* SYSUT5 *)
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000
* 14 (* SYSUT6 *)
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000
* 15 (* SYSUT7 *)
FLMALLOC IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=50000
* 16 (* SYSADATA *)
FLMALLOC IOTYPE=A
FLMCPYLB NULLFILE
* 17 (* SYSJAVA *)
FLMALLOC IOTYPE=A
FLMCPYLB NULLFILE
* 18 (* SYSDEBUG *)
FLMALLOC IOTYPE=A
FLMCPYLB NULLFILE
* 19 (* SYSMDECK *)
FLMALLOC IOTYPE=W,DDNAME=SYSMDECK,RECNUM=50000,RECFM=FB, C
LRECL=80
* 20 (* DBRMLIB *)
FLMALLOC IOTYPE=A
FLMCPYLB NULLFILE
* 21 (* SYSOPTF *)
FLMALLOC IOTYPE=A
FLMCPYLB NULLFILE
* 22 (* SYSUT8 *)
FLMALLOC IOTYPE=W,DDNAME=SYSUT8, C
RECFM=FB,LRECL=80,RECNUM=50000
* 23 (* SYSUT9 *)
FLMALLOC IOTYPE=W,DDNAME=SYSUT9, C
RECFM=FB,LRECL=80,RECNUM=50000
* 24 (* SYSUT10 *)
FLMALLOC IOTYPE=W,DDNAME=SYSUT10, C
RECFM=FB,LRECL=80,RECNUM=50000
* 25 (* SYSUT11 *)
FLMALLOC IOTYPE=W,DDNAME=SYSUT11, C
RECFM=FB,LRECL=80,RECNUM=50000
* 26 (* SYSUT12 *)
FLMALLOC IOTYPE=W,DDNAME=SYSUT12, C
RECFM=FB,LRECL=80,RECNUM=50000
* 27 (* SYSUT13 *)
FLMALLOC IOTYPE=W,DDNAME=SYSUT13, C
RECFM=FB,LRECL=80,RECNUM=50000
* 28 (* SYSUT14 *)
FLMALLOC IOTYPE=W,DDNAME=SYSUT14, C
RECFM=FB,LRECL=80,RECNUM=50000
* 29 (* SYSUT15 *)
FLMALLOC IOTYPE=W,DDNAME=SYSUT15, C
RECFM=FB,LRECL=80,RECNUM=50000
Use PORDER=3 for SCLM Language types that invoke an external CICS translator and the COBOL compiler. The external translator processes members and creates output to be passed to the compiler. In order to pass output to the COBOL compiler, code the FLMTRNSL macro for the COBOL compiler with PORDER=3. PORDER=3 causes the "compiler option list" followed by a "DDNAME substitution list" to be passed to the compiler.
Changes to Binder Language Definitions
The binder no longer allows PDS for SYSLMOD ddname. PDSEs are required. If you get error message
IEW2606S 4B39 MODULE INCORPORATES VERSION 3 PROGRAM OBJECT FEATURES AND CANNOT BE SAVED IN LOAD MODULE FORMAT.
on the binder step, update the IEWL language definition to use PDSE for SYSLMOD. Make sure the FLMALLOC statement includes both DSNTYPE=LIBRARY and CATLG=Y.
FLMALLOC IOTYPE=P,KEYREF=LOAD,RECFM=U,LRECL=0, C
RECNUM=500,DSNTYPE=LIBRARY,CATLG=Y
Was this topic helpful?
Document Information
Modified date:
20 July 2021
UID
dwa1247614