DSECT Utility options
The options that you can use to control the generation of the C or C++ structure are as follows. You can specify them in uppercase or lowercase, separating them by spaces or commas.
| DSECT Utility Option | Abbreviated Name | IBM-supplied Default |
|---|---|---|
| SECT[(name,…)] | None | SECT(ALL) |
| BITF0XL | NOBITF0XL | BITF | NOBITF | NOBITF0XL |
| COMDXGN | NOCOMDXGN | COMD | NOCOMD | NOCOMDXGN |
| COMMENT[(delim,…)] | NOCOMMENT | COM | NOCOM | COMMENT |
| DECIMAL | NODECIMAL | None | NODECIMAL |
| DEFSUB | NODEFSUB | DEF | NODEF | DEFSUB |
| EQUATE[(suboptions,…)] | NOEQUATE | EQU | NOEQU | NOEQUATE |
| HDRSKIP[(length)] | NOHDRSKIP | HDR(length) | NOHDR | NOHDRSKIP |
| INDENT[(count)] | NOINDENT | IN(count) | NOIN | INDENT(2) |
| LEGACY| NOLEGACY | LEG | NOLEG | NOLEGACY |
| LOCALE(name) | NOLOCALE | LOC | NOLOC | NOLOCALE |
| OPTFILE(filename) | NOOPTFILE | OPTF | NOOPTF | NOOPTFILE |
| PPCOND[(switch)] | NOPPCOND | PP(switch) | NOPP | NOPPCOND |
| SEQUENCE | NOSEQUENCE | SEQ | NOSEQ | NOSEQUENCE |
| UNIQUE|NOUNIQUE | None | NOUNIQUE |
| UNNAME | NOUNNAMED | UNN | NOUNN | NOUNNAMED |
| OUTPUT[(filename)] | OUT[(filename)] |
OUTPUT
(DD:EDCDSECT) |
| RECFM[(recfm)] | None | C/C++ Library defaults |
| LRECL[(lrecl)] | None | C/C++ Library defaults |
| BLKSIZE[(blksize)] | None | C/C++ Library defaults |
| LP64 | None | NOLP64 |
SECT
DEFAULT: SECT(ALL)
The SECT option specifies the section names for which structures are produced. The section names can be either CSECT or DSECT names. They must exist in the SYSADATA file that is produced by the assembler. If you do not specify the SECT option or if you specify SECT(ALL), structures are produced for all CSECTs and DSECTs defined in the SYSADATA file, except for private code and unnamed DSECTs.
If the High Level Assembler is run with the BATCH option, only the section names that are defined within the first program can be specified on the SECT option. If you specify SECT(ALL) (or select it by default), only the sections from the first program are selected.
BITF0XL | NOBITF0XL
DEFAULT: NOBITF0XL
FLAGFLD DS F
ORG FLAGFLD+0
B1FLG1 DC 0XL(B'10000000')'00' Definition for bit 0 of 1st byte
B1FLG2 DC 0XL(B'01000000')'00' Definition for bit 1 of 1st byte
B1FLG3 DC 0XL(B'00100000')'00' Definition for bit 2 of 1st byte
B1FLG4 DC 0XL(B'00010000')'00' Definition for bit 3 of 1st byte
B1FLG5 DC 0XL(B'00001000')'00' Definition for bit 4 of 1st byte
B1FLG6 DC 0XL(B'00000100')'00' Definition for bit 5 of 1st byte
B1FLG7 DC 0XL(B'00000010')'00' Definition for bit 6 of 1st byte
B1FLG8 DC 0XL(B'00000001')'00' Definition for bit 7 of 1st byte
ORG FLAGFLD+1
B2FLG1 DC 0XL(B'10000000')'00' Definition for bit 0 of 2nd byte
B2FLG2 DC 0XL(B'01000000')'00' Definition for bit 1 of 2nd byte
B2FLG3 DC 0XL(B'00100000')'00' Definition for bit 2 of 2nd byte
B2FLG4 DC 0XL(B'00010000')'00' Definition for bit 3 of 2nd byteTM FLAGFLD,L'B1FLG1 Test bit 0 of byte 1
Bx label Branch if set/not setWhen you specify the BITF0XL option, the length attribute of the following fields provides the mapping for the bits within the flag bytes.
- The field does not have a duplication factor of zero.
- The field has a length 1 - 4 bytes and does not have a bit length.
- The field does not have more than one nominal value.
- Has a Type attribute of
B,C, orX. - Has the same offset as the field (or consecutive fields have overlapping offsets).
- Has a duplication factor of zero.
- Does not have more than one nominal value.
- Has a length attribute 1 - 255 and does not have a bit length.
- The length attribute maps 1 bit or consecutive bits; for example, B'10000000' or B'11000000', but not B'10100000'.
COMDXGN | NOCOMDXGN
DEFAULT: NOCOMDXGN
#define
directives. All comments that are generated in the DSECT utility output are regular C style comments
by default. The DOXYGEN style comment has the following
format:/**< comment text */struct IAZJSAB {
unsigned char JSABID[4]; /**< JSAB ID */
void *JSABNEXT; /**< JSAB CHAIN FIELD */
…
/* Values for field "JSABVERS" */
#define JSABVRS1 1 /**< JSAB version 1 @Z21LSYM */
#define JSABVRS2 2 /**< JSAB version 2 @Z21LSYM */
#define JSABVRSN 2 /**< Current JSAB version @Z21LSYM */
In certain situations, a comment might be chopped and shifted to accommodate extra 2 characters that are needed for the DOXYGEN style comment.
COMMENT | NOCOMMENT
DEFAULT: COMMENT
The COMMENT option specifies whether the comments on the line where the field is defined will be placed in the structure produced.
If you specify the COMMENT option without a delimiter, the entire comment is placed in the structure.
If you specify a delimiter, any comments that follow the delimiter are skipped and are not placed in the structure. You can remove changes that are flagged with a particular delimiter. The delimiter cannot contain embedded spaces or commas. The case of the delimiter and the comment text is not significant. You can specify up to 10 delimiters, and they can contain up to 10 characters each.
The DSECT utility might generate incorrect output for continuation comment
lines. For example, the following HLASM snippet contains a continuation empty
line:TRACK DSECT
FIELD_1 DS FL1 Comment with an empty continuation line not respected C
FIELD_2 DS FL2
FIELD_N DS FL1
END 
The output is generated
incorrectly:struct track {
char field_1; /* Comment with empty continuation line not respected */
short int field_1; /* Comment with empty continuation line not respected */
char field_n;
};
To solve this issue, you can either remove the
continuation character C in column 72 or continue the comment on the empty line
starting with column 16. For
example:TRACK DSECT
FIELD_1 DS FL1 Comment with an empty continuation line not respected C
.
FIELD_2 DS FL2
FIELD_N DS FL1 
The output is generated
correctly:char field_1; /* Comment with an empty continuation line not respected */
short int field_2;
char field_n;
};
Only one line of comment is preserved in DSECT output.
Continuation comment lines are not recommended.
DECIMAL | NODECIMAL
DEFAULT: NODECIMAL
The DECIMAL option instructs the DSECT utility to convert all SYSATADA DC/DS records of type P to the function type macro: _dec__var(w,0). w Is the number of digits and it is computed by taking the byte size of the P-type data, multiplying it by two, and subtracting one from the result [in other words, (byte_size * 2)-1]. The byte size of the P type data is found in the SYSADATA DC/DS record. If a SYSADATA DC/DS record of type P is interpreted to be part of a union, then the DSECT utility maps it to the function type macro: _dec__uvar(w,0). w Still represents the number of digits. The _dec__uvar macro expands to a decimal data type for C and a unsigned character array for C++. This is necessary because decimal support in C++ is implemented by a decimal class. C++ does not allow a class with constructors, or deconstructors, to be part of a union, hence in the case of C++ such decimal data must be mapped to a character array of the same byte size.
The precision will always be left as zero since there is no way to figure out its value from the DC/DS SYSADATA record. The zero will be output, rather than just the digit size (that is, _dec__var(w,0) rather than just _dec__var(w,))) to allow you to easily edit the DSECT utility output and adjust for the needed precision. Do not remove the zero as it causes compilation errors because the function type macros can no longer be expanded.
#ifndef __decimal_found
#define __decimal_found
#ifdef __cplusplus
#define _dec__var(w,p) decimal<n>
#define _dec_uvar(w,p) _decchar##w
#include <idecimal.hpp>
typedef char _decchar1[1];
typedef char _decchar2[2];
typedef char _decchar3[2];
typedef char _decchar4[3];
typedef char _decchar5[3];
typedef char _decchar6[4];
typedef char _decchar7[4];
typedef char _decchar8[5];
typedef char _decchar9[5];
typedef char _decchar10[6];
typedef char _decchar11[6];
typedef char _decchar12[7];
typedef char _decchar13[7];
typedef char _decchar14[8];
typedef char _decchar15[8];
typedef char _decchar16[9];
typedef char _decchar17[9];
typedef char _decchar18[10];
typedef char _decchar19[10];
typedef char _decchar20[[11];
typedef char _decchar21[11];
typedef char _decchar22[12];
typedef char _decchar23[12];
typedef char _decchar24[13];
typedef char _decchar25[13];
typedef char _decchar26[14];
typedef char _decchar27[14];
typedef char _decchar28[15];
typedef char _decchar29[15];
typedef char _decchar30[16];
typedef char _decchar31[16];
#else
#define _dec__var(w,p) decimal(n,p)
#define _dec_uvar(w,p) decimal(w,p)
#include <decimal.h>
#endif
#endifThis code forces the inclusion of the necessary header files, depending on whether the C or C++ compiler is used. It will also force the _dec__var and _dec_uvar types, which are outputted by the DSECT utility, to be mapped to the appropriate C or C++ decimal type. The definition of the macro __decimal_found is used to guard against the redefinition of macros if several DSECT utility output files are compiled together.
If the default NODECIMAL option is used, then the DSECT utility converts all P type DC/DS
SYSATADA records to character arrays of the same byte size as the P type data, as is the existing
behavior; for example, 171 (a value of PL3) will map to an unsigned
char[3].
DEFSUB | NODEFSUB
DEFAULT: DEFSUB
The DEFSUB option specifies
whether #define directives will be built for fields that are part of a union or
substructure.
#define directive is written at the end of the structure to allow
the field name to be specified directly as in the following example.
struct dsect_name {
int field1;
struct {
int _subfld1;
short int _subfld2;
unsigned char _subfld3[4];
} field2;
}
#define subfld1 field2._subfld1
#define subfld2 field2._subfld2
#define subfld3 field2._subfld3If the DEFSUB option is in effect, the fields that are prefixed by an underscore might match the name of another field within the structure. No warning is issued.
EQUATE | NOEQUATE
DEFAULT: NOEQUATE
The EQUATE option specifies
whether the EQU statements
following a field are to be used to define bit fields to generate #define
directives, or are to be ignored.
The suboptions specify how the EQU statement is used. You can specify one or more of the suboptions, separating them by spaces or commas. If you specify more than one suboption, the EQU statements that follow a field are checked to see whether they are valid for the first suboption. If so, they are formatted according to that option. Otherwise, the subsequent suboptions are checked to see whether they are applicable.
If you specify the EQUATE option without suboptions, EQUATE(BIT) is used. If you specify NOEQUATE (or select it by default), the EQU statements that follow a field are ignored.
- BIT
- Indicates that the value for an EQU statement is used to define the bits
for a field where the field conforms to the following rules:
- The field does not have a duplication factor of zero.
- The field has a length 1 - 4 bytes and has a bit length that is a multiple of 8.
- The field does not have more than one nominal value.
- The value for the EQU statements that follow the field mask consecutive bits (for example, X'80' followed by X'40').
- The value for an EQU statement masks 1 bit or consecutive bits, for example, B'10000000' or B'11000000', but not B'10100000'.
- Where the length of the field is greater than 1 byte, the bits for the remaining bytes can be defined by providing the EQU statements for the second byte after the EQU statement for the first byte.
- The value for the EQU statement is not a relocatable value.
Example: When you specify EQUATE(BIT), the EQU statements are converted as in the following example:FLAGFLD DS H FLAG21 EQU X'80' FLAG22 EQU X'40' FLAG23 EQU X'20' FLAG24 EQU X'10' FLAG25 EQU X'08' FLAG26 EQU X'04' FLAG27 EQU X'02' FLAG28 EQU X'01' FLAG2A EQU X'80' FLAG2B EQU X'40' struct dsect_name { unsigned int flag21 : 1, flag22 : 1, flag23 : 1, flag24 : 1, flag25 : 1, flag26 : 1, flag27 : 1, flag28 : 1, flag2a : 1, flag2b : 1, : 6; } - BITL
- Indicates that the length attribute for an EQU statement is used to define the bits
for a field where the field conforms to the following rules:
- The field does not have a duplication factor of zero.
- The field has a length 1 - 4 bytes and has a bit length that is a multiple of 8.
- The field does not have more than one nominal value.
- The value that is specified for the EQU statement has the same or overlapping offset as the field.
- The length attribute for the EQU statement is in the range 1 - 255.
- The length attribute for the EQU statement masks 1 bit or consecutive bits; for example, B'10000000' or B'11000000', but not B'10100000'.
- The value for the EQU statement is a relocatable value.
Example: When you specify EQUATE(BITL), the EQU statements are converted as in the following example:BYTEFLD DS F B1FLG1 EQU BYTEFLD+0,B'10000000' B1FLG2 EQU BYTEFLD+0,B'01000000' B1FLG3 EQU BYTEFLD+0,B'00100000' B1FLG4 EQU BYTEFLD+0,B'00010000' B1FLG5 EQU BYTEFLD+0,B'00001000' B1FLG6 EQU BYTEFLD+0,B'00000100' B1FLG7 EQU BYTEFLD+0,B'00000010' B1FLG8 EQU BYTEFLD+0,B'00000001' B2FLG1 EQU BYTEFLD+1,B'10000000' B2FLG2 EQU BYTEFLD+1,B'01000000' B2FLG3 EQU BYTEFLD+1,B'00100000' B2FLG4 EQU BYTEFLD+1,B'00010000' struct dsect_name { unsigned int b1flg1 : 1, b1flg2 : 1, b1flg3 : 1, b1flg4 : 1, b1flg5 : 1, b1flg6 : 1, b1flg7 : 1, b1flg8 : 1, b2flg1 : 1, b2flg2 : 1, b2flg3 : 1, b2flg4 : 1, : 20; } - DEF
- Indicates that the EQU
statements following a field are used to build
#definedirectives to define the possible values for a field. The#definedirectives are placed after the end of the structure. The EQU statements should not specify a relocatable value.Example: When you specify EQUATE(DEF), the EQU statements are converted as in the following example:FLAGBYTE DS X FLAG1 EQU X'80' FLAG2 EQU X'20' FLAG3 EQU X'10' FLAG4 EQU X'08' FLAG5 EQU X'06' FLAG6 EQU X'01' struct dsect_name { unsigned char flagbyte; } /* Values for flagbyte field */ #define flag1 0x80 #define flag2 0x20 #define flag3 0x10 #define flag4 0x08 #define flag5 0x06 #define flag6 0x01 - DEFP
- Indicates that the EQU statements appearing before the first DSECT section generate appropriate
#definedirectives. EQU(DEFP) must be specified with EQU(DEF) or EQU(DEFS); otherwise, it is ignored.For the following code:HEX10 EQU C'10' HEX11 EQU C'11' HEX12 EQU C'12' HEX13 EQU C'13' MYDSECT DSECT WORD1 DS F WORD2 DS F- If EQU(DEFS, DEFP) is specified, the DSECT utility generates the following
code:
struct MYDSECT { int WORD1; int WORD2; }; #define HEX10 "10" #define HEX11 "11" #define HEX12 "12" #define HEX13 "13" - If EQU(DEF, DEFP) is specified, the DSECT utility generates the following
code:
struct MYDSECT { int WORD1; int WORD2; }; #define HEX10 0xF1F0 #define HEX11 0xF1F1 #define HEX12 0xF1F2 #define HEX13 0xF1F3
- If EQU(DEFS, DEFP) is specified, the DSECT utility generates the following
code:
- DEFS
- EQU(DEFS) is equivalent to EQU(DEF) with the exception of generating string literals as opposed
to hex values for EQU asm instruction with C type operand in the range of 1 - 4 bytes. EQU(DEFS) can
be specified together with other suboptions like BIT and BIFS, but not with DEF.Example: When you specify EQUATE(DEFS), the EQU statements are converted as in the following example:
MYDSECT DSECT KEYS DS CL4 KEY1 EQU C'KEY1' KEY2 EQU C'KEY2' KEY3 EQU C'KEY3' END struct mydsect { unsigned char keys; }; /* Values for field "keys" */ #define key1 "KEY1" #define key2 "KEY2" #define key3 "KEY3"
HDRSKIP | NOHDRSKIP
DEFAULT: NOHDRSKIP
The HDRSKIP option specifies that the fields within the specified number of bytes from the start of the section are to be skipped. Use this option where a section has a header that is not required in the structure produced.
The value that is specified on the HDRSKIP option indicates the number of bytes at the start of the section that are to be skipped. HDRSKIP(0) is equivalent to NOHDRSKIP.
SECTNAME DSECT
PREFIX1 DS CL4
PREFIX2 DS CL4
FIELD1 DS CL4
FIELD2 DS CL4
struct sectname {
unsigned char field1[4];
unsigned char field2[4];
}If the value specified for the HDRSKIP option is greater than the length of the section, the structure is not be produced for that section.
INDENT | NOINDENT
DEFAULT: INDENT(2)
The INDENT option specifies the number of character positions that the fields, unions, and substructures are indented. Turn off indentation by specifying INDENT(0) or NOINDENT. The maximum value that you can specify for the INDENT option is 32767.
LEGACY | NOLEGACY
DEFAULT: NOLEGACY
When the NOLEGACY option is in effect, a zero extend array is inserted into the structure to represent the fields with a duplication factor of zero. You are recommended to use the NOLEGACY option to make the C structure that is generated by DSECT utility match the layout of DSECT interpreted by HLASM.
When the LEGACY option is in effect, zero extend arrays are not inserted into the structure.
TEST DSECT
FIELD1 DS AL1
FIELD2 DS AL2
FIELD3 DS AL3
DSECTEND DS 0D
LEN EQU *-TEST
ENDWhen the NOLEGACY option is in effect, the following C structure is
generated:struct test {
unsigned char field1;
unsigned short field2;
unsigned int field3 : 24;
unsigned char _filler1[2];
__extension__ double dsectend[0];
};The size of the test structure is 8 bytes. The offset of
dsectend is also 8 bytes and there is no space that is allocated for it. The zero
extend array, which is the C/C++ language extension, is used to represent the ASM field
dsectend with the duplication factor of zero. The __extension__
keyword is required so the resulting structure can be used in any language level.struct test {
unsigned char field1;
unsigned short field2;
unsigned int field3 : 24;
unsigned char _filler1[2];
double dsectend;
};No zero extend array is generated in the structure and the ASM field
dsectend is represented by a regular structure member. The structure
test in the output is 8 bytes bigger than the one generated with NOLEGACY option in
effect.ABC DSECT
F32 DS 2X
F32A DS 0XL(B'00000010')'00'
F32B DS 0XL(B'00000001')'00'
ENDWhen the NOLEGACY option is in effect, the following C structure is
generated:struct abc {
unsigned char f32[2];
__extension__ union {
unsigned char _f32a[2];
unsigned char _f32b;
} _abc_union1[0];
};
#define f32a _abc_union1[0]._f32a
#define f32b _abc_union1[0]._f32bThe zero extend array of a union is inserted to the
structure, so that the size of the structure, abc, is 2 bytes. The
#define directives at the end of the structure are present, so
_f32a and _f32b can be accessed by the same names 'f32a' and
'f32b' respectively as before when LEGACY option is in effect.struct abc {
unsigned char f32[2];
struct {
unsigned char _f32b;
unsigned char _filler1;
} f32a;
};
#define f32b f32a._f32bNo zero extend array is generated in the structure.LOCALE | NOLOCALE
The LOCALE(name) specifies the name of a locale to be passed to
the setlocale() function. Specifying LOCALE without the
name parameter is equivalent to passing the NULL string to the
setlocale() function.
The structure that is produced contains the left and right brace, and left and right square bracket, backslash, and number sign, which have different code point values for the different code pages. When the LOCALE option is specified, and these characters are written to the output file, the code point from the LC_SYNTAX category for the specified locale is used.
The default is NOLOCALE.
You can abbreviate the option to LOC(name) or NOLOC.
LOWERCASE | NOLOWERCASE
DEFAULT: LOWERCASE>
The LOWERCASE> option specifies whether the field names within the C structure are to be converted to lowercase or left as entered. If you specify LOWERCASE>, all the field names are converted to lowercase. If you specify NOLOWERCASE, the field names are built into the structure in the case in which they were entered in the assembler section.
LP64 | NOLP64
DEFAULT: NOLP64
The equivalent of NOLP64 for the compiler is the option ILP32, which means 32-bit integer,
long, and pointer type. This is the default in the compiler as well. LP64 means
64-bit long and pointer type. LP64 and ILP32 specify the data model for the
programming language.
The LP64 option instructs the DSECT utility to generate structures for use by the programs
compiled with the LP64 option. When this option is enabled, address fields are mapped to C pointer
types (64 bits), and 64-bit integer fields are mapped to long data types. C/C++
also supports a __ptr32 qualifier for declaring pointers that are 32-bit in size,
which means that if a field is explicitly specified with a 31-bit address, it is mapped to a
__ptr32 qualified pointer.
OPTFILE | NOOPTFILE
- The lines must begin with the SECT option, and only one section name must be specified. The options following determine how the structure is produced for the specified section. The section name must only be specified once.
- The lines might contain the BITF0XL, COMMENT, DEFSUB, EQUATE, HDRSKIP, INDENT, LOWERCASE, PPCOND, and UNNAMED options, which are separated by spaces or commas. These override the options that are specified on the command line for the section.
The OPTFILE option is ignored if the SECT option is also specified on the command line.
The default is NOOPTFILE.
You can abbreviate the option to OPTF(filename) or NOOPTF.
PPCOND | NOPPCOND
DEFAULT: NOPPCOND
The PPCOND option specifies whether preprocessor directives will be built around the structure definition to prevent duplicate definitions.
#ifndef switch
#define switch
⋮
structure definition for section
⋮
#endifwhere switch is the switch that is specified on the PPCOND option or
the section name and suffixed by two underscores; for example, _ _name that is
prefixed_ _.
If you specify a switch, the #ifndef and #endif directives are
placed around all structures that are produced. If you do not specify a switch, the
#ifndef and #endif directives are placed around each structure
produced.
SEQUENCE | NOSEQUENCE
DEFAULT: NOSEQUENCE
The SEQUENCE option specifies whether sequence numbers will be placed in columns 73 - 80to of the output record. If you specify the SEQUENCE option, the structure is built into columns 1 72 of the output record, and sequence numbers are placed in columns 73 to 80. If you specify NOSEQUENCE (or select it by default), sequence numbers are not generated, and the structure is built within all available columns in the output record.
If the record length for the output file is fewer than 80 characters, the SEQUENCE option is ignored.
UNIQUE | NOUNIQUE
DEFAULT: NOUNIQUE
# = unique string + 'n' + unique string
@ = unique string + 'a' + unique string
$ = unique string + 'd' + unique string# = _n_
@ = a_
$ = _d_If the default NOUNIQUE option is enabled, the DSECT utility converts all
national characters to a single underscore, even if the resulting label names conflict (as is the
existing behavior).UNNAMED | NOUNNAMED
DEFAULT: NOUNNAMED
The UNNAME option specifies that names are not generated for the unions and substructures within the main structure.
OUTPUT
DEFAULT: OUTPUT(DD:EDCDSECT)
The structures that are produced are, by default, written to the EDCDSECT DD statement. You can
use the OUTPUT option to specify
an alternative DD statement or data set name to write the structure. You can specify any valid file
name up to 60 characters in length. The file name that is specified will be passed to
fopen() as entered.
//DSECTUT EXEC PROC=EDCDSECT,
// DPARM='OUTPUT(DD:MYOUT)',
// OUTFILE='NULLFILE'
//DSECT.MYOUT DD SYSOUT=*
This JCL example uses the DSECT OUTPUT option and outputs to DD:MYOUT instead of default DD:EDCDSECT.
RECFM
DEFAULT: C/C++ Library default
The RECFM option specifies the record format for the file to be produced. You can specify up to 10 characters. If it is not specified, the C or C++ library defaults are used.
LRECL
DEFAULT: C/C++ Library default
The LRECL option specifies the logical record length for the file to be produced. The logical record length that is specified must not be greater than 32767. If it is not specified, the C or C++ library defaults are used .
BLKSIZE
DEFAULT: C/C++ Library default
The BLKSIZE option specifies the block size for the file to be produced. The block size that is specified must not be greater than 32767. If it is not specified, the C or C++ library defaults are used.