FLAMCLE/P-API
Command Line Executor/Parser Application Programming Interface
LIMES Command Line Executor and Processor (FLAMCLEP)

License

This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

If you need professional services or support for this library please contact suppo.nosp@m.rt@f.nosp@m.lam.d.nosp@m.e.

Overview

We developed CLE/P because we didn't find an existing library meeting our requirements for a consistent command line over all platforms. We decided therefore to build such a compiler which is table-controlled and which transforms property files and command line inputs into a machine-processable data structure of arbitrary nesting depth.

The result is a very powerful tool briefly described in the following. The full interface documentation, programming reference, the GIT-repository, and the license can be downloaded from GITHUB.

We are posting CLP/E as OpenSource on the terms of a Zlib-based license above, making it freely available to everyone in the form of a GIT project.

With the command line executor (CLE), you can simply realize a complex command line through the definition of some tables. No programming is required to get the values parsed and stored in a free defined data structure. For this, a compiler with its own language was implemented to provide the same command line interface on each available platform. This command line parser (CLP) is used by the CLE. Both components provide extensive help for each command and many other support functions. For a provided list of commands, the CLE uses a dedicated command line processor (CLP) to make all these commands available, together with several built-in functions.

To achieve this, a table must be defined where each row describes one command. This table provides the input for the execution function doing the command line interpretation. The whole library consists of only one function and a structure to define the command table.

Beside the specified user defined commands, the CLE provides several powerful built-in functions. All built-in functions contain a manual page to get more information at runtime.

Based on the keyword, the short help message and the detailed description, the built-in function GENDOCU or HTMLDOC can be used to generate a complete user manual. Based on this capability, the CLE/P completely describes itself.

The self explanation of the whole program was one of the main targets of this general command line interface. To understand this interface specification it is advisable to read the CLE/P documentation.


Compilation concerns

For compilation the defines below must be set:

__DEBUG__        for a debug build
__RELEASE__      for a release build
__WIN__          for WINDOWS platforms
__ZOS__          for ZOS mainframe platforms
__USS__          for unix system services (USS) on ZOS mainframe platforms
__BUILDNR__      to define the build number (integer, default is 0)
__BUILD__        to define the build string ("debug", "release", "alpha", ...)
__HOSTSHORTING__ to short function names to 8 character for mainframes

On z/OS or USS the CELP and the using project must be compiled with the same CONVLIT() parameter (we recommend IBM-1047) for correct conversion of the literals. Don't use the literal replacements (S_xxx or C_xxx or the exprintf() functions) in front of the CleExecute call (see siCleExecute()) to ensure the environment of the configuration file is used for character conversion.

Few of the strings provided to the CleExecute function are converted for EBCDIC system. These conversions are done, based on stack allocations. We expect string literals with a limited length for these values. Please be aware of the security issues if you provide variable length strings in this case.

Command Line Executor (FLAMCLE)

With the command line executor (FLAMCLE) the user can simply realize a complex command line using command and keyword definitions contained in some tables.

Command Line Executor (FLAMCLE) uses the Command Line Parser (FLAMCLP) to provide the selected commands and keywords on each used platform. To achieve this, a table is defined where each row describes one command or keyword. This table provides the input for the execution function doing the command line interpretation. The whole library consists of only one function and a structure to define the command table. One of these commands or a built-in function can be defined as default, which will be executed if the first keyword (argv[1]) don't fit one of the user- defined commands or built-in functions. If no command or built-in function is defined and no default set the built-in function syntax will be executed to show the capabilities of the command line program.

Beside the specified user-defined commands, the FLAMCLE provides several powerful built-in functions (listed below). All built-in functions have a manual page, implemented to display more information at runtime.

With the built-in function help a short help message or the detailed description can determined for each parameter and command using a dotted path. The built-in function GENDOCU can be used to generate a part or the complete user manual. Based on this capability the FLAMCLE completely describes itself.

The self-documenting style of the whole program was one of the main targets of this general command line interface. To understand the interface specification, it is recommended to read the FLAMCLE documentation.

FLAMCLE-Features

Below, you can find a possibly incomplete list of FLAMCLE feature:

  • Support of an unlimited amount of commands
  • Support of hidden commands (not documented)
  • Support of a default command (optional)
  • Includes a lot of useful built-in functions
  • Simple owner management to differentiate configurations
  • The logical program name can be freely defined
  • Different view for property and command line parsing
  • Case sensitive or in-sensitive command line interpretation
  • Output file can be defined (stdout, stderr, or a real file)
  • Complete trace file management for FLAMCLP and commands
  • The look and feel can be defined freely
  • Syntax, help and manpage support for program, commands and arguments
  • Extensive documentation generation in ASCIIDOC format for the user manual
  • Powerful property file management (generation, activation, update, ...)
  • Simple configuration data management (own environment variables)
  • Environment variable replacement in the command string('<'envar'>')
  • Automatic keyword shortening for arguments
  • Support for many data types, like:
    • Number (decimal, hexadecimal, octal, binary and time)
    • Float (decimal in all variants)
    • String (binary text/ASCII/EBCDIC/HEX or from a file (for passwords))
    • Object (Structure) with parameter file support
    • Overlay (Union) with parameter file support
    • Array (List (realized as simplified notation) with parameter file support)
  • Support of constant definitions used as selection of values over keywords
  • Internal calculated values are available as link (amount of values in an array, length of a string, object identifier in overlays, ...)
  • The main table for a command can be defined as object or overlay
  • Keyword, help message and detailed description can be freely defined for the program, each command, argument or constant definition
  • Aliases for each argument can also be defined and are handled as options for the same value.
  • Available and usable on each platform including WIN, UNIX, USS, ZOS, ...
  • Support of 'STDENV' as DD name or DSN '&SYSUID..STDENV' for environment variables on mainframes
  • Support property definitions over environment variables to override hard coded default properties
  • Keywords (commands, built-in functions, ON, OFF, ALL, DEPTH1, ...) can start optional with "-" or "--"
  • Support for parameter files per command, object, overlay or array
  • File name mapping and DD:NAME support (see <<CLEP.CLEPMAIN,CLEP>>)
  • Return/condition/exit code and reason code handling
  • On EBCDIC systems we use a code page specific interpretation of punctuation characters (!$#@[]^`{|}~) dependent on the environment variable LANG
  • Extensive manual page management including replacement of owner (&{OWN}) and program name (&{PGM})
  • Own tool to generate description strings from text files including replacement of constant definitions (${VERSION})
  • Definition of maximum and minimum condition code (MAXCC) for command execution
  • Support SILENT and QUITE to control outputs
  • Special condition code handling (incl. description for manual and built-in function ERRORS)
  • Strings can be read from files to increase protection and prevent logging of passwords
  • Default parameter file name for system supporting static file allocation ("DD:MYPAR")
  • You can exclude the run after mapping if you provide the corresponding return code (siNoR)
  • Own file to string callback function for parameter files

FLAMCLE-Built-in Functions

All these built-in functions are available:

  • SYNTAX - Provides the syntax for each command
  • HELP - Provides quick help for arguments
  • MANPAGE - Provides manual pages (detailed help)
  • GENDOCU - Generates auxiliary documentation
  • HTMLDOC - Generates documentation using a call pack interface for each page
  • GENPROP - Generates a property file
  • SETPROP - Activates a property file
  • CHGPROP - Updates property values in the current property file
  • DELPROP - Removes a property file from configuration
  • GETPROP - Displays current properties
  • SETOWNER - Defines the current owner
  • GETOWNER - Displays current owner setting
  • SETENV - Defines environment variables in the config file
  • GETENV - Displays the environment variables set in the config file
  • DELENV - Deletes environment variables in the config file
  • TRACE - Manages trace capabilities
  • CONFIG - Displays or clears the current configuration settings
  • GRAMMAR - Displays the grammar for commands and properties
  • LEXEM - Displays the regular expressions accepted in a command
  • LICENSE - Displays the license text for the program
  • VERSION - Lists version information for the program
  • ABOUT - Displays information about the program
  • ERRORS - Displays information about return and reason codes of the program

To read the manual page, please use:

program MANPAGE function

Below, you can find the syntax for each built-in function:

  • SYNTAX [command[.path] [DEPTH1 | ... | DEPTH9 | ALL]]
  • HELP [command[.path] [DEPTH1 | ... | DEPTH9 | ALL]] [MAN]
  • MANPAGE [function | command[.path][=filename]] | [filename]
  • GENDOCU [command[.paht]=]filename [NONBR] [SHORT]
  • GENPROP [command=]filename
  • SETPROP [command=]filename
  • CHGPROP command [path[=value]]
  • DELPROP [command]
  • GETPROP [command[.path] [DEPTH1 | ... | DEPTH9 | DEPALL | DEFALL]]
  • SETOWNER name
  • GETOWNER
  • SETENV variable=value
  • GETENV
  • DELENV variable
  • TRACE ON | OFF | FILE=filename
  • CONFIG [CLEAR]
  • GRAMMAR
  • LICENSE
  • LEXEM
  • VERSION
  • ABOUT
  • ERRORS

FLAMCLE-Sample program

This sample program is the main of our FLCL command line utility. This code is not functional and results in compile errors because of missing other parts of the FL5 project, but it visible the principles of CLE usage.

#include "CLEPUTL.h"
#include "FLAMCLE.h"
#include "CLEMAN.h"
#define DEFINE_STRUCT
#include "CLPMAC.h"
#include "FL5TAB.h"
#include "FL5STC.h"
int main(const int argc, const char * argv[])
{
static TsFlcConvPar stFlcConvPar;
static TsClpConvPar stClpXcnvPar;
static TsClpConvPar stClpConvPar;
static TsClpIcnvPar stClpIcnvPar;
static TsFlcInfoPar stFlcInfoPar;
static TsClpInfoPar stClpInfoPar;
#undef DEFINE_STRUCT
#include "CLPMAC.h"
#include "FL5CON.h"
#include "FL5ARG.h"
CLECMD_OPN(asCmdTab) = {
CLETAB_CMD("CONV",asClpConvPar,&stClpConvPar,&stFlcConvPar,NULL,siIniConv,siMapConv2Conv,siFluc,siFinConv,1,MAN_FLCL_CONV,"Simple data conversion")
CLETAB_CMD("XCBV",asClpXcnvPar,&stClpXcnvPar,&stFlcConvPar,NULL,siIniXcnv,siMapXcnv2Conv,siFluc,siFinConv,0,MAN_FLCL_XCNV,"Complex data conversion")
CLETAB_CMD("ICNV",asClpIcnvPar,&stClpIcnvPar,&stFlcConvPar,NULL,siIniIcnv,siMapIcnv2Conv,siFluc,siFinConv,1,MAN_FLCL_ICNV,"Character conversion with libiconv")
CLETAB_CMD("INFO",asClpInfoPar,&stClpInfoPar,&stFlcInfoPar,NULL,siIniInfo,siMapInfo2Info,siInfo,siFinInfo,1,MAN_FLCL_INFO,"Provide information")
};
CLEOTH_OPN(asOthTab) = {
CLETAB_OTH("flcbyt","READ-FORMAT" ,asClpWrtFmtPar,MAN_FLCBYT_READ_FORMAT ,HLP_FLCBYT_READ_FORMAT ,TRUE)
CLETAB_OTH("flcbyt","WRITE-FORMAT" ,asClpRedFmtPar,MAN_FLCBYT_WRITE_FORMAT,HLP_FLCBYT_WRITE_FORMAT,TRUE)
CLETAB_OTH("flcbyt","CONV-READ" ,asClpElmCnvRed,MAN_FLCBYT_CONV_READ ,HLP_FLCBYT_CONV_READ ,TRUE)
CLETAB_OTH("flcbyt","CONV-WRITE" ,asClpElmCnvWrt,MAN_FLCBYT_CONV_WRITE ,HLP_FLCBYT_CONV_WRITE ,TRUE)
CLETAB_OTH("flcbyt","FROM-TO-CONV" ,asClpElmCnv ,MAN_FLCBYT_CONV ,HLP_FLCBYT_CONV ,TRUE)
CLETAB_OTH("flcbyt","STATE" ,asClpExtPar ,MAN_FLCBYT_STATE ,HLP_FLCBYT_STATE ,FALSE)
CLETAB_OTH("flcbyt","LOG" ,asClpMemoryLog,MAN_FLCBYT_LOG ,HLP_FLCBYT_LOG ,FALSE)
};
CLEDOC_OPN(asDocTab) = {
CLETAB_DOC(CLE_DOCTYP_COVER ,1,NULL ,NULL ,NULL ,"FLCL manual" ,MAN_FLCL_COVER ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,NULL ,NULL ,"Trademarks" ,MAN_FLCL_TRADEMARKS ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,NULL ,NULL ,"Abstract" ,MAN_FLCL_ABSTRACT ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,NULL ,NULL ,"Supported systems" ,MAN_FLCL_SUPPORTED_SYSTEMS ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,NULL ,NULL ,"Use cases" ,MAN_FLCL_USECASES ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,CLE_DOCKYW_PREFACE ,NULL ,"Preface" ,MAN_FLCL_PREFACE ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,"1." ,NULL ,"clep.main" ,"Command line parser" ,MAN_CLE_CLEPMAIN ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"1.1." ,NULL ,NULL ,"Command line considerations" ,MAN_CLE_CLEPMAIN_CONSID ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"1.2." ,NULL ,"clep.main.usedenv" ,"Used environment variables" ,MAN_CLE_CLEPMAIN_USEDENV ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"1.3." ,NULL ,NULL ,"Environment variable mapping" ,MAN_CLE_CLEPMAIN_ENVARMAP ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"1.4." ,NULL ,"clep.main.filemap" ,"Filename mapping" ,MAN_CLE_CLEPMAIN_FILEMAP ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"1.5." ,NULL ,NULL ,"Key label name mapping" ,MAN_CLE_CLEPMAIN_KEYLABMAP ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"1.6." ,NULL ,"clep.main.ebcdic" ,"Special EBCDIC code page support" ,MAN_CLE_CLEPMAIN_EBCDIC ,NULL)
CLETAB_DOC(CLE_DOCTYP_BUILTIN ,3,"1.7." ,NULL ,CLE_ANCHOR_BUILTIN_FUNCTIONS ,"Built-in functions" ,MAN_CLE_BUILTIN_FUNCTIONS ,NULL)
CLETAB_DOC(CLE_DOCTYP_PROGRAM ,2,"2." ,NULL ,NULL ,"FLCL Utility" ,MAN_FLCL_MAIN ,NULL)
CLETAB_DOC(CLE_DOCTYP_PGMSYNOPSIS ,3,"2.1." ,NULL ,NULL ,"Synopsis" ,MAN_CLE_PROGRAM_SYNOPSIS ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.2." ,NULL ,NULL ,"Environment Variables" ,MAN_FLCL_MAIN_ENVIRONMENT_VARIABLES ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.3." ,NULL ,NULL ,"Filename Handling" ,MAN_FLCL_MAIN_FILENAME_HANDLING ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.4." ,NULL ,NULL ,"Directory Support" ,MAN_FLCL_MAIN_DIRECTORY_SUPPORT ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.5." ,NULL ,NULL ,"Input to Output Name Mapping" ,MAN_FLCL_MAIN_INPUT_TO_OUTPUT_NAME_MAPPING,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.6." ,NULL ,NULL ,"Key Label Handling" ,MAN_FLCL_MAIN_KEY_LABEL_HANDLING ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.7." ,NULL ,NULL ,"Password Handling" ,MAN_FLCL_MAIN_PASSWORD_HANDLING ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.8." ,NULL ,NULL ,"Handling of Empty Records" ,MAN_FLCL_MAIN_HANDLING_OF_EMPTY_RECORDS ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.9." ,NULL ,NULL ,"Table Support" ,MAN_FLCL_MAIN_TABLE_SUPPORT ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.10." ,NULL ,NULL ,"Pre- and Post-processing" ,MAN_FLCL_MAIN_PRE_AND_POST_PROCESSING ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.11." ,NULL ,NULL ,"Use of Built-in Functions" ,MAN_FLCL_MAIN_BUILT_IN_FUNCTIONS ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.12." ,NULL ,NULL ,"CONV versus XCNV and ICNVs" ,MAN_FLCL_MAIN_CONV_VERSUS_XCNV_AND_ICNV ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.13." ,NULL ,NULL ,"CONV READ/WRITE overview" ,MAN_FLCL_MAIN_CONV_READ_WRITE_OVERVIEW ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.14." ,NULL ,NULL ,"JCL Considerations" ,MAN_FLCL_MAIN_JCL_CONSIDERATIONS ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.15." ,NULL ,NULL ,"SAF Consideration" ,MAN_FLCL_MAIN_SAF_CONSIDERATIONS ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,3,"2.16." ,NULL ,NULL ,"Installation" ,MAN_FLCL_MAIN_INSTALLATION ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,4,"2.16.1.",NULL ,NULL ,"License" ,MAN_FLCL_MAIN_INSTALLATION_LICENSE ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,4,"2.16.2.",NULL ,NULL ,"Download" ,MAN_FLCL_MAIN_INSTALLATION_DOWNLOAD ,NULL)
CLETAB_DOC(CLE_DOCTYP_PGMSYNTAX ,3,"2.17." ,NULL ,NULL ,"Syntax of FLCL" ,MAN_CLE_PROGRAM_SYNTAX ,NULL)
CLETAB_DOC(CLE_DOCTYP_PGMHELP ,3,"2.18." ,NULL ,NULL ,"Help for FLCL" ,MAN_CLE_PROGRAM_HELP ,NULL)
CLETAB_DOC(CLE_DOCTYP_COMMANDS ,3,"2.19." ,NULL ,NULL ,"Available FLCL commands" ,MAN_CLE_PROGRAM_COMMANDS ,NULL)
CLETAB_DOC(CLE_DOCTYP_OTHERCLP ,2,NULL ,CLE_DOCKYW_APPENDIX,NULL ,"Other CLP strings" ,MAN_FLCL_OTHERCLP ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,CLE_DOCKYW_APPENDIX,NULL ,"FLUC Filesystem for Linux" ,MAN_FLCL_APPENDIX_FLUCFS ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,CLE_DOCKYW_APPENDIX,NULL ,"FLUC Subsystem for z/OS" ,MAN_FLCL_APPENDIX_FLUCSUB ,NULL)
CLETAB_DOC(CLE_DOCTYP_LEXEM ,2,NULL ,CLE_DOCKYW_APPENDIX,CLE_ANCHOR_APPENDIX_LEXEM ,"Lexemes" ,MAN_CLE_APPENDIX_LEXEM ,NULL)
CLETAB_DOC(CLE_DOCTYP_GRAMMAR ,2,NULL ,CLE_DOCKYW_APPENDIX,CLE_ANCHOR_APPENDIX_GRAMMAR ,"Grammar" ,MAN_CLE_APPENDIX_GRAMMAR ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,CLE_DOCKYW_APPENDIX,CLE_ANCHOR_APPENDIX_PROPERTIES ,"Properties" ,MAN_CLE_APPENDIX_PROPERTIES ,NULL)
CLETAB_DOC(CLE_DOCTYP_PROPREMAIN ,3,NULL ,NULL ,NULL ,"Remaining documentation" ,MAN_CLE_APPENDIX_PROP_REMAINING ,NULL)
CLETAB_DOC(CLE_DOCTYP_PROPDEFAULTS ,3,NULL ,NULL ,NULL ,"Predefined defaults" ,MAN_CLE_APPENDIX_PROP_DEFAULTS ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,CLE_DOCKYW_APPENDIX,CLE_ANCHOR_APPENDIX_RETURNCODES ,"Return codes" ,MAN_CLE_APPENDIX_RETURNCODES ,NULL)
CLETAB_DOC(CLE_DOCTYP_SPECIALCODES ,3,NULL ,NULL ,NULL ,"Special condition codes" ,MAN_FLCL_SPECIALCODES ,NULL)
CLETAB_DOC(CLE_DOCTYP_REASONCODES ,3,NULL ,NULL ,CLE_ANCHOR_APPENDIX_REASONCODES ,"Reason codes" ,MAN_CLE_APPENDIX_REASONCODES ,NULL)
CLETAB_DOC(CLE_DOCTYP_VERSION ,2,NULL ,CLE_DOCKYW_APPENDIX,CLE_ANCHOR_APPENDIX_VERSION ,"Version" ,MAN_CLE_APPENDIX_VERSION ,NULL)
CLETAB_DOC(CLE_DOCTYP_ABOUT ,2,NULL ,CLE_DOCKYW_APPENDIX,CLE_ANCHOR_APPENDIX_ABOUT ,"About" ,MAN_CLE_APPENDIX_ABOUT ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,CLE_DOCKYW_GLOSSARY,NULL ,"Glossary" ,MAN_FLCL_GLOSSARY ,NULL)
CLETAB_DOC(CLE_DOCTYP_CHAPTER ,2,NULL ,CLE_DOCKYW_COLOPHON,NULL ,"Imprint" ,MAN_FLCL_IMPRINT ,NULL)
};
TsFl5Gbl* psGbl=psFl5GblOpn(sizeof(acMsg),acMsg);
siErr=siCleExecute(psGbl,asCmdTab,argc,argv,FLM_CLEP_DEFAULT_OWNER,"flcl",
"limes datentechnik(R) gmbh","support@flam.de",
FLM_CLEP_CASE_SENSITIVITY,TRUE,TRUE,FALSE,FLM_CLEP_MINIMAL_KEYWORDLEN,
pfErr,pfTrc,FLM_CLEP_DEPTH_STRING_1047,FLM_CLEP_OPTION_STRING,
FLM_CLEP_SEPARATION_STRING,psMain->acLicTxt,
FLM_VSN_STR"-"__BUILDNRSTR__,psMain->acVersion,psMain->acAbout,
"Frankenstein Limes(R) Command Line for FLUC, FLAM and FLIES",
NULL,pcFlmErrors,asOthTab,NULL,siClpFile2String,
NULL,(psGbl->isSafClpControl)?siClpSaf:NULL,pcDpa,0,asDocTab);
vdFl5GblCls(psGbl);
}

Command Line Parser (FLAMCLP)

The command line parser (FLAMCLP) is a complier which reads a command string using the lexems and grammar below to fill a structure with the corresponding values given in this line. The FLAMCLP works only in memory (except parameter files are used for objects, overlays, arrays, arguments or string files) and the syntax and semantic will be defined by a tree of tables. Such a table can represent an object (struct) or an overlay (union). Each argument in such a table can be a object or overlay again in using another table for this type. Basic types are switches, numbers, floats or strings (time and date are implemented as number in seconds from 1970). With each argument you can define the required minimum and possible maximum amount of occurrences. This means that each argument can be an array and arrays are implemented as simplified notations. Arrays and strings can be a fixed length part of the data structure or dynamic allocated by CLP. In the last case, the fix part of the data structure is a pointer to the dynamic allocated data area (use '->' instead of '.'). All dynamic allocated data blocks are managed by CLP. If you close the CLP you can define if anything including the dynamic parts of the CLP structure is closed. Or anything is freed except the dynamic blocks allocated for the CLP structure. In this case you can keep the CLP handle open, to free the remaining buffers later or you can close the CLP handle and the dynamic allocated memory of the CLP structure must be free by the application.

For object, overlays and arrays you can provide parameter files (OBJECT='filename') containing the parameter string in the corresponding syntax for these object, overlay or array (KYW[='filename']). With '=>' you can also use parameter files for normal arguments. The operator '=>' is also permitted for objects, overlays and arrays.

To read such a parameter file as string into the memory a handle and a callback function can be provided. If the parameter NULL a default implementation is used. If you provide your own function you can include for example URL support, remote access, character conversion, etc. The handle is given to the callback function. The default implementation don't need any handle, but you can use it for example for the character conversion module, a remote session or something else.

To handle passwords and passphrase more secure, you can provide a filename as string (PASSWD=f'filename'), which contains the corresponding string value. This prevents for example passwords from logging.

An optional callback function with handle for additional authorization checking can be provided. The resource will be each path written to the CLP structure. If the pointer to the callback function is NULL then the function is not called. This feature is mainly for RACF on z/OS.

To support critical punctuation characters on EBCDIC systems a complex support was implemented to make the whole source independent of the used EBCDIC code page. The code page to use must be defined in the environment variable LANG or just for CLP strings with the environment variable CLP_STRING_CCSID or inside the CLP string ("&nnnn;"). Last but not least single character escaping ("&xxx;") is supported as well.

In the command string (everywhere, where the scanner start to read a lexem) each value in angle brackets will be transparently replaced by the corresponding environment variable, except in strings.

The FLAMCLP uses these tables as symbol tables to define the syntax and semantic of a command. The same table provides the offset used to store the parsed values. This offset occurs in a real data structure and with CLPMAC.h you can use the same macro to build the tables and corresponding structures and unions. This is not mandatory, but we recommend to use the macro in order to be in sync.

The FLAMCLP provides also all internally calculated values in this data structure. The mechanism is called linking. Thus you have to use the same keyword for linking eventually with a calculated value of that argument. For example, if you define an array of numbers then you can define a link to determine the amount of entered numbers or for an overlay you can link the corresponding object identifier to determine which of the arguments are chosen by the user. If you define overlays of overlays an additional dimension for each level is used. In this case you must define an array for this link and you get the child (lnk[0]) before the parent (lnk[1]) written in the CLP structure. If the OID is 0, then it will not be add to the array. This is useful if the OIDs of the children are already unique.

You can also get the string length and other features. The kind of link is defined over the flags field. There are a lot of other flags supported beside links, for example the PWD flag, which tells CLP that this value are only clear in the data structure but always obfuscated in logs, traces and other printouts to keep the value secret. Another flag can be used for numbers. With CLPFLG_DEF you can activate a extension of the syntax. If this flag used for a number then the object identifier is assigned as value if no assignment done for this number. This means that with this extended syntax you can define a switch, which you can assign a number. This is useful for example to activate a feature with a default value by using only the key word and the user can change the default value by an optional assignment of another value.

The FLAMCLP also supports aliases. An alias points to another argument and is only an additional keyword that can be used. The maximum length of a keyword or alias cannot exceed 63 character.

To be compatible with certain shells the features below are implemented.

  • Strings can be enclosed with '' or "" or ``
  • Strings can also be defined without quotes
  • Explicit keywords can start with "-" or "--" in front of the qualifier
  • If it is unique then parenthesis and the dot can be omitted for objects and overlays
  • On EBCDIC systems we use a code page specific interpretation of punctuation characters

Besides arguments you can also have a constant definition for selections. A feature is useful in order to define keywords for values (numbers, floats and strings). With help of the selection flag you can enforce the pure acceptance of predefined keywords.

Additional hard coded key words (see lexems) can be used in constant expressions to build values and strings (value=64KiB).

For each argument or constant you must define a keyword and a short help message. If you provide a detailed description, then this argument becomes an own chapter in the generated documentation, a manual page will be available and extensive help is displayed. The description string can contain &{OWN} for the current owner or &{PGM} for the current program name. The letter case of the replacement string depends and the letter case of the keyword: PGM = upper case, pgm = lower case, Pgm = title case, pGm = original string. All other content inside of &{...} is ignored. This can be used, for example, to insert comments into the source of the manual page.

For each argument you can define a default value and use the property parser or environment variables to overwrite it again. The default value replaces the entered value. This means that if a default value, environment variable or property is defined, then this will have the same effect as the entry of the value in the command line. With the latter you can still override the hard coded or property default value. The property management can make use of a function that extracts a property list for the argument table tree.

For each path you can also define the default value as environment variable. The path are prefixed with the owner ID and the program name first, then only the program name and at the last the path only starting with the command name will be use to determine a environment variable. For this the path is converted to upper case and all '.' are replaced by '_'. The value of the environment variable must contain the same supplement string which are required for the property definition. All possible path values can be determine with the property generation function.

With the CLP flags CMD (for command) and PRO (property) you can define if a parameter is only visible in the command line or property file. These flags have no influence of property or command line parsing. It only reflects the online help/syntax and docu/property generation. This means that you can still use such a parameter in the property file or in the command line, but it is not directly visible to the user. If the flags CMD and PRO are not set then the parameter will be visible in both areas. With the flag DMY (for dummy) you can enforce that this parameter is not visible in a generated property file, on the command line help, syntax and documentation. In this case, the parameter is no part of the symbol table. It is only part of the CLP structure.

For binary strings the default interpretation can be free defined over a additional set of flags (CLPFLG_HEX/CHR/ASC/EBC). This is useful for hex strings or passwords. If you want use arrays in overlays you cannot use a link to determine the count or length. In this case you can use the DLM flag. In this case for fix size types an additional empty element are used as delimiter. For the static case the max count are reduced by 1 and in the dynamic case one additional element is allocated to determine the end of the array. For variable (CLPFLG_FIX is not defined) strings the end of the list of strings are marked with 0xFF.

The FLAMCLP calculates automatically the minimum amount of letters required to make the meaning of a keyword unique. Depending on the case mode the required letters are highlighted in the interactively used help function. The syntax function provides also data when an argument is required or optional, based on the minimum amount of occurrences.

If you intend to apply the FLAMCLP first of all an open will be necessary. Then you are able to parse a property list before doing this with the command line. Both property list and command line are provided as zero terminated strings. This means that the FLAMCLP does not know whether the command line results from a file or argc/argv.

If the isPfl (is parameter file) flag TRUE: For objects, overlays and arrays you can use the assignment letter '=' or '=>' to define a parameter file containing the command string for this object, overlay or array. For simple arguments you must use '=>' to define a parameter file but all these capabilities are only supported if the flag defined to true. This means that for each object, overlay, array or argument a dedicated parameter file can be used. The parameter file must contain a command string which syntax is valid for the certain object, overlay, array or argument. CLP open the file with format string "r". To use DD names on mainframes the file name must like "DD:name".

If the flag CLPFLG_PWD is used, string outputs containing passwords will result in "###SECRECT###" and float or number outputs in a value of 0.

For zero terminated strings in local character set (s'...') several special mapping and conversions can be activated over the flags CLPFLG_FIL/LAB/UPP. The replacement of environment variables is done for each string but you can also activate prefix adjustment and tilde replacement for files, and tilde, circumflex and exclamation mark replacement for key labels. Additional you can ensure that each such string are converted to upper case.

Parsing of the properties (can be done a lot of times over different sources) only change the default values in the symbol table and has no effect for the CLP structure. First after parsing the command line the corresponding FLAMCLP structure is filled with the properties or entered values and the FLAMCLP can be closed or another command line parsed.

Attention: If pointer to values in the CLP handle used (ppLst, psErr) then you cannot close the CLP or you must copy the values before.

The normal procedure to use the CLP:

ClpOpen()
ClpParsePro()
ClpParseCmd()
ClpClose()

Beside property and command line parsing the FLAMCLP offers an interactive syntax and help function. Additionally, you can use a very powerful function to generate single manual pages or complete user manuals, You can make use of the supported grammar and regular expressions (lexems). Provided manual pages must be in ASCIIDOC and will be converted on EBCDIC systems from the compile code page in the local code page.

Only ClpParseCmd() uses the pvDat pointer. All other functions only work on the symbol table. This means if you don't use ClpParseCmd() the pointer to the CLP structure (pvDat), it can be NULL. This is useful if only help, syntax, documentation or property management are required. For these functions no corresponding CLP structure must be allocated.

The implementation of the FLAMCLP is finished with the Command Line Executor (FLAMCLE) with which you can define your list of commands by using an additional table. You can make use of only one new function that is executed eventually. The FLAMCLE offers an extensive built-in functionality and is the optimal access method to the FLAMCLP capabilities.

Additional there is an interface to browse the symbol table. These interface can for example used to build several graphical user interfaces or other things based on the tables.

FLAMCLP-Lexemes

Call siClpLexemes() to get the current supported lexemes. The list below could be a older state of the implementation.

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)
--| 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
--| 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
--| GMSECOND  STRING - current Greenwich mean second in format: SS
--| 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;")

FLAMCLP-Grammar for command line

Call siClpGrammar() to get the current supported grammar for the command lines. The list below could be a older state of the implementation.

Grammar for argument list or parameter file:

--| 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 '=' 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 lexem   #
--| 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")

A list of objects requires parenthesis to enclose the arguments. Only for one object of a certain level you can omit the round brackets. If you want define more than one object of a certain level you must use parenthesis to separate the objects from each other. In parameter files the command string for an overlay can be start with a dot '.' or not. The same is valid for the parenthesis '(...)' of an object.

FLAMCLP-Grammar for property file

Call siClpGrammar() to get the current supported grammar for property files. The list below could be a older state of the implementation.

Grammar for property file:

--| 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")

Utility functions for FLAMCLE/CLP

This interface provides additional several utility functions for the Command Line Executor (CLE) and Processor (CLP). These help functions makes the CLEP project platform independent and can also be used for other things. The CLEPUTL object should be static linked to CLP and/or CLE.

CLECMD_OPN
#define CLECMD_OPN(name)
Starts a table with command definitions.
Definition: CLEDEF.h:406
CLE_DOCTYP_CHAPTER
#define CLE_DOCTYP_CHAPTER
A chapter (level must > 1 and < 6).
Definition: CLEDEF.h:47
CLETAB_DOC
#define CLETAB_DOC(typ, lev, num, kyw, anc, hdl, man, idt)
Starts the documentation generation table.
Definition: CLEDEF.h:137
CLE_ANCHOR_APPENDIX_VERSION
#define CLE_ANCHOR_APPENDIX_VERSION
Appendix Version.
Definition: CLEDEF.h:86
CLECMD_CLS
#define CLECMD_CLS
Ends a table with constant definitions.
Definition: CLEDEF.h:434
CLPMAC.h
Macros for single definition of C struct and argument table for Command Line Parsing.
CLE_DOCTYP_SPECIALCODES
#define CLE_DOCTYP_SPECIALCODES
The appendix which prints the special condition codes.
Definition: CLEDEF.h:61
CLE_DOCTYP_PGMSYNOPSIS
#define CLE_DOCTYP_PGMSYNOPSIS
The program synopsis.
Definition: CLEDEF.h:49
CLE_ANCHOR_APPENDIX_RETURNCODES
#define CLE_ANCHOR_APPENDIX_RETURNCODES
Appendix Return codes.
Definition: CLEDEF.h:89
CLE_DOCKYW_PREFACE
#define CLE_DOCKYW_PREFACE
Mark level 2 chapter as preface.
Definition: CLEDEF.h:70
CLE_DOCTYP_COVER
#define CLE_DOCTYP_COVER
Cover page (level must be 1).
Definition: CLEDEF.h:46
CLE_DOCTYP_REASONCODES
#define CLE_DOCTYP_REASONCODES
The appendix which prints the reason codes (pfMsg must be provided).
Definition: CLEDEF.h:62
CLE_ANCHOR_BUILTIN_FUNCTIONS
#define CLE_ANCHOR_BUILTIN_FUNCTIONS
Chapter built-in functions.
Definition: CLEDEF.h:84
CLE_DOCTYP_PROGRAM
#define CLE_DOCTYP_PROGRAM
The main program chapter (like chapter but level must < 5).
Definition: CLEDEF.h:48
CLETAB_OTH
#define CLETAB_OTH(rot, kyw, tab, man, hlp, ovl)
Defines a appendix for the object or overlay cmd of the root rot with the headline of hdl for a certa...
Definition: CLEDEF.h:483
CLE_ANCHOR_APPENDIX_GRAMMAR
#define CLE_ANCHOR_APPENDIX_GRAMMAR
Appendix Grammar.
Definition: CLEDEF.h:88
CLE_DOCTYP_GRAMMAR
#define CLE_DOCTYP_GRAMMAR
The appendix which prints the grammar.
Definition: CLEDEF.h:56
CLE_DOCKYW_GLOSSARY
#define CLE_DOCKYW_GLOSSARY
Mark level 2 chapter as glossary.
Definition: CLEDEF.h:72
CLE_ANCHOR_APPENDIX_ABOUT
#define CLE_ANCHOR_APPENDIX_ABOUT
Appendix About.
Definition: CLEDEF.h:85
CLE_DOCTYP_PGMHELP
#define CLE_DOCTYP_PGMHELP
The program help.
Definition: CLEDEF.h:51
CLE_ANCHOR_APPENDIX_PROPERTIES
#define CLE_ANCHOR_APPENDIX_PROPERTIES
Appendix Properties.
Definition: CLEDEF.h:91
CLEPUTL.h
CLE_DOCTYP_PGMSYNTAX
#define CLE_DOCTYP_PGMSYNTAX
The program syntax.
Definition: CLEDEF.h:50
CLE_DOCTYP_BUILTIN
#define CLE_DOCTYP_BUILTIN
The built-in function section.
Definition: CLEDEF.h:54
CLE_DOCTYP_ABOUT
#define CLE_DOCTYP_ABOUT
The appendix which prints the about (pcAbo must be given).
Definition: CLEDEF.h:58
CLE_ANCHOR_APPENDIX_REASONCODES
#define CLE_ANCHOR_APPENDIX_REASONCODES
Appendix Reason codes.
Definition: CLEDEF.h:90
FLAMCLE.h
Definitions for Command Line Execution.
CLE_DOCKYW_COLOPHON
#define CLE_DOCKYW_COLOPHON
Mark level 2 chapter as colophon.
Definition: CLEDEF.h:73
CLEOTH_CLS
#define CLEOTH_CLS
Ends a table with other CLP strings.
Definition: CLEDEF.h:489
CLE_DOCTYP_PROPREMAIN
#define CLE_DOCTYP_PROPREMAIN
The appendix which prints the remaining parameter documentation.
Definition: CLEDEF.h:59
CLE_DOCTYP_PROPDEFAULTS
#define CLE_DOCTYP_PROPDEFAULTS
The appendix which prints the default parameter documentation.
Definition: CLEDEF.h:60
CLEOTH_OPN
#define CLEOTH_OPN(name)
Starts a table with other CLP strings.
Definition: CLEDEF.h:467
CLEDOC_OPN
#define CLEDOC_OPN(name)
Starts the documentation generation table overview.
Definition: CLEDEF.h:123
CLE_DOCKYW_APPENDIX
#define CLE_DOCKYW_APPENDIX
Mark level 2 chapter as appendix.
Definition: CLEDEF.h:71
CLETAB_CMD
#define CLETAB_CMD(kyw, tab, clp, par, oid, ini, map, run, fin, flg, man, hlp)
Defines a command with the command line keyword kyw.
Definition: CLEDEF.h:429
CLE_DOCTYP_OTHERCLP
#define CLE_DOCTYP_OTHERCLP
Other CLP strings.
Definition: CLEDEF.h:53
CLE_DOCTYP_COMMANDS
#define CLE_DOCTYP_COMMANDS
The commands part.
Definition: CLEDEF.h:52
siCleExecute
int siCleExecute(void *pvGbl, const TsCleCommand *psCmd, int argc, char *argv[], const char *pcOwn, const char *pcPgm, const char *pcAut, const char *pcAdr, const int isCas, const int isPfl, const int isRpl, const int isEnv, const int siMkl, FILE *pfOut, FILE *pfTrc, const char *pcDep, const char *pcOpt, const char *pcEnt, const char *pcLic, const char *pcBld, const char *pcVsn, const char *pcAbo, const char *pcHlp, const char *pcDef, TfMsg *pfMsg, const TsCleOtherClp *psOth, void *pvF2S, TfF2S *pfF2S, void *pvSaf, TfSaf *pfSaf, const char *pcDpa, const int siNoR, const TsCleDoc *psDoc)
Execute CLE-command line.
CLE_DOCTYP_VERSION
#define CLE_DOCTYP_VERSION
The appendix which prints the version (pcVsn must be given).
Definition: CLEDEF.h:57
CLEDOC_CLS
#define CLEDOC_CLS
Ends a table with constant definitions.
Definition: CLEDEF.h:142