... print CLE_DOCTYP_COVER = flacsv Manual :doctype: book = flacsv Manual limes datentechnik(R) gmbh v5.2.1-42969, 2026-10-30: release. Commands are used to run powerful subprograms. The command line processor compiles a table-defined syntax into a corresponding preinitialized data structure. This structure is mapped to the parameter structure of the corresponding subprogram. The subprogram can then be executed with the defined arguments/parameters. To support these variable commands several built-in functions are available and described in a separate <>. .Abbreviations Command names can be abbreviated for interactive use. See <> for detailed information about abbreviation rules and usage recommendations. Each supported command is explained in a separate section in this document. Each section contains a synopsis including the help message, the path, the type and the syntax followed by a detailed description. If an argument of this command is an object or overlay or, if a detailed description is available for this argument, a separate section with synopsis (help, path, type, syntax) and description is written, otherwise a bullet list is printed which contains the keyword, the syntax and the help message. For the syntax of an overlay braces `{}` are used to keep all possible arguments of an overlay logically together. These braces are not part of the real syntax. The braces are only written to demonstrate clearly that one of these arguments must be selected with the DOT operator (optional) for defining the overlay. To be compatible with certain shells, the features below are implemented: * Strings can be enclosed with single '' or double "" quotation marks * Integrated strings (without spaces) can also be defined without quotes * Keywords can also start with "-" or "--" in front of the qualifier * If it is unique then parentheses and the dot can be omitted for objects and overlays Commands can be declared in deep hierarchical depth. In order to simplify their handling the path is a powerful instrument for managing only relevant parts of it. Because of that the path is printed for each synopsis. To run commands under different owners, the owner id can be defined in front of the command. To suppress the output of the command line executor you can set QUIET or SILENT as the last parameter. In addition to QUIET, SILENT also suppresses the error messages. These options have no effect on the output of the commands and built-in functions. For job control, the maximum (and minimum) condition code (MAXCC=[max][-min]) of the command execution can optionally be set as the last parameter for each command. The value 'max' is the maximum condition code. If the condition code, that would be returned if MAXCC was not specified, would be greater than 'max', it is reduced to the value of 'max'. If the condition code would be smaller than 'min', the actually returned condition code is reduced to 0. Both, 'max' and 'min', values are optional. To only specify the minimum, simply omit the 'max' value, i.e. the MAXCC value starts with a hyphen. Example: The clause `MAXCC=8-4` will set each condition code greater than 8 to 8 and each condition code smaller than 4 to 0, while `MAXCC=-4` only sets condition codes smaller than 4 to 0. ------------------------------------------------------------------------ flacsv [OWNER=oid] command "... argument list ..." [MAXCC=[max][-min]] [QUIET] flacsv [OWNER=oid] command=" parameter file name " [MAXCC=[max][-min]] [QUIET] ------------------------------------------------------------------------ The parameters for each command can be provided as an argument list on the command line or as a parameter file. ... print CLE_DOCTYP_CHAPTER == Preface [preface] == Preface FLCL is based on the CLE/P library. The CLE/P library was developed by limes datentechnik and released as open source under the ZLIB license. CLE/P is a compiler to provide a platform-independent command line interface for each kind of batch processing environment. The CLE/P library provides a lot of features including the <> used below. For example: We use this library to automatically create this document as part of our build process; If we add a parameter to the CLE/P tables and build the FL5 project, this manual will be regenerated as well in order to be always up to date. This manual can by generated with the built-in functions GENDOCU or HTMLDOC provided by CLE/P library by calling the command below: ----------------------------------------------------------------------- flacsv gendocu flclbook.txt flacsv htmldoc flclbook.html ----------------------------------------------------------------------- To generate HTML documentation yourself instead of using the pre-built documentation, a service provider DLL must be available. The text file can be fed to Asciidoctor to build a PDF and/or an HTML5 document. ... print CLE_DOCTYP_CHAPTER === Trademarks === Trademarks Below, you can find all trademarks or registered trademarks of limes datentechnik (R) gmbh. These trademarked terms are marked with the appropriate symbol ((R) or (TM)), indicating registered or common law trademarks owned by limes datentechnik (R) gmbh at the time this information was published. The following terms are trademarks of limes datentechnik (R) gmbh in Germany, other countries, or both: * LIMES(R) - Short company name of the owner of this document * limes datentechnik(R) - Company name of the owner of this document * FLCL(R) - Frankenstein Limes Command Line * FLCC(R) - Frankenstein Limes Control Center * FLAM(R) - Frankenstein Limes Access Method * FLUC(R) - Frankenstein Limes Universal Converter * FLIES(R) - Frankenstein Limes Integrated Extended Security * FKMS(R) - Frankenstein Key Management System * FKME(R) - Frankenstein Key Management Extension/Exit * FLAMFILE(R) - A file based on FLAM syntax * CLE/P(R) - Command line Executer/Parser ... print CLE_DOCTYP_CHAPTER === License Terms === License Terms The license terms for all software components owned by limes datentechnik gmbh (R) can be found in the LICENSE.txt file provided at download or located in the doc/txt folder of the installation directory or in the HLQ.FLAM.DOCTXT partitioned dataset. Additional license information for external libraries used by this software can be found in the corresponding LICAPX.txt, ABOUT.txt, or manual files. The replacement of external libraries (LGPL) is described in the LICAPX.txt file or in the corresponding manual chapter. All license terms for external libraries are included as LICxxxxx.txt files in the doc/txt folder or in the HLQ.FLAM.DOCTXT partitioned dataset. All old FLAM components up to version 4 are fully owned by limes datentechnik gmbh (R). On Linux systems, the unmodified glibc is used as a prerequisite (part of the operating system, not part of the distribution) based on the LGPL license. The old FLAM4 components do not provide additional license, about and version commands or functions. The service provider interfaces (exits, extensions) of FLAM are fully owned by limes datentechnik gmbh (R) and provided to our users for individual extension of this software. The driver complies with these license terms, but limes datentechnik gmbh (R) is not responsible for any individual implementations that are not part of our distribution. Our own implementations of these SPIs (e.g. FAVECAV, PKCS#11, IBM-CCA/ICSF) comply with the stated license terms. A lot of this information is generated during the package build process and can be obtained via the corresponding built-in commands of our utilities or the corresponding functions of the APIs. To obtain the current valid state, please use the commands or functions listed below (there are more APIs with similar functions available): ------------------------------------------------------------------------ COMMAND API 1 API 2 ... API n > flacsv license fcblic() FCRLIC() ... fliconv_license() > flacsv about fcbabo() FCRABO() ... fliconv_about() > flacsv version fcbvsn() FCRVSN() ... fliconv_version() ------------------------------------------------------------------------ The about and version information are also included as appendices in the manuals provided by limes datentechnik gmbh (R). The version information contains the version, release, and revision number of each component, followed by the current build number. The versioning of the different components is independent of each other. The build number must be the same for all components and must correspond to the build number of the installation package. If the build number is not identical for all compiled and linked components, then the installation is incorrect. ... print CLE_DOCTYP_CHAPTER === About Limes === About Limes Since 1985, limes datentechnik(R) gmbh has been successfully producing quality software that simplifies data exchange across platforms and across borders (formatting, converting), secures data archiving and transmitting (encrypting, signature) while reducing storage use (compressing), and, finally, allows accessing data without depending on particular platforms or data formats (access method). .What do we offer? * Professional management of compressed and encrypted data including strong access control * Secure data storage (archive) and data transfer * Protection of data privacy, integrity, and completeness * Cutting-edge security technologies for handling of sensitive data being outsourced, securing clouds etc. * Meeting security requirements such as "need-to-know", PCIDSS, etc. * Easy data exchange across borders, platforms, and formats (with regard to internationalization moves, when migrating, etc.) * Saving of time and money through automation options and reduced resource utilization (CPU, memory, external storage) .How do we achieve it? * Converting, compressing, encrypting, and signing of data * Reading and writing methods for various data and file formats * Transforming data into a neutral internal format (FLAMFILE(R)) that allows searching and positioning within encrypted and compressed data * Storage of data in various formats (file, cluster, VSAM, database) * Separating data compression and encryption (client) from data storage (server) * Neutral access to individual data records, data elements, or bytes via various APIs * Connecting solutions to any cryptographic infrastructure with access control via key-management including periodic or adhoc re-keying * Unrestricted extendibility and adaptability through customer-APIs for Cobol/PL1, c/C++ and Java (other programming languages on request) * Transparent integration as I/O subsystem, user space file system, ISP, driver or by incorporating as a subroutine * Scripting, backup, restart and stream capability for switching to automated operation * Programming in ANSI-C and assembler utilizing hardware accelerators and special instructions of the various platforms .What do we stand for? * Beside decades of experience with cross-platform and cross-border data exchange, limes datentechnik(R) stands for protection of your investment and for lasting reliability due to the uncompromising downwards compatibility of its products and the friendly customer care provided as part of its support services. * limes datentechnik(R) not only offers solutions for bulk data handling in the mainframe environment, it also supports all current platforms and systems for migrating and long-term archiving. * For more than 30 years limes datentechnik(R), located in Bad Homburg, Germany, has been providing resilient, error-free, high-quality software meeting professional standards - guaranteed 'Made in Germany'. ... print CLE_DOCTYP_CHAPTER == Command Line Parser [[clep.main]] == 1. Command Line Parser The COMMAND LINE PROCESSOR (CLE/P(R)) is a user application programming interface for several platforms including Windows, Unix and z/OS that simplifies and standardizes parameter string processing. The CLE/P(R) provides two separate functions: * COMMAND LINE PARSER (CLP) - Compiles a parameter string from a command into a data structure * COMMAND LINE EXECUTOR (CLE) - Supports execution of different commands with parameter strings The COMMAND LINE EXECUTOR provides a list of commands and some built-in functions, please use <>, <> and <> to get extensive information about these capabilities. Additionally the built-in function <> can generate a complete user manual or part of it. To read the parameters of a command, a compiler (CLP) is applied. To see the regular expressions (lexemes) and the corresponding grammar, please use the built-in functions <> and <>. The return/condition/exit codes of the executable and the reason codes of the different commands can be reviewed with the built-in function <>. See sections <> and, if available, <> for the meaning of the used return and reason codes. The CLE uses an owner management in order to separate the settings for different clients and a property management for each command. If problems occur, a trace might be activated. For each command execution the owner and environment variables can be defined in the configuration file. To see the current configuration use the built-in function <>. The default trace file is 'stdout'. If the trace is activated before a trace file is defined, the trace will be printed on the screen. To manage the tracing use built-in function <>. Last but not least it is possible to view the license, version and other information about the program. This is the RELEASE build version of the FLAMCLEP. ... print CLE_DOCTYP_CHAPTER === Command Line Considerations [[CLEP.MAIN.CONSID]] === 1.1. Command Line Considerations The command line parser supports abbreviation of keywords depending on the unique first characters. The command line executor also supports abbreviation of command names and built-in function names (see <> for detailed information). Abbreviation is only useful if you work in dialog. If the command is specified in a persistent way (e.g. in a script) writing the complete keyword, command or function name is recommended, to ensure that the script must not be changed to work with a later version of the program. For example: Version X supports only one keyword starting with V (VERSION). Version X+1 supports the keywords VERSION and VERIFY. If you use version X with VER=4711 anything is fine but with version X+1 it will fail, because one more character is required (VERS=4711) for the keyword to be unique. The same is valid for the required string support. The CLP supports strings without enclosing. These strings depend on the keywords used in a name space. If new keywords are added in a future version, the string could cause errors and must be enclosed. Concerning this it is recommended to enclose strings if the command is defined in a script. For example: ------------------------------------------------------------------------ Version X: STRING=my/data/Name NUMBER=42 Version X+1 supports the new keyword NAME, this requires: STRING='my/data/Name' NUMBER=42 NAME='Hugo' ------------------------------------------------------------------------ The last item which could result in a damaged command syntax after a program update is the use of implicit array definitions after an assignment, because the end of such an array might change, for example if an array of numbers is defined and a switch is at the end. In a new version such a switch could be a number with a default value, if only the keyword is defined. In this case the defined number referenced by this keyword is then part of the number array and the parameter is lost. Concerning this it is recommended to use enclosed array definitions. For example: ------------------------------------------------------------------------ instead of: FLOATARRAY=1,2,3,PI use: FLOATARRAY[1,2,3,PI] ------------------------------------------------------------------------ All these capabilities are implemented to be compatible with several existing command line syntaxes and to limit the effort to port old commands or to simplify the interactive use. But in certain cases, the command interpretation could fail if not the unique/enclosed variant of keywords, strings and arrays is used. ... print CLE_DOCTYP_USEDENVAR === Used Environment Variables [[clep.main.usedenv]] === 1.2. Used Environment Variables Environment variables can be managed via the operating system or via the FLACSV configuration. The latter can be managed with the built-in functions <>, <> and <>. To list the current state of all usable environment variables the built-in function <> can be used. For help messages for each usable environment variable please use <>. There are also some platform-specific mechanisms that can be used to set environment variables: ..Linux, Windows, USS and other Unix-like OS Environment variables are read from the file `.stdenv` in the current working directory or the user's home directory. The file in the home directory is only considered if the file does not exist in the working directory or cannot be read. ..Mainframe systems `DD:STDENV` or the data set name `&SYSUID..STDENV` can alternatively be used to set environment variables. The `STDENV` file allows to define the `FLACSV_CONFIG_FILE`, `FLACSV_DEFAULT_OWNER_ID`, `LANG` and other environment variables in JCL. Example with a z/OS DD name allocation: ----------------------------------------------------------------------- //STDENV DD * FLACSV_CONFIG_FILE=GLOBAL.FLACSV.CONFIG LANG=de_DE.IBM-1141 HOME=/u/hugo USER=hugo ENVID=T /* ----------------------------------------------------------------------- The definition of the LANG variable outside of the program configuration file is recommended, so that the system character set is defined in each situation. The program configuration filename is used as is. No placeholder substitutions (e.g. ``) are possible. It might be useful to have a dedicated environment per user on mainframes. In such a case, it makes sense to define the environment in a dedicated file for each user. ----------------------------------------------------------------------- //STDENV DD DSN=USER.ENVIR(&SYSUID.), DSP=SHR ----------------------------------------------------------------------- Since z/OSv2r1 you can also use exported JCL symbols like environment variables. The exported JCL symbols have lower priority than the same environment variable. The service CEEGTJS is called dynamically and the language environment must be in the STEPLIB concatenation to use it. Additionally, all z/OS system symbols can be used in the string replacement (<&LDAY>). The environment variables have the highest priority, followed by the exported JCL symbols. System symbols have the lowest priority. If the variable name is not found, then no replacement is done and the angle brackets are kept in place. ------------------------------------------------------------------------ //E0 EXPORT SYMLIST=* //S1 SET BLKSIZE=27886 //S3 SET LRECL=128 ------------------------------------------------------------------------ ...Default record format For z/OS, the default record format and record length for non-existent output files is `recfm=VB, lrecl=516`. An attempt is made to open an existing file with `recfm=*` for overwriting (DISP=OLD). If this fails, another attempt is made with `recfm=VB, lrecl=516` to write a new file (DISP=NEW). The environment variable `CLP_DEFAULT_DCB` can be used to change this default file mode string. See "Keyword Parameters for File Mode" for fopen() in _z/OS XL C/C++ Runtime Library Reference_ for more information and for the correct syntax. Beside `recfm` with a valid record format (not + or *) and `lrecl`, the `space` parameter can be set. All other file mode parameters are managed by CLP. ..Property file vs. environment variables Beside all the environment variables managed by CLE it is possible to set all properties as environment variables to override the hard coded default values with CLP. If a property is defined as environment variable and in a property file, then the value in the property file overrides the setting in the environment. The environment variable name for each property is built by the rules below: * convert all characters to upper case * replace all dots (`.`) by underline (`_`) To get a list and help for all properties please use the built-in function `GENPROP` to generate property files. The properties can be defined per owner, per program and globally. The owner-specific definition overrides the program specific definition and the program-specific definition overrides the global definition. Examples: ----------------------------------------------------------------------- CONV_READ_TEXT_ENL2LF=OFF #in general the 0x15 to 0x25 conversion is off# HUGO_FLCL_CONV_READ_TEXT_ENL2LF=ON # for owner 'hugo' the conversion is on# ----------------------------------------------------------------------- The value string behind the sign (including the comment) will be used as supplement for the command line processor. Aliases are not supported in this case. You can only define properties for the main argument. If a string must be enclosed with apostrophe, please don't use double quotation marks because these are used in addition if a new property file is built based on the environment settings. ----------------------------------------------------------------------- FLCL_ICNV_FROM='IBM-1141' # this is the best solution FLCL_ICNV_TO=UTF-8 # "UTF-8" could result in errors ----------------------------------------------------------------------- See <> for the current property file content. ..Usable environment variables Below you can find the list of static environment variables. * LANG (&FLANGLC_&FLANGCC.&FLANGCS) - The default language and CCSID/encoding string for this platform (Format: de_DE.UTF-8 or de_DE.IBM-1141) * HOME - To determine the home directory on UNIX/WIN * USER - To determine the current user id on UNIX/WIN * CUSER - To determine the current user in upper case * Cuser - To determine the current user in title case * cuser - To determine the current user in lower case * SYSUID - To determine the current user id on z/OS * ENVID (&FLENVID) - The current environment qualifier for key label templates (default value is 'T' or the first valid letter of &SYSCLONE on z/OS) * OWNERID - Used for current owner if not already defined (used in key label templates (can also be used in file names)) * HOSTNAME - Current host name * MAILADDR - The email address used as sender for outgoing emails (only relevant on z/OS with SYSOUT format set to MAIL) * CLE_QUIET - Disables the normal log output of the command line executer (must set to YES or ON) ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * CLE_SILENT - Disables log and errors messages of the command line executer (must set to YES or ON) ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * CLE_MIN_CC (&FLMINCC) - Define initial MINCC for command processing * CLE_MAX_CC (&FLMAXCC) - Define initial MAXCC for command processing * CLP_NOW - The current point in time used for predefined constants (0tYYYY/MM/DD.HH:MM:SS) * CLP_STRING_CCSID - CCSID used for interpretation of critical punctuation character on EBCDIC systems (default is taken from LANG) * CLP_DEFAULT_DCB - The default record format and record length in C file mode format (default is 'recfm=VB, lrecl=516' only for z/OS) * CLP_FULL_SYMTAB - Set up complete symbol table at the beginning (must set to YES or ON) ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * CLP_SYMTAB_STATISTICS - Print symbol table statistics to STDERR stream at close (must set to YES or ON) ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * CLP_MALLOC_STATISTICS - Print memory allocation statistics to STDERR stream at close (must set to YES or ON) ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * FL_PLATFORM - Platform definition (WIN/UNX/MAC/ZOS/USS/BS2[.B/.L]) for emulation at read or write operations ** WIN - Choose Windows as platform (CRLF) ** UNX - Choose Unix derivative as platform (LF) ** ZOS - Choose ZOS as platform (NL) ** ZOS31 - Choose ZOS 31-bit as platform (NL; HFP float bias) ** ZOS64 - Choose ZOS 64-bit as platform (NL; IEEE float bias) ** USS - Choose USS of ZOS as platform (NL) ** USS31 - Choose USS 31-bit as platform (NL; HFP float bias) ** USS64 - Choose USS 64-bit as platform (NL; IEEE float bias) ** VSE - Choose VSE as platform (NL) ** BS2 - Choose BS2000-OSD as platform (NL) ** MAC - Choose MAC as platform (CR) * FL_ARCHIVE_DECRYPT (&FLARCDC) - How to decrypt a FLAM5 archive an input is read from -- a parameter file, a copybook, a row list (the DECRYPT overlay alone: PWD(...) or PGP()) * FL_ARITHMETIC_METADATA (&FLARIMD) - Use ARITHMETIC for the flag and length buffer of a pot if no compression level is given (default YES) ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * FL_DEFAULT_CCSID (&FLCCSID) - Internal default CCSID for neutral string elements (if not defined then 'UTF-8') * FL_DEFAULT_ASCII_CCSID - Default CCSID for ASCII character sets (if ASCII machine and LANG, then default is taken from LANG else default is 'ISO-8859-1')) * FL_DEFAULT_EBCDIC_CCSID - Default CCSID for EBCDIC character sets (if EBCDIC machine and LANG, then default is taken from LANG else default is 'IBM-1047')) * FL_PGP_PREF_SYMALG_AES128 (&FLPA128) - Invert order of preferred symmetric algorithms from AES256/192/128 to AES128/192/256 in PGP certificates ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * FL_ALLOW_LOW_ENTROPY - If defined and no source of entropy is available, the random number generate is seeded with a low entropy which may result in weak encryption keys * FL_DEFAULT_CHAR_MODE (&FLCHARM) - Default error handling if character not available in target character set [STOP] ** STOP - Stop at the first non-convertible character ** IGNORE - Ignore non-convertible characters ** SUBSTITUTE - Substitute non-convertible characters ** IDENTITY - Copy non-convertible characters (supported only for single byte conversions) ** TRANSLIT - Activate ICONV transliteration and ignore the rest (MODE=IGNORE SYSTAB=ICONV) * FL_DEFAULT_PGPCCAPARA - Default PGP IBM-CCA (ICSF) parameter (normally not required, only profile and pin (if applicable) or trust store name) * FL_DEFAULT_PGPP11PARA - Default PGP PKCS#11 parameter (LIB=/usr/lib/libsofthsm2,PIN=f'pkcs11.pin') * FL_DEFAULT_PGPRNGPARA - Default PGP key ring parameter (pub='pubrng.pgp',sec='secrng.pgp',pass=f'keyring.pwd') * FL_DEFAULT_CCALIB - Default path/name of CCA library (not required for ICSF) * FL_DEFAULT_CCAPKDS - Default path/name of CCA public key data set * FL_DEFAULT_P11LIB - Default path/name of PKCS#11 library * FL_DEFAULT_P11PIN - Default PIN/passphrase for PKCS#11 token (it is not recommended to use this if authentication is required) * FL_DEFAULT_P11SLOT - Default PKCS#11 slot number * FL_DEFAULT_RNGPUBFIL - Default public key file for key ring implementation * FL_DEFAULT_RNGSECFIL - Default secret key file for key ring implementation * FL_DEFAULT_RNGPASSWD - Default password for key ring implementation (it is not recommended to use this if authentication is required) * FL_INFO_BLOCK_SIZE - Set a custom block size for the INFO command (useful mainly for PGP files) * FL_USAGE_SYSLOG_IDENT (&FLOGIDT) - Activate usage logging to SYSLOG on each platform (in addition to the usage log stream on z/OS) * FL_DEACTIVATE_HW_CRYPTO_ACCELERATION - Deactivate hardware acceleration for cryptographic operations (enforce use of software implementation) * FL_PRIMARY_SPACE_TRK (&FLPRISP) - Default primary space in tracks (only relevant on mainframes, default is 600) * FL_SECONDARY_SPACE_TRK (&FLSECSP) - Default secondary space in tracks (only relevant on mainframes, default is 1200) * FL_DIRECTORY_BLOCKS (&FLDIRBL) - Default directory blocks (only relevant on mainframes, default is 45) * FL_LIBALLOC_EXPFAC (&FLALCEX) - Expansion factor (1 to 1000) for default library (PDS(E)) allocation (default is 4) * FL_ZEDC_SUPPORT (&FLZEDC) - Controls use of RCF1951 (GZIP) compression in FLAM4 ADC modules (ON, OFF, AUTO(default), threshold (nnn) in percent) * FL_SSH_HOME_DIR - Directory containing SSH key files and known_hosts file (/home/user/.ssh) * FL_DEFAULT_MIN_COMP_RATIO (&FLCMPRT) - Default minimum compression ratio (10-90 (default is 90 (less than 10% compression efficiency will skip by default)) * FL_4_EXPANSION_FACTOR (&FL4EXPF) - Expansion factor for FLAMFILEs decompression (default is 10 (valid 1-1000)) - must be defined to activate default expansion handling * FL_GZ_EXPANSION_FACTOR (&FLGZEXP) - Expansion factor for GZIP decompression (default is 5) * FL_GZ_COMPRESSION_FACTOR (&FLGZCMP) - Compression factor for GZIP compression (default is 2) * FL_BZ_EXPANSION_FACTOR (&FLBZEXP) - Expansion factor for BZIP2 decompression (default is 6) * FL_BZ_COMPRESSION_FACTOR (&FLBZCMP) - Compression factor for BZIP2 compression (default is 2) * FL_XZ_EXPANSION_FACTOR (&FLXZEXP) - Expansion factor for XZ decompression (default is 10) * FL_XZ_COMPRESSION_FACTOR (&FLXZCMP) - Compression factor for XZ compression (default is 2) * FL_ZS_EXPANSION_FACTOR (&FLZSEXP) - Expansion factor for ZSTD decompression (default is 10) * FL_ZS_COMPRESSION_FACTOR (&FLSZCMP) - Compression factor for ZSTD compression (default is 2) * FL_KEY_EXPIRE_WARN_DAYS (&FLKEYWD) - Amount of days to warn before a key will expire (default is 90 (3 months)) * FL_RETURN_IF_LOG_WARNING (&FLRLOGW) - If set to OFF, the completion code 0 is returned instead of 1 if a relevant warning is written to the log ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * FL_FAVE_LIBRARY - Set default library for anti virus scanning (default is 'libfave') * FL_FAVE_FUNCTION - Set default function for anti virus scanning (default is 'CLAMAVC') * FL_FAVE_PARAMETER - Set default parameter for anti virus scanning (default is 'clamav.daemon:3310') * FL_FOBJ_LIBRARY - Set default library for user-defined object store SPI (default is 'libfobj') * FL_FOBJ_FUNCTION - Set default function for user-defined object store SPI (default is 'FOBJUSR') * FL_FOBJ_PARAMETER - Set default parameter string for user-defined object store SPI (default is '') * FL_FLUCFS_MAPSIZE - Set the upper size of the flucFS metadata database, in bytes or with a K, M or G suffix (default 64M, about 42000 files) * FL_FSEG_LIBRARY - Set default library for user-defined segment store SPI (default is 'libfseg') * FL_FSEG_FUNCTION - Set default function for user-defined segment store SPI (default is 'FSEGUSR') * FL_FSEG_PARAMETER - Set default parameter string for user-defined segment store SPI (default is '') * FL_OBJSTORE_DATBUF (&FLOSDAT) - Default for store.*(DATBUF) in bytes: buffered I/O of the object store collecting data segments into one object (default 4194304) * FL_OBJSTORE_MBRBUF (&FLOSMBR) - Default for store.*(MBRBUF) in bytes: buffered I/O of the object store collecting member index segments into one object (default 1048576) * FL_OBJSTORE_DIRBUF (&FLOSDIR) - Default for store.*(DIRBUF) in bytes: buffered I/O of the object store for the directory segment (default 1, which stores it one to one) * FL_OBJSTORE_PAGESIZE - Objects a cloud store asks for per listing request (1 to the protocol maximum of 1000, which is also the default) * FL_OBJSTORE_QDEPTH (&FLOSQDP) - Object PUTs a cloud store may have in flight at once, and its GET prefetch slots (0 or unset=8, min 1, max 32; libcurl transport only) * FL_FLSERVHZ_PATH (&FLHZPTH) - Program FLAM starts for REST access through the z/OS HTTP enabler (default: 'flservhz' on PATH, else /usr/lpp/flam/bin/flservhz); z/OS only * FL_FLSERVHZ_STDERR - File the z/OS HTTP enabler helper writes its own messages to when the caller has no stderr (default: discarded); z/OS only * FL_HWTHTTP_VERBOSE - Trace of the z/OS HTTP enabler: OFF (default), ON (redacted) or UNREDACTED (writes credentials); SAF: RST.TRACE READ resp. CONTROL; z/OS only * FL_HWTHTTP_VERBOSE_DD - DD the z/OS HTTP enabler trace is routed to (max 8 chars); name one -- on standard output the trace can end the job; no own permit; z/OS only * FL_HWTHTTP_IPSTACK (&FLHZIPS) - Name of the TCP/IP stack the z/OS HTTP enabler uses (1 to 8 characters); z/OS only * FL_HWTHTTP_CIPHERS - System SSL cipher suites for the z/OS HTTP enabler, 4-character specs; unset uses FLAM's own list incl. ECDHE_ECDSA; z/OS only * FL_HWTHTTP_KEEP_CONN_AFTER_ERR (&FLHZKCN) - Reuse a z/OS HTTP enabler connection after a non-2xx answer; unset means do not, which works around a toolkit defect; z/OS only * FL_HWTHTTP_SSLTRACE - System SSL trace level for secure connect failures, as documented by IBM for your release; SAF: RST.TRACE READ; z/OS only * FL_HWTHTTP_KEEP_ANCHOR (&FLHZANC) - Leave the z/OS HTTP enabler anchor variable in place; ON breaks every child process without the IBM fix [OFF]; z/OS only ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * FL_CLAMAV_DAEMON - Set default communication parameter for ClamAV client (default is 'clamav.daemon:3310:10') * FL_AVSCAN_READ - If defined, anti virus scanning when reading is activated (corresponding default values must be defined) * FL_AVSCAN_WRITE - If defined, anti virus scanning when writing is activated (corresponding default values must be defined) * FL_AVSCAN_COMPRESS - If defined, anti virus scanning is done on a compressed GZIP data stream (must be supported by service provider) * FL_SYSOUT_MAIL_CLASS (&FLSOMC) - Default class for SYSOUT allocation if FORMAT.MAIL() is used (only on z/OS) * FL_SYSOUT_MAIL_WRITER (&FLSOMW) - Default program for SYSOUT allocation if FORMAT.MAIL() is used (only on z/OS) * FL_LITERAL_CACHE_SIZE (&FLITCS) - Size of the hash table used (by power of 2) for the literal cache (8>=x<=20 (256 to 1.048.576 entries)) * FL_OBJECT_CACHE_SIZE (&FOBJCS) - Size of the hash table used (by power of 2) for the object cache (8>=x<=20 (256 to 1.048.576 entries)) * FL_CLP_CACHE_SIZE (&FCLPCS) - Size of the hash table used (by power of 2) for the CLP cache (2>=x<=8 (4 to 256 entries)) * FL_RECORD_FORMAT_MAPPING (&FLRECFM) - If this variable is not set to DATATYPE (is the default), records with length field (RECF=VAR) are used ** DATATYPE - Binary data as binary (RECF=BIN), Text as text (RECF=TXT) * FL_FIOREC_PARSEEXT - Default for read.record(PARSEEXT). ON enables filename-qualifier parsing at read by default; OFF (default) requires the PARSEEXT parameter per read ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * FL_IBM_UNICODE_SERVICE (&FLIBMUS) - Define use of z/OS Unicode Services for simple character conversions to lower performance [AUTO] ** AUTO - Use it, if behavior the same and faster (single character A accepted) ** A - Single character shortcut for AUTO ** ON - Activate it (with round trip conversion) ** OFF - Deactivate it (no use of Unicode Services) * FL_WRITE_DATA_TO_ERRTRACE (&FLWD2ET) - Write data to trace (must be OFF if error trace is to be part of the support ticket) [OFF] ** YES - Yes, do it (same as ON; single character Y accepted) ** Y - Single character shortcut for YES (same as ON) ** ON - Activate it (same as YES) ** NO - No, do not do it (same as OFF; single character N accepted) ** N - Single character shortcut for NO (same as OFF) ** OFF - Deactivate it (same as NO) * FL_CA_BUNDLE - REST/HTTPS: trust anchor for TLS verification -- a PEM file, or a SAF keyring or key database name on z/OS * FL_REST_ATTEMPTS (&FLRSATT) - REST/HTTPS: TOTAL attempts per request incl. the first (1 = no retry, default 3); a connect failure, a lost connection and a transient 429/5xx are retried on a new connection * FL_REST_RETRY_WAIT (&FLRSWAT) - REST/HTTPS: initial wait in ms before a retry, doubled per attempt and jittered (default 500, max 8000); see FL_REST_ATTEMPTS * AWS_ACCESS_KEY_ID - S3: AWS access key ID (fallback for store.s3() PROVIDER.ACCESSKEY parameter) * AWS_DEFAULT_REGION - S3: AWS region (fallback for store.s3() PROVIDER.REGION parameter; default: us-east-1) * AWS_ENDPOINT_URL - S3: S3-compatible endpoint URL (fallback for store.s3() PROVIDER.ENDPOINT parameter) * AWS_SECRET_ACCESS_KEY - S3: AWS secret access key (fallback for store.s3() PROVIDER.SECRETKEY parameter) * AWS_SESSION_TOKEN - S3: AWS STS session token (fallback for store.s3() PROVIDER.SESSIONTOKEN parameter) * AWS_ROLE_ARN - S3: ARN of the role to assume; FL5 then fetches temporary credentials itself (fallback for store.s3() PROVIDER.ROLEARN) * AWS_ROLE_SESSION_NAME - S3: session name for AssumeRole (fallback for store.s3() PROVIDER.ROLESESSION, default flam) * AWS_STS_ENDPOINT - S3: STS endpoint URL (fallback for store.s3() PROVIDER.STSENDPOINT, default the S3 endpoint) * FL_S3_BUCKET - S3: bucket name (fallback for store.s3() BUCKET parameter) * FL_S3_PATH_STYLE - S3: use path-style URLs when non-empty (fallback for store.s3() PROVIDER.PATHSTYLE parameter) * FL_S3_PREFIX - S3: object key prefix (fallback for store.s3() PREFIX parameter) * FL_S3_PORT - S3: port override merged into the endpoint (fallback for store.s3() PROVIDER.PORT parameter) * AWS_WEB_IDENTITY_TOKEN_FILE - S3: file holding an OIDC token for AssumeRoleWithWebIdentity (fallback for store.s3() PROVIDER.WEBIDENTITYFILE parameter) * FL_S3_IMDS - S3: take the credentials from the instance metadata service (fallback for store.s3() PROVIDER.IMDS parameter) * FL_IBM_APIKEY - S3: IBM Cloud api key, selects IAM instead of SigV4 (fallback for store.s3() PROVIDER.APIKEY parameter) * FL_IBM_IAM_ENDPOINT - S3: IBM Cloud IAM token endpoint (fallback for store.s3() PROVIDER.IAMENDPOINT parameter) * AWS_CONTAINER_CREDENTIALS_FULL_URI - S3: container credential endpoint (ECS/Fargate, EKS Pod Identity); used when IMDS is enabled * AWS_CONTAINER_CREDENTIALS_RELATIVE_URI - S3: container credential path on 169.254.170.2; used when IMDS is enabled * AWS_CONTAINER_AUTHORIZATION_TOKEN - S3: bearer token for the container credential endpoint - kept secret * AZURE_STORAGE_ACCOUNT - Azure: storage account name (fallback for store.azure() PROVIDER.ACCOUNT parameter) * AZURE_STORAGE_KEY - Azure: base64-encoded storage account key (fallback for store.azure() PROVIDER.ACCOUNTKEY parameter) * AZURE_STORAGE_SAS_TOKEN - Azure: shared access signature token (fallback for store.azure() PROVIDER.SASTOKEN parameter) * AZURE_CLIENT_ID - Azure: AD application (client) ID for OAuth2 (fallback for store.azure() PROVIDER.CLIENTID parameter) * AZURE_CLIENT_SECRET - Azure: AD client secret for OAuth2 (fallback for store.azure() PROVIDER.CLIENTSECRET parameter) * AZURE_TENANT_ID - Azure: AD tenant (directory) ID for OAuth2 (fallback for store.azure() PROVIDER.TENANTID parameter) * FL_IMDS_ENDPOINT - Azure: override IMDS endpoint URL for MSI testing (default: http://169.254.169.254) * FL_AZURE_AUTHORITY - Azure: override the AD OAuth2 token endpoint for testing (default: https://login.microsoftonline.com) * FL_AZURE_CONTAINER - Azure: blob container name (fallback for store.azure() CONTAINER parameter) * FL_AZURE_ENDPOINT - Azure: custom endpoint URL (fallback for store.azure() PROVIDER.ENDPOINT parameter) * FL_AZURE_PREFIX - Azure: blob name prefix (fallback for store.azure() PREFIX parameter) * FL_AZURE_PORT - Azure: port override merged into the endpoint (fallback for store.azure() PROVIDER.PORT parameter) * AZURE_FEDERATED_TOKEN_FILE - Azure: file holding the client assertion for workload identity (fallback for store.azure() PROVIDER.FEDERATEDFILE parameter) * FL_CDA_PROVIDER (&FLCDAPR) - CDA: provider name, basename of its json file (fallback for store.ibmcda() PROVIDER parameter); z/OS only * FL_CDA_BUCKET (&FLCDABK) - CDA: bucket or container name inside the provider (fallback for store.ibmcda() BUCKET parameter); z/OS only * FL_CDA_PREFIX - CDA: object key prefix within the bucket (fallback for store.ibmcda() PREFIX parameter); z/OS only * FL_CDA_SESSION (&FLCDASES) - CDA: use a session (GDKINIT/GDKTERM) where CDA offers one; saves a provider and key file read per operation [ON; OFF disables]; z/OS only * FLAM4MF - Enable Microfocus Enterprise Server support for FLAM and FLUC record interfaces (ccsid/yes/no) * FLAM4MF_TRACEFILE - Enable a trace file for the MF-EDZ stubs supporting the record interface (Windows or Linux filename) * FLAM4MF_STATIC_SYSVAR - Static system variables are read from filename into the environment (filename in EBCDIC or ASCII, Syntax: 'SYMBOL=value', also use 'DD:SYSVAR') * FLAM4MF_DYNAMIC_SYSVAR - Dynamic system variables are read from filename into the environment (in conjunction with the JCL User Exit of MF-EDZ to add dynamic variables) * FL4SEPA_SIGFILE_PRIMARY_SPACE_TRK - Primary space of signature file for migration (if not defined the required space is determined from the used space of the old signature file) * FL4SEPA_SIGFILE_SECONDARY_SPACE_TRK - Secondary space of signature file for migration (if not defined the required space is determined from the used space of the old signature file)) * _EDC_ZERO_RECLEN (&FLZRECL) - Used for handling of empty records (see dedicated <> below) on z/OS Beside the static environment variables there a lot of dynamic formed environment variables supported. * FLACSV_CONFIG_FILE - the configuration filename (default is '$HOME/.flacsv.config' on UNIX/WIN or '&SYSUID..FLACSV.CONFIG' on mainframes) * FLACSV_DEFAULT_OWNER_ID - the default owner ID (default is 'limes') * owner_FLACSV_command_PROPERTY_FILENAME - To override default property file names * path_argument - to override the hard coded default property value ..FLAM specific handling of environment variables On platforms (mainly mainframe systems) where system symbols are available, some of the environment variables can be pre-defined over corresponding system variables. See install.txt or use built-in function <> (in parenthesis the corresponding system symbols are listed). Trailing whitespace is removed from variable values before being used. A system symbol must start with `&` or an alphabetic character followed by alphanumeric characters. ...Boolean environment variables Many environment variables accept a boolean value that enables or disables a feature. Boolean values are matched case-insensitively. The following values are accepted: * To enable: `ON`, `YES`, or the single character `Y` * To disable: `OFF`, `NO`, or the single character `N` * For automatic behavior (where supported): `AUTO` or the single character `A` All three forms are equivalent and can be written in any combination of upper and lower case (e.g. `on`, `Yes`, `y` all enable a feature). The accepted values are listed in the help for each variable (use built-in function `HLPENV` for details). ...Considerations for the LANG variable The environment variable LANG is also used on EBCDIC systems to interpret several syntax characters correctly, which depend on the codepage. See chapter <> for how the CCSID can be defined. It is important to set this variable to the correct value on EBCDIC systems. If this environment variable is not set, files and literals are interpreted in IBM-1047 on z/OS and USS. If you use another CCSID for entry, you must define the environment variable LANG to enable correct parsing for strings that contain special characters like `~`. We recommend defining the corresponding system variables (&FLANGLC, &FLANGCC and &FLANGCS) via `SYS1.PARMLIB(IEASYMxx)` on z/OS (see also install.txt). These three system symbols are used to build the environment variable LANG based on the string below: ------------------------------------------------------------------------ "&FLANGLC_&FLANGCC.&FLANGCS" ------------------------------------------------------------------------ For example with the definitions below ------------------------------------------------------------------------ SYMDEF(&FLANGLC='de') SYMDEF(&FLANGCC='DE') SYMDEF(&FLANGCS='IBM1141') ------------------------------------------------------------------------ the environment variable below is defined. ------------------------------------------------------------------------ LANG=de_DE.IBM1141 ------------------------------------------------------------------------ The language code (de) is important for correctly selecting the default CCSID if an ASCII code page was detected. ...Considerations for the ENVID variable The `ENVID` variable is normally one character to separate test and production environments. On z/OS the default is simply the first letter of system symbol `&SYSCLONE` or if not defined (on all platforms) 'T' for test. ...Considerations for the FLAM4MF variable family (only Microfocus Enterprise Server) The variable FLAM4MF and (if needed) FLAM4MF_TRACEFILE should be set in the environment of the Microfocus Enterprise Server instance where the FLAM or FLUC record interfaces are used. To define static and dynamic system variables, the FLAM4MF_STATIC/DYNAMIC_SYSVAR environment variable can be used to read the system variables to the environment. The second file was mainly introduce for the MF-EDZ JCL user exit, which can be used to provide the dynamic symbols like JOBNAME as keyword=value pair as the dynamic file. All the files read to build the environment undergo automatic ASCII and EBCDIC detection. A semicolon can be used to mark the end of a keyword-value pair (an inline FB80 encoding in JCL on EDZ does not contain newline characters). To undefine an environment variable, there must be no characters behind the equal sign. To replace a variable with nothing upon use, the environment variable must be set to one or more whitespace character(s). Trailing whitespace is removed from the value string, so a value which contains only whitespace characters will result in an empty string upon substitution. For Micro Focus EDZ environments, the DD name SYSVAR is supported to define system variables. The function used to read the `keyword=value` pairs automatically detects if EBCDIC is used (character > 0x80) and converts the lines automatically to the local character set. ...Other used system symbols on z/OS The LE-less part of FLAM can only use system symbols. Below is a list of available variables: *&FLREUCEE - Activate reuse of language environment in FLAM ZEDC support *&FLOGQL1 - First qualifier to specify the FLAM usage log stream name *&FLOGQL2 - Second qualifier to specify the FLAM usage log stream name *&FLOGQL3 - Third qualifier to specify the FLAM usage log stream name See install.txt for z/OS for more information. ...Other ways to define environment variables On Unix platforms the '/etc/profile' or .bashrc or command line can be used to export environment variables. On windows under system control global or user specific environment variables can be defined. On z/OS additional the DD:CEEOPTS can be used to define environment variables, see example for ZEDC usage below: ------------------------------------------------------------------------ //CEEOPTS DD * ENVAR("_HZC_COMPRESSION_METHOD=software, _HZC_DEFLATE_THRESHOLD=1, _HZC_INFLATE_THRESHOLD=1") /* ------------------------------------------------------------------------ Additional with global relevance the environment variables can also be defined over the PARMLIB member CEEPRMxx on z/OS, see examples for all 3 environments below: ------------------------------------------------------------------------ CEECOPT(ALL31(ON), ENVAR('TZ=EST5EDT') ) CEEDOPT(ALL31(ON), ENVAR('TZ=EST5EDT') ) CELQDOPT(ALL31(ON), ENVAR('TZ=EST5EDT') ) ------------------------------------------------------------------------ from 'Specifying environment variables' of IBM z/OS documentation. ... print CLE_DOCTYP_CHAPTER === Environment Variable Mapping === 1.3. Environment Variable Mapping Each value enclosed with angle brackets (`<>`) is replaced with the corresponding environment variable (``). This feature is available at each starting point of a lexeme and inside of a normal string. If the environment variable is not defined the replacements below are still possible: * - Current user id in upper case * - Current user id (case sensitive) * - Current user id in upper case == * - Current user id in title case * - Current user id in lower case * - The current host name of the system * - The environment ID (default is T for test) * - Replaces with the user's data directory, if this is not available the replacements below are done: ** On UNIX with /home/ ** On USS with /u/ ** On ZOS with Additionally a few abbreviations are supported for different kinds of strings. * '~' for in file strings * '!' for in key labels * '~' for in key labels * '^' for in key labels All these abbreviation characters have different code points in EBCDIC code pages and can only be used if the CCSID is known by CLP, see chapter <> for how the CCSID can be defined for CLP. ... print CLE_DOCTYP_CHAPTER === Filename Mapping [[clep.main.filemap]] === 1.4. Filename Mapping All filenames used by CLE/P(R) are additionally mapped based on the rules below: * The tilde character (`~`) is replaced with the string `` * DD names on mainframes must be prefixed with "DD:" * Data set names on mainframes are always fully qualified * Path names on mainframes must contain at least one slash (`/`) * Data set names on USS must start with `//` ** Fully qualified names with HLQ must be enclosed in apostrophes (`//''`) ** If apostrophes are not used the SYSUID is prefixed as HLQ * Normal file names on other platforms could be relative NOTE: If a requested environment variable is not defined, the replacement is done with the empty string. This can result in unexpected behavior. To use a "<" or "~" as a part of a filename the character must be specified twice. Besides these rules the replacement technologies of your shell can be used, but on some platforms $HOME, $USER or something similar might not be available, for such cases the possibilities above are implemented. This file name mapping is provided by the library CLEPUTL and should also be used for file names managed by the commands supported with this program. ... print CLE_DOCTYP_CHAPTER === Special EBCDIC Codepage Support [[CLEP.MAIN.EBCDIC]] === 1.5. Special EBCDIC Codepage Support To interpret commands correctly the punctuation characters below are on different code points depending on the EBCDIC CCSID used to enter these values. ------------------------------------------------------------------------ CRITICAL PUNCTUATION CHARACTERS: ! $ # @ [ \\ ] ^ ` { | } ~ ------------------------------------------------------------------------ These critical characters are interpreted normally dependent on the environment variable LANG. If the environment variable LANG is not defined then the default CCSID IBM1047 (Open Systems Latin-1) is used. Below is the current list of supported CCSIDs on EBCDIC systems. ------------------------------------------------------------------------ SUPPORTED EBCDIC CODE PAGES FOR COMMAND ENTRY: "IBM-1140","IBM-1141","IBM-1142","IBM-1143", "IBM-1144","IBM-1145","IBM-1146","IBM-1147", "IBM-1148","IBM-1149","IBM-1153","IBM-1154", "IBM-1156","IBM-1122","IBM-1047","IBM-924", "IBM-500","IBM-273","IBM-037","IBM-875","IBM-424", "IBM-277","IBM-278","IBM-280","IBM-284","IBM-285", "IBM-297","IBM-871","IBM-870","IBM-1025","IBM-1112", "IBM-1157" ------------------------------------------------------------------------ You can define the code page explicitly (LANG=de_DE.IBM-1141) or only the language code (LANG=de_DE, LANG=C). If only the language code defined then the CCSID is derived from the language code (DE=IBM-1141, US=IBM-1140, C=IBM-1047, ...). If possible, these critical characters are also converted for printouts. At output it is not possible to convert anything correctly, because some strings for printout are coming from other sources (like system messages and others). Only all known literals are converted, for unknown variables such a conversion is not possible and CLE/P(R) expects that such strings are encoded in the correct system code page, but there is no guarantee for this. To be independent of the environment escaping of the CLP strings is possible for the critical punctuation characters on EBCDIC systems. See list below: ------------------------------------------------------------------------ ! = &EXC; - Exclamation mark $ = &DLR; - Dollar sign # = &HSH; - Hashtag (number sign) @ = &ATS; - At sign § = &PAG; - Section sign / Paragraph sign [ = &SBO; - Square bracket open \ = &BSL; - Backslash ] = &SBC; - Square bracket close ^ = &CRT; - Caret (circumflex) ` = &GRV; - Grave accent { = &CBO; - Curly bracket open | = &VBR; - Vertical bar } = &CBC; - Curly bracket close ~ = &TLD; - Tilde ------------------------------------------------------------------------ An escape sequence starts with the ampersand (&) followed by 3 characters (not case sensitive) and is terminated with a semicolon (;). With an X and 2 hexadecimal digits the definition of a binary byte value is possible. If such a sequence is required in the string then the ampersand must be typed twice (&&). To mark a part or the whole string in a certain CCSID the escape sequence must contain 1 to 6 digits. Few samples can be found below: ------------------------------------------------------------------------ &1047; all in 1047 &0; reset to system code page &1140; no in 1140 ------------------------------------------------------------------------ At the beginning the system code page is active except the environment variable CLP_STRING_CCSID is defined. The defined CCSID is valid till the next CCSID definition. An unsupported CCSID (0) can be used to restore the interpretation to the system code page. NOTE: This is no character set conversion, only the UNICODE code points 0-127 which are on different code points in the different EBCDIC code pages are replaced. All other higher code points (e.g. German Umlauts ('ä','ü','ö')) are not touched. The partial CCSID conversion are mainly useful for application programming interfaces. At compile time the CCSID for literals must be defined. This CCSID could be differ from the system CCSID (local character set) of variable parameter. In such a case a application can mark the literal part in the CCSID used for literals at compile time, and the variable part could be conform to the CCSID defined over the LANG variable. See the C example below: ------------------------------------------------------------------------ snprintf(acCmd,sizeof(acCmd),"&1047;get.file='&0;%s&1047'",pcFilename); ------------------------------------------------------------------------ C-Code are normally in 1047 and if no literal conversion defined then the literals also in 1047. The file name is a parameter in local character set. In Cobol the default code page for literals is 1140. To define the CCSID for CLP strings from outside, the environment variable CLP_STRING_CCSID can be defined. This is useful if an application cannot recompile with the correct code page for the literals. On ASCII/UTF-8 platforms a miss-interpretation of punctuation characters smaller than 128 is not possible. On such platforms the LANG variable is not used for command interpretation or printouts. The escape and CCSID sequences are supported but have no effect on these platforms. This helps to develop platform independent code for CLP strings. ... print CLE_DOCTYP_CHAPTER === Command and Function Abbreviations [[CLEP.MAIN.ABBREVIATIONS]] === 1.6. Command and Function Abbreviations The command line executor supports abbreviation of command names and built-in function names depending on the unique first characters. This works analogously to keyword abbreviation in the command line parser (see <> for general information about abbreviations and other considerations). Abbreviation is only useful if you work in dialog. If the command is specified in a persistent way (e.g. in a script) writing the complete command or function name is recommended, to ensure that the script must not be changed to work with a later version of the program. For example: Version X supports only one command starting with C (CONFIG). In this case you can use CON as abbreviation. Version X+1 adds a new command CONFUSION. Now CON is ambiguous and you must use at least CONFI for CONFIG or CONFU for CONFUSION to uniquely identify the command. .Abbreviation Mechanism The abbreviation matching uses a minimum-length algorithm that compares the provided string against all available command and built-in function names. The match succeeds if the abbreviation matches the beginning of exactly one name and meets the configured minimum length requirement. * Both commands and built-in functions support abbreviation * The abbreviation must be unique among all available names * Minimum length is configurable (typically 3 characters is a common example) * The abbreviation must match the beginning of exactly one name * Case sensitivity depends on the program configuration * Leading hyphens or prefixes (- or --) are not part of the name matching If the provided abbreviation matches multiple names, the command line executor will report an ambiguity error and reject the abbreviation. In this case, provide additional characters until the abbreviation uniquely identifies a single command or built-in function. .Usage Recommendations All these capabilities are implemented to simplify the interactive use and to be compatible with several existing command line syntaxes. But in certain cases, the command interpretation could fail if not the complete command or function name is used. *IMPORTANT*: It is strongly recommended to use full command and function names in scripts, batch jobs, and automated processes to ensure clarity, maintainability, and compatibility with future versions. .Examples Interactive session (abbreviations allowed): ----------------------------------------------------------------------- :> FLACSV HEL # Abbreviation for HELP :> FLACSV SYN # Abbreviation for SYNTAX :> FLACSV MAN # Abbreviation for MANPAGE :> FLACSV VER # Abbreviation for VERSION :> FLACSV CONF # Abbreviation for CONFIG # (if CONV command exists) :> FLACSV TRA # Abbreviation for TRACE ----------------------------------------------------------------------- Production scripts (full names required): ----------------------------------------------------------------------- #!/bin/bash FLACSV HELP # Full function name FLACSV SYNTAX # Full function name FLACSV VERSION # Full function name FLACSV CONFIG # Full function name ----------------------------------------------------------------------- In case-sensitive mode, the required characters for unique identification may be indicated in uppercase in the help output. ... print CLE_DOCTYP_BUILTIN == Built-in Functions [[CLEP.BUILTIN.FUNCTIONS]] == 2. Built-in Functions Numerous built-in functions are available to obtain extensive help about syntax, errors, commands and functions of a program with help messages, manual pages and documentation. Other built-in functions can be used for owner, property, environment and trace management. All built-in functions are designed to simplify the handling of powerful and sometimes complex commands. .Abbreviations Built-in function names can be abbreviated for interactive use. See <> for detailed information about abbreviation rules and usage recommendations. [[CLEP.BUILTIN.SYNTAX]] === 2.1. Function 'SYNTAX' .Synopsis ----------------------------------------------------------------------- HELP: Provides the syntax for each command PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv SYNTAX [command[.path] [DEPTH1 | ... | DEPTH9 | ALL]] ----------------------------------------------------------------------- .Description The syntax function shows how the arguments can be set on the command line. Depending on depth the syntax is printed in one line or in structured form. A structured printout means that you have a question or exclamation mark before the argument. * question mark - optional parameter * exclamation mark - required parameter The *path* is a dotted keyword list in accordance with the syntax of the corresponding command. ------------------------------------------------------------------------ command.para1.para2.para3 ------------------------------------------------------------------------ .Options * DEPTH1 / DEPTH2 / ... / DEPTH9 ** Specifies the depth of the output. Default is DEPTH1. If the depth is greater than 1 the structured printout is used. * ALL ** Shows complete syntax for the specified path, not just DEPTH1. Structured printout is used. .Examples ----------------------------------------------------------------------- :> FLACSV SYNTAX :> FLACSV SYNTAX command :> FLACSV SYNTAX command ALL :> FLACSV SYNTAX command.para :> FLACSV SYNTAX command.para ALL ----------------------------------------------------------------------- [[CLEP.BUILTIN.HELP]] === 2.2. Function 'HELP' .Synopsis ----------------------------------------------------------------------- HELP: Provides quick help for arguments PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv HELP [command[.path] [DEPTH1 | ... | DEPTH9 | ALL]] [MAN] ----------------------------------------------------------------------- .Description The help function can provide extensive information about each parameter that can be adjusted on the command line. With the help functionality you get a structured list of arguments: * keyword - the keyword for the argument * (TYPE: ...) - the type of this argument * help message - the short help text * (PROPERTY: [...]) - the current hard-coded property value (optional) The keyword can be abbreviated, but it must be unique for this list. The required letters are uppercase if case-sensitive mode is used. In case-sensitive mode an additional line is required to mark the appropriate letter. The *path* is a dotted keyword list in accordance with the syntax of the corresponding command. ------------------------------------------------------------------------ command.para1.para2.para3 ------------------------------------------------------------------------ Help can also be used to show the corresponding detailed description of the manual pages with keyword *MAN*. .Options * DEPTH1 / DEPTH2 / ... / DEPTH9 ** Specifies the depth of the output. Default is DEPTH1. * ALL ** Shows complete help below the specified path, not just DEPTH1 and includes all aliases defined for a certain argument. * MAN ** Shows additionally the detailed description for this program, command or parameter and the next level of arguments including the aliases. .Examples ----------------------------------------------------------------------- :> FLACSV HELP :> FLACSV HELP MAN :> FLACSV HELP command :> FLACSV HELP command MAN :> FLACSV HELP command ALL :> FLACSV HELP command.para :> FLACSV HELP command.para MAN :> FLACSV HELP command.para ALL ----------------------------------------------------------------------- [[CLEP.BUILTIN.MANPAGE]] === 2.3. Function 'MANPAGE' .Synopsis ----------------------------------------------------------------------- HELP: Provides manual pages (detailed help) PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv MANPAGE [function | command[.path][=filename]] | [filename] ----------------------------------------------------------------------- .Description Shows the manual pages of the program, all commands and built-in functions and, if available, for each argument up to selections/constant definitions. This function prints the corresponding section from the user manual on the screen (doctype: *book*). If a filename is given then the doctype *manpage* of ASCIIDOC is written to the file. Do not use space characters between the key, assignment character (=) and filename. The files in ASCIIDOC format can be used to generate manpages with the tool http://www.methods.co.nz/asciidoc/[ASCIIDOC]. .Examples ----------------------------------------------------------------------- :> FLACSV MANPAGE :> FLACSV MANPAGE filename :> FLACSV MANPAGE command :> FLACSV MANPAGE command=filename :> FLACSV MANPAGE function :> FLACSV MANPAGE function=filename :> FLACSV MANPAGE command.para :> FLACSV MANPAGE command.para=filename ----------------------------------------------------------------------- [[CLEP.BUILTIN.GENDOCU]] === 2.4. Function 'GENDOCU' .Synopsis ----------------------------------------------------------------------- HELP: Generates auxiliary documentation (ASCIIDOC text format) PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv GENDOCU [command[.path]=]filename [NONBR] [SHORT] ----------------------------------------------------------------------- .Description The complete user manual is generated when only the filename is given. If a command, or command path, is specified the corresponding section of the user manual is written to a file. The generated files are in ASCIIDOC format, to be readable as a normal text document on all platforms and easily convertible into HTML, PDF or other formats with http://www.methods.co.nz/asciidoc/[ASCIIDOC]. The example below generates the complete manual and converts it into an HTML5 document in a second step. ------------------------------------------------------------------------ :> flacsv gendocu book.txt :> asciidoc -b html5 -f asciidoc-html5.conf -a toc2 -a toclevels=4 -o book.html book.txt ------------------------------------------------------------------------ The numbering will vary in places where the complete manual uses a bullet list for arguments and constants, when no detailed description is available and some of these arguments are required for the path. The numbering can be disabled by setting the optional keyword NONBR. This is useful if numbering is generated by a post processing utility (for example 'pdflatex'). To create a short manual without the CLP parameter descriptions the optional keyword SHORT can be used. This is useful, for example, if you deliver a text file and no dictionary can be used. In contrast to the built-in function <>, when generating text files the corresponding path string is written to the synopsis but index chapters and index terms are not generated anymore. Do not use space characters between the key, assignment character (=) and filename. .Examples ----------------------------------------------------------------------- :> FLACSV GENDOCU flacsv.manual.txt NONBR :> FLACSV GENDOCU flacsv.manual.txt SHORT :> FLACSV GENDOCU command=command.manual.txt :> FLACSV GENDOCU command.argument=argument.manual.txt ----------------------------------------------------------------------- [[CLEP.BUILTIN.HTMLDOC]] === 2.5. Function 'HTMLDOC' .Synopsis ----------------------------------------------------------------------- HELP: Generates the complete HTML documentation into a folder PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv HTMLDOC [path] [NUMBERS] [TYPES] [SHORT] ----------------------------------------------------------------------- .Description This built-in function generates the complete user manual in HTML format into a folder. The folder can be defined as optional parameter. If no path is given, then the current directory is used as default. With the optional keyword `NUMBERS` the numbering of headlines can be activated. The keyword `TYPE` adds the type information to each generated headline. The keyword `SHORT` will result in a short version of the document, not containing the parameters of the commands and other CLP strings. In contrast to the built-in function <>, when generating HTML no path is written to the synopsis but index terms are generated by default. The built-in function can only be used if a callback function for HTML documentation is provided. If not, an error will be issued if HTMLDOC is executed. The callback function is called for each prepared page and the unique pointer to the original manual string can be used to determine if this page was already created and if so then only a link to this existing page is required. This interface allows to generate more flexible (with dictionary, index, search) and redundancy-free HTML documentation. To understand the service provider interface (open, close and callback function) for HTML generation see the DOXYGEN documentation of FLAMCLE/CLP.h .Examples ----------------------------------------------------------------------- :> FLACSV HTMLDOC :> FLACSV HTMLDOC . SHORT :> FLACSV HTMLDOC /user/home/docu/flclbook :> FLACSV HTMLDOC NUMBERS SHORT :> FLACSV HTMLDOC /user/home/docu/flclbook SHORT ----------------------------------------------------------------------- [[CLEP.BUILTIN.GENPROP]] === 2.6. Function 'GENPROP' .Synopsis ----------------------------------------------------------------------- HELP: Generates a property file PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv GENPROP [command=]filename ----------------------------------------------------------------------- .Description A property file is generated for all commands if only a filename is provided. If a command is specified, a property file for this specific command is created. Property files can be used to define default settings for commands. For each parameter, a property entry is written to a text file. The text file contains comments to help in editing the properties. A property file can be activated with the built-in function SETPROP. Property files will be activated by their owner. A property file overrides hard-coded properties and properties defined over environment variables. A specific property file overrides the general property file. At time of generation all current default settings are written to the property file. We recommend working only with command-specific property files, because the built-in function CHGPROP can be used to generate, update and activate a property file for a certain command. Do not use space characters between the key, assignment character (=) and filename. To optimize the program performance, one can remove all unnecessary properties. See <> for the current property file content. .Examples ----------------------------------------------------------------------- :> FLACSV GENPROP owner.general.properties :> FLACSV GENPROP command=owner.command.properties ----------------------------------------------------------------------- [[CLEP.BUILTIN.SETPROP]] === 2.7. Function 'SETPROP' .Synopsis ----------------------------------------------------------------------- HELP: Activate a property file PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv SETPROP [command=]filename ----------------------------------------------------------------------- .Description The filename is set as the current global property file when no command is specified. The file name is set as the current local property file when a command is given. The property file can be generated with GENPROP and will be activated for the current owner. After generation you can activate the property file, but there will be no effect until you change the settings inside the property file, because the current default settings are written. The filename can contain replacement/mapping rules (/). Do not use space characters between the key, assignment character (=) and filename. We recommend working only with command-specific property files, because the built-in function CHGPROP can be used to generate, update and activate a property file for a certain command. See <> for the current property file content. .Examples ----------------------------------------------------------------------- :> FLACSV SETPROP general.properties :> FLACSV SETPROP command=command.properties ----------------------------------------------------------------------- [[CLEP.BUILTIN.CHGPROP]] === 2.8. Function 'CHGPROP' .Synopsis ----------------------------------------------------------------------- HELP: Change a property value in the currently active property file PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv CHGPROP command [path[=value]]* ----------------------------------------------------------------------- .Description The built-in function updates property values in the currently active (see <>) property file for a dedicated command. If no property file is activated, a property file is generated (see <>), updated with the provided property list and activated (see <>). The first argument of CHGPROP is the command name. All other arguments are key-value pairs of properties that should be updated. The key is internally prefixed with the root (owner.program.command.). The values are enclosed in double quotation marks. Multiple properties of a command can be updated at once by separating them with a space character (please do not use spaces between key, assignment character (=) and the value). This set of properties is parsed by the CLP. If no property is provided, the property file for the command is either parsed or generated (if it does not exist) and then activated without updating properties. This behavior can be used to generate and activate command specific property files for the different commands. The built-in function reads and parses the currently active property file. Then it parses the provided property list and writes the updated property file back to disk. The currently active property file could be a global, not command specific property file. In such a case, a new command specific property file is generated and activated. Properties from the global property file are copied into the newly generated one. If no property file is defined (see <>) that corresponds to the owner, program and command, a property file is generated. The filename formats below are used to read or write property files from/to the home directory: On non-mainframe systems (WINDOWS, UNIX, MAC): ------------------------------------------------------------------------ ".owner.program.command.properties" ------------------------------------------------------------------------ On mainframe systems (ZOS, VSE, BS200, ...): ------------------------------------------------------------------------ ".OWNER.PROGRAM.COMMAND.PROPS" ------------------------------------------------------------------------ If the default filenames and/or path are not sufficient, you can change the filename of each property file by setting environment variables using the following naming convention: ------------------------------------------------------------------------ OWNER_PROGRAM_COMMAND_PROPERTY_FILENAME ------------------------------------------------------------------------ If no home directory is defined, then the current working directory is used as default directory to save the property files. On mainframes SYSUID is used for the first level qualifier, to represent the "home directory". Property files are managed per owner: This means that updates are only done for the current owner. To delete a property you can simply specify the path without the root and without a sign. See <> for the current property file content. .Examples ----------------------------------------------------------------------- :> FLACSV CHGPROP command overlay.object.argument=value :> FLACSV CHGPROP command overlay.object.argument :> FLACSV CHGPROP command object.argument=value1 argument=value2 ----------------------------------------------------------------------- [[CLEP.BUILTIN.DELPROP]] === 2.9. Function 'DELPROP' .Synopsis ----------------------------------------------------------------------- HELP: Remove a property file from configuration PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv DELPROP [command] ----------------------------------------------------------------------- .Description Without a command the current global property file is deleted from the configuration data. A command specific property file can be deleted from the configuration data when the command name is given. Property files are managed per owner, this means that deletion is only done for the current owner. We recommend working only with command-specific property files. See <> for the current property file content. .Examples ----------------------------------------------------------------------- :> FLACSV DELPROP :> FLACSV DELPROP command ----------------------------------------------------------------------- [[CLEP.BUILTIN.GETPROP]] === 2.10. Function 'GETPROP' .Synopsis ----------------------------------------------------------------------- HELP: Show current properties PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv GETPROP [command[.path] [DEPTH1 | ... | DEPTH9 | DEPALL | DEFALL]] ----------------------------------------------------------------------- .Description All or certain properties can be shown for a dedicated path. The *path* is a dotted keyword list according to the syntax of the corresponding command. ------------------------------------------------------------------------ command.para1.para2.para3 ------------------------------------------------------------------------ A help message for a certain parameter will also show the assigned property value. See <> for the current property file content. .Options * `DEPTH1 / DEPTH2 / ... / DEPTH9` ** Specifies the depth of the output. Default is DEPTH1. * `DEPALL` ** Shows all properties for the specified path, not just DEPTH1. * `DEFALL` ** Shows all defined properties for the specified path. .Examples ----------------------------------------------------------------------- :> FLACSV GETPROP :> FLACSV GETPROP command :> FLACSV GETPROP command DEFALL :> FLACSV GETPROP command.para :> FLACSV GETPROP command.para DEPALL ----------------------------------------------------------------------- [[CLEP.BUILTIN.SETOWNER]] === 2.11. Function 'SETOWNER' .Synopsis ----------------------------------------------------------------------- HELP: Defines the current owner PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv SETOWNER name ----------------------------------------------------------------------- .Description The current owner id (prefix or separation) can be changed. The owner concept is very powerful to separate different property settings. You can run the same command with different properties simply by switching the owner. The owner is a general solution to separate all settings and can be used for environment, client and other purposes. If not already defined, the owner is written to the environment table under the keyword OWNERID. This environment variable can for example be used as replacement in file names (~/.dat) or to refer to a signature key. .Examples ----------------------------------------------------------------------- :> FLACSV SETOWNER com.company ----------------------------------------------------------------------- [[CLEP.BUILTIN.GETOWNER]] === 2.12. Function 'GETOWNER' .Synopsis ----------------------------------------------------------------------- HELP: Show current owner setting PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv GETOWNER ----------------------------------------------------------------------- .Description The current owner id (prefix for separation) will be shown. The owner concept allows managing different configurations as a logical separation of what is done with this id. .Examples ----------------------------------------------------------------------- :> FLACSV GETOWNER ----------------------------------------------------------------------- [[CLEP.BUILTIN.SETENV]] === 2.13. Function 'SETENV' .Synopsis ----------------------------------------------------------------------- HELP: Set an environment variable (defined in the config file) PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv SETENV variable=value ----------------------------------------------------------------------- .Description This function allows setting environment variables within the configuration file for a certain owner. All defined environment variables are placed in the current environment table of the process before a command is executed. Do not use space characters between the key, assignment character (=) and value. *Attention:* The environment variables will be temporarily overwritten .Examples ----------------------------------------------------------------------- :> FLACSV SETENV LANG=DE_DE.IBM-1141 :> FLACSV SETENV LANG=DE_DE.UTF-8 :> FLACSV SETENV ENVID=T :> FLACSV SETENV ENVID=P ----------------------------------------------------------------------- [[CLEP.BUILTIN.GETENV]] === 2.14. Function 'GETENV' .Synopsis ----------------------------------------------------------------------- HELP: Show the environment variables (defined in the config file) PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv GETENV ----------------------------------------------------------------------- .Description This function lists all environment variables which are set within the configuration file for a certain owner. All shown environment variables are placed in the environment table of the process. *Attention:* The environment variables will be temporarily overwritten .Examples ----------------------------------------------------------------------- :> FLACSV GETENV ----------------------------------------------------------------------- [[CLEP.BUILTIN.DELENV]] === 2.15. Function 'DELENV' .Synopsis ----------------------------------------------------------------------- HELP: Delete an environment variable (defined in the config file) PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv DELENV variable ----------------------------------------------------------------------- .Description This function will delete environment variables from the configuration file for a certain owner. .Examples ----------------------------------------------------------------------- :> FLACSV DELENV LANG ----------------------------------------------------------------------- [[CLEP.BUILTIN.LSTENV]] === 2.16. Function 'LSTENV' .Synopsis ----------------------------------------------------------------------- HELP: List status of all possible usable environment variables PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv LSTENV ----------------------------------------------------------------------- .Description This function will list the status of all possible usable environment variables. .Examples ----------------------------------------------------------------------- :> FLACSV LSTENV ----------------------------------------------------------------------- [[CLEP.BUILTIN.HLPENV]] === 2.17. Function 'HLPENV' .Synopsis ----------------------------------------------------------------------- HELP: List help message for all possible usable environment variables PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv HLPENV ----------------------------------------------------------------------- .Description This function will print the help message for all possible usable environment variables. .Examples ----------------------------------------------------------------------- :> FLACSV HLPENV ----------------------------------------------------------------------- [[CLEP.BUILTIN.TRACE]] === 2.18. Function 'TRACE' .Synopsis ----------------------------------------------------------------------- HELP: Manage trace capabilities PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv TRACE ON | OFF | FILE=filename ----------------------------------------------------------------------- .Description Tracing for command line parser and commands can be enabled or disabled. A trace is only required to diagnose errors. In such a case a trace file must be defined first, then the trace can be activated, the erroneous command executed and the trace file sent to the support team. If no trace file is defined, stdout/stderr is used as default. To prevent tracing on the screen, please define a trace file first before tracing is switched on. Do not use space characters between the key, assignment character (=) and filename. .Examples ----------------------------------------------------------------------- :> FLACSV TRACE FILE=filename :> FLACSV TRACE ON :> FLACSV TRACE OFF ----------------------------------------------------------------------- [[CLEP.BUILTIN.CONFIG]] === 2.19. Function 'CONFIG' .Synopsis ----------------------------------------------------------------------- HELP: Shows or clear all the current configuration settings PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv CONFIG [CLEAR] ----------------------------------------------------------------------- .Description The actual configuration list with owner id, property file names, trace settings, environment variables and more is shown. With the option CLEAR, the configuration data including the corresponding file will be deleted. The configuration file name can be defined by the environment variable: ------------------------------------------------------------------------ FLACSV_CONFIG_FILE=config.file.name ------------------------------------------------------------------------ This can be used to work with a global configuration file. If this location is not defined, the configuration file is stored in the home directory with the name: ------------------------------------------------------------------------ .flacsv.config ------------------------------------------------------------------------ If no home directory is defined for the current user (this case is very improbable), the working directory is used. To read the configuration file when the environment variable above is not defined, CLE first looks in the working and then in the home directory. This makes it possible to prefer a property file, by copying it to the current working directory. On mainframes the data set name 'SYSUID.FLACSV.CONFIG' is used as default. SYSUID as high level qualifier is a kind of replacement for the current home directory in other operating systems in this way. .Examples ----------------------------------------------------------------------- :> FLACSV CONFIG :> FLACSV CONFIG CLEAR ----------------------------------------------------------------------- [[CLEP.BUILTIN.GRAMMAR]] === 2.20. Function 'GRAMMAR' .Synopsis ----------------------------------------------------------------------- HELP: Shows the grammar for commands and properties PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv GRAMMAR ----------------------------------------------------------------------- .Description The grammar used for interpreting the command line and property files is shown. This is helpful for understanding how the commands and property files are interpreted by the command line processor. See <> for an explanation and the output of this command. .Examples ----------------------------------------------------------------------- :> FLACSV GRAMMAR ----------------------------------------------------------------------- [[CLEP.BUILTIN.LEXEMES]] === 2.21. Function 'LEXEMES' .Synopsis ----------------------------------------------------------------------- HELP: Shows the regular expressions accepted in a command PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv LEXEMES ----------------------------------------------------------------------- .Description The regular expression used for the tokens of the command syntax will be shown. This could be helpful in understanding how the commands and property files are interpreted by the command line processor. Moreover it will be shown how to define a number, a string, a keyword and other values inside a command. See <> for an explanation and the output of this command. .Examples ----------------------------------------------------------------------- :> FLACSV LEXEMES ----------------------------------------------------------------------- [[CLEP.BUILTIN.LICENSE]] === 2.22. Function 'LICENSE' .Synopsis ----------------------------------------------------------------------- HELP: List license information for the program PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv LICENSE ----------------------------------------------------------------------- .Description The license string of the software product is shown. This string is provided to the command line executor (CLE) by the calling program and should reflect the current license text for this program. .Examples ----------------------------------------------------------------------- :> FLACSV LICENSE ----------------------------------------------------------------------- [[CLEP.BUILTIN.VERSION]] === 2.23. Function 'VERSION' .Synopsis ----------------------------------------------------------------------- HELP: List version information for the program PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv VERSION ----------------------------------------------------------------------- .Description The version of the software product is shown. This string is provided to the command line executor (CLE) by the calling program and should reflect the current version information for this program. See <> for the output of this command. .Examples ----------------------------------------------------------------------- :> FLACSV VERSION ----------------------------------------------------------------------- [[CLEP.BUILTIN.ABOUT]] === 2.24. Function 'ABOUT' .Synopsis ----------------------------------------------------------------------- HELP: Show information about the program PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv ABOUT ----------------------------------------------------------------------- .Description Shows information about the software product like version, copyright, external libraries, license and other attributes. This string is provided to the command line executor (CLE) by the calling program and should reflect the current about information for this program (FLACSV). See <> for the output of this command. .Examples ----------------------------------------------------------------------- :> FLACSV ABOUT ----------------------------------------------------------------------- [[CLEP.BUILTIN.ERRORS]] === 2.25. Function 'ERRORS' .Synopsis ----------------------------------------------------------------------- HELP: Show information about return and reason codes of the program PATH: limes.flacsv TYPE: BUILT-IN FUNCTION SYNTAX: > flacsv ERRORS ----------------------------------------------------------------------- .Description This built-in function prints explanations for the return/condition/exit codes of the executable and, if available, the reason codes of executed commands. The command line executor (CLE) initializes the CLP structure. Calls the command line processor (CLP). Calls the mapping function, which converts the CLP structure into a corresponding command structure. Then it runs the command and as last step it calls the finish function with the command structure, to close all files and free all the allocated memory. If one of these steps fails, then a corresponding return (condition/exit) code is given back from the executable. Only the command execution can result in an error (return code 8) or in a warning (return code 4). The command itself must return a reason code for such a warning or error. This means that the return (condition/exit) code can be used to control the batch processing. The reason code gives more information about the error or warning. See sections <> and <> for an explanation and the output of this command. .Examples ----------------------------------------------------------------------- :> FLACSV ERRORS ----------------------------------------------------------------------- ... print CLE_DOCTYP_PROGRAM == flacsv Utility == 3. flacsv Utility Commands are used to run powerful subprograms. The command line processor compiles a table-defined syntax into a corresponding preinitialized data structure. This structure is mapped to the parameter structure of the corresponding subprogram. The subprogram can then be executed with the defined arguments/parameters. To support these variable commands several built-in functions are available and described in a separate <>. .Abbreviations Command names can be abbreviated for interactive use. See <> for detailed information about abbreviation rules and usage recommendations. Each supported command is explained in a separate section in this document. Each section contains a synopsis including the help message, the path, the type and the syntax followed by a detailed description. If an argument of this command is an object or overlay or, if a detailed description is available for this argument, a separate section with synopsis (help, path, type, syntax) and description is written, otherwise a bullet list is printed which contains the keyword, the syntax and the help message. For the syntax of an overlay braces `{}` are used to keep all possible arguments of an overlay logically together. These braces are not part of the real syntax. The braces are only written to demonstrate clearly that one of these arguments must be selected with the DOT operator (optional) for defining the overlay. To be compatible with certain shells, the features below are implemented: * Strings can be enclosed with single '' or double "" quotation marks * Integrated strings (without spaces) can also be defined without quotes * Keywords can also start with "-" or "--" in front of the qualifier * If it is unique then parentheses and the dot can be omitted for objects and overlays Commands can be declared in deep hierarchical depth. In order to simplify their handling the path is a powerful instrument for managing only relevant parts of it. Because of that the path is printed for each synopsis. To run commands under different owners, the owner id can be defined in front of the command. To suppress the output of the command line executor you can set QUIET or SILENT as the last parameter. In addition to QUIET, SILENT also suppresses the error messages. These options have no effect on the output of the commands and built-in functions. For job control, the maximum (and minimum) condition code (MAXCC=[max][-min]) of the command execution can optionally be set as the last parameter for each command. The value 'max' is the maximum condition code. If the condition code, that would be returned if MAXCC was not specified, would be greater than 'max', it is reduced to the value of 'max'. If the condition code would be smaller than 'min', the actually returned condition code is reduced to 0. Both, 'max' and 'min', values are optional. To only specify the minimum, simply omit the 'max' value, i.e. the MAXCC value starts with a hyphen. Example: The clause `MAXCC=8-4` will set each condition code greater than 8 to 8 and each condition code smaller than 4 to 0, while `MAXCC=-4` only sets condition codes smaller than 4 to 0. ------------------------------------------------------------------------ flacsv [OWNER=oid] command "... argument list ..." [MAXCC=[max][-min]] [QUIET] flacsv [OWNER=oid] command=" parameter file name " [MAXCC=[max][-min]] [QUIET] ------------------------------------------------------------------------ The parameters for each command can be provided as an argument list on the command line or as a parameter file. ... print CLE_DOCTYP_CHAPTER === Wildcards [[flcl.wildcards]] === 3.1. Wildcards The wildcards listed below are supported in many different places when specifying strings (e.g. file names). ------------------------------------------------------------------------ '*' - zero or more characters '+' - one or more characters '?' - exactly one character '%' - exactly one character (backward compatible with FLAM4 and conform with ISPF (not in URLs)) '#' - exactly one digit (not supported on MVS, because '#' could be part of a qualifier) '=' - exactly one digit (supported on all platforms but mainly for MVS) '^' - escape character (put it before a wildcard character if it is part of the file/member name) ------------------------------------------------------------------------ If one of the wildcard characters is part of the string itself, you can escape the wildcard character with the caret (`^`). ------------------------------------------------------------------------ 'dat^*.txt' - the file "dat*.txt" ------------------------------------------------------------------------ Wildcards are a powerful tool for file processing and searching in our compressed and encrypted archives. ..Wildcards when matching typed columns Beside file names, wildcards can be used in the match records of a filter (MATCH.DATASET) to search inside an archive. A column of an archive is stored in a neutral internal form which is not text for every type, so the comparison is defined against a fixed string form of the column value. ------------------------------------------------------------------------ STRING the text itself DATE ISO-8601, YYYY-MM-DD[THH:MM:SS[.ffffff]][Z] INTEGER, INT64 decimal, shortest form, no '+' on positive numbers, '-' on negative numbers, no leading zeros FLOAT decimal, shortest form, '.' as decimal point, no '+', no thousands separator -- independent of the machine's locale, so a pattern is portable BINARY hexadecimal (base 16), UPPER CASE letters ------------------------------------------------------------------------ How the pattern itself is written depends on the type, because a match record is read through the row specification like any other data. ------------------------------------------------------------------------ STRING the text, as declared for the column DATE in the layout declared for the column, transformed field by field into the ISO form FLOAT in the notation declared for the column, the decimal separator translated and a group separator dropped INTEGER, INT64 decimal digits and '-'; a column declared with another BASE cannot be matched with wildcards, because a pattern cannot be converted between bases BINARY hexadecimal in either case, folded to upper case; only ENCODE=BASE16 supports wildcards, since with ENCODE=OFF the bytes of the pattern are the bytes of the value, and BASE32 or BASE64 are out of scope ------------------------------------------------------------------------ Not every wildcard is available for every type. Only a STRING column carries a code page (CCSID), so only there can the characters '#' and the escape '^' be recognised reliably: both are variant characters in EBCDIC and differ per code page. For all other types the supported set is ------------------------------------------------------------------------ '*' '+' '?' '%' '=' ------------------------------------------------------------------------ which are part of the invariant EBCDIC character set and therefore mean the same on every platform. Using '#' or '^' on such a column is reported as an unsupported character together with its position. Nothing is lost by this: '#' and '=' both stand for exactly one digit, so write '=' instead. Escaping is not needed either, because none of the five characters can occur in the canonical string form of a number, a date or a hexadecimal value. ...Number patterns A pattern for a FLOAT column is written in the notation declared for that column, not in the comparison form. The declared decimal separator is translated and a declared group separator is dropped, so with SEPARATOR=COMMA the pattern '100=,0=' searches exactly what '100=.0=' would search on a column declared with a period. A separator that is neither the declared decimal nor the declared group separator is rejected. Take care when the declared decimal separator is a comma and the match records are read as CSV: by default the comma is the field separator of the record as well. Either enclose the field, or take the comma out of the separator set. Both are set on the CSV format of the column, SEPCHR for the separator characters and FLDCHR for the enclosing ones. ------------------------------------------------------------------------ col(name='PRICE' format.csv(sepchr=SEMICOLON) type.float(...)) ------------------------------------------------------------------------ The same applies to a date pattern whose declared separator is a comma, and to any other pattern that contains one. ...Date patterns A match record for a date column is written in the layout declared for that column, not in ISO. The pattern is transformed field by field into the ISO form before it is compared. ------------------------------------------------------------------------ YYYYMMDD + '2023==02' -> '2023-==-02' YYYY-MM-DD + '2023-*-15' -> '2023-*-15' DD.MM.YYYY + '==.02.2023' -> '2023-02-==' YY-MM-DD + '23-*-15' -> '2023-*-15' (century from PIVOT) ------------------------------------------------------------------------ The two wildcard classes behave differently inside a field. '?', '%' and '=' stand for exactly one character, so they keep the width of the field and may be mixed with digits: '0=' for MM selects the months 01 to 09. '*' and '+' have an unknown length, so they are only accepted as a stand-in for a complete field. Writing them inside a field, for example '1*' for MM, is rejected because the field boundary would be ambiguous. Two cases cannot be expressed at all and are rejected with a message. ------------------------------------------------------------------------ wildcard in YY the century is derived via PIVOT, so the ISO year would be ambiguous -- declare the column with YYYY wildcard in DDD the Julian day of year has no counterpart in the ISO form YYYY-MM-DD ------------------------------------------------------------------------ ...Wildcards and column indexes A wildcard that reaches the indexed part of a column makes the index (signature) unusable for that column, so the column always matches on index level and the decision is left to the comparison. The result is the same either way, only the search is slower. Whether this is silent, a warning or an error is controlled by SIGNWC. For STRING and DATE the position of a wildcard decides: the index stays usable as long as the wildcard is outside the indexed part. With an index over the ISO year for example, '2023-*-15' can still use it while '*-02-15' cannot. For INTEGER, INT64, FLOAT and BINARY a wildcard always removes the column from the index. The internal form of a number has a variable length and no position of its own for a single digit, so there is no part of it over which a signature could still be computed. ... print CLE_DOCTYP_CHAPTER === Filename Handling === 3.2. Filename Handling All filenames are mapped by CLE/P, which means that all replacement mechanisms it supports are also valid for each filename used within a command. See <> of <>. All filenames specified in command strings are parsed and handled in a unified way across the different platforms. Standard replacements by shells are usually not usable within the command syntax. There are some special attributes that can be appended to a filename when using paths or the URL-like syntax by using one of the following separators followed by a value string: * `/?` - member name (to access a member in an archive by name) * `/:` or `/#` - member index (to access a member in an archive by position) * `/&` - CCSID that the file's contents are encoded in The filename base may also contain an embedded record-format qualifier. A qualifier is a dot-or-underscore-delimited token in the filename base (`[._][._]`). When recognized, the qualifier sets the record format and related parameters automatically without requiring explicit command parameters. This is particularly useful when processing files transferred from a mainframe where the DCB attributes (RECFM, LRECL) are known but not stored in the file itself. The following qualifier groups are supported: .FIX group (RECFM=FIX, logical record length mandatory) The token is the z/OS RECFM string followed by the logical record length. The physical (file) record length is the stored value plus the format-specific overhead: ------------------------------------------------------------------------ MYDATA.F80.bin -> RECFM=F, LRECL=80 MYDATA.FB80.bin -> RECFM=FB, LRECL=80 MYDATA.FBA80.bin -> RECFM=FBA, net LRECL=80 (physical=81: 80 data + 1 ASA) MYDATA.FR80.rrds -> RECFM=FR, net LRECL=80 (physical=88: 80 data + 8 RRDS) ------------------------------------------------------------------------ Supported FIX tokens: F, FB, FBA, FBM, FBS, FBSA, FBSM, FS, FSA, FSM, FE, FEA, FEM, FK, FKA, FKM, FL, FLA, FLM, FR, FRA, FRM, FA, FM. In all cases the qualifier digit is the net user-data length. The physical (file) record length is the net length plus the overhead: ASA and MCC suffix variants add 1 byte; RRDS (FR/FRA/FRM) variants add 8 or 9 bytes. For the BCSV command and the record converter (CNV.REC / READ.BINARY), a plain `[._]F[._]` qualifier also sets the record length: ------------------------------------------------------------------------ EBCDIC_F0256.dat -> fixed record length 256 DS.F00065535 -> fixed record length 65535 ------------------------------------------------------------------------ .VAR/U group (RECFM=VAR or UNSTRUCTURED, LRECL optional) The qualifier value, when present, is the maximum record length. When omitted, the individual record length fields in the data determine the actual length: ------------------------------------------------------------------------ data.VB.bin -> RECFM=VB, MAXLRECL not specified data.VB4096.bin -> RECFM=VB, MAXLRECL=4096 data.VBA4096.bin -> RECFM=VBA (ASA), net MAXLRECL=4096 (physical=4097) data.U.bin -> RECFM=U ------------------------------------------------------------------------ Supported VAR/U tokens: V, VA, VM, VB, VBA, VBM, VBS, VBSA, VBSM, VS, VSA, VSM, VE, VEA, VEM, VK, VKA, VKM, VL, VLA, VLM, VR, VRA, VRM, U, UA, UM. .DLM group (single-byte delimiter) ------------------------------------------------------------------------ data.DLM0A.txt -> delimiter byte 0x0A (LF) data.DLM25.ebc -> delimiter byte 0x25 ------------------------------------------------------------------------ .LFM group (length-field format for variable records) LFM qualifiers describe the binary length prefix written in front of each variable-length record. They may appear alone or after a VAR/U qualifier: ------------------------------------------------------------------------ data.VB256.LFM32B.bin -> VB MAXLRECL=256, 32-bit big-endian header data.LFMS4AD.bin -> 4-char ASCII decimal length string data.LFMH.bin -> z/OS RDW (4-byte big-endian, inclusive) ------------------------------------------------------------------------ LFM syntax: `LFM[I]` (integer), `LFMS[I]` (string), `LFMB[I]` (BCD), `LFMH[E]` (host RDW). See the LENFMT overlay documentation for parameter meanings. .Qualifier direction Qualifiers in input filenames are detected automatically (AUTODET) by the record I/O component and the record converter. The `addext` parameter of `write.record()` builds a qualifier from the effective write parameters and appends it to the output filename, enabling self-documenting write/read round-trips without explicit parameters on the read side. On z/OS MVS host datasets (names starting with a subsystem prefix ':') filename qualifiers are not applied because the catalog DCB attributes always take precedence. If the URL-like syntax is used, special characters can be URL-encoded as a percent character followed by two hex digits (%xx). If no schema is provided, but a raw path, URL-encoded characters are not decoded because the string is not a URL. The schema `file://` can be used to access a local file on the system in URL-like syntax. Providing a CCSID is mainly intended to be used for parameter files which are read to memory from a remote location which may require conversion to the local character set. The filename is the only way to specify the CCSID for this type of files. Filenames in archives (ZIP, TAR, FLAM) or certain file headers (GZIP, PGP) are sanitized when reading or writing to prevent directory traversal attacks. This type of attack aims at writing files in arbitrary locations in the filesystem by storing specially crafted paths in the archive or file header. For example, extracting a ZIP file containing paths such as `/etc/passwd` or `../../../../../../etc/passwd` as user root on a Unix-based system could lead to a lock-out of all users. Path sanitization removes all path components that lead to an extraction outside the desired output directory. This includes turning absolute paths into relative ones and removing all `..` directory components. Both example paths above would be transformed to `etc/passwd` which are safe for extraction. The filename handling works as follows: .On mainframe systems (POSIX(OFF)): Usually, a filename has to be specified fully qualified, because a dynamic allocation is done in most cases. The following substitutions can be used, which are automatically replaced by their respective value during execution: ------------------------------------------------------------------------ - to expand an environment variable ------------------------------------------------------------------------ If the environment variables below are not defined, the following defaults are used: ------------------------------------------------------------------------ - The current user id (Example: file='.TEST.DATA') - The current user id (Example: file='DD:') - The current home directory (Example: file='/dat.bin') - The current user id, but normally the default owner 'limes' is defined - The default is simply the first letter of SYSCLONE or if not defined 'T' for test, normally not required for file names ------------------------------------------------------------------------ The syntax to define a DD name is: ------------------------------------------------------------------------ DD:name - a DD-Statement for name (Example: file='DD:INDAT') ------------------------------------------------------------------------ A replacement may also be used in a DD name definition: ------------------------------------------------------------------------ Example: file='DD:' ------------------------------------------------------------------------ Additionally, you can specify member names in a DD name definition if a PDS(E) is allocated. The member name can be fully qualified or contain <>. Member names for archives can be specified as part of the URL-like notation or it can be specified separately. ------------------------------------------------------------------------ Example: file='DD:INPUT(*B*)' file='DD:INPUT(EGBERT)' file='DD:INPUT(EGBERT)/?*HOGO*' name='DD:INPUT(*GB*)' member='*HOGO*' ------------------------------------------------------------------------ When using static allocation (DD name) for writing, the DCB parameter must be provided if the file does not exist. Otherwise, the defaults of the runtime environment (often `PS RECFM=UNDEFINED LRECL=0 BLKSIZE=6144`) are used. A static allocation is only useful to write the logical byte stream in a certain physical file format. In all other cases, we recommend using dynamic allocation when writing new files. With a static allocation the JCL owns the physical side, so the FALLOC() object has nothing to describe. To say how the data is to be cut into records, use RECFORMAT and RECLENGTH at the write object itself (WRITE.RECORD, or RECFMT and RECLEN at FIO.REC): ------------------------------------------------------------------------ write.record(file='DD:OUTPUT' recformat=FIX reclength=80) ------------------------------------------------------------------------ Without them the records keep the shape of the original, which turns a text matrix in an FB data set back into a byte stream with the delimiters inside the records. See the FALLOC() manual page for how the logical and the physical description are merged. Since version 5.1.22-28565 the DD name must not be prefixed with 'DD:' anymore. If only one qualifier given, if it a valid DD name and if a allocation for it found, then the qualifier will be used as DD name. If you use FILE=STREAM when reading the file descriptor STDIN (DD:SYSIN) and when writing STDOUT (DD:SYSPRINT) is used. All other messages are printed by default to STDERR (DD:SYSOUT). For read the default DD name 'FLAMIN' and for write the default DD name 'FLAMOUT' is preferred if no file specification given. If such a allocation not found at write the default dataset name (original name plus extension) is used. For read or write of a FLAMFILE additional the DD name 'FLAMFILE' are supported to be backward compatible with the old FLAM utility. A Unix path name must contain a forward slash (`/`). To use a file in the current directory `./filename` must be used. Paths relative to the home directory may start with a tilde character (`~`) as an abbreviation for for UNIX pathnames or for host dataset names. ------------------------------------------------------------------------ Example: file='~/mydata.txt' file='~.po.dataset(test)' file='DD:~' ------------------------------------------------------------------------ NOTE: Starting with version 5.1.5, the plus sign (`+`) can no longer be used as abbreviation for the user's home directory. The tilde (`~`) remains unaffected and is now the only valid abbreviation. The plus sign (`+`) is now a wildcard character. It was supported as alternative for EBCDIC systems, because tilde is located on different code points depending on the EBCDIC code page. Since version 5.1.5, we support the correct interpretation of diacritical characters on EBCDIC systems based on the CCSID defined in the environment variable LANG. see <> and <> of <> To specify the casing (mainly useful for USS on ZOS) for a user ID, the following definitions can be used (if not defined as environment variable): ------------------------------------------------------------------------ CUSER - The current user ID in upper case (same as ) Cuser - The current user ID in title case cuser - The current user ID in lower case ------------------------------------------------------------------------ .On Unix, Linux, Windows and other non-mainframe systems (including USS) A filename may be an absolute or relative path and may contain any of the substitutions (including ~) mentioned in the previous section. To use a smaller than character (`<`) as part of a filename, the character must be escaped by doubling it. We recommend not to use special or whitespace characters in filenames. The ampersand character (`&`) can be used instead of at sign (`@`) because the letter has different code points in EBCDIC. The alternative character on EBCDIC systems, if `@` is not working, is the section sign `§` (`&PAG;`). The command line parser converts `@` and `§` according to the code page set by the LANG environment variable. If LANG is not set or incorrect, use `&` or `§` as alternative. The section sign code point is CCSID-dependent: 0xB5 in CCSID 37/500, 0x7C in CCSID 273/1141 (German). On USS and Micro Focus EDZ, DD names are supported. A UNIX path name is distinguished from a data set name in the same way as it is done in the z/OS runtime environment. Example on USS or EDZ: ------------------------------------------------------------------------ file="//DS:user.test(data)" file="//'user.test(data)'" file="//test(data)" file="//DD:name" file="DD:name" ------------------------------------------------------------------------ .Within Microfocus Enterprise Server (Linux or Windows) If the variable FLAM4MF is set to `yes` or a valid CCSID, a DD name is assumed unless it contains a dot character and is used as the dataset name. Otherwise a DD name must be specified as DD:name and a dataset is given with `//'name'` ------------------------------------------------------------------------ Examples: file="//'user.test(data)'" file=DD:name file=readme.txt ------------------------------------------------------------------------ This corresponds with the syntax for host dataset names on USS of z/OS. With the Microfocus support for Windows and Linux, you can work on x86 Windows and Linux systems with the local MF-EDZ-Enterprise-Server like you work with the catalog access on USS for MVS files. If you work with EBCDIC on the record interface in a EDZ environment then you must set the FLAM4MF environment variable to the used CCSID (e.g. IBM1141). If a CCSID is defined and starts with `IBM`, this will also override the default CCSID in the character conversion component and mark it as z/OS platform. In an error situation, it is possible to enable writing a trace to a file, which can be used to analyze problems. The environment variable `FLAM4MF_TRACEFILE` must contain a valid filename to write the trace output. To set the missing system variables for MF-EDZ, several solutions are implemented including `DD:SYSVAR` and the environment variables `FLAM4MF_STATIC/DYNAMIC_SYSVAR` documented above. .Local and remote file access (via SSH) with URLs (all platforms) Instead of local filenames, complete URLs defining all communication parameters and (if required) the member name or index can be used. Optionally a CCSID for this file can be added. The syntax is: ------------------------------------------------------------------------ schema://userid:authdata@hostname:port/filename/&ccsid schema://userid:authdata@hostname:port/filename/?membername/&ccsid schema://userid:authdata@IPv4:port/filename/:index/&ccsid schema://userid:authdata@[IPv6]:port/filename/#index/&ccsid ------------------------------------------------------------------------ If the URL-like syntax is used, special characters can be URL-encoded as a percent character followed by two hex digits (%xx). If no schema is provided, but a raw filename, URL-encoded characters are not decoded as the string is not a URL. The schema `file://` can be used to access a local file on the system in URL-like syntax. Currently, remote file access via SSH is supported for all file types including FLAM4 archives. The `ssh://` prefix indicates remote access via SSH. The userid is optional, the default is the current login user ID. You can use replacements also in the connection parameter. I.e. `` gets replaced with the lower case login user id, which is useful mainly on mainframes, where the SYSUID is in upper case. The password is optional. If no password is specified, public key authentication is attempted. The hostname/IP is mandatory and the port is optional, defaulting to the SSH standard port 22. The hostname and the remote file path are separated by a slash. An IPv6 address must be put in square brackets (e.g. `[::1]`). An absolute path requires another slash (i.e. // after the hostname). Otherwise, the path is relative to the current directory after login to the SSH server. See examples below: ------------------------------------------------------------------------ file='ssh://user:password@hostname:port//path/file.xxx' name='ssh://:password@hostname/path/file.xxx' name='ssh://[::1]//path/file.*/?*/member.*' ------------------------------------------------------------------------ This URL notation is a simplified form of accessing files via SSH. For even more connection options, you can use the `net.ssh()` object which allows, e.g., the configuration of the public/private key file path or different host key check procedures. See the documentation for the `net.ssh()` object for further details. If both, URL notation and `net.ssh()` object, are used to configure the SSH connection, communication parameters specified in the URL have higher priority. So, if a username is given within the URL as well as the through the object, the username from the URL is used. The file for an inverse command cannot be on a remote system. If a remote report, info or log file is specified, the output data written to the remote system is in the local system's character set. When reading user tables, checksum files, password files or other miscellaneous text files, an automatic character conversion to the local character set is performed. When accessing files via SSH from a mainframe system, the remote file is handled like a file from a non-mainframe platform that does not support datasets since SSH file access is block-oriented and not record-oriented. This means that, if record I/O is used, records are written or expected in one of the open formats on the remote system. For example: ------------------------------------------------------------------------ read.record(file='DATA.SET.PSVBA133') write.record(file='ssh://@server1/[name]') ------------------------------------------------------------------------ This statement for the CONV command of FLCL reads a local physical sequential variable block dataset with a logical record length of 133. A pair of 4 byte length field followed by the record data is written to the remote file for each read record. This is because the default mapping of the host record format (`VB`) to a non-host platform is `OPN_VAR`. .Using file name lists With version 5.1.21 the file name specification was extended to an array. This make it possible to provide a list of files/URLs in the forms below: ------------------------------------------------------------------------ file=hugo.txt file='ssh://user@server/berta.dat file=s*.txt file[hugo.txt,'ssh://user@server/berta.dat,s*.txt] file=hugo.txt,'ssh://user@server/berta.dat,s*.txt file=>list.txt file=>'DD:FLIST' ------------------------------------------------------------------------ In the last case a parameter file containing the list with the URLs can be provided using dynamic or static allocation (DD: only for z/OS). In the case a lot of URLs with several connections can be used. FLAM supports now a connection cache with the result that only the required connections are open. The `NET` overlay provides the default settings for each different URL. In each file specification wildcards are still possible. The feature can be used to combine different files in one archive. ... print CLE_DOCTYP_CHAPTER === Input to Output Name Mapping [[flcl.input.output.name.mapping]] === 3.3. Input to Output Name Mapping When creating/extracting an archive, converting files or (more generally) doing batch processing, one might wish to automatically generate new filenames based on a pattern applied to the input filenames. Example: You might want to read a member from a FLAMFILE which was created on a mainframe and contains dataset names. You wish to convert the dataset name into a path-based file name. You can achieve this by defining a pattern for the output file or member name. .Pattern syntax: An output filename pattern can consist of simple text strings and tokens. Text strings are used as-is as output filename. Tokens are enclosed in square brackets (`[]`) and describe processing rules applied to the original file or member name. The pattern can consist of an arbitrary number of text strings and tokens (including none at all). A token can consist of one or more processing rules. Multiple processing rules are separated by a pipe character (`|`). Every processing rule within a token receives the output of the previous rule as its input. This allows chaining of processing rules. Characters inside tokens can be escaped by a preceding caret (`^`) to avoid interpretation as pattern syntax. Outside of tokens, carets are treated literally, except in front of square brackets to treat the bracket literally and not as token delimiter. The keywords of the tokens below are not case sensitive. This is the list of supported processing rules: * [path] - Extracts the string before the last slash or backslash, i.e. the path without trailing (back)slash * [name] - Extracts the part after the last (back)slash, i.e. the filename * [base] - Extracts the part between the last (back)slash and the last dot, i.e. the filename without extension * [ext] - Extracts the part after the last dot, i.e. the file extension * [dsn] - Extracts the part after the last slash (if there) and the first parenthesis (optional member name) * [member] - Extracts a string enclosed in parenthesis from the filename part of the string, e.g. a PDS member name on z/OS * [copy] - Simply copies the input string (useful if you only want to add an extension) * [upper] - Converts all characters to upper case * [lower] - Converts all characters to lower case * [title] - Converts the first character to upper case, all others to lower case * [cutX] - Cuts off the string after the X-th character, where X is a positive or negative number indicating how many characters to keep, counting from the front (positive) or back (negative) * [indN] - Inserts the current file-output index as decimal number of at least length N (padded with preceding zeros). The index is incremented per output file (e.g. when a directory walk visits the next input file) but stays constant across members written inside one archive. N is any number between 0 and 9, where 0 results in variable length numbers with their shortest possible representation (no preceding zeros). * [midN] - Inserts the current member-output index (archive-local counter) as decimal number of at least length N (padded with preceding zeros). The counter starts at 1 and is incremented for every member written into the same ZIP archive (including the automatic reopens triggered by end-of-table handling). Outside archive contexts the token falls back to the file-output index (same as [indN]). Useful to guarantee unique member names when the same row-spec is written more than once in the same archive and a single output ZIP must remain ISO/IEC 21320-1 compliant. N is any number between 0 and 9, where 0 results in variable length numbers with their shortest possible representation (no preceding zeros). * [rndN] - Inserts random numbers of length N (with preceding zeros) N is any number between 0 and 9, where 0 results in variable length numbers (no preceding zeros) * [AX] - A is a place holder for a single-byte character, X is a positive or negative number; Extracts the string part between the X-th occurrence of the specified character and the next occurrence of that same character. If X is negative, search starts at the back and in reverse. If X is 0, the part before the first occurrence of A is extracted. * [AX-] - A is a placeholder for a single-byte character, X is a positive or negative number; Extracts the string part after the X-th occurrence of the specified character. If X is negative, search starts at the back and in reverse. If X is 0, the input string is copied. * [AX-BY] - A and B are placeholders for a single-byte character, X and Y are positive or negative numbers; Extracts the string part between the X-th occurrence of A and (relative to that occurrence) the Y-th occurrence of B. Like above, negative numbers mean counting from the back. * [search=replace] - Replaces the first occurrence of the string 'search' with the string 'replace' * [search=*replace] - Replaces all occurrences of the string 'search' with the string 'replace' * [regex:/pattern/replace/modifiers] - String replacement with Perl-compatible regular expressions * [table] - Evaluates to the current table name if end of table handling is activated (only when reading tables) * [filter] - Evaluates to the current filter name if end of table handling is activated (only when subsets from archive) * [recf] - Record-format token of the input file (full length, e.g. "FB", "VB", "FBSA", "F", "V", "D", "T", "B" and the ASA/MCC/REL variants). Expands to the empty string when the input has no record format (e.g. plain text files) or when the token is used in a context without access to the source attributes (e.g. CMDPRO pre/post command expansion). * [recfN] - First N characters of the record-format token. N is any number between 0 and 9, where 0 means the full length (same as [recf]). N=1 emits only the leading letter (F/V/D/T/B/U), which is useful when a one-character RECF hint suffices in the output filename. If N is greater than the full token length, the full token is returned (no padding). * [recl] - Record length of the input file as a variable-width decimal (e.g. "80", "1024"). Empty when the input has no known record length. * [reclN] - Record length of the input file as decimal, zero-padded to exactly N digits (e.g. "[recl4]" yields "0080" for LRECL 80). N is any number between 0 and 9, where 0 means no padding (same as [recl]). If the decimal already exceeds N digits, the full number is returned without truncation. .Using regular expressions Regular expressions (short: regex) can be used to apply arbitrarily complex matching rules and substitute these matches using the syntax `[regex:/pattern/replace/modifiers]`. They can be chained like any other processing rules using the pipe character, e.g. `[regex:/pattern/replace/modifiers|upper]` ..Regex delimiters The character immediately following the keyword `regex:` is a delimiter to separate the pattern, replacement string and optional modifiers. The delimiter can be any single-byte character that does not occur in the pattern or replacement string and is expected exactly three times. You can also use pairs of brackets as delimiters in which case the matching closing bracket is expected to follow an opening bracket. A few examples using different delimiters, all performing the same replacement: * `[regex:/pattern/replace/modifiers]` * `[regex:#pattern#replace#modifiers]` * `[regex:{pattern}{replace}modifiers]` The pattern and replacement strings must not be escaped with carets (`^`), even though they are inside a token (`[]`). ..Regex patterns Regular expression patterns in the Perl flavor are matched against the input string to find the substrings that are to be replaced. Writing regular expressions may seem like a daunting task if you never did so before. Understanding the basics is not as complicated as it may seem. You can find a tutorial that will get you started quickly here: + https://www.regular-expressions.info/quickstart.html Countless other tutorials and documentation for regular expressions can be found on the web. We recommend to consult these ressources to familiarize yourself with regular expressions. Advanced users can find the complete syntax documentation for writing regular expression patterns by following this URL: + https://www.pcre.org/current/doc/html/pcre2pattern.html ..Regex replacement strings Replacement strings are mostly string literals, except for the dollar character. A dollar character is an escape character that can specify the insertion of characters from capture groups and names from `(*MARK)` or other control verbs in the pattern. In other words, it can be used to insert parts of the match into the replacement string. Capture groups in a regex pattern are sub-expressions in parenthesis. These can be accessed by their numerical index starting at 1 (`$1`, `$2`, ...). The capture group accessed by `$0` always references the whole match. Capture groups can also be referenced by name. A named group in a regex pattern uses the syntax `(?subpattern)`. This group can then be referenced in the replacement with `\$\{name}`. ..Regex modifiers Modifiers change the behavior of regular expression matching and/or replacement. Modifiers are optional and must be placed after the final delimiter. Multiple modifiers can be combined. Currently, these modifiers are supported: * `g`: Enables global matching. The regular expression is applied repeatedly and all matches are replaced. By default, regular expression matching stops after the first match has been replaced. * `E`: Fail with an error if the regular expression does not produce any match. By default, the input string remains unchanged if there is no match. * `R`: Instead of replacing matches in the input string, only the replacement string is returned. * `i`: Enables case insensitive matching. * `m`: Enables multi-line matching. By default `^` and `$` only match at the start/end of the entire input string. With multi-line matching, they also match after/before newlines. Note, however, that unless the `s` modifier is set, the "any character" metacharacter (`.`) does not match at a newline. * `s`: If set, a dot metacharacter in the pattern matches any character, including one that indicates a newline. However, it only ever matches one character, even if newlines are coded as CRLF. By default, a dot does not match at a newline. * `x`: Enables extended matching mode. Most whitespace characters in the pattern are ignored except when escaped or inside a character class. Characters between an unescaped `#` outside a character class and the next newline, inclusive, are also ignored, which makes it possible to include comments inside complicated patterns. * `n`: Disables numbered capturing groups (inside parenthesis) in the pattern. Any opening parenthesis that is not followed by `?` behaves as if it were followed by `?:` but named parenthesis can still be used for capturing (and they acquire numbers in the usual way). .Examples for using filename patterns: ------------------------------------------------------------------------ infile='/path/to/file.ext' pattern='text_without_tokens' outfile='text_without_tokens' infile='/path/to/file.ext' pattern='text^[path^]' outfile='text[path]' infile='/path/to/file.ext' pattern='[PATH]' outfile='/path/to' infile='/path/to/file.ext' pattern='[Name]' outfile='file.ext' infile='/path/to/file.ext' pattern='[ext]' outfile='ext' infile='/path/to/file.ext' pattern='[UPPER]' outfile='/PATH/TO/FILE.EXT' infile='/path/to/file.ext' pattern='[cut5]' outfile='/path' infile='/path/to/file.ext', pattern='FILE[ind4]' outfile='FILE0001' infile='/path/to/file.ext', pattern='FILE[rnd4]' outfile='FILE0815' infile='DATA.FB80.dat' (FB/80) pattern='[base]_[recf]_[recl4]' outfile='DATA.FB80_F_0080' infile='DATA.FB80.dat' (FB/80) pattern='[base|/-1].[recf1][recl]' outfile='DATA.FB80.F80' infile='/path/to/file.ext' pattern='[/2]' outfile='to' infile='/path/to/file.ext' pattern='[/-1]' outfile='file.ext' infile='/path/to/file.ext' pattern='[/2-]' outfile='to/file.ext' infile='/path/to/file.ext' pattern='[/3-.1]' outfile='file' infile='/path/to/file.ext' pattern='[path=directory]' outfile='/directory/to/file.ext' infile='/path/to/file.ext' pattern='[regex:/\.ext$/.bin/]' outfile='/directory/to/file.bin' infile='/path/to/file.ext' pattern='[regex:#/([^/]+)$#$1#R]' outfile='file.ext' infile='USER.DATA.PDS(MYMEMBER)' pattern='[member]' outfile='MYMEMBER' infile='USER.DATA.PDS(MYMEMBER)' pattern='[dsn]' outfile='USER.DATA.PDS' infile='USER.DATA.PDS(MYMEMBER)' pattern='[.0|lower]/[.1|lower]/[member|lower].[ext|(0|lower]' outfile='user/data/mymember.pds' infile='/verylongpath/to/longfilename.ext' pattern='[path|verylong=|/=*.|.1-|upper].[base|cut-8|upper]' outfile='PATH.TO.FILENAME' infile='/path/to/*.txt' pattern='.GDG(+[ind0])' outfile='USER.GDG(+n)' whereby n starts with 1 and is incremented for each file infile='FLG.MY.GDG.G0001V01' pattern='[base](+[ind0])' outfile='FLG.MY.GDG(+n)' whereby n starts with 1 and is incremented for each file ------------------------------------------------------------------------ The last example shows a wildcard used at read and the different targets should be written into a generation data group as several versions. The file index in minimal amount of digest '[ind0]' could be used to define the next generations '(+[ind0])'. .More information: Patterns can be used for output file and member names. This mapping mechanism is very powerful. For example, it can be used to compress each directory into a separate FLAMFILE, with each FLAMFILE containing all files of that directory. ------------------------------------------------------------------------ write.flam(file='[path]/?[name]') ------------------------------------------------------------------------ If you define an output filename pattern that results in the same path being generated more than once, the second and further occurrences will append the data to previously written files. If no pattern defined, this means that all matching files on input, will be written to one output file or archive, the append flag is automatically enabled starting with the second file. ... print CLE_DOCTYP_CHAPTER === Handling of Empty Records [[flcl.handling.empty.records]] === 3.4. Handling of Empty Records The handling of empty records is complicated on z/OS. FLAM5 uses the language environment (LE) to read and write records. If the environment variable '_EDC_ZERO_RECLEN' is not defined, it defaults to Y(es) for the record I/O operations. When reading, this results in an empty record being converted to a neutral FLAM5 record element. When writing, however, an empty variable length record is not written at all by the LE. To circumvent this, a padding character (default: 0x00) is written for an empty variable length record. To suppress this added padding character when reading the output file later, a record of length 1 with 0x00 or 0x40 will result in an empty record of length 0 if the environment variable '_EDC_ZERO_RECLEN' is set to 'Y'. In any other case, empty variable length records are converted to a record of length 1 containing the padding character by default on z/OS (binary files: 0x00, text files: whitespace character (0x40)). On platforms which support writing empty variable length records, when writing fixed-length records or when print control characters are used, this kind of dirty padding of empty variable length records is not done. ... print CLE_DOCTYP_CHAPTER === Performance Considerations === 3.5. Performance Considerations Performance (CPU/memory utilization and throughput) is an important topic when using FLAM. The following points describe some major factors that contribute to the overall performance of FLAM. They should give you a good starting point if you experience performance issues. .Pre-load architecture In order to minimize consumed CPU cycles during mass data processing, FLAM pre-calculates as much as possible before processing any data, which requires memory on the one hand and spends some CPU time on the other. If you process many small files with FLAM, this can have a negative effect on performance. FLAM is not designed and developed to process small amounts of data. .Hardware accelerator support FLAM uses special instructions of the respective hardware platforms to be able to accelerate some algorithms. On IBM's mainframes, for example, this concerns the use of CPACF and zEDC. .Outsourcing of computing power to zIIP For IBM mainframe systems, it is possible to outsource memory-to-memory functions (compression, conversion, formatting) as SRBs to so-called zIIP processors. Although this does not result in a performance advantage, it does save chargeable CPU time (MSU). .Record count and block size FLAM processes data in self-sufficient segments, which represent a block or a certain number of records. The amount of data that is processed in one go determines the throughput performance. It is important to understand that there is an overhead per segment, so the segments should not be too small. However, if too much data is put into a segment, then the processing constantly takes place outside the caches, which also reduces the performance. Here, the block size or the record count must be optimally selected for the respective platform. For historical reasons, FLAM works with a default block size of 64 KiB and a record count of 512. This is a good average value across all platforms, but not always optimal. It should also be noted that such a segment is expanded after decompression, i.e. in this case one should always start with a smaller block size. On many systems, 256 KiB is now a good block size. The optimal record count is the optimal block size divided by the average record length. .Character set conversion Character set conversion can take up a lot of CPU time. By default, FLAM checks each character for validity and stops processing with an error if invalid or unconvertible characters are found (MODE=STOP). This form of error handling is relatively expensive in terms of CPU utilization, but ensures detection of incorrectly encoded text data. Enabling error handling that leads to the replacement of these incorrect characters, processing can be accelerated. The character set conversion is faster if all characters of the input alphabet result in data of the same length in the output alphabet. With the environment variable `FL_DEFAULT_CHAR_MODE` (or the system variable `&FLCHARM` on z/OS), the default mode for error handling during character set conversion can be changed from `STOP` to `SUBSTITUTE`, for example, in order to achieve higher performance here. On z/OS, FLAM uses the IBM Unicode Services as long as it supports the required character set conversion and is known to be faster than FLAM's implementation. This only works for simple conversions without mappings, subsets, reporting or transliterations. The environment variable `FL_IBM_UNICODE_SERVICE` (or the system variable `&FLIBMUS`) can be used to enable/disable the use of IBM Unicode Services. By setting the variable to ON instead of the default AUTO, the IBM Unicode Services will also be used if STOP is selected as the character conversion mode, which saves a lot of CPU cycles, but at the cost of no longer noticing some errors in the character data. .Logging FLAM writes many log messages by default, which also takes up CPU time and I/O. The `QUIET` or `SILENT` keywords and the `MESSAGE` object can be used to control the amount of output and thus limit or increase the amount of work involved. Often, during the transition from test to production, people forget to reduce FLAM's chattiness, which cost both disk space and CPU cycles in production. .Literal cache FLAM uses a global literal cache to save memory and CPU when comparing strings. Here a hashtable is used. Its size can be defined via the environment variable `FL_LITERAL_CACHE_SIZE` (or system variable `&FLITCS`). In the debug log, the appropriate statistics are output, which may help you to make adjustments if necessary. .ZIP archives and PS-VB on Mainframes When creating ZIP archives, offsets and statistics values must eventually be written into the member headers, which requires repositioning (fseek()) within the file. This is possible for host datasets on z/OS via so-called RBA access. In a PS-VB file, this requires a tree in the background where the OS remembers which relative byte address (RBA) is in which block, in which records at which offset in the record. This is extremely time-consuming and if there are many members in the ZIP archive, this can increase the runtime considerably. The maintenance of this tree also costs a lot of CPU, which is not charged to the application. To avoid this, you should use file types for ZIP archives that are suitable for RBA access. Under z/OS, these are primarily never files in the USS. Alternatively, FLAM also supports streamed ZIP archives, as they were developed for piping under Unix systems. With the keyword `STREAM`, you can force a purely sequential write, which then also works with a PS-VB, but you should check whether ZIP tool used for extraction understands this streamed format. With PS-FB datasets, the RBA access is faster because you do not need a tree, but there is padding at the end of the ZIP file. Since ZIP archives have to be read from behind, many other tools cannot cope with this padding because they expect the ZIP directory and not 0 bytes or blanks. With FLAM this is not a problem, but as already mentioned, many other tools then recognize the ZIP file as incomplete or not even as a ZIP file. .Module loading on z/OS FLAM utility modules are loaded when they are needed and released again afterwards, so a workload that opens many files repeats the load. Each load that is not satisfied from storage is a directory search and I/O against the STEPLIB, and on the mainframe that is the one performance item outside FLAM that a system can remove entirely: put the FLAM load libraries under LLA/VLF control, and the repeated load is served from virtual storage instead of from DASD. On one measured installation this removed about 3500 EXCPs for the FL5CORE dynamic link library alone. The PARMLIB members and the operator commands for it are described in the installation documentation for z/OS - look for "Performance Recommendation" in install.txt. Two points matter beyond the mechanics. A library added with FREEZE serves the copy LLA has cached, so FLAM maintenance needs the library removed from LLA control first and added back afterwards; the installation documentation gives both PARMLIB members for that. And for an installation with a high call volume, the Link Pack Area is the stronger form of the same idea - a module in LPA is loaded once for the whole system and shared by every address space. Both are decisions for your system programmer, not settings in FLAM. .z/OS CEEOPTs (from install.txt) For memory allocation, don't use the realloc control feature of CEE. ------------------------------------------------------------------------ _CEE_REALLOC_CONTROL=bound,percentage ------------------------------------------------------------------------ FLAM is only tested with default settings. With some memory allocation strategies out of memory errors can occur. For good performance and enough memory we recommend the IBM default runtime options except for run CEEOPTS below: ------------------------------------------------------------------------ //CEEOPTS DD * ALL31(ON) STACK(1M,1M,ANYWHERE,KEEP,512K,128K) HEAP(1M,1M,ANYWHERE,KEEP,8K,4K) /* ------------------------------------------------------------------------ With `ALL31(OFF)` and `HEAP(,,BELOW,,)` the available memory is too small for the stack in some cases, especially when using the FLUC subsystem, table or large-record support. Since version 5.1.25, FLAM uses application-specific run-time option defaults with the `CEEUOPT` assembly language source program to set these application-specific option defaults. The `CEEUOPT3` member used for 31 bit and the `CEEUOPT6` member used for 64 bits are located in hlq.FLAM.SRCLIB. We recommend building and linking the examples if you are going to write applications that use our APIs (e.g. FLCREC). For batch processing we recommend to create a storage report (RPTSTG(ON)) and define the CEEOPTS like recommended in the report. ... print CLE_DOCTYP_CHAPTER === Security Considerations === 3.6. Security Considerations Protection is an important issue for FLAM. FLAM can help to fulfill many security requirements (e.g. PCIDSS, ISO27001, ...), using encryption (OpenPGP, SSH), hardware security modules (PKCS#11 and IBM CCA/ICSF for key exchange and signing), strong access control and checksums, antivirus scanning and much more, nevertheless the following points must be observed for the secure operation of FLAM. .SOC support With a maintenance contract you can register on our homepage (flam.de) for a newsletter about security vulnerabilities. This newsletter will be sent if a security vulnerability for FLAM or it's using libraries comes up. This is useful in supporting your secure operating center (SOC). .Related software In the `install.txt` for your platform under prerequisites you will find the software on which FLAM is based or depends. If nothing is listed, then only the operating system with the language environment and the corresponding libc is affected. In the `about.txt` you can see all the external libraries and their versions that FLAM integrates. Both pieces of information can be used to determine whether the use of FLAM might be affected by an emerging security vulnerability. .Check coherence With the call `flcl version` a version of each software component is written. The installation of FLAM will be coherent if all build numbers are the same. The build number is the last number of the version behind the minus character. Especially for dynamic linked parts of the software it will be important to check if the installation was well done. We recommend establishing an installation verification process which runs the built-in function `VERSION` and verifies that the build numbers are all the same. .Code signing limes support code signing for modules and installation packages if it is possible on a platform. If not limes provides secure checksums to allow verification of the packages after download. .Environment There are a lot of environment variables or system symbols which are security related. Below you can find some important examples (please note: this list is incomplete): * FL_PGP_PREF_SYMALG_AES128 - Invert order of preferred symmetric algorithms from AES256/192/128 to AES128/192/256 in PGP certificates * FL_ALLOW_LOW_ENTROPY - If defined and no source of entropy is available, the random number generated is seeded with a low entropy which may result in weak encryption keys * FL_DEACTIVATE_HW_CRYPTO_ACCELERATION - Deactivate hardware acceleration for cryptographic operations (enforce use of software implementation) * FL_SSH_HOME_DIR - Directory containing SSH key files and known_hosts file (/home/user/.ssh) * FL_KEY_EXPIRE_WARN_DAYS - Amount of days to warn before a key will expire (default is 90 (3 months)) See <> and verify these settings. To get a list of the current environment please use the command below: ----------------------------------------------------------------------- flcl info get.system ----------------------------------------------------------------------- .SAF support For operating systems implementing a secure access facility (e.G. z/OS) FLAM supports a lot of policies and additional resources for better control about the usage of FLAM. For more information about this see <> and the `install.txt`. Unfortunately, there is no such additional protection of application-specific resources for other operating systems. With the SAF support it is possible to ensure minimal key, password or hash length. Critical operations like input logging, packet capturing, antivirus scanning etc. can be deactivated and more. There are a lot of policies and resources defined for the supported cryptographic features (PGP, EDC, SSH), which will not be explained below in more details. .Credentials Credentials (Passwords, PINs, Keys, ...) entered using the CLP strings are flagged as protected and will not be printed in clear form. Such values are replaced by `****** SECRET ******` unless the input logging is activated. In this case the complete command string is written to the log and might contain critical values. After parsing the command line FLAM knows the critical values and is replacing them. Additionally it is better to provide such sensitive input within parameter files. The file can be better protected. But the best solution in such cases is to use a hardware security module (HSMs). .Support of hardware security modules (HSMs) FLAM supports hardware security modules (HSMs) over a service provider interface for session key procedures and signing (PGP, FLAMFILE, ...). Currently, the use of PKCS#11 and IBM CCA (including ICSF) are supported. We recommend using the HSM support instead of clear passwords for key stores or such critical things. The misuse of the service provider interface can be prevented completely with SAF support. .Verification of cryptographic algorithms All software cryptographic operations are done using a central crypto kernel (CryCore). This singleton determines the optimal implementation depending on the computer used. It supports hardware acceleration if possible. But before the concrete algorithm is used the first time a self test against the NIST test vectors is done, to ensure that the loaded functions do implement the algorithm correctly. For IBM mainframes mainly the CPACF functions are used to implement the cryptographic algorithms. For all other platforms the library libcrypto of the OpenSSL project is used. .Secure randomness To generate keys (mainly for SSH) it is important to have a high entropy. By default, FLAM ensure a high entropy which could result in an error, if only weak randomness is available. The environment variable `FL_ALLOW_LOW_ENTROPY` allows low entropy to prevent such errors and the policy `LOW.ENTROPY` can be used to prevent this. In some cases the quality of randomness is not so important, in such cases it could be useful to allow low entropy and in another context it will be dangerous, and then it will be better to prevent this. .Secure delete of sensitive data FLAM supports secure delete of sensitive data (keys, passwords, pins). This means that erasing the memory is done as early as possible and the overwriting of the memory will not be eliminated by the optimizer for the release code. .Antivirus scanning FLAM supports antivirus scanning over a service provider interface. It will be required by certain security standards to scan the clear content of a file before it is encrypted and stored on a remote system. In such a case the antivirus scanner can be used. Our standard implementation uses clamAV, but the interface can be implemented against each kind of antivirus scanner. Simultanously, this interface is a backdoor to intercept clear data and should be closed for all other cases. FLAM implements a complete set of SAF control mechanism which can be used to ensure this. .Input logging The input logging will write the complete input parameter string to the log (this is not done by default and only important for debugging in a few cases). In this case the content is not known and might contain critical data or credentials. The SAF policy `LOG.INPUT` can be used to prevent the activation of input parameter logging. .Packet capturing Packet capturing is useful to find errors for remote connections (e.g. SSH) but packets might contain critical or sensitive data. With the SAF policy `SSH.PCAP.ALLOWED` you can control the usage of the PCAP feature and prevent this kind of backdoor for normal processing. .Command pre- and post-processing The command pre- and post-processing is a powerful feature of FLAM and can be used in once or per file, locally or remote at read or write. The feature was implemented mainly for process automation but to run commands (often executable code) on remote systems could be dangerous. To prevent misuse FLAM has implemented a set of SAF controls. .FLAM started task (FLAMSTC) The FLAM started task (FLMSTC) on z/OS is an active component running in the background providing services to implement the subsystems, including the LE-less interface for the FLUC record interface. The FLAMSTC provides the scheduling of SRBs in another enclave for the zIIP support and the possibility to run authorized functions. This is realized with three different PC routines. The FLAMSTC does not implement own supervisor calls (SVCs). Functions of the FLAM and FLUC subsystems are called as part I/O SVCs. The QA process is using zACS to penetrate the PC routine and the corresponding recovery routines. The only findings of the zACS scan are regular program terminations of the FLAMSTC with 0C4. .FLUC file system (flucFS) The FLUC or FLAM file system should only run under your own user. This prevents access rights from being circumvented here. .Error trace The error trace is an important feature of FLAM which help a lot to analyze errors. For a good cause determination the data involved in the error is often written to the error trace. This means that the error trace could include parts of sensitive data items. In a case of an error this trace might need protection. It is similar to a dump processing in an error situation. Such a dump could contain critical data and must be protected. .Quality assurance limes is using vulnerability scanners and static code analysis for conformance with certain Coding Standards to prevent critical mistakes in our programs. Additional CPPCHECK and ScanBuild are used for static code analyzes. For each platform limes uses the standard memory checker (e.g. valgrind on linux) for dynamic code analysis running over all test cases. But there are a lot of platforms without a tool for runtime analyzes. Therefore, limes has implemented an own resource checker (memory, file handles, stack, ...) in the debug code to detect stack and memory overflows, missing frees(leaks) or unclosed or misused files. Limes is using Coco(r) to determine the code coverage of FLAM and ensure that each part of the code is tested. Squish(r) is used to automate testing of our GUIs. For automated testing of each ISPF panel and limes command we use the API of the x3270 terminal program. For all testing limes is using an own test framework which runs all the unit and regression tests on all platforms. The cross-reference tests nsures that data produced by standard tools (e.g. gzip, openssl enc, gpg) is understood on each platform and produced output of FLAM from each platform can be read with the standard tools. We use continues integration, this means that all the build tests are running after each build, a rebuild must be successful before the code is taken over from the developer repository to the main repository and all the long-running tests (performance, large files, ...) will be started automatically each night and anything will be checked each morning. This allows us to deliver rolling releases, where a customer can request a new parameter on Wednesday, and we can deploy a new revision or release on Monday. For this each weekend is currently used to clean anything, rebuild anything, tests anything, package anything, install the new package to a clean system, test anything again. And if anything was successful then we can publish the new build for our users. Sometimes it takes long to get all tests to run with success, and we cannot release a new version each week. All regression tests must be successful before we publish a new version of FLAM. The publishing include an encrypted code escrow for the complete source used to build this release. All build results, all test results anything will be stored in an archive for this publication. So we can review the complete state if a customer has a problem with a certain build including all tests results, all compile and link lists and so on. We can install from this repository easily each published build, to set up the customer environment to reproduce an error or a behavior. .Methodology limes is using a mixture of SCRUM and team concert with strict coding guidelines where requirement, design, development, build, test, packaging, installation, testing again and the deployment runs in parallel. Version control is done with GIT and anything is integrated in an eclipse workspace under Arch Linux for our developer. The software development process ensures that all described QA measures are adhered to. .Documentation The documentation is generated from the source code and based on that it must be totally in sync with the application and components used. The quality of the description for a parameter or the manual page for an object or overlay could be bad, but any implemented feature is documented and vice versa. We use the FLAMCLEP command string parser and anything what this compiler is accepting is defined in tables and the help message and the manual page must be provided otherwise a table error occurs. The same method is used for interface specifications (API), where each function and each parameter for each function must be documented in form of comments in the code otherwise the docu generation will fail. This process ensures that the documentation is always up-to-date and in sync with the implementation and the user can trust that anything is documented. ... print CLE_DOCTYP_CHAPTER === SAF Considerations [[flcl.saf.considerations]] === 3.7. SAF Considerations Beginning with version 5.1.21 a lot of additional checks against a System authorization facility (SAF) can be activated. These SAF support gives for example an RACF administrator on z/OS the possibility to activate different security policies and control a lot of resources used by FLAM. * Several security policies (disable PCAP, ensure finger prints, minimal key length, ...) * CLE/P parameter strings (complete control about the functionality) * Control access to pre- and post-processing commands (executed on remote or local systems) * To secure all service provider interfaces (FAVE, FCPE, FKME, FSEG, FOBJ) ** Control to which AV daemon the clear data is transfered * Control access to complete URLs containing connection, path, filename and member ** Allow to protect members of PDS/E, ZIP or FLAM archives * Secure SSH connections (Control user, server and port) * Secure HTTP/REST connections (gate, method-level control, TLS bypass protection) * PGP key management (User ID to import, export, generate, delete) * Control access to PGP user and key IDs for signing and key exchange * Control methods, algorithms, modes and a lot more of the en/decryption component * Activate and enforce additional SMF logging (e.g. record type 119 (SSH)) * All feature codes of the FLAM license module The complete SAF setup is documented in the corresponding install.txt and can be simply extended on user request. For z/OS with RACF we recommend at minimum the definitions below (be careful with this example, we are no RACF specialists): ------------------------------------------------------------------------ //S01 EXEC PGM=IKJEFT01,DYNAMNBR=75,TIME=100,REGION=6M //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTERM DD DUMMY //SYSUADS DD DSN=SYS1.UADS,DISP=SHR //SYSLBC DD DSN=SYS1.BRODCAST,DISP=SHR //SYSTSIN DD * RDEFINE CDT + $FLAM + CDTINFO(CASE(ASIS) /* mixed case profile names */ + DEFAULTRC(4) /* default */ + DEFAULTUACC(NONE) /* default */ + FIRST(ALPHA) /* profile name first char */ + GENERIC(ALLOWED) /* default */ + KEYQUALIFIERS(0) /* default */ + MAXLENGTH(246) /* maximum prof name length */ + OPERATIONS(NO) /* default */ + OTHER(ALPHA, /* prof name allows A-Z,a-z */ + NUMERIC, /* 0-9 */ + NATIONAL, /* #,@,$ */ + SPECIAL) /* all except blank ( ) , ; */ + POSIT(202) /* in user range 128-527 */ + RACLIST(ALLOWED) /* setr raclist allowed */ + SECLABELSREQUIRED(NO) /* default */ + SIGNAL(NO) /* default (no ENF signals) */ + ) SETROPTS CLASSACT(CDT) SETROPTS RACLIST(CDT) SETROPTS RACLIST(CDT) REFRESH //S02 EXEC PGM=IKJEFT01,DYNAMNBR=75,TIME=100,REGION=6M //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTERM DD DUMMY //SYSUADS DD DSN=SYS1.UADS,DISP=SHR //SYSLBC DD DSN=SYS1.BRODCAST,DISP=SHR //SYSTSIN DD * PERMIT $FLAM CLASS(CDT) RESET /* clear permit list */ RALTER CDT $FLAM OWNER(SYS1) /* change ownership */ SETROPTS RACLIST(CDT) REFRESH //S03 EXEC PGM=IKJEFT01,DYNAMNBR=75,TIME=100,REGION=6M //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTERM DD DUMMY //SYSUADS DD DSN=SYS1.UADS,DISP=SHR //SYSLBC DD DSN=SYS1.BRODCAST,DISP=SHR //SYSTSIN DD * SETROPTS GENERIC($FLAM) RDEFINE $FLAM + ** /* cover all entities */ + OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.MUSTDEF OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.POLICIES OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.SMF.LOGGING OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.CLP.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.CMD.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.AVE.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.CPE.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.KME.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.SGU.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.OBU.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.EDC.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.FIO.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.FL4.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.ARC.CONTROL OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.SSH.CONNECT OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.RST.CONNECT OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.PGP.KEYMNGM OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.PGP.USERID OWNER(SYS1) UACC(NONE) RDEFINE $FLAM GLOBAL.PGP.KEYID OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.LOW.ENTROPY OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.LOG.INPUT OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SSH.AUTH.*.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SSH.PCAP.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SSH.WEAK.HOSTKEY.CHECK.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SSH.CUSTOM.HOSTKEY.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SSH.CUSTOM.KNOWN.HOST.FILE.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SSH.CUSTOM.CONFIG.FILE.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.KEY.GENERATE.PGP.EXPIRD.REQIRED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.KEY.GENERATE.PGP.ALGO.RSA.KEYLEN OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.KEY.GENERATE.PGP.ALGO.DSA.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.KEY.IMPORT.PGP.KIDVER OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.KEY.IMPORT.PGP.DOUBLE.KIDS OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.PGP.PWD OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.PGP.PWD.LEN.ENC OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.PGP.PWD.LEN.DEC OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.PGP.ENFORCE.ENCRYPTION OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.PGP.ENFORCE.INTEGRITY OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.PGP.ENFORCE.SIGNING OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.EDC.PARM.FILE.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.EDC.KEY.PRINT.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.EDC.KEY.INVERSE.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.EDC.NO.HEADER.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.EDC.NO.SALT.ALLOWED OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SYM.KEY.LEN.ENC OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SYM.KEY.LEN.DEC OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SYM.PWD.LEN.ENC OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.SYM.PWD.LEN.DEC OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.ARC.ENCRYPT OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.ARC.PROTECT OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.ARC.PGP OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.ARC.PWD OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.ARC.DEF.PWD OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.ARC.PWD.LEN.ENC OWNER(SYS1) UACC(NONE) RDEFINE $FLAM POLICY.ARC.PWD.LEN.DEC OWNER(SYS1) UACC(NONE) RDEFINE $FLAM FAVELIB.libfave OWNER(SYS1) UACC(NONE) RDEFINE $FLAM FAVEFUC.CLAMAVC OWNER(SYS1) UACC(NONE) RDEFINE $FLAM FAVEPAR.clamd.limes.de:3310 OWNER(SYS1) UACC(NONE) RDEFINE $FLAM FAVEIPH.clamd.limes.de OWNER(SYS1) UACC(NONE) RDEFINE $FLAM FAVEIPS.3310 OWNER(SYS1) UACC(NONE) RDEFINE $FLAM FSEGLIB.LIBFSEG OWNER(SYS1) UACC(NONE) RDEFINE $FLAM FSEGFUC.FSEGUSR OWNER(SYS1) UACC(NONE) RDEFINE $FLAM FOBJLIB.LIBFOBJ OWNER(SYS1) UACC(NONE) RDEFINE $FLAM FOBJFUC.FOBJUSR OWNER(SYS1) UACC(NONE) PERMIT ** CLASS($FLAM) RESET /* clear permit list (optional)*/ PERMIT GLOBAL.MUSTDEF CLASS($FLAM) ID(*) ACC(CONTROL) /* PERMIT GLOBAL.POLICIES CLASS($FLAM) ID(*) ACC(NONE) ACTIVE */ PERMIT GLOBAL.SMF.LOGGING CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.CLP.CONTROL CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.CMD.CONTROL CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ /* PERMIT GLOBAL.AVE.CONTROL CLASS($FLAM) ID(*) ACC(NONE) ACTIVE */ PERMIT GLOBAL.CPE.CONTROL CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.KME.CONTROL CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.SGU.CONTROL CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.OBU.CONTROL CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.EDC.CONTROL CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.FIO.CONTROL CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ /* PERMIT GLOBAL.FL4.CONTROL CLASS($FLAM) ID(*) ACC(ALTER) ACTIVE */ /* PERMIT GLOBAL.ARC.CONTROL CLASS($FLAM) ID(*) ACC(ALTER) ACTIVE */ PERMIT GLOBAL.SSH.CONNECT CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.RST.CONNECT CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.PGP.KEYMNGM CLASS($FLAM) ID(*) ACC(ALTER)/*INACTIV*/ PERMIT GLOBAL.PGP.USERID CLASS($FLAM) ID(*) ACC(ALTER) /*INACTIV*/ PERMIT GLOBAL.PGP.KEYID CLASS($FLAM) ID(*) ACC(ALTER) /*INACTIV*/ PERMIT POLICY.SSH.AUTH.PUBLICKEY CLASS($FLAM) ID(*) ACC(READ) PERMIT POLICY.SSH.AUTH.PASSWORD CLASS($FLAM) ID(*) ACC(UPDATE) /* PERMIT POLICY.SSH.PCAP.ALLOWED CLASS($FLAM) ID(*) ACC(NONE)*/ PERMIT POLICY.SSH.WEAK.HOSTKEY.CHECK.ALLOWED CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.SSH.CUSTOM.HOSTKEY.ALLOWED CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.SSH.CUSTOM.KNOWN.HOST.FILE.ALLOWED CLASS($FLAM) ID(*) ACC(CONTRL) PERMIT POLICY.SSH.CUSTOM.CONFIG.FILE.ALLOWED CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.KEY.GENERATE.PGP.EXPIRD.REQIRED CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.KEY.GENERATE.PGP.ALGO.RSA.KEYLEN CLASS($FLAM) ID(*) ACC(UPDATE) /* PERMIT POLICY.KEY.GENERATE.PGP.ALGO.DSA.ALLOWED CLASS($FLAM) ID(*) ACC(NONE)*/ PERMIT POLICY.KEY.IMPORT.PGP.KIDVER CLASS($FLAM) ID(*) ACC(UPDATE) /* PERMIT POLICY.KEY.IMPORT.PGP.DOUBLE.KIDS CLASS($FLAM) ID(*) ACC(READ)*/ PERMIT POLICY.PGP.PWD CLASS($FLAM) ID(*) ACC(ALTER) PERMIT POLICY.PGP.PWD.LEN.ENC CLASS($FLAM) ID(*) ACC(CONTRL) PERMIT POLICY.PGP.PWD.LEN.DEC CLASS($FLAM) ID(*) ACC(ALTER) /* PERMIT POLICY.PGP.ENFORCE.ENCRYPTION CLASS($FLAM) ID(*) ACC(NONE)*/ /* PERMIT POLICY.PGP.ENFORCE.INTEGRITY CLASS($FLAM) ID(*) ACC(NONE)*/ PERMIT POLICY.PGP.ENFORCE.SIGNING CLASS($FLAM) ID(*) ACC(ALTER) PERMIT POLICY.EDC.PARM.FILE.ALLOWED CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.EDC.KEY.PRINT.ALLOWED CLASS($FLAM) ID(*) ACC(UPDATE) /* PERMIT POLICY.EDC.KEY.INVERSE.ALLOWED CLASS($FLAM) ID(*) ACC(NONE)*/ PERMIT POLICY.EDC.NO.HEADER.ALLOWED CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.EDC.NO.SALT.ALLOWED CLASS($FLAM) ID(*) ACC(READ) PERMIT POLICY.EDC.STATIC.KEY.ALLOWED CLASS($FLAM) ID(*) ACC(ALTER) PERMIT POLICY.EDC.STATIC.IV.ALLOWED CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.SYM.KEY.LEN.ENC CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.SYM.KEY.LEN.DEC CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.SYM.PWD.LEN.ENC CLASS($FLAM) ID(*) ACC(CONTRL) PERMIT POLICY.SYM.PWD.LEN.DEC CLASS($FLAM) ID(*) ACC(ALTER) PERMIT POLICY.ARC.ENCRYPT CLASS($FLAM) ID(*) ACC(CONTROL) PERMIT POLICY.ARC.PROTECT CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT POLICY.ARC.PGP CLASS($FLAM) ID(*) ACC(ALTER) PERMIT POLICY.ARC.PWD CLASS($FLAM) ID(*) ACC(ALTER) PERMIT POLICY.ARC.DEF.PWD CLASS($FLAM) ID(*) ACC(NONE) PERMIT POLICY.ARC.PWD.LEN.ENC CLASS($FLAM) ID(*) ACC(CONTRL) PERMIT POLICY.ARC.PWD.LEN.DEC CLASS($FLAM) ID(*) ACC(ALTER) PERMIT FAVELIB.libfave CLASS($FLAM) ID(*) ACC(READ) PERMIT FAVEFUC.CLAMAVC CLASS($FLAM) ID(*) ACC(READ) PERMIT FAVEPAR.clamd.limes.de:3310 CLASS($FLAM) ID(*) ACC(READ) PERMIT FAVEIPH.clamd.limes.de CLASS($FLAM) ID(*) ACC(READ) PERMIT FAVEIPS.3310 CLASS($FLAM) ID(*) ACC(READ) PERMIT FSEGLIB.LIBFSEG CLASS($FLAM) ID(*) ACC(READ) PERMIT FSEGFUC.FSEGUSR CLASS($FLAM) ID(*) ACC(READ) PERMIT FOBJLIB.LIBFOBJ CLASS($FLAM) ID(*) ACC(READ) PERMIT FOBJFUC.FOBJUSR CLASS($FLAM) ID(*) ACC(READ) /* REST/HTTP resource access control (active when GLOBAL.RST.CONNECT */ /* has no ALTER permit -- see above). Resource entity is the URL. */ /* Use specific URL profiles (e.g. RST.GET.https://s3.example.com/**) */ /* instead of ** wildcards for production environments. */ PERMIT RST.CONNECT.** CLASS($FLAM) ID(*) ACC(CONTROL) /* The same resource gates a Cloud Data Access provider, because the */ /* question is the same one -- may this caller reach that place. CDA does */ /* not run through the REST layer, so the entity is not a URL: */ /* RST.CONNECT.ibmcda:// */ /* The ** profile above already covers it. To decide per provider instead: */ /* PERMIT RST.CONNECT.ibmcda://** CLASS($FLAM) ID(*) ACC(NONE) */ /* PERMIT RST.CONNECT.ibmcda://COSPROD CLASS($FLAM) ID(archiver) */ /* ACC(CONTROL) */ /* The bucket is not part of the entity: what a user id may do inside a */ /* provider follows from the credential in its CDA key file, which RACF */ /* governs through CSFKEYS. */ /* PERMIT RST.NOVERIFY.** CLASS($FLAM) ID(*) ACC(NONE) (forbid TLS bypass) */ /* The TLS floor. A LADDER, inverted on purpose: the weakest level costs */ /* the highest access, and RACF access is hierarchical, so the permitted */ /* level IS the floor. UPDATE is the recommended setting -- TLS 1.2 and */ /* above. Grant ALTER only on the one endpoint that needs TLS 1.0: */ /* PERMIT RST.TLSVSN.https://legacy.example.com CLASS($FLAM) */ /* ID(flam_users) ACC(ALTER) */ /* With no permit at any level no TLS version is offered and the */ /* connection fails. There is no environment variable for this: the */ /* permit is the configuration. */ PERMIT RST.TLSVSN.** CLASS($FLAM) ID(*) ACC(UPDATE) /* The cipher list, checked only when FL_HWTHTTP_CIPHERS names one. The */ /* level asked for is what the WEAKEST suite in the list demands, so a */ /* list of modern suites needs only READ. ALTER buys RSA with SHA-1. */ PERMIT RST.CIPHER.** CLASS($FLAM) ID(*) ACC(READ) /* Substituting the trust anchor. Checked whether the value comes from the */ /* CABUNDLE parameter of store.s3()/store.azure() or from FL_CA_BUNDLE -- */ /* the act is the same act and the source does not change it. */ /* UPDATE and not ALTER: on z/OS a key ring is required for TLS at all, so */ /* ALTER here would make the secure path the harder one. */ PERMIT RST.CABUNDLE.** CLASS($FLAM) ID(*) ACC(UPDATE) /* The backend trace. FL_HWTHTTP_VERBOSE at level 2 (UNREDACTED) writes the */ /* Authorization header into the trace -- an S3 SigV4 signature, and for */ /* Azure or anything reached through CDA the account key itself -- so it */ /* lands in a data set or in the job spool that operations can read. */ /* Level 1 redacts the header but still records endpoints, the certificate */ /* chain and timings, and FL_HWTHTTP_SSLTRACE names the key ring. */ /* */ /* READ a redacted trace, and the System SSL trace */ /* CONTROL UNREDACTED -- writing a credential out */ /* */ /* A refusal DOWNGRADES and never fails the run: UNREDACTED without CONTROL */ /* falls back to the redacted trace, and that to no trace. So a site with */ /* no profile keeps working and simply gets no trace. */ /* Grant CONTROL temporarily and on one endpoint when IBM support asks for */ /* an unredacted trace, and take it back afterwards: */ /* PERMIT RST.TRACE.https://s3.example.com CLASS($FLAM) */ /* ID(support_user) ACC(CONTROL) */ PERMIT RST.TRACE.** CLASS($FLAM) ID(*) ACC(READ) PERMIT RST.GET.** CLASS($FLAM) ID(*) ACC(READ) PERMIT RST.HEAD.** CLASS($FLAM) ID(*) ACC(READ) PERMIT RST.PUT.** CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT RST.POST.** CLASS($FLAM) ID(*) ACC(UPDATE) PERMIT RST.DELETE.** CLASS($FLAM) ID(*) ACC(CONTROL) /* NOTE: Azure OAuth2 and MSI auth modes require RST.CONNECT and */ /* RST.POST permits for the token acquisition endpoints: */ /* OAuth2: https://login.microsoftonline.com (RST.CONNECT + RST.POST) */ /* MSI: http://169.254.169.254 (RST.CONNECT + RST.GET) */ /* The RST.CONNECT.** and RST.POST.**/RST.GET.** wildcards above cover */ /* these endpoints. For restrictive environments add explicit permits: */ /* PERMIT RST.CONNECT.https://login.microsoftonline.com CLASS($FLAM) */ /* ID(flam_users) ACC(CONTROL) */ /* PERMIT RST.POST.https://login.microsoftonline.com CLASS($FLAM) */ /* ID(flam_users) ACC(UPDATE) */ /* PERMIT RST.CONNECT.http://169.254.169.254 CLASS($FLAM) */ /* ID(flam_users) ACC(CONTROL) */ SETROPTS CLASSACT($FLAM) SETROPTS RACLIST($FLAM) SETROPTS RACLIST($FLAM) REFRESH ------------------------------------------------------------------------ First (in step 1 and 2) the general resource class $FLAM must be setup. The last step defines the rights for the certain entities. The recommendation defines all the policies and enable anti virus scanning only with the defined ClamAV daemon (DSN must be adjusted). The entities for command execution or parameter string can include whitespace or one of the other 4 invalid characters '(),;'. If such an invalid character is encountered in an entity string, it is replaced by an underscore '_' before the SAF check. For example the PDS(E) 'HLQ.PO(HUGO)' results in the resource name 'FIOURL.HLQ.PO_HUGO_'. The global pre-write pre-processing command 'ls -l' results in the resource name 'CMD.PRE.WRITE.GLOBAL.ls_-l'. ... print CLE_DOCTYP_CHAPTER === JCL Considerations === 3.8. JCL Considerations If you use JCL to run FLCL batch programs, it is recommended to use the parameter file feature for inlining commands. Parameter files can also be used for each object and overlay (see example below): .Example ------------------------------------------------------------------------ //FLCLXCNV EXEC PGM=FLCL,REGION=0M,PARM='XCNV=DD:PARM MAXCC=-2' //STEPLIB DD DSN=&SYSUID..FLAM.LOAD,DISP=SHR //SYSOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //PARM DD * INPUT( SAV.FILE ( FIO.REC ( NAME=s'~input.dataset' ) ) ) OUTPUT( SAV.FILE ( FMT.BLK ( METHOD=L4X #conform to PKWARE# ) CNV.ZIP ( ) FIO.ZIP=DD:ZIPARCH ) ) /* //ZIPARCH DD * ( NAME=s'~.output.ziparch' APPEND #add member to archive# ) /* //STDENV DD * LANG=de_DE.IBM1141 /* ------------------------------------------------------------------------ The parameter files (DD:PARM, DD:ZIPARCH) are read by the command line parser and executer (CLE/P). This works only in the expected manner if NUMBER=OFF is specified for this job in the ISPF editor. With NUMBER=ON, the numbering is part of the inline code and will result in a syntax error from the CLE/P. The same is valid for the DD name STDENV. In a parameter file, you can add a semicolon at the end of each line to handle the line number as line comment. Since version 5.1.20-23372: On command level if no parameter given and no parameter file assigned, then the DD name 'FLAMPAR' is read. See the example below: ------------------------------------------------------------------------ //FLCLINFO EXEC PGM=FLCL,REGION=0M,PARM='INFO MAXCC=-2' //STEPLIB DD DSN=&SYSUID..FLAM.LOAD,DISP=SHR //SYSOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //FLAMPAR DD * GET.SYSTEM /* ------------------------------------------------------------------------ The completion code 1 and 2 only inform you that there is a warning or an error (1) in the log or that something went wrong when deallocating resources (2). However, the actual task has been completed and the subsequent processes can continue to run here. So if you want the return codes 1 and 2 to become 0, you should specify MAXCC=-2, as in the example above. To execute our commands we recommend the stack and heap definitions for the memory management of the language environment below (the IBM defaults are in comment above). If for example the increments to low (128 bytes), then the run and CPU time could increase significantly. ------------------------------------------------------------------------ //CEEOPTS DD * *RPTSTG(ON) ALL31(ON) *STACK(128K,128K,ANYWHERE,KEEP,512K,128K) LE default STACK(1M,1M,ANYWHERE,KEEP,512K,128K) *HEAP(32K,32K,ANYWHERE,KEEP,8K,4K) LE default HEAP(1M,1M,ANYWHERE,KEEP,8K,4K) /* ------------------------------------------------------------------------ Please use the storage report (above as comment) to determine the best values for your usage. With does a lot of work depending on the parameter given. It could possible depending on what is done with FLAM that better values increase performance and lower CPU utilization. With ALL31(OFF) and HEAP(,,BELOW,,) the available memory is too small for the stack in some cases, especially when using the FLUC subsystem, table or large-record support. Since version 5.1.25, FLAM uses application-specific run-time option defaults with the CEEUOPT assembly language source program to set these application-specific option defaults. The CEEUOPT3 member used for 31 bits and the CEEUOPT6 member used for 64 bits are located in hlq.FLAM.SRCLIB. We recommend to build and link the examples if you are going to write application that uses our APIs (e.g. FLCREC). To interpret commands correctly, some of the punctuation characters are on different code points depending on the EBCDIC CCSID used to enter these values. The environment variable LANG must be set to the correct CCSID to interpret tilde and other characters correctly. see <> of <> Since z/OS 2.1, a new service (CEEGTJS) is available to determine the values for exported JCL symbols in the application. The service is called dynamically and the language environment must be in the steplib concatenation to use it. If the service is not available, the exported JCL symbols cannot be used. If the environment variable replacement fails the exported JCL symbols are tried. This feature allows you to use exported JCL symbols in the control statements of FLCL like environment variables. This is mainly useful to build powerful JCL procedures. ------------------------------------------------------------------------ //E0 EXPORT SYMLIST=(CHAROUT,HASHALGO,HASHLEN) //S1 SET CHAROUT=IBM1141 //S2 SET HASHALGO=SHA512 //S3 SET HASHLEN=128 //CONV EXEC PGM=FLCL,PARM='CONV=DD:PARM' //STEPLIB DD DSN=FLAM.LOAD,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //PARM DD *,SYMBOLS=JCLONLY READ.RECORD(FILE=DD:INPUT) WRITE.TEXT(FILE=DD:GZIP COMP.GZIP() HASH(OUTPUT=DD:HASH FORMAT=HEX CUT=/2 # important out-bytes=HASHLEN*2 if hex # CCSID= ALGO=&HASHALGO. ) ) //INPUT ... //GZIP ... //HASH ...DCB=(RECFM=FB,LRECL=&HASHLEN.)... ------------------------------------------------------------------------ The environment variables have a higher priority. If there is an environment variable with the same name as an exported JCL symbol, the value of the environment variable is used. System variables available as JCL symbols (if SYSSYM=ALLOW is specified in the class definition) can be exported and used in the control statements. Since version 5.1.17 of FLAM, the system symbols are generally available for replacement (e.g '...<&LDAY>...') if no environment variable with the same name exists. This means that the system symbols have the lowest priority in the replacement process. To export all JCL symbols for an application, you can use 'SYMLIST=*'. The "&name." replacement of JESS (DD *,SYMBOLS=JCLxxxx) can also be utilized if inline coding is used. For an external parameter file, however, the JCL symbols are only available with "". ... print CLE_DOCTYP_PGMSYNOPSIS === flacsv Synopsis === 3.9. flacsv Synopsis The synopsis collects the help, syntax and other important information for a program, function or parameter. It is a kind of quick reference and is used throughout the complete hierarchies in this document. Below you can find for example the synopsis for program FLACSV. ----------------------------------------------------------------------- HELP: Auto-CSV Converter (copybook-free) PATH: limes TYPE: PROGRAM SYNTAX: > flacsv COMMAND/FUNCTION ... ----------------------------------------------------------------------- ... print CLE_DOCTYP_PGMSYNTAX === Syntax of flacsv === 3.10. Syntax of flacsv Below you can see the main syntax for this program. This content is printed on the screen if the built-in function <> is used. Each command can be entered as an argument list on the command line or in a parameter file. To define a parameter file the assignment character (`=`) must be used. For an argument list a blank or if the command (main table) is of type overlay a dot (`.`) or if the command is of type object a round bracket open (`(`) must be given. If the round bracket open is used then the corresponding round bracket close (`)`) at the end of the command is mandatory. The dot and parenthesis are in accordance with the normal syntax. If an argument list is used all parameters (argv[]) are concatenated to one long string and this string is passed to the parser, to allow usage of all features of the shell to build the command line input. To make sure that anything you enter is passed one by one to the parser please use double (WINDOWS(R), UNIX) or single (z/OS(R)) quotation marks at the beginning and end of the argument list. If the dot for overlays or parenthesis for objects are used then the complete command must be included in double quotation marks. The examples below show all possible command entries for the type object: ----------------------------------------------------------------------- :> FLACSV command temp() dummy='str' :> FLACSV command(temp() dummy='str') :> FLACSV command "temp() dummy='str'" :> FLACSV "command(temp() dummy='str')" ----------------------------------------------------------------------- For a command of type overlay it looks like: ----------------------------------------------------------------------- :> FLACSV command temp() :> FLACSV command.temp() :> FLACSV command "temp()" :> FLACSV "command.temp()" ----------------------------------------------------------------------- In a parameter file you can start with a dot for an overlay or with parenthesis for an object or with the argument (overlay) or argument list (object) directly. ------------------------------------------------------------------------ Syntax for program 'flacsv': --: Commands: INFO/ACSV --:--: flacsv [OWNER=oid] command "... argument list ..." [MAXCC=[max][-min]] [QUIET/SILENT] --:--: flacsv [OWNER=oid] command=" parameter file name " [MAXCC=[max][-min]] [QUIET/SILENT] --:--: flacsv [OWNER=oid] command=>"parameter file name " [MAXCC=[max][-min]] [QUIET/SILENT] --:--: You can optionally specify: --:--:--: the owner id for this command (to use custom configuration files) --:--:--: the maximum condition code (max) to suppress warnings --:--:--: the minimum condition code (min), zero is returned if the condition code would be smaller --:--:--: QUIET disables the normal log output of the command line executer --:--:--: SILENT disables log and errors messages of the command line executer --: Built-in functions: --:--: flacsv SYNTAX [command[.path] [DEPTH1 | ... | DEPTH9 | ALL]] --:--: flacsv HELP [command[.path] [DEPTH1 | ... | DEPTH9 | ALL]] [MAN] --:--: flacsv MANPAGE [function | command[.path][=filename]] | [filename] --:--: flacsv GENDOCU [command[.path]=]filename [NONBR] [SHORT] --:--: flacsv HTMLDOC [path] [NUMBERS] [TYPES] [SHORT] --:--: flacsv GENPROP [command=]filename --:--: flacsv SETPROP [command=]filename --:--: flacsv CHGPROP command [path[=value]]* --:--: flacsv DELPROP [command] --:--: flacsv GETPROP [command[.path] [DEPTH1 | ... | DEPTH9 | DEPALL | DEFALL]] --:--: flacsv SETOWNER name --:--: flacsv GETOWNER --:--: flacsv SETENV variable=value --:--: flacsv GETENV --:--: flacsv DELENV variable --:--: flacsv LSTENV --:--: flacsv HLPENV --:--: flacsv TRACE ON | OFF | FILE=filename --:--: flacsv CONFIG [CLEAR] --:--: flacsv GRAMMAR --:--: flacsv LEXEMES --:--: flacsv LICENSE --:--: flacsv VERSION --:--: flacsv ABOUT --:--: flacsv ERRORS ------------------------------------------------------------------------ ... print CLE_DOCTYP_PGMHELP === Help for flacsv === 3.11. Help for flacsv Here you can see the static main help for this program. This content is printed on the screen if the built-in function <> is used without any further arguments. ------------------------------------------------------------------------ Help for program 'flacsv': --: Commands - to execute powerful subprograms --:--: flacsv INFO - Provides various information --:--: flacsv ACSV - Auto-detect binary file and convert to CSV (copybook-free) --: Built-in functions - to give interactive support for the commands above --:--: flacsv SYNTAX - Provides the syntax for each command --:--: flacsv HELP - Provides quick help for arguments --:--: flacsv MANPAGE - Provides manual pages (detailed help) --:--: flacsv GENDOCU - Generates auxiliary documentation (ASCIIDOC text format) --:--: flacsv HTMLDOC - Generates the complete HTML documentation into a folder --:--: flacsv GENPROP - Generates a property file --:--: flacsv SETPROP - Activate a property file --:--: flacsv CHGPROP - Change a property value in the currently active property file --:--: flacsv DELPROP - Remove a property file from configuration --:--: flacsv GETPROP - Show current properties --:--: flacsv SETOWNER - Defines the current owner --:--: flacsv GETOWNER - Show current owner setting --:--: flacsv SETENV - Set an environment variable (defined in the config file) --:--: flacsv GETENV - Show the environment variables (defined in the config file) --:--: flacsv DELENV - Delete an environment variable (defined in the config file) --:--: flacsv LSTENV - List status of all possible usable environment variables --:--: flacsv HLPENV - List help message for all possible usable environment variables --:--: flacsv TRACE - Manage trace capabilities --:--: flacsv CONFIG - Shows or clear all the current configuration settings --:--: flacsv GRAMMAR - Shows the grammar for commands and properties --:--: flacsv LEXEMES - Shows the regular expressions accepted in a command --:--: flacsv LICENSE - List license information for the program --:--: flacsv VERSION - List version information for the program --:--: flacsv ABOUT - Show information about the program --:--: flacsv ERRORS - Show information about return and reason codes of the program For more information please use the built-in function 'MANPAGE' ------------------------------------------------------------------------ ... print CLE_DOCTYP_COMMANDS == flacsv Commands == 4. flacsv Commands Commands are used to run powerful subprograms. The command line processor compiles a table-defined syntax into a corresponding preinitialized data structure. This structure is mapped to the parameter structure of the corresponding subprogram. The subprogram can then be executed with the defined arguments/parameters. To support these variable commands several built-in functions are available and described in a separate <>. .Abbreviations Command names can be abbreviated for interactive use. See <> for detailed information about abbreviation rules and usage recommendations. Each supported command is explained in a separate section in this document. Each section contains a synopsis including the help message, the path, the type and the syntax followed by a detailed description. If an argument of this command is an object or overlay or, if a detailed description is available for this argument, a separate section with synopsis (help, path, type, syntax) and description is written, otherwise a bullet list is printed which contains the keyword, the syntax and the help message. For the syntax of an overlay braces `{}` are used to keep all possible arguments of an overlay logically together. These braces are not part of the real syntax. The braces are only written to demonstrate clearly that one of these arguments must be selected with the DOT operator (optional) for defining the overlay. To be compatible with certain shells, the features below are implemented: * Strings can be enclosed with single '' or double "" quotation marks * Integrated strings (without spaces) can also be defined without quotes * Keywords can also start with "-" or "--" in front of the qualifier * If it is unique then parentheses and the dot can be omitted for objects and overlays Commands can be declared in deep hierarchical depth. In order to simplify their handling the path is a powerful instrument for managing only relevant parts of it. Because of that the path is printed for each synopsis. To run commands under different owners, the owner id can be defined in front of the command. To suppress the output of the command line executor you can set QUIET or SILENT as the last parameter. In addition to QUIET, SILENT also suppresses the error messages. These options have no effect on the output of the commands and built-in functions. For job control, the maximum (and minimum) condition code (MAXCC=[max][-min]) of the command execution can optionally be set as the last parameter for each command. The value 'max' is the maximum condition code. If the condition code, that would be returned if MAXCC was not specified, would be greater than 'max', it is reduced to the value of 'max'. If the condition code would be smaller than 'min', the actually returned condition code is reduced to 0. Both, 'max' and 'min', values are optional. To only specify the minimum, simply omit the 'max' value, i.e. the MAXCC value starts with a hyphen. Example: The clause `MAXCC=8-4` will set each condition code greater than 8 to 8 and each condition code smaller than 4 to 0, while `MAXCC=-4` only sets condition codes smaller than 4 to 0. ------------------------------------------------------------------------ flacsv [OWNER=oid] command "... argument list ..." [MAXCC=[max][-min]] [QUIET] flacsv [OWNER=oid] command=" parameter file name " [MAXCC=[max][-min]] [QUIET] ------------------------------------------------------------------------ The parameters for each command can be provided as an argument list on the command line or as a parameter file. [[CLEP.COMMAND.INFO]] === 4.1. Command 'INFO' .Synopsis ----------------------------------------------------------------------- HELP: Provides various information PATH: limes.flacsv TYPE: OBJECT SYNTAX: > flacsv INFO(NET.{},GET.{},FMT=LIST/XML,VBS=MINIMAL/NORMAL/STANDARD/MAXIMAL,OUT='str'/STDOUT/STDERR,DIR(),LOG()) ----------------------------------------------------------------------- .Description The INFO command provides further information about local or remote files, CCSIDs among others. To use CONV and other commands it is sometimes useful to know which CCSIDs are supported or which members are in a FLAMFILE or how the file attributes are named. The system information (environment, default values, hardware support) may be helpful information to diagnose errors. To get syntax information, please use: ----------------------------------------------------------------------- flacsv SYNTAX INFO ----------------------------------------------------------------------- To get help for a parameter, please use: ----------------------------------------------------------------------- flacsv HELP INFO.parameter[.parameter[...]] ----------------------------------------------------------------------- To read the manual page for a parameter, please use: ----------------------------------------------------------------------- flacsv MANPAGE INFO.parameter[.parameter[...]] or flacsv HELP INFO.parameter[.parameter[...]] MAN ----------------------------------------------------------------------- To generate the user manual for a command, please use: ----------------------------------------------------------------------- flacsv GENDOCU INFO=filename ----------------------------------------------------------------------- Parameters can be defined by the command line (directly or per file) or by properties read from the corresponding property file. .Examples ----------------------------------------------------------------------- flacsv INFO get.system flacsv INFO get.ccsids flacsv INFO get.file='test.adc' out='list.txt' flacsv INFO get.file='ssh://@server1/test.adc' out='list.txt' flacsv INFO get.file='~.*' dir(rec) out='list.txt' flacsv INFO get.fkme(help) ----------------------------------------------------------------------- .Arguments * `NUMBER: FMT=LIST/XML - Specify formatting of information [LIST]` ** `LIST - Provide information as list` ** `XML - Provide information in XML-structure` * `NUMBER: VBS=MINIMAL/NORMAL/STANDARD/MAXIMAL - Specify amount of information for listings [NORMAL/STANDARD]` ** `MINIMAL - Minimal information` ** `NORMAL - Normal/standard information` ** `STANDARD - Normal/standard information` ** `MAXIMAL - Maximal information` [[CLEP.COMMAND.ACSV]] === 4.2. Command 'ACSV' .Synopsis ----------------------------------------------------------------------- HELP: Auto-detect binary file and convert to CSV (copybook-free) PATH: limes.flacsv TYPE: OBJECT SYNTAX: > flacsv ACSV(INPUT['str'/STREAM/DUMMY...],OUTPUT='str'/STREAM/DUMMY,FIOMODE=STOP/APPEND/OVERWRITE,APPEND,REMAIN,FALLOC(),EXCLUDE['str'...],REMOVE,RENAME='str',RECLEN=num,INPCCS='str'/DEFAULT/ASCII/EBCDIC/BOMUTF/BOMUCS/SYSTEM/LOCAL,OUTCCS='str'/DEFAULT/ASCII/EBCDIC/BOMUTF/BOMUCS/SYSTEM/LOCAL,STYLE(),ZIP(),DETECT(),ROWOUT='str'/STREAM/DUMMY,LOGGING.{},MESSAGE(),NORUN) ----------------------------------------------------------------------- .Description The ACSV command converts binary record files to UTF-8 CSV format without requiring a copybook or schema file. The binary layout is inferred automatically by the ROWDET row-spec auto-detector (DETFIX for fixed-length binary records, DETCSV for delimited text, DETXML for XML). The INPUT parameter accepts one or more binary data files. Wildcards and multiple values are supported. The OUTPUT parameter specifies the path to the ZIP archive that receives the generated CSV members. The ZIP sub-object controls archive-level settings such as compression algorithm and member naming. The default member naming pattern is `[name].[table].csv`. The DETECT sub-object accepts optional hints that narrow the search space for the auto-detector. All DETECT parameters are optional; omitting them enables full auto-detection across all type families. FORMAT -- VB/IMS format hint: NONE=auto-detect (default), IMSL=IMS DFSURGU0 long, IMSS=IMS DFSURGU0 short, IHDU=IMS DFSURGL0 HD-unload, RDW=plain VB records. Use an explicit value when auto-detection is unreliable, e.g. IMSS (EOF sentinel rarely seen in first sample block). CHRSET -- Charset hint: AUTO (detect from byte distribution), EBCDIC, or ASCII. Default: AUTO. ENDIAN -- Byte-order hint for integer probing: BIG, LITTLE, or native (default). MAXREC -- Max records to analyse: DEFAULT(0)=8, FULL(1)=whole block, 2..n=exact count. Default: DEFAULT. MINREC -- Min records that must agree on layout to accept a row-spec. Default: 2. BCD -- BCD variant: ALL/NONE/ZONED/PACKED (bitmask). Default: ALL. FLOAT -- Float family: ALL/NONE/HFP/IEEE/DFP (bitmask). Default: ALL. INT -- Integer width: ALL/NONE/I16/I32/I64 (bitmask). Default: ALL. BASE -- Base-encoding: ALL/NONE/HEX/BASE32/BASE64 (bitmask). Default: ALL. FRADIG -- Fractional digits for BCD fields: 0=integer, N=type.float. Default: 0. ROWOUT -- Write detected TABLE string to this file (for flbcsv ROWIN=). DEFASC -- Default CCSID for ASCII string column emission [system default]. DEFEBC -- Default CCSID for EBCDIC string column emission [system default]. REUSE -- Reuse previously detected row-specs on format change [OFF]. NOMATCH -- Suppress Bootstrap-Discriminator MATCH predicates [FALSE]. NORANGE -- Suppress Bootstrap-Discriminator range checks on integers [FALSE]. REGEXP -- Emit character-class regexp constraints on strings (experimental) [FALSE]. MAXCOL -- Maximum columns per detected row-spec [1000]. MAXROW -- Maximum rows in REUSE accumulation table [16]. TARGET -- Restrict to sub-detector family: ALL/TEXT/CHAR/BINARY/XML/CSV/FIX. DISABLE -- Disable sub-detectors: NONE/CSV/FIX/XML or bitmask. Default: NONE. SETCHR -- Emit detected charset in format.str() specs [OFF]. INPCCS optionally sets the byte-stream charset conversion for the input data path (FIO layer). Omit for binary mixed data. OUTCCS overrides the CCSID for CSV output in the ZIP archive (default: UTF-8). The STYLE sub-object controls CSV output formatting. FRASEP defaults to PERIOD (RFC 4180). STYLE.CCSID is overridden by top-level OUTCCS. RECLEN overrides the record length when auto-detection yields wrong results. Use NORUN to inspect parsed parameters without processing data. Auto-detection is best-effort and not guaranteed to reconstruct the original record layout. ROWDET can only place a column boundary where the data carries a distinguishing feature (type change, separator, constant filler, or a regular padding pattern). Adjacent fields of the same physical type with no boundary marker merge into one detected column -- for example several same-charset Zoned Decimal numbers become one wide number, or two PIC X fields become one wide string. Constant leading-zero or trailing-blank padding is exploited to separate padded fields, but only while the values stay narrower than the field width in every analysed record. For a guaranteed-correct structure, describe the records with a copybook or row-spec and convert with flbcsv (ROWIN=) instead of ACSV. To get syntax information, please use: ----------------------------------------------------------------------- flacsv SYNTAX ACSV ----------------------------------------------------------------------- To get help for a parameter, please use: ----------------------------------------------------------------------- flacsv HELP ACSV.parameter[.parameter[...]] ----------------------------------------------------------------------- To read the manual page for a parameter, please use: ----------------------------------------------------------------------- flacsv MANPAGE ACSV.parameter[.parameter[...]] ----------------------------------------------------------------------- To generate the user manual for the command, please use: ----------------------------------------------------------------------- flacsv GENDOCU ACSV=filename ----------------------------------------------------------------------- Parameters can be set as arguments in the command line (directly or per file) or as properties taken from the corresponding property file. .Arguments * `STRING: INPUT['str'/STREAM/DUMMY...] - Path(s) to the input file(s). Multi-value; wildcards allowed [stdin]` ** `STREAM - Read from stdin or write to stdout` ** `DUMMY - Read EOF or write nothing` * `STRING: OUTPUT='str'/STREAM/DUMMY - Path to the ZIP output archive. Each row-spec produces one CSV member [stdout]` ** `STREAM - Read from stdin or write to stdout` ** `DUMMY - Read EOF or write nothing` * `NUMBER: FIOMODE=STOP/APPEND/OVERWRITE - Error handling if the ZIP output file already exists [APPEND]` ** `STOP - Stop processing with an error` ** `APPEND - Add the new data to the existing file or member` ** `OVERWRITE - Overwrite the existing file or member` * `SWITCH: APPEND - Append members to an existing ZIP archive [FALSE]` * `SWITCH: REMAIN - Preserve existing ZIP members (don't overwrite on member-name collision) [FALSE]` * `STRING: EXCLUDE['str'...] - Exclude files matching this pattern from the INPUT file list; multi-value [none]` * `SWITCH: REMOVE - Delete each INPUT file after successful processing [FALSE]` * `STRING: RENAME='str' - Rename pattern applied to INPUT files after successful processing` * `NUMBER: RECLEN=num - Fixed record length override; 0 = auto-derived from ROWDET result [0]` * `STRING: INPCCS='str'/DEFAULT/ASCII/EBCDIC/BOMUTF/BOMUCS/SYSTEM/LOCAL - Input CCSID: FIO byte-stream conversion before detection; omit for binary data [none]` ** `DEFAULT - Use default CCSID (auto-detect)` ** `ASCII - Use default ASCII CCSID (environment)` ** `EBCDIC - Use default EBCDIC CCSID (environment)` ** `BOMUTF - Determine the correct UTF CCSID from byte order mark (BOM) only when reading` ** `BOMUCS - Determine the correct UCS CCSID from byte order mark (BOM)only when reading` ** `SYSTEM - Use system character set (environment/logical)` ** `LOCAL - Use local character set (auto-detect + system/physical)` * `STRING: OUTCCS='str'/DEFAULT/ASCII/EBCDIC/BOMUTF/BOMUCS/SYSTEM/LOCAL - Output CCSID for CSV ZIP members; overrides STYLE.CCSID [UTF-8]` ** `DEFAULT - Use default CCSID (auto-detect)` ** `ASCII - Use default ASCII CCSID (environment)` ** `EBCDIC - Use default EBCDIC CCSID (environment)` ** `BOMUTF - Determine the correct UTF CCSID from byte order mark (BOM) only when reading` ** `BOMUCS - Determine the correct UCS CCSID from byte order mark (BOM)only when reading` ** `SYSTEM - Use system character set (environment/logical)` ** `LOCAL - Use local character set (auto-detect + system/physical)` * `STRING: ROWOUT='str'/STREAM/DUMMY - Write detected TABLE string to this file for use with flbcsv ROWIN` ** `STREAM - Read from stdin or write to stdout` ** `DUMMY - Read EOF or write nothing` * `SWITCH: NORUN - Parse and show parameters without executing the command [FALSE]` ... print CLE_DOCTYP_LEXEMES == Lexemes [[CLEP.APPENDIX.LEXEMES]] == Appendix A. Lexemes The regular expressions used by the command line compiler are shown below. This content is printed on the screen with the built-in function `LEXEMES`. To describe the regular expression the following character classes are used: * :print: - all printable characters * :space: - all blanks, tabs and new lines * :cntr: - all control characters * :alpha: - all letters ([[a-z]|[A-Z]]) * :alnum: - all letters and digits [0-9] * :digit: - all decimal numbers [0-9] * :xdigit: - all hexadecimal numbers [[0-9]|[a-f||[A-F]] All comments and separators are ignored by the scanner and not passed with the token to the parser. This means that the separators (SEP) are used in the grammar but will never be tokens themselves. If a binary entry for a string is possible and no classification is done it is taken as a binary string in local character set representation (c) without null termination. This default can be changed. In this case the help message for this argument should describe the default interpretation of the binary string. For binary strings it is still possible to enter a null-terminated string, but then the prefix *s* must be used. If no binary entry is feasible, only a null-terminated string in local character representation (s) can be built and taken by default. ------------------------------------------------------------------------ Lexemes (regular expressions) for argument list or parameter file --: COMMENT '#' [:print:]* '#' (will be ignored) --: LCOMMENT ';' [:print:]* 'nl' (will be ignored) --: SEPARATOR [:space: | :cntr: | ',']* (abbreviated with SEP) --: OPERATOR '=' | '.' | '(' | ')' | '[' | ']' | (SGN, DOT, RBO, RBC, SBO, SBC) --: '=>'| '+' | '-' | '*' | '/' | '{' | '}' (SAB, ADD, SUB, MUL, DIV, CBO,CBC) --: KEYWORD ['-'['-']][:alpha:]+[:alnum: | '_']* (always predefined) --: SELECTION ['-'['-']][:alpha:]+[:alnum: | '_' | '-' | '/']* (predefined) --: NUMBER ([+|-] [ :digit:]+) | (decimal (default)) --: num ([+|-]0b[ :digit:]+) | (binary) --: num ([+|-]0o[ :digit:]+) | (octal) --: num ([+|-]0d[ :digit:]+) | (decimal) --: num ([+|-]0x[ :xdigit:]+) | (hexadecimal) --: num ([+|-]0t(yyyy/mm/tt.hh:mm:ss)) | (relativ (+|-) or absolut time) --: FLOAT ([+|-] [ :digit:]+.[:digit:]+e|E[:digit:]+) | (decimal(default)) --: flt ([+|-]0d[ :digit:]+.[:digit:]+e|E[:digit:]+) (decimal) --: STRING ''' [:print:]* ''' | (default (if binary c else s)) --: str [s|S]''' [:print:]* ''' | (null-terminated string) --: str [c|C]''' [:print:]* ''' | (binary string in local character set) --: str [a|A]''' [:print:]* ''' | (binary string in ASCII) --: str [e|E]''' [:print:]* ''' | (binary string in EBCDIC) --: str [x|X]''' [:print:]* ''' | (binary string in hex notation) --: str [f|F]''' [:print:]* ''' | (read string from file (for passwords)) --: Strings can contain two '' to represent one ' --: Strings can also be enclosed in " or ` instead of ' --: Strings can directly start behind a '=' without enclosing ('`") --: In this case the string ends at the next separator or operator --: and keywords are preferred. To use keywords, separators or --: operators in strings, enclosing quotes are required. --: --: The predefined constant keyword below can be used in a value expressions --: NOW NUMBER - current time in seconds since 1970 (+0t0000) --: MINUTE NUMBER - minute in seconds (60) --: HOUR NUMBER - hour in seconds (60*60) --: DAY NUMBER - day in seconds (24*60*60) --: YEAR NUMBER - year in seconds (365*24*60*60) --: KiB NUMBER - kilobyte (1024) --: MiB NUMBER - megabyte (1024*1024) --: GiB NUMBER - gigabyte (1024*1024*1024) --: TiB NUMBER - terrabyte (1024*1024*1024*1024) --: RNDn NUMBER - simple random number with n * 8 bit in length (1,2,4,8) --: PI FLOAT - PI (3.14159265359) --: LCSTAMP STRING - current local stamp in format: YYYYMMDD.HHMMSS --: LCDATE STRING - current local date in format: YYYYMMDD --: LCYEAR STRING - current local year in format: YYYY --: LCYEAR2 STRING - current local year in format: YY --: LCMONTH STRING - current local month in format: MM --: LCDAY STRING - current local day in format: DD --: LCTIME STRING - current local time in format: HHMMSS --: LCHOUR STRING - current local hour in format: HH --: LCMINUTE STRING - current local minute in format: MM --: LCSECOND STRING - current local second in format: SS --: LCOFFSET STRING - difference to Greenwich mean time: +/-HH --: LCOFFABS STRING - difference to GMT (absolute): HH --: GMSTAMP STRING - current Greenwich mean stamp in format: YYYYMMDD.HHMMSS --: GMDATE STRING - current Greenwich mean date in format: YYYYMMDD --: GMYEAR STRING - current Greenwich mean year in format: YYYY --: GMYEAR2 STRING - current Greenwich mean year in format: YY --: GMMONTH STRING - current Greenwich mean month in format: MM --: GMDAY STRING - current Greenwich mean day in format: DD --: GMTIME STRING - current Greenwich mean time in format: HHMMSS --: GMHOUR STRING - current Greenwich mean hour in format: HH --: GMMINUTE STRING - current Greenwich mean minute in format: MM --: GMSECOND STRING - current Greenwich mean second in format: SS --: GMOFFSET STRING - difference to local time: +/-HH --: GMOFFABS STRING - difference to local time (absolute): HH --: SnRND10 STRING - decimal random number of length n (1 to 8) --: SnRND16 STRING - hexadecimal random number of length n (1 to 8) --: --: SUPPLEMENT '"' [:print:]* '"' | (null-terminated string (properties)) --: Supplements can contain two "" to represent one " --: Supplements can also be enclosed in ' or ` instead of " --: Supplements can also be enclosed in ' or ` instead of " --: ENVIRONMENT VARIABLES '<'varnam'>' will replaced by the corresponding value --: Escape sequences for critical punctuation characters on EBCDIC systems --: '!' = '&EXC;' - Exclamation mark --: '$' = '&DLR;' - Dollar sign --: '#' = '&HSH;' - Hashtag (number sign) --: '@' = '&ATS;' - At sign --: '[' = '&SBO;' - Square bracket open --: '\' = '&BSL;' - Backslash --: ']' = '&SBC;' - Square bracket close --: '^' = '&CRT;' - Caret (circumflex) --: '`' = '&GRV;' - Grave accent --: '{' = '&CBO;' - Curly bracket open --: '|' = '&VBR;' - Vertical bar --: '}' = '&CBC;' - Curly bracket close --: '~' = '&TLD;' - Tilde --: Define CCSIDs for certain areas in CLP strings on EBCDIC systems (0-reset) --: '&' [:digit:]+ '; (..."&1047;get.file='&0;%s&1047;'",f) --: Escape sequences for hexadecimal byte values --: '&' ['X''x'] :xdigit: :xdigit: ';' ("&xF5;") ------------------------------------------------------------------------ ... print CLE_DOCTYP_GRAMMAR == Grammar [[CLEP.APPENDIX.GRAMMAR]] == Appendix B. Grammar Below you can see the grammar used by the command line compiler. This content is printed on the screen if the built-in function <> is used. There are two context free grammars, one is used for the command line the other for the parameter file. The parameter file contains mainly the same argument list as the command line. The property file defines the default settings. For this a different grammar is applied. Properties can be set for each argument, i.e. for arguments not used or arguments in overlays. Based on that, properties are set by using the path (dotted keyword list). A property is always a 'SUPPLEMENT' for the argument list on the command line or parameter file. Thus all defined properties have the same effect as arguments on the command line. A property sets this argument to the corresponding value if it is not defined on the command line. ------------------------------------------------------------------------ Grammar for argument list, parameter file or property file --: Command Line Parser --: command -> ['('] parameter_list [')'] (main=object) --: | ['.'] parameter (main=overlay) --: parameter_list -> parameter SEP parameter_list --: | EMPTY --: parameter -> switch | assignment | object | overlay | array --: switch -> KEYWORD --: assignment -> KEYWORD '=' value --: | KEYWORD '=' SELECTION --: | KEYWORD '=>' STRING # parameter file # --: object -> KEYWORD ['('] parameter_list [')'] --: | KEYWORD '=' STRING # parameter file # --: | KEYWORD '=>' STRING # parameter file # --: overlay -> KEYWORD ['.'] parameter --: | KEYWORD '=' STRING # parameter file # --: | KEYWORD '=>' STRING # parameter file # --: array -> KEYWORD '[' value_list ']' --: | KEYWORD '[' object_list ']' --: | KEYWORD '[' overlay_list ']' --: | KEYWORD '=' value_list # with certain limitations # --: It is recommended to use only enclosed array lists to know the end --: | KEYWORD '[=' STRING ']' # parameter file # --: | KEYWORD '[=>' STRING ']' # parameter file # --: value_list -> value SEP value_list --: | EMPTY --: object_list -> object SEP object_list --: | EMPTY --: overlay_list -> overlay SEP overlay_list --: | EMPTY --: A list of objects requires parenthesis to enclose the arguments --: --: value -> term '+' value --: | term '-' value --: | term --: term -> factor '*' term --: | factor '/' term --: | factor --: factor -> NUMBER | FLOAT | STRING --: | selection | variable | constant --: | '(' value ')' --: selection -> KEYWORD # value from a selection table # --: variable -> KEYWORD # value from a previous assignment # --: | KEYWORD '{' NUMBER '}' # with index for arrays# --: constant -> KEYWORD # see predefined constants at lexeme # --: For strings only the operator '+' is implemented as concatenation --: Strings without an operator in between are also concatenated --: A number followed by a constant is a multiplication (4KiB=4*1024) --: --: Property File Parser --: properties -> property_list --: property_list -> property SEP property_list --: | EMPTY --: property -> keyword_list '=' SUPPLEMENT --: keyword_list -> KEYWORD '.' keyword_list --: | KEYWORD --: SUPPLEMENT is a string in double quotation marks ("property") ------------------------------------------------------------------------ ... print CLE_DOCTYP_CHAPTER == Properties [[CLEP.APPENDIX.PROPERTIES]] == Appendix C. Properties All properties can be written to a global property file with the built-in function <>: ------------------------------------------------------------------------ 'GENPROP filename'. ------------------------------------------------------------------------ A property file for a certain command can be generated with: ------------------------------------------------------------------------ 'GENPROP command=filename' ------------------------------------------------------------------------ The first command shows the valid root path for the property file. A property file can contain properties for more than one root path. The property file parser will only interpret properties where the root matches, i.e. if the property file is assigned to a certain owner and possibly to a certain command, then only properties for this owner, the program itself and possibly the command will be accepted, all other properties are ignored. The second long comment gives some help for handling a property file. Thereafter the generated properties for this root are listed for all supported commands. The format is: ------------------------------------------------------------------------ path = SUPPLEMENT # Type: tttttt Help: hhh...hhh # ------------------------------------------------------------------------ The path denotes the unique dotted keyword list for one argument. The 'SUPPLEMENT' is a string normally in double quotation marks containing the value list for this argument in accordance with the syntax of the command line parser (strings then normally in single quotation marks, an opposite usage of the quotation marks is possible but not recommended). This means for example that a string that requires apostrophes must be included in apostrophes `("'...'")`. The supplement string is returned by the corresponding command line parser if no value for this argument is entered on the command line or is included in the parameter file. Behind the property definition the type and help message are printed as comment to help in editing the generated property file. The property values can be related to the current default settings at time of generation, which means that if hard-coded default values or another property file is already in use, then these values are taken over into the new property file. The property file can contain parameters that are not available on the command line. Such parameters are only documented in the property file. On the other hand not all command line parameters are available as property. If a description for a property argument is available which is not a part of the user manual this description is written as comment in front of the corresponding property definition. Below you can see the documentation of all parameters that are only available as property followed by all defined default properties in form of a sample property file for all available commands. ... print CLE_DOCTYP_PROPREMAIN === Remaining Documentation === Appendix C.1. Remaining Documentation Below you can find the documentation for all parameters which are only available over the property definitions. These parameters are not a part of the description for each command above. This list is generated and can be empty. In this case all parameters are available over the command line. If available, the manual page otherwise the help message is printed. .DESCRIPTION FOR limes.flacsv.INFO.GET.ARCHIVE.LOGGING.SYSTEM: (TYPE: OBJECT) Use system logging facility The SYSTEM destination allows the log messages to be written to the logging system of the operating system. On Unix and z/OS(R) systems the syslog() call is used. On Windows(R) the event logging facility is used. ----------------------------------------------------------------------- NOTE: On Windows(R) this requires the registry key entry: HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services EventLog Application FLM ----------------------------------------------------------------------- This registry key will be created by using the DLL flevent.dll .HELP FOR limes.flacsv.INFO.GET.ARCHIVE.LOGGING.SYSTEM: (TYPE: OBJECT) Use system logging facility .DESCRIPTION FOR limes.flacsv.INFO.LOG.DESTINATION.SYSTEM: (TYPE: OBJECT) Use system logging facility The SYSTEM destination allows the log messages to be written to the logging system of the operating system. On Unix and z/OS(R) systems the syslog() call is used. On Windows(R) the event logging facility is used. ----------------------------------------------------------------------- NOTE: On Windows(R) this requires the registry key entry: HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services EventLog Application FLM ----------------------------------------------------------------------- This registry key will be created by using the DLL flevent.dll .HELP FOR limes.flacsv.INFO.LOG.DESTINATION.SYSTEM: (TYPE: OBJECT) Use system logging facility .DESCRIPTION FOR limes.flacsv.ACSV.LOGGING.SYSTEM: (TYPE: OBJECT) Use system logging facility The SYSTEM destination allows the log messages to be written to the logging system of the operating system. On Unix and z/OS(R) systems the syslog() call is used. On Windows(R) the event logging facility is used. ----------------------------------------------------------------------- NOTE: On Windows(R) this requires the registry key entry: HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services EventLog Application FLM ----------------------------------------------------------------------- This registry key will be created by using the DLL flevent.dll .HELP FOR limes.flacsv.ACSV.LOGGING.SYSTEM: (TYPE: OBJECT) Use system logging facility ... print CLE_DOCTYP_PROPDEFAULTS === Predefined Defaults === Appendix C.2. Predefined Defaults Below you can find a sample property file which contains all predefined default values for all supported commands when this documentation was created. ------------------------------------------------------------------------ # Property file for: limes.flacsv # #------------------------------------------------------------------- # # # # The property file can be used to overwrite the default values # # used if the argument is not defined on the command line. # # # #------------------------------------------------------------------- # # # # The values is assigned between "" conforming to the syntax. # # Example NUMBER array : "4711, 1, 2, 3" # # Example STRING array : "'str1' x'303000''str2',a'abc'" # # Example FLOAT array : "123.34, 1.58, PI" (PI as constant) # # # # The last example shows that one can use key words if a list # # of constants is defined for this argument. # # # # For a SWITCH one can use the special key words ON/OFF to enable or # # disable the SWITCH or define the value as a number # # Examples for a SWITCH : "ON"/"OFF"/"4711" # # # # For an OBJECT only the special key word INIT can be used to ensure # # that this OBJECT will be initialized if it was not set on the # # command line. If INIT is not set, then the elements of the OBJECT # # will be initialized only if you type at least obj() in the command # # line. If you want an object to be initialized when you don't use it# # on the command line then the special key word must be set. # # Examples for an OBJECT: ""/"INIT" # # # # For an OVERLAY it is the same logic as for objects but the keyword # # of the element to initialize must be used if the overlay is not # # set in the command line. # # Example OVERLAY array : "LINE TRIANGLE LINE RECTANGLE" # # Example for a OVERLAY : "RECTANGLE" # # # #------------------------------------------------------------------- # limes.flacsv.ACSV.FALLOC.SUBSYSTEM.NAME="'FLAM'" # TYPE: STRING HELP: Name of the subsystem # limes.flacsv.ACSV.FALLOC.SUBSYSTEM.PARM="''" # TYPE: STRING HELP: Parameter list for the subsystem (comma separated) # ------------------------------------------------------------------------ ... print CLE_DOCTYP_CHAPTER == Return Codes [[CLEP.APPENDIX.RETURNCODES]] == Appendix D. Return Codes The return codes of the program are also called completion codes and returned at program termination. This content is printed on the screen with the built-in function <>. :0: command line, command syntax, mapping, execution and finish of the command was successful :1: command line, command syntax, mapping, execution and finish of the command was successful but a warning or error can be found in the log :2: command line, command syntax, mapping, execution was successful but cleanup of the command failed (may not happened and can be ignored) :4: command line, command syntax and mapping was successful but execution of the command returned with a warning (some files not processed) :8: command line, command syntax and mapping was successful but execution of the command returned with an error :12: command line and command syntax was OK but mapping of the parameter for command execution failed :16: command line was OK but command syntax was wrong (error from command line parser) :20: command string was wrong (please use built-in function "SYNTAX" for more information) :24: initialization of the parameter structure for the command failed (may not happened) :28: configuration is wrong (determination of configuration data failed, configuration file might be damaged) :32: table error (something within the predefined tables is wrong (internal error)) :36: system error (e.g. load of environment or open of file failed) :40: access control or license error :44: interface error (e.g. parameter pointer equals NULL (only at call of subprogram interface)) :48: memory allocation failed (e.g. dynamic string handling) :64: fatal error (basic things are damaged) :>64: special condition codes from the command for job control The command line is interpreted by CLE the command string by CLP. For example: ------------------------------------------------------------------------ :> flcl conv "read.file='test.txt' write.flam(file='test.adc')" | | |-- the command string is compiled by CLP | | | and might result in a syntax error | |-- conv is part of the command line |-- flcl is part of the command line :> flcl owner=xxx conv=para.txt maxcc=-2 quiet | | | | | |-- silent or quiet is part of the comand line | | | | |-- maxx is part of the comand line | | | |-- para.txt is part of the command line, but the content | | | of para.txt might contain a CLP syntax error | | |-- conv is part of the command line | |-- owner is part of the comand line |-- flcl is part of the command line ------------------------------------------------------------------------ A command execution (run) will return 0 or 1 on success, 4 if a warning occurs (only some of the files converted), 8 in case of an error or odd special condition codes or special condition codes greater than 64 can be returned. If the command execution was successful (return code 0) but a relevant warnings was logged then the return code is 1 (anything was fine, but please have a look in the log (e.g. a key is close to expire)). A return code of 2 indicates that a call to the finish function failed. Such a fail of the finish function is not recognizable if the run function (command execution) returns with a warning or an error. On the other side, if the finish failed then an additional warning in the log cannot determined because the condition code is still 2. All completion codes bigger than 8 and smaller or equal to 64 indicate an error in front of the command execution. A relevant warning is a warning written to the log by a used component. Warnings written by components which are removed from procession because the format does not fit or something else, are still in the log but not relevant for the completion code 1. If the return codes 1 and 2 are to be 0 and therefore ignored, the parameter MAXCC=-2 must be set. ... print CLE_DOCTYP_SPECIALCODES === Special Condition Codes === Appendix D.1. Special Condition Codes Special condition codes are issued for a dedicated job/batch control. For error conditions, which must be handled in a special way, the condition codes below are defined. :37: The error code indicates a B37, where the file allocation was too small. This can be used to repeat the call with larger space specifications and RENEW. :73: The character for the wrong byte sequence (BOM (Byte Order Mark)) was recognized (FLMRTC_BOM). You can use the parameters HDLBOM (UTF-16/32) or NONCHR (UTF-8) to cause FLAM to follow the byte order (UTF-16/32) or ignore this character (UTF-8). :80: Defined compression limit was not achieved but the requested operation was done (FLMRTC_LIM). :88: During decompression, the input file has not been recognized as being a FLAM compressed file. The very beginning of the file is corrupted to such an extent that the FLAM syntax cannot be recognized or the file is empty (FLMRTC_CFF). :112: On charset detection, a text encoded in UTF-8 may erroneously be detected as an ASCII-based charset if the first block of data contains only ASCII characters (<128). In consequence, character conversion will eventually run into an "malformed encoding" (ENOMSG) error on the first multi-byte character which results in this condition code. In this case, it makes sense to re-run the command with the correct ASCII CCSID, for example Latin-1 (FLMRTC_TAS). :160: The default (64 KiB) or the set block size is too small. Please restart the job with a larger block size. This could happen, for example, if PGP is used with BZIP2 compression and large (900 KiB) blocks. In this case, 1 MiB would be a reasonable block size (FLMRTC_NBS). ... print CLE_DOCTYP_REASONCODES === Reason Codes [[CLEP.APPENDIX.REASONCODES]] === Appendix D.2. Reason Codes Below you can find the list of reason codes returned after command execution. Each command returns a reason code for the corresponding warning (return code 4) or error (return code 8). This content is printed on the screen with the built-in function <>. * 1 - Fatal error (may not happen) * 2 - System error (wrong size of data types) * 3 - Handle error (not in right shape) * 4 - Interface error (parameter incorrect) * 5 - Activity not possible * 6 - Memory allocation failed (out of memory) * 7 - Length error (need more data at read or more space at write) * 8 - Control code wrong * 9 - Version not supported * 10 - Function not supported * 11 - Mode not supported * 12 - Suite not supported * 13 - Confidentiality mode not supported * 14 - Integrity mode not supported * 15 - Verification mode not supported * 16 - Wrong header checksum * 17 - Wrong pot checksum * 18 - Wrong data checksum * 19 - Wrong checksum * 20 - Wrong message authentication code (MAC) * 21 - Wrong key test value * 22 - Syntax error (file not formatted correctly) * 23 - Count error (supplied or calculated amount wrong) * 24 - End of list (handle points behind last or first element) * 25 - Delete of file failed * 26 - Type error (supplied or calculated type wrong) * 27 - Rebuild required (flush not possible) * 28 - No change (informational) * 29 - Status error (handle not in right state) * 30 - Orientation not supported * 31 - Split method not supported * 32 - Maximum delimiter amount achieved * 33 - Error at compression * 34 - Error at decompression * 35 - Maximum header length achieved * 36 - Maximum data length achieved * 37 - Open of FLAMFILE failed * 38 - Record format not supported * 39 - Writing to file failed * 40 - Reading from file failed * 41 - Get position of file pointer failed * 42 - Set position of file pointer failed * 43 - End of file (informational) * 44 - Rename of FLAMFILE failed * 45 - Delete of FLAMFILE failed * 46 - Close of FLAMFILE failed * 47 - Seek in file does not work * 48 - Failed to set buffer size for FIO * 49 - FLAMFILE format not supported * 50 - No FLAMFILE * 51 - No entry found * 52 - Construct is empty * 53 - Connection error * 54 - Unsupported or invalid FLAM-ID * 55 - Remote procedure call failed * 56 - Method not supported * 57 - Open of file failed * 58 - Error from ZLIB (GZIP) * 59 - Character set not supported * 60 - Space too small * 61 - Logging facility not available * 62 - Error from character conversion module * 63 - Open of hash output file failed * 64 - Close of file failed * 65 - Error with FKME * 66 - Error at character conversion * 67 - Info not supported * 68 - Band not supported * 69 - Open of report file failed * 70 - Size error (supplied or calculated size wrong) * 71 - Invalid character encountered * 72 - Incomplete character encountered * 73 - Error with byte order mark (BOM) * 74 - Format wrong or not supported * 75 - Auto conversion not possible * 76 - Error from BZIP2 library * 77 - Environment variable are not or cannot be defined * 78 - Dynamic load of a function failed * 79 - Access control or license violation * 80 - Compression limit not reached * 81 - Error from LZMA/XZ library * 82 - Error from XML parser (EXPAT) * 83 - Whole first block is padding * 84 - Command line parser failed * 85 - Mapping failed * 86 - Open of temporary file failed * 87 - Wrong magic bytes * 88 - Corrupted or no FLAMFILE * 89 - Initialization error * 90 - Parameter not formatted correctly * 91 - Binary data detected * 92 - From and to are equal * 93 - Data is encrypted (key required) * 94 - Key value wrong * 95 - Reallocation required * 96 - Invalid username * 97 - Authentication failed * 98 - Hash calculation failed * 99 - Processing of one or more files failed * 100 - Hash/checksum file is empty * 101 - Read of hash/checksum file failed * 102 - Name of hash/checksum file is not valid * 103 - Hash/checksum file is not formatted correctly * 104 - Open of code table failed * 105 - Code table is not formatted correctly * 106 - Attribute settings not supported * 107 - Option wrong or not supported * 108 - Invalid parameter combination * 109 - Open of info file failed * 110 - Protocol wrong or not supported * 111 - Differences found * 112 - Try again with an ASCII code page (LATIN1) for read * 113 - Data incomplete * 114 - Procedure not supported * 115 - Key not found * 116 - OpenPGP error * 117 - Algorithm not supported * 118 - Key is inactive * 119 - Key is invalid * 120 - Key is expired * 121 - Positioning failed * 122 - Sequence error, incorrect order * 123 - Update not possible * 124 - Regular expression error * 125 - Value out of range * 126 - Usage measurement not possible * 127 - Dummy processing not possible * 128 - Open of inverse file failed * 129 - Internal error (must not happen) * 130 - Micro Focus support failed * 131 - Dynamic string library error * 132 - Open of usage log failed * 133 - Serialization failed * 134 - Deserialization failed * 135 - Program call (PC) failed * 136 - Row specification wrong * 137 - Record delimiter not supported * 138 - End of table (informational) * 139 - End of member (informational) * 140 - Have more data (informational) * 141 - Alignment error * 142 - Not enough space available (internal buffer too small) * 143 - Plausibility error * 144 - Unexpected remaining rest * 145 - Length parameter too small (the resulting space is not sufficient) * 146 - Virus found * 147 - Connection was closed * 148 - Error from anti virus scanner * 149 - Authorization failed * 150 - Command execution failed * 151 - Already exists * 152 - Tell offset in file does not work * 153 - Record too long * 154 - Record too short * 155 - Dynamic allocation of a file failed * 156 - Re-open of file failed * 157 - No such file or directory * 158 - Permission denied * 159 - No space left on device * 160 - Restart with larger block size required * 161 - Close/end encountered (special handling required) * 162 - Missing field definition * 163 - Element already deleted * 164 - Error from ZSTD library * 165 - Crypto error * 166 - Open of side/parameter file failed * 167 - Write of side/parameter file failed * 168 - Length mismatch * 169 - Compile of regular expression failed * 170 - Validation based on regular expression failed * 171 - Replacement based on regular expression failed * 172 - Ignore record * 173 - Provided offset invalid * 174 - Pot not valid * 175 - Reopen failed (possible no space for bigger tables) * 176 - User table fail (possible endless recursion defined * 177 - Maximum expansion achieved * 178 - Invalid argument at open or incomplete byte sequence at processing * 179 - Invalid character encountered * 180 - No message of the desired type or malformed character encoding * 181 - Error during whitespace handling * 182 - Error from IBM Unicode Services * 183 - Error from LZ4 library * 184 - Index not valid * 185 - Make path failed * 186 - Row not found * 187 - Column not found * 188 - Wildcards found * 189 - Empty file written * 190 - Case sensitivity inconsistent * 191 - Update not allowed * 192 - Insert not allowed * 193 - Delete not possible * 194 - Directory entry (not) processed * 195 - Check of archive failed * 196 - File space too small (B37 or E37) * 197 - Error from FSEG segment store user exit * 198 - Error from FOBJ object store user exit * 199 - HTTP error response received (4xx or 5xx) * 200 - libcurl load, symbol resolution, or version failure * 201 - No schema format recognized by any available compiler * 202 - Error from TERSE/AMATERSE library * 203 - Match failed (byte-pattern matcher) * 204 - Unload envelope format mismatch * 205 - Row-spec detector internal failure * 206 - Data invariant violation (malformed input data) * 207 - Object not found ... print CLE_DOCTYP_VERSION == Version [[CLEP.APPENDIX.VERSION]] == Appendix E. Version Here you can see the version of the program and its components. This content is printed on the screen if the built-in function <> is used. ------------------------------------------------------------------------ --: FL5-FLACSV VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:58:49 --:--: FL5-FLUCRUN VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:26 --:--:--: FL5-FLCUPM VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:16 --:--:--:--: FL5-ORGLST VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:35 --:--:--:--:--: FL5-ORGNET VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:35 --:--:--:--:--:--: FL5-ORGIPN VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:57:35 --:--:--:--:--:--:--: FL5-IPNBSD VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--: FL5-ORGSAV VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:35 --:--:--:--:--:--: FL5-ORGFIL VERSION: 5.2.6-42969 BUILD: RELEASE Oct 30 2026 20:57:35 --:--:--:--:--:--:--: FL5-ORGFIO VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:35 --:--:--:--:--:--:--:--: FL5-FIODAT VERSION: 5.2.19-42969 BUILD: RELEASE Oct 30 2026 20:57:08 --:--:--:--:--:--:--:--: FL5-FIOBLK VERSION: 5.2.73-42969 BUILD: RELEASE Oct 30 2026 20:57:08 --:--:--:--:--:--:--:--:--: FL5-FIO VERSION: 5.2.32-42969 BUILD: RELEASE Oct 30 2026 20:56:56 --:--:--:--:--:--:--:--:--:--: FL5-BIOOPN VERSION: 1.1.21-42969 BUILD: RELEASE Oct 30 2026 20:56:54 --:--:--:--:--:--:--:--:--:--:--: FL5-FLSTDIO VERSION: 1.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:50 --:--:--:--:--:--:--:--:--:--:--:--: FL5-FILELOCL VERSION: 1.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:50 --:--:--:--:--:--:--:--:--:--:--:--: FL5-FILESSH VERSION: 1.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:50 --:--:--:--:--:--:--:--:--:--:--:--:--: libssh VERSION: 0.12.2-42969 BUILD: RELEASE Oct 30 2026 20:57:50 --:--:--:--:--:--:--:--:--:--:--:--:--:--: libcrypto VERSION: 0x30600010-42969 BUILD: RELEASE Oct 30 2026 20:57:50 --:--:--:--:--:--:--:--:--:--:--:--: FL5-FLIOLOCL VERSION: 1.3.2-42969 BUILD: RELEASE Oct 30 2026 20:57:51 --:--:--:--:--:--:--:--:--:--:--:--: FL5-FLIOSSH VERSION: 1.3.3-42969 BUILD: RELEASE Oct 30 2026 20:57:51 --:--:--:--:--:--:--:--:--:--:--:--: FL5-DRIOLOCL VERSION: 1.3.0-42969 BUILD: RELEASE Oct 30 2026 20:57:51 --:--:--:--:--:--:--:--:--:--:--:--: FL5-DRIOSSH VERSION: 1.2.0-42969 BUILD: RELEASE Oct 30 2026 20:57:51 --:--:--:--:--:--:--:--:--:--: FL5-RIOOPN VERSION: 1.1.24-42969 BUILD: RELEASE Oct 30 2026 20:57:36 --:--:--:--:--:--:--:--:--:--:--: FL5-RIOEDZ VERSION: 1.1.5-42969 BUILD: RELEASE Oct 30 2026 20:57:06 --:--:--:--:--:--:--:--:--:--: FL5-TIOOPN VERSION: 1.1.23-42969 BUILD: RELEASE Oct 30 2026 20:57:36 --:--:--:--:--:--:--:--:--:--: FL5-YIOOPN VERSION: 1.2.19-42969 BUILD: RELEASE Oct 30 2026 20:57:37 --:--:--:--:--:--:--:--:--:--: FL5-FIOREC VERSION: 5.2.96-42969 BUILD: RELEASE Oct 30 2026 20:57:10 --:--:--:--:--:--:--:--:--:--:--: FL5-CMDPRO VERSION: 5.2.5-42969 BUILD: RELEASE Oct 30 2026 20:57:52 --:--:--:--:--:--:--:--:--:--:--:--: FL5-FLMSSH VERSION: 1.0.4-42969 BUILD: RELEASE Oct 30 2026 20:57:52 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-CONNSSH VERSION: 1.4.3-42969 BUILD: RELEASE Oct 30 2026 20:57:50 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-FLCRYPTO VERSION: 1.3.0-42969 BUILD: RELEASE Oct 30 2026 20:58:06 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-FLHMAC VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:58:06 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-FLHASH VERSION: 1.6.0-42969 BUILD: RELEASE Oct 30 2026 20:58:06 --:--:--:--:--:--:--:--:--:--:--:--: FL5-EXECCMD VERSION: 1.3.0-42969 BUILD: RELEASE Oct 30 2026 20:57:51 --:--:--:--:--:--:--:--:--:--:--:--: FL5-CHR VERSION: 1.2.14-42969 BUILD: RELEASE Oct 30 2026 20:56:54 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-ICV VERSION: 1.2.19-42969 BUILD: RELEASE Oct 30 2026 20:57:37 --:--:--:--:--:--:--:--: FL5-FIOTXT VERSION: 5.2.53-42969 BUILD: RELEASE Oct 30 2026 20:57:11 --:--:--:--:--:--:--:--: FL5-FIOFL4 VERSION: 5.2.117-42969 BUILD: RELEASE Oct 30 2026 20:57:09 --:--:--:--:--:--:--:--:--: FL5-FL4REC VERSION: 1.0.3-42969 BUILD: RELEASE Oct 30 2026 20:56:44 --:--:--:--:--:--:--:--: FL5-FIOZIP VERSION: 5.2.54-42969 BUILD: RELEASE Oct 30 2026 20:57:11 --:--:--:--:--:--:--:--:--: FL5-ZIP VERSION: 1.1.44-42969 BUILD: RELEASE Oct 30 2026 20:57:06 --:--:--:--:--:--:--:--: FL5-FLMLST VERSION: 5.2.5-42969 BUILD: RELEASE Oct 30 2026 20:57:22 --:--:--:--:--:--:--:--:--: FL5-FLMARC VERSION: 5.2.41-42969 BUILD: RELEASE Oct 30 2026 20:57:18 --:--:--:--:--:--:--:--:--:--: FL5-FLMSEG VERSION: 5.2.3-42969 BUILD: RELEASE Oct 30 2026 20:57:22 --:--:--:--:--:--:--:--:--:--:--: FL5-FLMMAT VERSION: 5.2.28-42969 BUILD: RELEASE Oct 30 2026 20:57:20 --:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCCRY VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCCRY01 VERSION: 1.2.3-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-SECUTL VERSION: 1.1.1-42969 BUILD: RELEASE Oct 30 2026 20:58:06 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCCRY02 VERSION: 1.2.3-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCCRY03 VERSION: 1.2.3-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCCRY04 VERSION: 1.2.3-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCCRY05 VERSION: 1.2.3-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCCRY06 VERSION: 1.2.3-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCCMP VERSION: 5.2.3-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCCOPY VERSION: 5.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCFSTFL VERSION: 5.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-FSW VERSION: 1.0.3-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCDYNFL VERSION: 5.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:34 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-ADCSTD VERSION: 4.2.3-42969 BUILD: RELEASE Oct 30 2026 20:56:53 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCGZIP VERSION: 5.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--:--:--: zlib VERSION: 1.3.1.zlib-ng-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCBZIP VERSION: 5.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--:--:--: libbzip2 VERSION: 1.0.8-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCLZ4 VERSION: 5.2.3-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--:--:--: liblz4 VERSION: 1.10.0-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-NUCZSTD VERSION: 5.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--:--:--: libzstd VERSION: 1.5.7-42969 BUILD: RELEASE Oct 30 2026 20:57:33 --:--:--:--:--:--:--:--:--:--:--:--: FL5-DATCNV VERSION: 1.0.42-42969 BUILD: RELEASE Oct 30 2026 20:57:49 --:--:--:--:--:--:--:--:--:--:--: FL5-FLMIPN VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:57:18 --:--:--:--:--:--:--:--:--:--:--: FL5-FLMSTO VERSION: 5.2.16-42969 BUILD: RELEASE Oct 30 2026 20:57:18 --:--:--:--:--:--:--:--:--:--:--:--: FL5-SEGSTOR VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:58:08 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-SEGFILE VERSION: 5.2.8-42969 BUILD: RELEASE Oct 30 2026 20:58:07 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-SEGOBJ VERSION: 5.3.10-42969 BUILD: RELEASE Oct 30 2026 20:58:07 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-OBJFLDR VERSION: 5.2.7-42969 BUILD: RELEASE Oct 30 2026 20:58:06 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-OBJCLDS3 VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:58:07 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-FLREST VERSION: 5.2.21-42969 BUILD: RELEASE Oct 30 2026 20:58:08 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-FLHTTPLC VERSION: 5.2.3-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: libcurl VERSION: 8.23.0-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: nghttp2 VERSION: 1.70.0-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: nghttp3 VERSION: 1.18.0-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: ngtcp2 VERSION: 1.25.0-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: brotli VERSION: 1.2.0-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: libidn2 VERSION: 2.3.8-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: libpsl VERSION: 0.21.5-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: libunistring VERSION: 1.4.2-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-BAS VERSION: 1.0.0-42969 BUILD: RELEASE Oct 30 2026 20:56:54 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-FLASYM VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:58:06 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-OBJCLDAZ VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:58:07 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-OBJSSE VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:58:08 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-OBJCDAHZ VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:58:08 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-SEGSSE VERSION: 5.2.0-42969 BUILD: RELEASE Oct 30 2026 20:58:08 --:--:--:--:--:--:--:--:--:--: FL5-FLMNUC VERSION: 5.2.5-42969 BUILD: RELEASE Oct 30 2026 20:57:22 --:--:--:--:--:--:--:--:--:--: FL5-FMTTAB VERSION: 5.3.79-42969 BUILD: RELEASE Oct 30 2026 20:57:30 --:--:--:--:--:--:--:--:--:--:--: FL5-ELMTAB VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:47 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TABFIX VERSION: 5.1.11-42969 BUILD: RELEASE Oct 30 2026 20:57:54 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TABLFD VERSION: 5.2.13-42969 BUILD: RELEASE Oct 30 2026 20:57:54 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TABDLM VERSION: 5.1.13-42969 BUILD: RELEASE Oct 30 2026 20:57:54 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TABVAR VERSION: 5.2.8-42969 BUILD: RELEASE Oct 30 2026 20:57:54 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TABARY VERSION: 5.2.5-42969 BUILD: RELEASE Oct 30 2026 20:57:54 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TABCSV VERSION: 5.2.25-42969 BUILD: RELEASE Oct 30 2026 20:57:54 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TABTVD VERSION: 5.2.8-42969 BUILD: RELEASE Oct 30 2026 20:57:55 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TABXML VERSION: 5.2.38-42969 BUILD: RELEASE Oct 30 2026 20:58:00 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-FMTXML VERSION: 5.2.48-42969 BUILD: RELEASE Oct 30 2026 20:57:29 --:--:--:--:--:--:--:--:--:--:--:--:--:--: libexpat VERSION: expat_2.9.0-42969 BUILD: RELEASE Oct 30 2026 20:57:29 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TABRST VERSION: 5.1.3-42969 BUILD: RELEASE Oct 30 2026 20:58:01 --:--:--:--:--:--:--:--:--:--:--: FL5-ELMPRC VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:47 --:--:--:--:--:--:--:--:--:--:--:--: FL5-MSKPRC VERSION: 5.1.5-42969 BUILD: RELEASE Oct 30 2026 20:58:05 --:--:--:--:--:--:--:--:--:--:--:--: FL5-CNVPRC VERSION: 5.2.7-42969 BUILD: RELEASE Oct 30 2026 20:58:05 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-ELMCNV VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:47 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-BINCNV VERSION: 5.2.8-42969 BUILD: RELEASE Oct 30 2026 20:57:47 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-BINMCH VERSION: 1.0.0-42969 BUILD: RELEASE Oct 30 2026 20:57:50 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-STRCNV VERSION: 5.2.35-42969 BUILD: RELEASE Oct 30 2026 20:57:47 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--: libpcre2 VERSION: 10.49-42969 BUILD: RELEASE Oct 30 2026 20:57:47 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-REGEXP VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:50 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-INTCNV VERSION: 5.2.34-42969 BUILD: RELEASE Oct 30 2026 20:57:47 --:--:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-BIGNUM VERSION: 1.3.11-42969 BUILD: RELEASE Oct 30 2026 20:57:53 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-FLTCNV VERSION: 5.2.33-42969 BUILD: RELEASE Oct 30 2026 20:57:48 --:--:--:--:--:--:--:--:--:--:--:--:--:--: FL5-I64CNV VERSION: 5.2.6-42969 BUILD: RELEASE Oct 30 2026 20:57:48 --:--:--:--:--:--:--:--:--:--:--:--: FL5-EXTPRC VERSION: 5.1.4-42969 BUILD: RELEASE Oct 30 2026 20:58:05 --:--:--:--:--:--:--:--:--:--:--: FL5-ROWDET VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:58:01 --:--:--:--:--:--:--:--:--:--:--:--: FL5-DETCSV VERSION: 5.2.9-42969 BUILD: RELEASE Oct 30 2026 20:58:02 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-COL2CLP VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:58:01 --:--:--:--:--:--:--:--:--:--:--:--: FL5-DETFIX VERSION: 5.2.71-42969 BUILD: RELEASE Oct 30 2026 20:58:02 --:--:--:--:--:--:--:--:--:--:--:--: FL5-DETXML VERSION: 5.2.2-42969 BUILD: RELEASE Oct 30 2026 20:58:04 --:--:--:--:--:--:--:--:--:--:--:--: FL5-TYPDET VERSION: 1.0.2-42969 BUILD: RELEASE Oct 30 2026 20:58:05 --:--:--:--:--:--:--:--:--:--: FL5-CNVPGP VERSION: 5.2.31-42969 BUILD: RELEASE Oct 30 2026 20:56:59 --:--:--:--:--:--:--:--:--:--:--: FL5-PGP VERSION: 1.1.21-42969 BUILD: RELEASE Oct 30 2026 20:57:03 --:--:--:--:--:--:--:--:--:--:--:--: FL5-PGPUTL VERSION: 1.1.1-42969 BUILD: RELEASE Oct 30 2026 20:57:05 --:--:--:--:--:--:--:--:--:--:--:--: FL5-PGPPAC VERSION: 5.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:04 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-PGPCMP VERSION: 1.1.1-42969 BUILD: RELEASE Oct 30 2026 20:57:03 --:--:--:--:--:--:--:--:--:--:--:--:--: FL5-PGPKEY VERSION: 5.2.2-42969 BUILD: RELEASE Oct 30 2026 20:57:05 --:--:--:--:--:--:--:--:--:--:--: FL5-CNVBAS VERSION: 5.1.29-42969 BUILD: RELEASE Oct 30 2026 20:56:55 --:--:--:--:--:--:--: FL5-ORGCNV VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:35 --:--:--:--:--:--:--:--: FL5-CNVBLK VERSION: 5.1.10-42969 BUILD: RELEASE Oct 30 2026 20:56:55 --:--:--:--:--:--:--:--:--: FL5-FMTBIN VERSION: 5.2.15-42969 BUILD: RELEASE Oct 30 2026 20:57:28 --:--:--:--:--:--:--:--:--: FL5-FMTBLK VERSION: 5.1.13-42969 BUILD: RELEASE Oct 30 2026 20:57:28 --:--:--:--:--:--:--:--:--: FL5-FMTTXT VERSION: 5.2.63-42969 BUILD: RELEASE Oct 30 2026 20:57:29 --:--:--:--:--:--:--:--: FL5-CNVREC VERSION: 5.2.21-42969 BUILD: RELEASE Oct 30 2026 20:57:01 --:--:--:--:--:--:--:--:--: FL5-FMTREC VERSION: 5.1.24-42969 BUILD: RELEASE Oct 30 2026 20:57:28 --:--:--:--:--:--:--:--: FL5-CNVEDC VERSION: 5.2.4-42969 BUILD: RELEASE Oct 30 2026 20:56:58 --:--:--:--:--:--:--:--: FL5-CNVGZP VERSION: 5.2.57-42969 BUILD: RELEASE Oct 30 2026 20:57:00 --:--:--:--:--:--:--:--: FL5-CNVBZ2 VERSION: 5.2.42-42969 BUILD: RELEASE Oct 30 2026 20:56:56 --:--:--:--:--:--:--:--: FL5-CNVLXZ VERSION: 5.2.36-42969 BUILD: RELEASE Oct 30 2026 20:57:01 --:--:--:--:--:--:--:--:--: liblzma VERSION: 5.8.3-42969 BUILD: RELEASE Oct 30 2026 20:57:01 --:--:--:--:--:--:--:--: FL5-CNVZST VERSION: 5.2.13-42969 BUILD: RELEASE Oct 30 2026 20:57:02 --:--:--:--:--:--:--:--: FL5-CNVLZ4 VERSION: 5.2.22-42969 BUILD: RELEASE Oct 30 2026 20:57:02 --:--:--:--:--:--:--:--: FL5-CNVLZP VERSION: 5.2.25-42969 BUILD: RELEASE Oct 30 2026 20:57:02 --:--:--:--:--:--:--:--: FL5-CNVTRS VERSION: 5.2.7-42969 BUILD: RELEASE Oct 30 2026 20:57:02 --:--:--:--:--:--:--:--:--: FL5-TERSE VERSION: 5.2.7-42969 BUILD: RELEASE Oct 30 2026 20:57:03 --:--:--:--:--:--:--:--: FL5-CNVCHR VERSION: 5.2.19-42969 BUILD: RELEASE Oct 30 2026 20:56:58 --:--:--:--:--:--:--:--: FL5-CNVAVS VERSION: 5.1.2-42969 BUILD: RELEASE Oct 30 2026 20:57:00 --:--:--:--:--:--:--:--: FL5-CNVHSH VERSION: 5.2.19-42969 BUILD: RELEASE Oct 30 2026 20:57:00 --:--:--:--:--:--:--:--: FL5-CNVSIG VERSION: 5.1.4-42969 BUILD: RELEASE Oct 30 2026 20:57:00 --:--:--:--:--:--:--:--: FL5-CNVCMT VERSION: 5.3.14-42969 BUILD: RELEASE Oct 30 2026 20:56:59 --:--:--:--:--:--:--:--: FL5-CNVDEC VERSION: 5.1.2-42969 BUILD: RELEASE Oct 30 2026 20:56:56 --:--:--:--:--:--:--: FL5-ORGFMT VERSION: 5.2.1-42969 BUILD: RELEASE Oct 30 2026 20:57:35 --:--:--: FL5-DIROPN VERSION: 1.2.10-42969 BUILD: RELEASE Oct 30 2026 20:58:09 --:--: FLAM-CLE VERSION: 1.4.98-42969 BUILD: RELEASE Oct 30 2026 20:57:14 --:--:--: FLAM-CLP VERSION: 1.5.147-42969 BUILD: RELEASE Oct 30 2026 20:57:12 ------------------------------------------------------------------------ ... print CLE_DOCTYP_ABOUT == About [[CLEP.APPENDIX.ABOUT]] == Appendix F. About This is the about information for the program (flacsv). Its content is printed on the screen if the built-in function <> is used. ------------------------------------------------------------------------ --: Auto-CSV Converter (identical to 'FLCL ACSV ...') (FL5-FLACSV) --: VERSION: 5.2.1-42969 Build: RELEASE Oct 30 2026 20:58:49 --: Copyright (C) limes datentechnik (R) gmbh --: All rights reserved --: The Auto-CSV Converter (flacsv) converts binary record files --: to CSV output without a copybook -- layout is inferred automatically. --: This program uses the libraries below: --:--: FL5-Core (FL5-CORE) --:--: VERSION: 5.2.1-42969 Build: RELEASE Oct 30 2026 20:56:52 --:--: Copyright (C) limes datentechnik (R) gmbh --:--: All rights reserved --:--: This library uses the libraries below: --:--:--: zlib Version 1.3.1 based on zlib license --:--:--: Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler --:--:--: Thanks to Jean-loup and Mark to provide this software library --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICZLIB.txt in the FLAM install folder --:--:--: https://zlib.net/zlib_license.html --:--:--: https://zlib.net/ --:--:--: On z/OS and USS the extended zlib of IBM (including zEDC hardware --:--:--: support) is used instead of the zlib delivered with FL5. It is part of --:--:--: the operating system and is replaced by IBM's own maintenance. --:--:--: Where libz is provided by zlib-ng it is listed separately below, and --:--:--: the version above is then the zlib API it implements, not a zlib release. --:--:--: libbzip2 Version 1.0.8, 13-Jul-2019 based on BSD like license --:--:--: Copyright (C) 1996-2010 Julian R Seward. --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICBZIP2.txt in the FLAM install folder --:--:--: https://sourceware.org/bzip2/ --:--:--: liblzma Version 5.8.3 of the XZ Utils project based on the BSD Zero Clause License (0BSD) --:--:--: Copyright (C) 2013 Igor Pavlov and Lasse Collin --:--:--: Thanks to Igor Pavlov and Lasse Collin to provide this software library --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICLZMA.txt in the FLAM install folder --:--:--: https://tukaani.org/xz/ --:--:--: libzstd Version 1.5.7 based on BSD license --:--:--: Copyright (C) 2016-present, Facebook, Inc. All rights reserved. --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICZSTD.txt in the FLAM install folder --:--:--: https://github.com/facebook/zstd/blob/dev/LICENSE --:--:--: https://github.com/facebook/zstd/ --:--:--: liblz4 Version 1.10.0 based on BSD 2-Clause license --:--:--: Copyright (C) 2011-present, Yann Collet. --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICLZ4.txt in the FLAM install folder --:--:--: https://github.com/lz4/lz4/blob/dev/LICENSE --:--:--: https://lz4.org/ --:--:--: Expat Version 2.9.0 based on MIT license --:--:--: Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. --:--:--: Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper --:--:--: This library is used in modified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICEXPAT.txt in the FLAM install folder --:--:--: https://github.com/libexpat/libexpat/blob/master/expat/COPYING --:--:--: https://libexpat.github.io/ --:--:--: The modified Expat source can be found at: https://github.com/limes-datentechnik-gmbh/libexpat --:--:--: PCRE2 Version 10.49 based on BSD license --:--:--: Copyright (c) 1997-2021 University of Cambridge. --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICPCRE2.txt in the FLAM install folder --:--:--: https://github.com/PCRE2Project/pcre2/blob/main/LICENCE.md --:--:--: https://pcre2project.github.io/pcre2/ --:--:--: libcrypto of OpenSSL 3.6.1 27 Jan 2026 based on Apache-2.0 license --:--:--: Copyright (c) 1998-2026 The OpenSSL Project Authors. All Rights Reserved. --:--:--: This software is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICOPSSL.txt in the FLAM install folder --:--:--: https://openssl-library.org/source/license/index.html --:--:--: https://www.openssl.org/ --:--:--: FLAM(R) use the EVP interface (libcrypto) of OpenSSL 3.6.1 27 Jan 2026 --:--:--: libssh Version 0.12.2 based on LGPL license --:--:--: Copyright (C) 2005-2008 by Aris Adamantiadis --:--:--: Copyright (C) 2008-2018 by Andreas Schneider --:--:--: This library is used in modified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICLSSH.txt in the FLAM install folder --:--:--: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html --:--:--: https://www.libssh.org/ --:--:--: The modified libssh source can be found at: https://github.com/limes-datentechnik-gmbh/libssh --:--:--: The LGPL conform replacement of the libraries are described at the end of doc/txt/README.txt --:--:--:--: libcrypto of OpenSSL 3.6.1 27 Jan 2026 based on Apache-2.0 license --:--:--:--: Copyright (c) 1998-2026 The OpenSSL Project Authors. All Rights Reserved. --:--:--:--: This software is used in unmodified form. --:--:--:--: for license and more information see: --:--:--:--: doc/txt/LICOPSSL.txt in the FLAM install folder --:--:--:--: https://openssl-library.org/source/license/index.html --:--:--:--: https://www.openssl.org/ --:--:--:--: FLAM(R) use the EVP interface (libcrypto) of OpenSSL 3.6.1 27 Jan 2026 --:--:--: Lightning memory-mapped database library (liblmdb) --:--:--: Version LMDB 0.9.70: (December 19, 2015) based on OpenLDAP License --:--:--: Copyright 2011-2017 Howard Chu, Symas Corp. --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICLMDB.txt in the FLAM install folder --:--:--: https://www.openldap.org/software/release/license.html --:--:--: http://www.lmdb.tech/doc/ --:--:--: libfuse Version 3 based on LGPL license for Linux systems --:--:--: Copyright (C) 2001-2007 Miklos Szeredi --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICLGPL2.txt in the FLAM install folder or --:--:--: https://github.com/libfuse/libfuse/blob/master/LICENSE --:--:--: https://libfuse.github.io/doxygen/ --:--:--: Part of the operating system (prerequisite, not part of this distribution) --:--:--: The glibc minimum version 2.28 based on LGPL license for Linux systems --:--:--: Copyright (C) 1991-2012 Free Software Foundation, Inc. --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICLGPL2.txt in the FLAM install folder or --:--:--: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html --:--:--: https://www.fsf.org/ --:--:--: Part of the operating system (prerequisite, not part of this distribution) --:--:--: libcurl Version 8.23.0 based on curl license --:--:--: Copyright (C) 1996-2025 Daniel Stenberg and many contributors --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICCURL.txt in the FLAM install folder --:--:--: https://curl.se/ --:--:--: For TLS it uses OpenSSL, both libssl and libcrypto -- FLAM(R) --:--:--: itself uses only the EVP interface (libcrypto), not libssl. --:--:--:--: libcrypto of OpenSSL 3.6.1 27 Jan 2026 based on Apache-2.0 license --:--:--:--: Copyright (c) 1998-2026 The OpenSSL Project Authors. All Rights Reserved. --:--:--:--: This software is used in unmodified form. --:--:--:--: for license and more information see: --:--:--:--: doc/txt/LICOPSSL.txt in the FLAM install folder --:--:--:--: https://openssl-library.org/source/license/index.html --:--:--:--: https://www.openssl.org/ --:--:--:--: FLAM(R) use the EVP interface (libcrypto) of OpenSSL 3.6.1 27 Jan 2026 --:--:--:--: nghttp2 Version 1.70.0 based on MIT license --:--:--:--: Copyright (C) 2012-2025 Tatsuhiro Tsujikawa and contributors --:--:--:--: This library is used in unmodified form. --:--:--:--: for license and more information see: --:--:--:--: doc/txt/LICNGH2.txt in the FLAM install folder --:--:--:--: https://nghttp2.org/ --:--:--:--: nghttp3 Version 1.18.0 based on MIT license --:--:--:--: Copyright (C) 2019-2025 nghttp3 contributors --:--:--:--: This library is used in unmodified form. --:--:--:--: for license and more information see: --:--:--:--: doc/txt/LICNGH3.txt in the FLAM install folder --:--:--:--: https://github.com/ngtcp2/nghttp3 --:--:--:--: ngtcp2 Version 1.25.0 based on MIT license --:--:--:--: Copyright (C) 2016-2025 ngtcp2 contributors --:--:--:--: This library is used in unmodified form. --:--:--:--: for license and more information see: --:--:--:--: doc/txt/LICNGT2.txt in the FLAM install folder --:--:--:--: https://github.com/ngtcp2/ngtcp2 --:--:--:--: brotli Version 1.2.0 based on MIT license --:--:--:--: Copyright (C) 2009-2025 the Brotli Authors --:--:--:--: This library is used in unmodified form. --:--:--:--: for license and more information see: --:--:--:--: doc/txt/LICBROTL.txt in the FLAM install folder --:--:--:--: https://github.com/google/brotli --:--:--:--: libpsl Version 0.21.5 based on MIT license --:--:--:--: Copyright (C) 2014-2025 Tim Ruehsen --:--:--:--: This library is used in unmodified form. --:--:--:--: for license and more information see: --:--:--:--: doc/txt/LICPSL.txt in the FLAM install folder --:--:--:--: https://github.com/rockdaboot/libpsl --:--:--:--:--: libidn2 Version 2.3.8 based on LGPL-3.0-or-later license --:--:--:--:--: Copyright (C) 2011-2025 Simon Josefsson and Tim Ruehsen --:--:--:--:--: This library is used in unmodified form. --:--:--:--:--: for license and more information see: --:--:--:--:--: doc/txt/LICLGPL.txt in the FLAM install folder --:--:--:--:--: doc/txt/LICUNICD.txt in the FLAM install folder for the Unicode character data --:--:--:--:--: https://www.gnu.org/software/libidn/ --:--:--:--:--: libunistring Version 1.4.2 based on LGPL-3.0-or-later license --:--:--:--:--: Copyright (C) 2009-2026 Free Software Foundation, Inc. --:--:--:--:--: This library is used in unmodified form. --:--:--:--:--: for license and more information see: --:--:--:--:--: doc/txt/LICLGPL.txt in the FLAM install folder --:--:--:--:--: https://www.gnu.org/software/libunistring/ --:--:--: zlib-ng Version 2.3.3 based on Zlib license --:--:--: Copyright (C) 2019-2026 Hans Kristian Rosbach and contributors --:--:--: This library is used in unmodified form. --:--:--: for license and more information see: --:--:--: doc/txt/LICZLIBN.txt in the FLAM install folder --:--:--: https://github.com/zlib-ng/zlib-ng --:--: Frankenstein Limes Command Line Execution (FLAM-CLE) --:--: Version: 1.4.98-42969 Build: RELEASE Oct 30 2026 20:57:14 --:--: Copyright (C) limes datentechnik (R) gmbh --:--: This library is open source from the FLAM(R) project: https://flam.de --:--: for license see: https://github.com/limes-datentechnik-gmbh/flamclep --:--: This library uses the internal library below: --:--:--: Frankenstein Limes Command Line Parser (FLAM-CLP) --:--:--: Version: 1.5.147-42969 Build: RELEASE Oct 30 2026 20:57:12 --:--:--: Copyright (C) limes datentechnik (R) gmbh --:--:--: This library is open source from the FLAM(R) project: https://flam.de --:--:--: for license see: https://github.com/limes-datentechnik-gmbh/flamclep ------------------------------------------------------------------------ ... print CLE_DOCTYP_CHAPTER == Glossary [glossary] == Glossary :ADC: Abbreviation for Advanced Data Compression, which is the default compression algorithm of FLAM4. :AES: The Advanced Encryption Standard (AES) is a symmetric crypto system, the successor of DES and 3DES. It uses the Rijndael algorithm with a fixed block size of 128 bits and a variable key length of 128, 192 or 256 bits, providing a high grade of security. :ASCII: The American Standard Code for Information Interchange (ASCII) is a 7-Bit encoding, which is the source for later character sets based on more bits. :AVS: Anti virus scanning :BAS: Abbreviation for base encoding. :BCS: Banking Communication Standard. + Specification for remote data transmission between customers and credit institutions. The BCS is used, for example, in cash management systems to enable multi-bank capability, i.e. the processing of data from different credit institutions with software. :BIG ENDIAN: Endianness refers to the term byte order. A big-endian machine stores the most significant byte first, i.e. at the lowest byte address. This behavior is most important when two computers with different byte orders communicate with each other. The big-endian format is used by Motorola 6800 and 68k, Xilinx Microblaze, IBM POWER, System/360, System/370, ESA/390, z/Architecture and PDP-10. :BIN: Abbreviation for binary. :BOM: The Byte Order Mark (BOM) characterizes in which order the bytes are interpreted. This is important when exchanging data between different systems. For UTF-16 and UTF-32 a BOM sign at the beginning of the data stream is necessary, as more than one byte is used for the encoding of one character. UTF-8 uses the BOM sign "EF BB BF", which is used to mark a text file as UTF-8, even though byte order is not issue here. :BOMUTF: With this option of the FLCL, you can determine the correct UTF CCSID from the byte order mark (BOM). :BOMUCS: With this option of the FLCL, you can determine the correct UCS CCSID from the byte order mark (BOM). :BYTE ORDER: The byte order is the order in which bytes are interpreted for entities that consist of multiple bytes, e.g. Unicode characters. This is important when exchanging data between different systems. A big-endian machine stores the most significant byte first, i.e. at the lowest byte address. A little-endian machine, however, stores the least significant byte first. :BZ2: Abbreviation for BZIP2. :CANONICAL EQUIVALENCE: Canonical equivalence is a fundamental equivalence between individual Unicode characters and sequences of Unicode characters. :CASEMETHOD: FLCL offers a method for converting unicode characters to uppercase, lowercase or some special representation (CASE=UPPER/LOWER). :CCSID: This is an abbreviation used by IBM for "Coded Character Set Identifier". The encoding of a specific code page is referred to by a 16-bit number. see also: https://en.wikipedia.org/wiki/CCSID[CCSID] :CHAR: Abbreviation for the conversion of character streams. :CHR: Abbreviation for character :CLAMD: Clam Anti Virus Daemon :CNV: Abbreviation for conversion. Collects all conversion components which transform data stream in data stream (e.g. character conversion, compression, de/encryption, de/encoding, ...). :CODEPAGE: IBM introduced a numbering scheme to character encodings (16 bits). This scheme was taken over by other vendors like Microsoft, SAP or Oracle Corporation. The term Codepage is used synonymously for character encoding or character set. :CODE POINT: A code point or code position is a single character in a list of characters represented as numerical values that create the code space. The Unicode code space has a total size of 17 * 65536 code points. The same code space may have several codepages. :COMPATIBILITY EQUIVALENCE: One speaks of compatibility equivalence of two sets of characters if their full compatibility decompositions are identical. :CONV: The sub-program FLUC offers all possible conversion and formatting methods via the CONV command. These are various read and write procedures, many useful conversion tools and some special data formatting features. :CNV: Conversion component :CRY: Abbreviation for crypto(graphy). :CX7: Compression encoding as printable characters in FLAM4 :CX8: Compression encoding as binary data in FLAM4 :DAT: Abbreviation for data. :DIACRITIC: A diacritic is also called diacritical mark, diacritical point or diacritical sign. Typical diacritical marks are the acute (´) and grave (`), which are often called accents. Diacritical marks may be a dash, dot or tick above or below a letter, or in some other position such as within the letter or between two letters. :DIR: Abbreviation for directory (walk). :EBCDIC: The Extended Binary Coded Decimals Interchange Code (EBCDIC) was developed by IBM as 8-Bit-encoding, which, however, does not use all code words. EBCDIC originates from the older 4-Bit-Code BCD (Binary Coded Decimals) and is applied solely on Mainframes. The EBCDIC codepages are available in German, US, Swedish, Arabian, Latin-1 and other languages. Moreover, there exists a Unicode set of characters based on EBCDIC and it is called UTF-EBCDIC. :BLK: Abbreviation for block. :ENV: Abbreviation for environment. :FINGERPRINT: In public-key cryptography, a public key fingerprint is a short sequence of bytes used to identify a longer public key. Fingerprints are created by applying a cryptographic hash function to a public key. Since fingerprints are shorter than the keys they refer to, they can be used to simplify certain key management tasks. + see also: https://en.wikipedia.org/wiki/Public_key_fingerprint/[Public key fingerprint] :FIO: Abbreviation for File I/O. All components to read or write files. The C programming language has a general mechanism for reading and writing files abstracting all Input/Output to streams of bytes. The operating system offers redirection which can be very useful. Examples are the standard input stream, standard output stream and standard error stream. :FKME: FLAM Key Management Exit/Extension Service provider interface to connect FLAM till version 4 with different kinds of cryptographic infrastructure, hardware security modules and/or key management systems. :FL4: Abbreviation for FLAM in Version 4 or lower. :FL5: Abbreviation for FLAM in Version 5. :FLAM: Frankenstein Limes Access Method. FLAM is our access method for encrypted and compressed data. In particular, FLAM is a utility for converting, compressing, encrypting (with AES (Advanced Encryption Standard)), signing and formatting of mass data with simple interfaces for integration in all kinds of solutions. All this is done with a minimum of CPU utilization, utilization of co-processors and the use of professional key management solutions. Ordinarily, FLAM provides - when used as sub-program - the commands COMP and DECO and makes use of an element interface for the subsystems/plugins/drivers and also the sub-program. :FLAM4: This component writes a Flamfile record-oriented. You can state the name of a Flamfile or that of a member. :FLAMFILE: The FLAMFILE is composed like a package file, as multiple files can be compressed. It is structured clearly and divided hierarchically in records, segments and members. In this connection a segment is referred to the single matrix of a compressed file and a member to the entity of segments that are part of the compressed file. In order to ensure the universal exchangeability, the FLAMFILE has to be available in a format that is representable on all operating systems (so-called heterogeneous compatibility). Each compressed data segment is unique referring to data content, environment and time. This allows - despite compression/encryption - an access down to the record-level, without decompressing/decrypting. :FLCC: Frankenstein Limes Control Center (GUI).In contrast to FLCL this is the graphical user interface for running FLAM, FLUC and FLIES, quasi a dialogue utility :FLCL: Frankenstein Limes Command Line. FLCL offers a command line for the three sub-programs FLAM, FLUC and FLIES. It is a quasi-batch utility for the sub-programs. Moreover, FLCL is a universal data format and character set converter, which can be included easily in professional internationalization projects. It supports different input and output formats (GZIP, PDF, B64...) and can be integrated into scripts or as sub-program. More than 150 codepages are supported. FLCL can be applied to various commonly used platforms if working with processable data streams or file I/O. :FLIES: Frankenstein Limes Integrated Extended Security. The sub-program FLIES governs the compressed and encrypted segments using commands like FIND and CHNGE. In particular, it is useful for processing Flamfiles, which however cannot be decrypted or decompressed. For instance the data in the file header is managed by FLIES to re-encrypt the file, change the data access, use as backup, archive or as mediator/headend. :FLUC: Frankenstein Limes Universal Converter. FLUC is a universal text converter with special focus on the high requirements in professional internationalization projects, where Mainframes and external applications are used as central backend. :FLUCUP: FLUC Subprogram as C interface (DLL) for Data source to target conversion. :FLM5UP: FLAM Subprogram as C interface (DLL) for Data source to target conversion. :FMT: Abbreviation for formatting. All components to parse a data stream in FLAM5 element list or build a data stream from FLAM5 elements list. :FROM-CODE: The FROM-Code specifies the character encoding of the input data that used as source encoding for character conversion. :GZIP: GZIP is a compression program for nearly every operation system and uses the DEFLATE algorithm from the ZLIB library. GZIP is the short form for GNU zip. The used algorithm is a combination of LZ77 and Huffmann encoding. The source code is licensed under the GPL. The program has 9 compression steps providing either optimal CPU time or compression ratios. The compressed file has the ending ".gz". As GZIP compresses only single files. Several files must first be combined with (for example) "tar" to a tarball which can then be compressed to a ".tar.gz" file. GZIP files have a 10-byte header, containing a magic number, a version number and a timestamp. With FLCL you are able to read and write GZIP files, to mark content as text data in the header, set operating/file system or modified time (seconds since 1970). :GZP: Abbreviation for GZIP. :HOST: see MAINFRAME :HSH: Abbreviation for hash (checksum) :ICNV: Abbreviation for iconv conversion with simplified commands on the command line. :ICONV: With the standard program iconv, characters can be translated between different encodings on UNIX-like systems. As iconv is now part of the GNU C Library, actual Linux systems are equipped with iconv. Under Windows(R), iconv is provided only as DLL or static library, which is under the license of the GPL and can be used via Cygwin or GnuWin32. Iconv is also supported as Dynamic Link Library for PHP. :ID: Abbreviation for identifier. :ISO-8859: The ISO-8859 norm family contains some useful 8-bit character sets (e.g. Latin-1 to Latin-15). The frequently used Latin-1 character set is identical with the first 256 characters of the Unicode character set. These codepages are also called extended Ascii. :LITTLE ENDIAN: A little-endian machine stores the least significant byte first. The endianness of a 16, 32 or 64 bits word or even bits can occur in some Unicode representations. Also mixed forms of endianness are possible, for example when the byte order within a 16 bits word differs from that of a 16 bits word within a 32 bits word. The little-endian format is used by x86 (including x86-64), 6502 (including 65802, 65C816), Z80 (including Z180, eZ80 etc.), MCS-48, 8051, DEC Alpha, Altera Nios II, Atmel AVR, SuperH, VAX, and PDP-11. :LOGGING: In FLCL various messages (warnings, errors, debug information, important information, input data) can be logged. The messages can be redirected from stderr to stdout or a file. :LXZ: Abbreviation for LZMA XZ. :MAINFRAME: A mainframe is a very complex and powerful computer system. Its capacity is far beyond that of a common Personal Computer and that of most servers. They are applied for the highly reliable processing of mass data, mass transactions and company critical data and gain importance again in connection with server consolidation and cloud computing. :MODE: With the keyword MODE in FLCL you can select the mode of operation. :NDC: Abbreviation for No Data Compression, which can be considered as copying data in FLAM4. :NFC: This is Normalization Form C (Canonical Decomposition, followed by Canonical Composition). :NFD: This is Normalization Form D (Canonical Decomposition). :NFKC: This is Normalization Form KC (Compatibility Decomposition, followed by Canonical Composition). :NFKD: This is Normalization Form KD (Compatibility Decomposition). :Normalization: The transformation of a character sequence in one of the four normal forms is called normalization. Normalization is necessary, because there is more than one differing possibility for many characters to be represented as a sequence of Unicode characters. The four normal forms consist of one form for the canonical equivalence, one for the compatible equivalence, and both can be in a "composed" or "decomposed" form. :OS: Abbreviation for operation/file system in the header :PADDING: Padding are bytes inserted to align the data to certain lengths or storage positions. Padding bytes are most commonly appended after the the last data byte. When reading padded data, the padding bytes are discarded. :PDS: Partitioned data set. A PDSE consists of a directory and zero or more members, :PDSE: Partitioned data set extended. Exactly same as PDS in many respects. PDSE data sets can be stored only on DASD, not on tape. Interesting thing is the directory can expand automatically as needed. Additionally it has an index which helps to locate the members inside the PDSE faster. SPACE from deleted members are automatically reused in PDSE . :PGP: Abbreviation for pretty good privacy (OpenPGP). :PLATFORM NEUTRAL: The components of FLAM are platform neutral. This means that they work independently from the used operating system. Operating systems can be for example LINUX, UNIX-like systems, WINDOWS(R) or z/OS(R). :PO: Data set organisation partitioned organized. :PS: Data set physical sequential file. :REC: Abbreviation for record. :SEPA: The Single Euro Payments Area (SEPA) is a project to harmonize the way retail payments are made and processed in Euro. The motivation behind it is to make payments in Euro and across the EU as fast, safe and efficient as national payments are now. SEPA shall enable customers to make cashless Euro payments to anyone in the EU, for instance by credit transfer, direct debit or debit card. + see also: https://en.wikipedia.org/wiki/Single_Euro_Payments_Area/[SEPA] :SIG: Abbreviation for signature :SSH: Secure shell + see also: https://en.wikipedia.org/wiki/Secure_Shell/[SSH] :SUB CHARSET: A Sub Charset is a partial quantity of a character set. For instance the new identity card issued in Germany (nPa) requires that each printed character - even the diacritical characters - is "composed". It means that they remain in their original form and are not "decomposed" into several bytes. For that reason, the Sub Charset "Latin in Unicodes" with some more than 500 letters is used. :SUBCHR: FLCL can substitute characters that are unsupported in their target encoding by system specific characters (e.g. 0x1A for ASCII or 0x3F for EBCDIC pages) or by arbitrary characters. In the first case, you must use SUBCHR=SYSTEM, in the other you can define your own substitution characters. On z/OS(R), the utility iconv is available on the system and replaces all invalid characters by system specific characters, including the BOM sign. Note that it does not stop in contrast to LINUX or WINDOWS(R) but completes conversion. :SUBSTITUTE: If a character exists in the source code but not in the target code, it will be converted to a converter-defined substitute character. :SURROGATE: The Unicode code space is divided into 17 planes of 65536 code points each. Some code points have no character value, some are reserved for private use, and some are permanently reserved as non-characters. UTF-16 with code points beyond these planes is encoded in 16 bit surrogate pairs (High surrogate and low surrogate), which are in fact replacement characters. UTF-16 surrogate values are illegal in UTF-32. Note that the conversion of UTF-16 strings into UTF-8 byte sequences requires that the High and Low surrogate have to be combined correctly before they are transfered into UTF-8. :SYSTEM TABLE: FLCL makes use of a pre-loaded system substitution table for the transliteration of characters. This is comparable to "translit.h" of iconv under LINUX. :TAB: Abbreviation for table. :TAR: Tape Archiver; Short for Tape Archive, and sometimes referred to as tarball, a file that has the TAR file extension is a file in the Consolidated Unix Archive format. A program or command that can open archives is needed to open a TAR file. Because the TAR file format is used to store multiple files in one single file, it's a popular method for both archiving purposes and for sending multiple files over the internet, like for software downloads. The TAR file format is common in Linux and Unix systems, but only for storing data, not compressing it. TAR files are often compressed after being created, but those become TGZ files, using the TGZ, TAR.GZ, or GZ extension. :TARGET: Trans-European Automated Real-time Gross Settlement Express Transfer System. + see also: https://www.ecb.europa.eu/paym/target/target2/html/index.en.html/[TARGET] :TXT: Abbreviation for text. :TO-CODE: With few utilities you can convert text from one encoding to another. The TO-Code specifies the output encoding that characters are converted to. :TRANSCRIPTION: To transcribe the expression of a language means by dictionary, to represent it in another writing system rather in that, in which the language is usually written respectively in which it is available in written form. For the term of transcription it does not matter, in which medium the expression is available. Note that the transliteration of an expression is a particular type of transcription. :TRANSLATION: This is the transfer of a (mostly written) and fixed text from the original language into any target language; the process will be also denoted as "Translating". :TRANSLITERATION: To transliterate an expression represented in writing S1 into a writing system S2 means, that the characters contained in the expression are exchanged from S1 to S2 according to a fixed rule. In the simplest case, this can be a table which assigns each character of S1 a character of S2. Frequently, there are complications for the simple case, if for example a single character is assigned to a digraph or vice versa or if a character is mapped in context A onto a specific character, in context B however onto another character. For example: in a payment order from Germany, the name of the receiver must be written explicitly in Latin letters so that a transliteration of the original text with help of a table is required. :UNICODE: The so-called Unicode is an attempt, started in the 90s, to standardize a single character set that eliminates the need for different and incompatible encodings in different countries and cultures. The text should be always readable with a Unicode-supporting appropriate editor. This allows an error free data exchange (for the purpose of readability) also on a global and international level. For this character set, 8 bits (1 byte) are no longer sufficient to for a representation of every possible character. The length of characters encoded in Unicode can be between 1 and 4 bytes. ISO 10646 is a practically equal notation of the Unicode character set called Universal Character Set (UCS). :URL: Uniform Resource Locator + see also: https://en.wikipedia.org/wiki/URL/[URL] :USER TABLE: For character set conversion in FLCL you can define your own user substitution table to transliterate those characters that are not handled respectively replaced by the system table. :UTF-8: The 8-Bit Unicode Transformation Format is the most commonly used encoding for Unicode characters. The term Unicode is used equivalent to UCS. UTF-8 has a central meaning in the global character conversion for internet protocols. :UTF-16: In UTF-16 an encoded byte sequence with a length of 2 bytes is assigned to each Unicode character. UTF-16 is used in Java for internal character sequence representation. UTF-16 is the eldest format of the Unicodes. :UTF-32: UTF-32 (UCS-4) is encoded with 4 bytes and therefore the most simple Unicode representation, as other formats need variable byte lengths for their representation. One disadvantage of UTF-32 is the greater space requirement compared to UTF-8 and ISO-8859 character sets and the missing backward compatibility to ASCII.# :VSAM: Virtual Storage Access Method + see also: https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zconcepts/zconcepts_169.htm/[VSAM] :VR8: Enhanced compression encoding as binary data in FLAM4 :ZIP: ZIP is an archive file format that supports lossless data compression. ... print CLE_DOCTYP_CHAPTER == Imprint [colophon] == Imprint ----------------------------------------------------------------------- limes datentechnik(R) gmbh Louisenstrasse 101 D-61348 Bad Homburg v.d.H. phone: +49(0)6172-5919-0 fax: +49(0)6172-5919-39 mail: info@flam.de web: https://flam.de area of jurisdiction: Bad Homburg vor der Hoehe HRB 3288 (gegr. 1985) managing director: Falk Reichbott limes datentechnik(R): efficiency at the limit of possibility. -----------------------------------------------------------------------