bdfp1m2jProgramming Concepts and Reference

DBSETK-Setting Up a Key in a Key List

Use this macro to set up a key list. See Specifying Logical Records (LRECs) Using Keys for more information about key lists.

Format




Note:
Parameters can be entered as labels, registers, or immediate values as described in the following section. (Immediate values are assumed to be decimal unless otherwise specified.) For example:

 Label 
DIS=EBW000

 Register 
DIS=R5

 Immediate value 
DIS=I/16

BASE=basereg
specifies the base address of the key list, where basereg is a register that contains the address. If you do not specify this parameter, it is assumed that the register with addressability to SW01SR is set up so that the SW01SR DSECT overlays the key to be updated.

KEYNUM=keynum
specifies the number of the key that you are setting up, where keynum is the label of an area, a register, or an immediate value that contains a number from 1-180, depending on the type of key list. See Specifying Logical Records (LRECs) Using Keys for more information about key lists.

DIS=displacement
specifies the displacement of the key field in the LREC from the start of the LREC, where displacement is the label of an area, a register, or an immediate value that contains the displacement in bytes. For example, if the LREC is a variable-length LREC and you want to specify the LREC ID as the key field, the value is 2. The maximum displacement you can specify with this macro is 255.

LEN=length
specifies the length of the key field in the LREC, where length is the label of an area, a register, or an immediate value that contains the length in bytes. For example, if you want to specify the LREC ID as the key field, the value is 1. If you are using a mask field, length must be 1.

MSK=mask
specifies a mask value or 1-byte search argument, where mask is the label of an area, a register, or an immediate value that contains a 1-byte mask or a 1-byte search argument.

SEA=searchaddr
specifies a search argument, where searchaddr is the label of an area that contains the search argument or a register that contains the address of the search argument.

CON=condition
specifies the condition that must exist for the match to be successful, where condition is the label of an area, a register, or an immediate value that contains the value. Use one of the following values if you specify the #DF_CONST, #DF_CHAR, or #DF_PACKED value for the ID1 parameter:

#DF_GT
specifies that the LREC key field is greater than the search argument. The corresponding hexadecimal value is X'20'.

#DF_GE
specifies that the LREC key field is greater than or equal to the search argument. The corresponding hexadecimal value is X'40'.

#DF_EQ
specifies that the LREC key field is equal to the search argument. The corresponding hexadecimal value is X'70'.

#DF_NE
specifies that the LREC key field is not equal to the search argument. The corresponding hexadecimal value is X'80'.

#DF_LE
specifies that the LREC key field is less than or equal to the search argument. The corresponding hexadecimal value is X'B0'.

#DF_LT
specifies that the LREC key field is less than the search argument. The corresponding hexadecimal value is X'D0'.

Use one of the following values if you specify the #DF_MASK value for the ID1 parameter:

#DF_NM
specifies that the result is not mixed ones and zeros (that is, all zeros or all ones are found). The corresponding hexadecimal value is X'10'.

#DF_NO
specifies that the result is not all ones. The corresponding hexadecimal value is X'40'.

#DF_Z
specifies that the result is all zeros. The corresponding hexadecimal value is X'70'.

#DF_NZ
specifies that the result is not all zeros. The corresponding hexadecimal value is X'80'.

#DF_M
specifies that the result is mixed ones and zeros. The corresponding hexadecimal value is X'B0'.

#DF_O
specifies that the result is all ones. The corresponding hexadecimal value is X'E0'.

ID1=optbyte1
specifies the settings for the first option byte, where optbyte1 is the label of an area, a register, or an immediate value that contains the indicators for the first option byte. Use one or more of the following values:

#DF_DOWN
specifies that the subfile is DOWN organized on this key field (bit 0 = 1).

#DF_UP
specifies that the subfile is UP organized on this key field (bit 1 = 1).

#DF_KEYS
specifies that you want to use default keys (bit 2 = 1).

#DF_USR
specifies the userLREC portion of an extended LREC (bit 3 = 1).

#DF_CONST
specifies that the MSK parameter contains a 1-byte search argument (bit 4 = 1).

#DF_PACKED
specifies that the search argument is a variable-length packed string (bit 5 = 1).

#DF_MASK
specifies that the MSK parameter contains a 1-byte mask (bit 6 = 1).

#DF_NOORG
specifies that the subfile is not organized on this key field. This value is equated to X'00'.

#DF_CHAR
specifies that the search argument is a variable-length character string. This value is equated to X'00'.

ID2=optbyte2
specifies either a Boolean connector or a global modification operation, where optbyte2 is the label of an area, a register, or an immediate value that contains the indicators for the second option byte.

Use one of the following values for a Boolean connector:

#DF_OR
specifies the OR connector (bit 0 = 1).

#DF_AND
specifies the AND connector (bit 1 = 1).

#DF_ORIF
specifies the ORIF connector (bit 4 = 1).

#DF_ANDIF
specifies the ANDIF connector (bit 5 = 1).

Use one of the following values for a global modification operation:

#DF_MVI
moves the value contained in SW01MSK into the LREC at the displacement specified by SW01DIS. The corresponding hexadecimal value is X'04'.

#DF_MVC
moves the character string whose address is in SW01SEA into the LREC, starting at the displacement specified by SW01DIS for the length contained in SW01LEN. The corresponding hexadecimal value is X'08'.

#DF_FILL
propagates the character contained in SW01MSK into the LREC, starting at the displacement specified by SW01DIS for the length contained in SW01LEN. The corresponding hexadecimal value is X'0C'.

#DF_OI
performs an OR-Immediate (OI) operation on the byte in the LREC at the displacement in SW01DIS by using the value specified in SW01MSK. The corresponding hexadecimal value is X'10'.

#DF_OC
performs an OR-Character (OC) operation in the LREC beginning on the byte whose displacement is specified in SW01DIS for a length given in SW01LEN by using the value whose address is given in SW01SEA. The corresponding hexadecimal value is X'14'.

#DF_NI
performs an AND-Immediate (NI) operation on the byte in the LREC at the displacement in SW01DIS by using the value specified in SW01MSK. The corresponding hexadecimal value is X'18'.

#DF_NC
performs an AND-Character (NC) operation in the LREC beginning on the byte whose displacement is specified in SW01DIS for a length given in SW01LEN by using the value whose address is given in SW01SEA. The corresponding hexadecimal value is X'1C'.

#DF_XI
performs an Exclusive OR-Immediate (XI) operation on the byte in the LREC at the displacement in SW01DIS by using the value specified in SW01MSK. The corresponding hexadecimal value is X'20'.

#DF_XC
performs an Exclusive OR-Character (XC) operation in the LREC beginning on the byte whose displacement is specified in SW01DIS for a length given in SW01LEN by using the value whose address is given in SW01SEA. The corresponding hexadecimal value is X'24'.

#DF_ADD
adds the fullword value whose address is in SW01SEA to the fullword value in the LREC whose displacement is specified by SW01DIS. The corresponding hexadecimal value is X'28'.

#DF_AH
adds the halfword value whose address is in SW01SEA to the halfword value in the LREC whose displacement is specified by SW01DIS. The corresponding hexadecimal value is X'2C'.

#DF_SUB
subtracts the fullword value whose address is in SW01SEA to the fullword value in the LREC whose displacement is specified by SW01DIS. The corresponding hexadecimal value is X'30'.

#DF_SH
subtracts the halfword value whose address is in SW01SEA to the halfword value in the LREC whose displacement is specified by SW01DIS. The corresponding hexadecimal value is X'34'.

#DF_CNT
increments a fullword counter whose address is in SW01SEA. The application is responsible for initializing the counter before the global modification operation. The corresponding hexadecimal value is X'38'.

#DF_CTH
increments a halfword counter whose address is in SW01SEA. The application is responsible for initializing the counter before the global modification operation. The corresponding hexadecimal value is X'3C'.

#DF_SUM
adds the fullword value in the LREC at the displacement specified in SW01DIS to the fullword sum whose address is in SW01SEA. The sum must be initialized before the global modification operation. The corresponding hexadecimal value is X'40'.

#DF_SMH
adds the halfword value in the LREC at the displacement specified in SW01DIS to the halfword sum whose address is in SW01SEA. The sum must be initialized before the global modification operation. The corresponding hexadecimal value is X'44'.

#DF_MAX
finds the maximum value of the fullword value in the LREC at the displacement specified by SW01DIS and the current fullword maximum whose address is in SW01SEA. The new maximum value is stored at the address in SW01SEA. The value in SW01SEA does not have to be initialized before the global modification operation. The corresponding hexadecimal value is X'48'.

#DF_MXH
finds the maximum value of the halfword value in the LREC at the displacement specified by SW01DIS and the current halfword maximum whose address is in SW01SEA. The new maximum value is stored at the address in SW01SEA. The value in SW01SEA does not have to be initialized before the global modification operation. The corresponding hexadecimal value is X'4C'.

#DF_MIN
finds the minimum value of the fullword value in the LREC at the displacement specified by SW01DIS and the current fullword minimum whose address is in SW01SEA. The new minimum value is stored at the address in SW01SEA. The value in SW01SEA does not have to be initialized before the global modification operation. The corresponding hexadecimal value is X'50'.

#DF_MNH
finds the minimum value of the halfword value in the LREC at the displacement specified by SW01DIS and the current halfword minimum whose address is in SW01SEA. The new minimum value is stored at the address in SW01SEA. The value in SW01SEA does not have to be initialized before the global modification operation. The corresponding hexadecimal value is X'54'.

Entry Requirements

The SW01SR DSECT must be addressable by a register without a suffix. If you specify the BASE parameter, the SW01SR DSECT must be addressable without a suffix by the register passed to the BASE parameter.

Normal Return

None.

Error Return

None.

Programming Considerations

Examples

See Using a Key List with the DBSETK Macro for an example of using the DBSETK macro.

Related Macros

DBKEY-Activate a Key List.