This commit is contained in:
iceman1001 2021-12-31 11:15:25 +01:00
commit 28f4a19bd6

View file

@ -1,4 +1,34 @@
# Cliparser # Note on Cliparser
<a id="Top"></a>
# Table of Contents
- [Note on Cliparser](#note-on-cliparser)
- [Table of Contents](#table-of-contents)
- [cliparser setup and use](#cliparser-setup-and-use)
- [design comments](#design-comments)
- [common options](#common-options)
- [How to implement in source code](#how-to-implement-in-source-code)
- [setup the parser data structure](#setup-the-parser-data-structure)
- [define the context](#define-the-context)
- [define the options](#define-the-options)
- [Notes:](#notes)
- [bool option. true if supplied](#bool-option--true-if-supplied)
- [integer that is optional](#integer-that-is-optional)
- [integer that is required](#integer-that-is-required)
- [double that is optional](#double-that-is-optional)
- [double that is required](#double-that-is-required)
- [String option that is optional and only one instance can be provided](#string-option-that-is-optional-and-only-one-instance-can-be-provided)
- [String option that is required and only one instance can be provided](#string-option-that-is-required-and-only-one-instance-can-be-provided)
- [String option that is optional and can have up to 250 instances provided](#string-option-that-is-optional-and-can-have-up-to-250-instances-provided)
- [String option that is required/at least one instance and can have up to 250 instances](#string-option-that-is-requiredat-least-one-instance-and-can-have-up-to-250-instances)
- [unsigned integer optional](#unsigned-integer-optional)
- [unsigned integer required](#unsigned-integer-required)
- [show the menu](#show-the-menu)
- [clean up](#clean-up)
- [retrieving options](#retrieving-options)
The old style with mixed custom commandline parsing of user parameters or options was messy and confusing. You can find all kinds in the Proxmark3 client. The old style with mixed custom commandline parsing of user parameters or options was messy and confusing. You can find all kinds in the Proxmark3 client.
Samples Samples
@ -36,11 +66,13 @@ This is the _new_ and _preferred_ way to implement _helptext_ and _cli parsing_
## cliparser setup and use ## cliparser setup and use
^[Top](#top)
The parser will format and color and layout as needed. The parser will format and color and layout as needed.
It will also add the `-h --help` option automatic. It will also add the `-h --help` option automatic.
## design comments ## design comments
^[Top](#top)
* where possible all options should be lowercase. * where possible all options should be lowercase.
* extended options preceded with -- should be short * extended options preceded with -- should be short
@ -52,6 +84,8 @@ It will also add the `-h --help` option automatic.
## common options ## common options
^[Top](#top)
-h --help : help -h --help : help
--cn : card number --cn : card number
--fn : facility number --fn : facility number
@ -69,8 +103,11 @@ It will also add the `-h --help` option automatic.
## How to implement in source code ## How to implement in source code
^[Top](#top)
### setup the parser data structure ### setup the parser data structure
^[Top](#top)
Header file to include Header file to include
#include "cliparser.h" #include "cliparser.h"
@ -81,6 +118,8 @@ In the command function, setup the context
### define the context ### define the context
^[Top](#top)
`CLIParserInit (\<context\>, \<description\>, \<notes\n examples ... \>);` `CLIParserInit (\<context\>, \<description\>, \<notes\n examples ... \>);`
use -> to separate example and example comment and \\n to separate examples. use -> to separate example and example comment and \\n to separate examples.
@ -94,6 +133,7 @@ e.g. lf indala clone -r a0000000a0002021 -> this uses .....
"lf indala clone -l -r 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5"); "lf indala clone -l -r 80000001b23523a6c2e31eba3cbee4afb3c6ad1fcf649393928c14e5");
### define the options ### define the options
^[Top](#top)
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
@ -110,6 +150,8 @@ _All options has a parameter index, since `-h --help` is added automatic, it wi
Hence all options you add will start at index 1 and upwards. It added in the define "arg_param_begin_ Hence all options you add will start at index 1 and upwards. It added in the define "arg_param_begin_
### Notes: ### Notes:
^[Top](#top)
#### bool option. true if supplied #### bool option. true if supplied
`bool : arg_lit0 ("<short option>", "<long option>", <"description">)` `bool : arg_lit0 ("<short option>", "<long option>", <"description">)`
@ -150,17 +192,21 @@ Unsigned values, like u32 and u64 can be accomplished with
### show the menu ### show the menu
^[Top](#top)
`CLIExecWithReturn(\<context\>, \<command line to parse\>, \<arg/opt table\>, \<return on error\>);` `CLIExecWithReturn(\<context\>, \<command line to parse\>, \<arg/opt table\>, \<return on error\>);`
CLIExecWithReturn(ctx, Cmd, argtable, false); CLIExecWithReturn(ctx, Cmd, argtable, false);
### clean up ### clean up
^[Top](#top)
Once you have extracted the options, cleanup the context. Once you have extracted the options, cleanup the context.
CLIParserFree(ctx); CLIParserFree(ctx);
### retrieving options ### retrieving options
^[Top](#top)
The parser will format and color and layout as needed. The parser will format and color and layout as needed.
It will also add the `-h --help` option automatic. It will also add the `-h --help` option automatic.