From 1192c4575ea7afdf38e3fa0df4587a08620af11e Mon Sep 17 00:00:00 2001 From: root Date: Tue, 21 Jul 2020 10:00:46 +0200 Subject: SZS v2.18a --- project/dclib/dclib-ui.h | 215 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 project/dclib/dclib-ui.h (limited to 'project/dclib/dclib-ui.h') diff --git a/project/dclib/dclib-ui.h b/project/dclib/dclib-ui.h new file mode 100644 index 0000000..1b45d43 --- /dev/null +++ b/project/dclib/dclib-ui.h @@ -0,0 +1,215 @@ + +/*************************************************************************** + * * + * _____ ____ * + * | __ \ / __ \ _ _ _____ * + * | | \ \ / / \_\ | | | | _ \ * + * | | \ \| | | | | | |_| | * + * | | | || | | | | | ___/ * + * | | / /| | __ | | | | _ \ * + * | |__/ / \ \__/ / | |___| | |_| | * + * |_____/ \____/ |_____|_|_____/ * + * * + * Wiimms source code library * + * * + *************************************************************************** + * * + * Copyright (c) 2012-2020 by Dirk Clemens * + * * + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * See file gpl-2.0.txt or http://www.gnu.org/licenses/gpl-2.0.txt * + * * + ***************************************************************************/ + +#ifndef DCLIB_UI_H +#define DCLIB_UI_H + +#include "dclib-basics.h" +#include + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// definitions /////////////// +/////////////////////////////////////////////////////////////////////////////// +// [[OptionIndex_t]] // max size of OptionIndex[] + +#ifndef UIOPT_INDEX_SIZE + #define UIOPT_INDEX_SIZE 0x100 +#endif + +#undef UIOPT_INDEX_FW + +#if UIOPT_INDEX_SIZE <= 0x100 + #define UIOPT_INDEX_FW 2 + typedef u8 OptionIndex_t; +#else + #define UIOPT_INDEX_FW 3 + typedef u16 OptionIndex_t; +#endif + +/////////////////////////////////////////////////////////////////////////////// + +enum // some const +{ + UIOPT_USED_MASK = 0x7f, // mask to calculate usage count + UIOPT_LONG_BASE = 0x80, // first index for "only long options" +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// InfoOption_t /////////////// +/////////////////////////////////////////////////////////////////////////////// +// [[InfoOption_t]] + +typedef struct InfoOption_t +{ + int id; // id of the option + bool optional_parm; // true: option has optional parameters + bool hidden; // true: option is hidden + bool deprecated; // true: option is deprecated + bool ignore; // true: ignore on 'HELP OPTIONS' + bool separator; // true: print a separator above + char short_name; // short option name + ccp long_name; // the main long option name + ccp param; // parameter name + ccp help; // help info + +} InfoOption_t; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// InfoCommand_t /////////////// +/////////////////////////////////////////////////////////////////////////////// +// [[InfoCommand_t]] + +typedef struct InfoCommand_t +{ + int id; // id of the command + bool hidden; // true: command is hidden + bool deprecated; // true: command is deprecated + bool separator; // true: print a separator above + ccp name1; // main name + ccp name2; // NULL or alternative name + ccp syntax; // NULL or syntax info + ccp help; // help text + ccp xhelp; // NULL or a extended help text + int n_opt; // number of options == elements of 'opt' + const InfoOption_t ** opt; // field with option info + u8 * opt_allowed; // field with OPT__N_SPECIFIC elements + // 0: option permitted, 1: option allowed + +} InfoCommand_t; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// InfoUI_t /////////////// +/////////////////////////////////////////////////////////////////////////////// +// [[InfoUI_t]] + +typedef struct InfoUI_t +{ + ccp tool_name; // name of the tool + + //----- commands ----- + + int n_cmd; // == CMD__N + const KeywordTab_t * cmd_tab; // NULL or pointer to command table + const InfoCommand_t * cmd_info; // pointer to 'CommandInfo[]' + + //----- options ----- + + int n_opt_specific; // == OPT__N_SPECIFIC + int n_opt_total; // == OPT__N_TOTAL + const InfoOption_t * opt_info; // pointer to 'OptionInfo[]' + u8 * opt_used; // pointer to 'OptionUsed[]' + const OptionIndex_t * opt_index; // pointer to 'OptionIndex[]' + ccp opt_short; // pointer to 'OptionShort[]' + const struct option * opt_long; // pointer to 'OptionLong[]' + +} InfoUI_t; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// Interface /////////////// +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +enumError RegisterOptionByIndex +( + const InfoUI_t * iu, // valid pointer + int opt_index, // index of option (OPT_*) + int level, // the level of registration + bool is_env // true: register environment pre setting +); + +enumError RegisterOptionByName +( + const InfoUI_t * iu, // valid pointer + int opt_name, // short name of GO_* value of option + int level, // the level of registration + bool is_env // true: register environment pre setting +); + +enumError VerifySpecificOptions ( const InfoUI_t * iu, const KeywordTab_t * cmd ); +int GetOptionCount ( const InfoUI_t * iu, int option ); +void DumpUsedOptions ( const InfoUI_t * iu, FILE * f, int indent ); +void WarnDepractedOptions ( const InfoUI_t * iu ); + +typedef enumError (*check_opt_func) ( int argc, char ** argv, bool mode ); +enumError CheckEnvOptions ( ccp varname, check_opt_func ); + +/////////////////////////////////////////////////////////////////////////////// + +void DumpText +( + FILE * f, // output file, if NULL: 'pbuf' must be set + char * pbuf, // output buffer, ignored if 'f' not NULL + char * pbuf_end, // end of output buffer + ccp text, // source text + int text_len, // >=0: length of text, <0: use strlen(text) + bool is_makedoc, // true: write makedoc format + ccp end // write this text at the end of all +); + +/////////////////////////////////////////////////////////////////////////////// + +void PrintHelp +( + const InfoUI_t * iu, // valid pointer + FILE * f, // valid output stream + int indent, // indent of output + ccp help_cmd, // NULL or name of help command + ccp info, // NULL or additional text + ccp base_uri, // NULL or base URI for a external help link + ccp first_param // NULL or first param of argv[] +); + +void PrintHelpCmd +( + const InfoUI_t * iu, // valid pointer + FILE * f, // valid output stream + int indent, // indent of output + int cmd, // index of command + ccp help_cmd, // NULL or name of help command + ccp info, // NULL or poiner to additional text + ccp base_uri // NULL or base URI for a external help link +); + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// END /////////////// +/////////////////////////////////////////////////////////////////////////////// + +#endif // DCLIB_UI_H + -- cgit v1.3.1