Example macros
These examples show the use of the data conversion macros.
Figure 1 shows an example of a record layout for a file called VSAM99. The key is offset 0 for length 6, and the record contains no redefinition.
02 FILEREC.
03 STAT PIC X.
03 NUMB PIC X(6).
03 NAME PIC X(20).
03 ADDRX PIC X(20).
03 PHONE PIC X(8).
03 DATEX PIC X(8).
03 AMOUNT PIC X(8).
03 COMMENT PIC X(9).
03 COUNTER1 PIC 9999 USAGE COMP-4.
03 COUNTER2 PIC 9999 USAGE COMP-4.
03 ADDLCMT PIC X(30).
Figure 2 gives a full set of conversion macros for file VSAM99. Figure 3 shows the same conversion expressed more briefly, by combining adjoining fields of the same type.
DFHCNV TYPE=INITIAL,CLINTCP=437,SRVERCP=037
DFHCNV TYPE=ENTRY,RTYPE=FC,RNAME=VSAM99
DFHCNV TYPE=KEY
DFHCNV TYPE=FIELD,OFFSET=0,DATATYP=CHARACTER,DATALEN=6,LAST=YES
DFHCNV TYPE=SELECT,OPTION=DEFAULT
DFHCNV TYPE=FIELD,OFFSET=00,DATATYP=CHARACTER,DATALEN=1
DFHCNV TYPE=FIELD,OFFSET=01,DATATYP=CHARACTER,DATALEN=6
DFHCNV TYPE=FIELD,OFFSET=07,DATATYP=CHARACTER,DATALEN=20
DFHCNV TYPE=FIELD,OFFSET=27,DATATYP=CHARACTER,DATALEN=20
DFHCNV TYPE=FIELD,OFFSET=47,DATATYP=CHARACTER,DATALEN=8
DFHCNV TYPE=FIELD,OFFSET=55,DATATYP=CHARACTER,DATALEN=8
DFHCNV TYPE=FIELD,OFFSET=63,DATATYP=CHARACTER,DATALEN=8
DFHCNV TYPE=FIELD,OFFSET=71,DATATYP=CHARACTER,DATALEN=9
DFHCNV TYPE=FIELD,OFFSET=80,DATATYP=BINARY,DATALEN=2
DFHCNV TYPE=FIELD,OFFSET=82,DATATYP=BINARY,DATALEN=2
DFHCNV TYPE=FIELD,OFFSET=84,DATATYP=CHARACTER,DATALEN=30,LAST=YES
DFHCNV TYPE=FINAL
DFHCNV TYPE=INITIAL,CLINTCP=437,SRVERCP=037
DFHCNV TYPE=ENTRY,RTYPE=FC,RNAME=VSAM99
DFHCNV TYPE=KEY
DFHCNV TYPE=FIELD,OFFSET=0,DATATYP=CHARACTER,DATALEN=6,LAST=YES
DFHCNV TYPE=SELECT,OPTION=DEFAULT
DFHCNV TYPE=FIELD,OFFSET=00,DATATYP=CHARACTER,DATALEN=80
DFHCNV TYPE=FIELD,OFFSET=80,DATATYP=BINARY,DATALEN=4
DFHCNV TYPE=FIELD,OFFSET=84,DATATYP=CHARACTER,DATALEN=30,LAST=YES
DFHCNV TYPE=FINAL
Note: Be careful when combining adjoining fields, even if they
are of the same data type. Do not combine NUMERIC fields. Do not combine
fields defined as CHARACTER, if SOSI=YES is specified for one or more
of them. Whether you can combine USERDATA fields depends on user-defined
data structures and conversion code.
Figure 4 shows a redefined record layout for file VSAM99. Figure 5 shows a set of conversion macros for the redefined record layout in Figure 4.
02 FILEREC.
03 STAT PIC X.
03 NUMB PIC X(6).
03 NAME PIC X(20).
03 ADDRX PIC X(20).
03 PHONE PIC X(8).
03 DATEX PIC X(8).
03 AMOUNT PIC X(8).
03 COMMENT PIC X(9).
03 VARINF1.
03 COUNTER1 PIC 9999 USAGE COMP-4.
03 COUNTER2 PIC 9999 USAGE COMP-4.
03 ADDLCMT PIC X(30).
03 VARINF2 REDEFINES VARINF1.
03 COUNTER1 PIC 9999 USAGE COMP-4.
03 COUNTER2 PIC 9999 USAGE COMP-4.
03 COUNTER3 PIC 9999 USAGE COMP-4.
03 COUNTER4 PIC 9999 USAGE COMP-4.
03 ADDLCMT2 PIC X(26).
DFHCNV TYPE=INITIAL
DFHCNV TYPE=ENTRY,RTYPE=FC,RNAME=VSAM99
DFHCNV TYPE=KEY
DFHCNV TYPE=FIELD,OFFSET=0,DATATYP=CHARACTER,DATALEN=6,LAST=YES
*
* If offset 00 is a character 'X' use the following
* conversion definitions:
*
DFHCNV TYPE=SELECT,OPTION=COMPARE,OFFSET=00,DATA='X'
DFHCNV TYPE=FIELD,OFFSET=00,DATATYP=CHARACTER,DATALEN=80
DFHCNV TYPE=FIELD,OFFSET=80,DATATYP=BINARY,DATALEN=4
DFHCNV TYPE=FIELD,OFFSET=84,DATATYP=CHARACTER,DATALEN=30,LAST=YES
*
* Otherwise use the following (default)
* conversion definitions
*
DFHCNV TYPE=SELECT,OPTION=DEFAULT
DFHCNV TYPE=FIELD,OFFSET=00,DATATYP=CHARACTER,DATALEN=80
DFHCNV TYPE=FIELD,OFFSET=80,DATATYP=BINARY,DATALEN=8
DFHCNV TYPE=FIELD,OFFSET=88,DATATYP=CHARACTER,DATALEN=26,LAST=YES
DFHCNV TYPE=FINAL
Figure 6 shows user-defined conversion tables, EBTOAS and ASTOEB, illustrating how they are preceded with DFHCNV macros in the source that is submitted to the assembler.
*
LABL1 DFHCNV TYPE=INITIAL,CLINTCP=437,SRVERCP=037
*
DFHCNV TYPE=ENTRY,RTYPE=FC,RNAME=VSAM80
DFHCNV TYPE=KEY
DFHCNV TYPE=FIELD,OFFSET=0,DATATYP=BINARY,DATALEN=2
DFHCNV TYPE=FIELD,OFFSET=2,DATATYP=CHARACTER,DATALEN=4, X
LAST=YES
LABLX DFHCNV TYPE=SELECT,OPTION=COMPARE,OFFSET=6,XDATA='C1C2C3'
DFHCNV TYPE=FIELD,OFFSET=0,DATATYP=BINARY,DATALEN=2
DFHCNV TYPE=FIELD,OFFSET=2,DATATYP=CHARACTER,DATALEN=4
DFHCNV TYPE=FIELD,OFFSET=9,DATATYP=CHARACTER,DATALEN=8, X
LAST=YES
⋮
DFHCNV TYPE=ENTRY,RTYPE=TS,RNAME=ABCD
DFHCNV TYPE=SELECT,OPTION=DEFAULT
DFHCNV TYPE=FIELD,OFFSET=0,DATATYP=CHARACTER,DATALEN=40
DFHCNV TYPE=FIELD,OFFSET=40,DATATYP=BINARY,DATALEN=4, X
LAST=YES
LABLN DFHCNV TYPE=FINAL
*
* EXAMPLE OF A USER-DEFINED CONVERSION TABLE EBCDIC to ASCII
EBTOAS DC XL16'000102030405060708090A0B0C0D0E0F'
DC XL16'101112131415161718191A1B1C1D1E1F'
DC XL16'202122232425262728292A2B2C2D2E2F'
DC XL16'303132333435363738393A3B3C3D3E3F'
DC XL16'404142434445464748494A4B4C4D4E4F'
DC XL16'505152535455565758595A5B5C5D5E5F'
DC XL16'606162636465666768696A6B6C6D6E6F'
DC XL16'707172737475767778797A7B7C7D7E7F'
DC XL16'80C1C2C3C4C5C6C7C8C98A8B8C8D8E8F'
DC XL16'90D1D2D3D4D5D6D7D8D99A9B9C9D9E9F'
DC XL16'A0A1E2E3E4E5E6E7E8E9AAABACADAEAF'
DC XL16'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'
DC XL16'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF'
DC XL16'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'
DC XL16'E0E1E2A3E4E5E6E7E8E9EAEBECEDEEEF'
DC XL16'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF'
*
* EXAMPLE OF A USER-DEFINED CONVERSION TABLE ASCII to EBCDIC
*
ASTOEB DC XL16'000102030405060708090A0B0C0D0E0F'
DC XL16'101112131415161718191A1B1C1D1E1F'
DC XL16'202122232425262728292A2B2C2D2E2F'
DC XL16'303132333435363738393A3B3C3D3E3F'
DC XL16'404142434445464748494A4B4C4D4E4F'
DC XL16'505152535455565758595A5B5C5D5E5F'
DC XL16'606162636465666768696A6B6C6D6E6F'
DC XL16'707172737475767778797A7B7C7D7E7F'
DC XL16'808182838485868788898A8B8C8D8E8F'
DC XL16'909192939495969798999A9B9C9D9E9F'
DC XL16'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF'
DC XL16'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'
DC XL16'C0818283848586878889CACBCCCDCECF'
DC XL16'D0919293949596979899DADBDCDDDEDF'
DC XL16'E0E1A2A3A4A5A6A7A8A9EAEBECEDEEEF'
DC XL16'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF'
END DFHCNVBA