From b4401224612367bba465d15e1f940fcf00173142 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Thu, 22 Jun 2023 13:55:33 +1000 Subject: subcmd: minor improvements Add support for modulo maxarg count. If maxargs is (e.g.) -2, then a multiple of 2 args is expected. Also expose Jim_SubCmdArgError() to make it easy to add additional arg validation but still have subcmd report the usage. Signed-off-by: Steve Bennett --- jim-subcmd.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'jim-subcmd.h') diff --git a/jim-subcmd.h b/jim-subcmd.h index ab30f37..2d05821 100644 --- a/jim-subcmd.h +++ b/jim-subcmd.h @@ -31,6 +31,11 @@ typedef struct { unsigned short flags; /* JIM_MODFLAG_... plus custom flags */ } jim_subcmd_type; +/* This makes it easy to define a jim_subcmd_type array with function=NULL + * see jim-namespace.c for an example + */ +#define JIM_DEF_SUBCMD(name, args, minargs, maxargs) { name, args, NULL, minargs, maxargs } + /** * Looks up the appropriate subcommand in the given command table and return * the command function which implements the subcommand. @@ -70,6 +75,13 @@ int Jim_SubCmdProc(Jim_Interp *interp, int argc, Jim_Obj *const *argv); */ int Jim_CallSubCmd(Jim_Interp *interp, const jim_subcmd_type *ct, int argc, Jim_Obj *const *argv); +/** + * Sets an error result indicating the usage of the subcmd 'ct'. + * Typically this will be called with the result of Jim_ParseSubCmd() after + * additional checks if the args are wrong. + */ +void Jim_SubCmdArgError(Jim_Interp *interp, const jim_subcmd_type *ct, Jim_Obj *subcmd); + #ifdef __cplusplus } #endif -- cgit v1.1