- 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