- the commandline interpreter (cli) used was developed specifically for this application, but it is made not in any way dependant on any other thing than c.
- programming with libcli

- adding commands and variables

- adding a command to the interpreter is done by issuing the macro
- cli_add_command("commandname", callback, "description");
- where callback is a function of the form
- int callback(char *params);
- the string passed to the callback is the string remaining when the command is chopped of the commandline
- variables can be added with either
- cli_add_int("variablename", &integer_variable, "description");
- cli_add_string("variablename", &string_variable, "description");
- or by calling the real add function
- cli_add_item("variablename", &integerdata, &stringdata, callback, "description");
- the callback will be issued whenever the variable is set, a variable can have both integer and string attached at the same time

- running commands

- when issuing cli_docmd("commandline") the interpreter will run the commandline and return with the value given to the callback function assosicated
- this function is usually wrapped up in a macro making it possible to use printf style formatting
- #define docmdf(args...) \

- do{ char buf[100];\
- snprintf (buf, 99, args);\
- cli_docmd(buf);\
- }while(0)

- commandline completion

- char *cli_complete(const char *commandline);
- returns a completion fo the given commandline.
- the string returned is statically allocated
- if there is no match a message is printed on the output
- if there is multiple matches the matches are listed on the output, and the commandline is expanded in such a manner that it rquals the first characters

- customisation

- by default cli outputs to standard output, when embedding it in an application this is often not what you want.
- cli_outfun can be assigned a void functino that takes a string as parameter
- cli_width should be assigned the width in characters of the output device
- cli_precmd can be assigned a void function taking the commandline as a parameter to be executed before each command
- cli_postcmd can be assigned a void function taking the commandline as a parameter to be executed after each command

- history

- libcli also provides a simple history facility
- if you call cli_history_add("commandline"); for every function you execute,
- char *cli_historyprev();
- and
- char *cli_historynext();
- will allow you to page back and forward in the history