cmdParser.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:6k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* cmdParser.h - Command line parsing utility functions */
  2. /* Copyright 2000 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01b,23nov99,rcb  Make KeywordMatch() function public.
  7. 01a,01jun99,rcb  First.
  8. */
  9. /*
  10. DESCRIPTION
  11. This file includes a collection of command-line parsing functions which are
  12. useful in the creation of command line utilities, such as bus exercisers.
  13. There are three groups of functions defined by this library.  The first is
  14. a collection of general string parser functions, such as functions to eliminate
  15. white space, functions to strip tokens out of a string, and so forth.  
  16. The second set of functions drive the actual parsing process.  In order to 
  17. use this second set of functions, clients must construct a table of CMD_DESCR
  18. structures which define the commands to be recognized by the parser.  A 
  19. brief example of such a table is shown below.
  20. .CS
  21. CMD_DESCR commands [] =
  22.     {
  23.     {"Help", 4, "Help/?", "Displays list of commands.", CmdParserHelpFunc},
  24.     {"?",    1, NULL,   NULL,  CmdParserHelpFunc},
  25.     {"Exit", 4, "Exit",   "Exits program.", CmdParserExitFunc},
  26.     {NULL,   0, NULL,   NULL,  NULL}
  27.     };
  28. .CE
  29. The first field is the keyword for the command.  The second field specifies
  30. the number of characters of the command which must match - allowing the user
  31. to enter only a portion of the keyword as a shortcut.  The third and fourth
  32. fields are strings giving the command usage and a brief help string.  A NULL
  33. in the Help field indicates that the corresponding keyword is a synonym for 
  34. another command its usage/help should not be shown.  The final field is a 
  35. pointer to a function of type CMD_EXEC_FUNC which will be invoked if the 
  36. parser encounters the corresponding command.
  37. The third group of functions provide standard CMD_EXEC_FUNCs for certain
  38. commonly used commands, such as CmdParserHelpFunc and CmdParserExitFunc as
  39. shown in the preceding example.
  40. The caller may pass a generic (pVOID) parameter to the command line parsing
  41. functions in the second group. This function is in turn passed to the
  42. CMD_EXEC_FUNCs.  In this way, the caller can specify context information
  43. for the command execution functions.
  44. Commands are executed after the user presses [enter].  Multiple commands may 
  45. be entered on the same command line separated by semicolons (';').  Each 
  46. command as if it had been entered on a separate line (unless a command 
  47. terminates with an error, in which case all remaining commands entered on the 
  48. same line will be ignored).
  49. */
  50. #ifndef __INCcmdParserh
  51. #define __INCcmdParserh
  52. #ifdef __cplusplus
  53. extern "C" {
  54. #endif
  55. /* Constants */
  56. /* Command parser return codes */
  57. #define RET_OK     0 /* Normal termination */
  58. #define RET_ERROR     1 /* Program failure */
  59. #define RET_CONTINUE     2 /* Program continues looping */
  60. /* Prompt & input definitions */
  61. #define CMD_SEPARATOR     ';'  /* Command separator character */
  62. #define MAX_CMD_LEN     256  /* Maximum command length */
  63. #define MAX_KEYWORD_LEN     32 /* Maximum cmd keyword length */
  64. /* Command descriptors */
  65. /*
  66.  * CMD_EXEC_FUNC
  67.  *
  68.  * Note: The CMD_EXEC_FUNC is expected to update the <Cmd> parameter so
  69.  * that it points to the next character in the command line following 
  70.  * the parameters consumed by the CMD_EXEC_FUNC itself.
  71.  */
  72. typedef UINT16 (*CMD_EXEC_FUNC)
  73.     (
  74.     pVOID param, /* Generic parameter passed down */
  75.     char **ppCmd, /* Ptr to remainder of cmd line */
  76.     FILE *fin, /* stream for input (if any) */
  77.     FILE *fout /* stream for output (if any) */
  78.     );
  79. /*
  80.  * CMD_DESCR - defines a command/keyword to be recognized by parser
  81.  */
  82. typedef struct cmd_descr
  83.     {
  84.     char *keyword; /* Command keyword */
  85.     int minMatch; /* Minimum # of chars to match */
  86.     char *usage; /* Syntax */
  87.     char *help;  /* Description string */
  88.     CMD_EXEC_FUNC execFunc; /* Command execution function */
  89.     } CMD_DESCR, *pCMD_DESCR;
  90. /* function prototypes */
  91. UINT16 PromptAndExecCmd
  92.     (
  93.     pVOID param, /* Generic parameter for exec funcs */
  94.     char *pPrompt, /* Prompt to display */
  95.     FILE *fin, /* Input stream */
  96.     FILE *fout,  /* Output stream */
  97.     CMD_DESCR *pCmdTable /* CMD_DESCR table */
  98.     );
  99. UINT16 ExecCmd
  100.     (
  101.     pVOID param, /* Generic parameter for exec funcs */
  102.     char *pCmd,  /* Cmd buffer to be parsed/executed */
  103.     FILE *fin, /* Stream for input */
  104.     FILE *fout,  /* Stream for output */
  105.     CMD_DESCR *pCmdTable /* CMD_DESCR table */
  106.     );
  107. int KeywordMatch
  108.     (
  109.     char *s1,     /* string 1 */
  110.     char *s2,     /* string 2 */
  111.     int len     /* max length to compare */
  112.     );
  113. char *SkipSpace 
  114.     (
  115.     char *pStr /* Input string */
  116.     );
  117. UINT16 TruncSpace 
  118.     (
  119.     char *pStr /* Input string */
  120.     );
  121. char *GetNextToken 
  122.     (
  123.     char *pStr,  /* Input string */
  124.     char *pToken, /* Bfr to receive token */
  125.     UINT16 tokenLen /* Max length of Token bfr */
  126.     );
  127. char *GetHexToken
  128.     (
  129.     char *pStr,  /* input string */
  130.     long *pToken, /* buffer to receive token value */
  131.     long defVal  /* default value */
  132.     );
  133. UINT16 CmdParserHelpFunc
  134.     (
  135.     pVOID param, /* Generic parameter passed down */
  136.     char **ppCmd, /* Ptr to remainder of cmd line */
  137.     FILE *fin, /* stream for input (if any) */
  138.     FILE *fout /* stream for output (if any) */
  139.     );
  140. UINT16 CmdParserExitFunc
  141.     (
  142.     pVOID param, /* Generic parameter passed down */
  143.     char **ppCmd, /* Ptr to remainder of cmd line */
  144.     FILE *fin, /* stream for input (if any) */
  145.     FILE *fout /* stream for output (if any) */
  146.     );
  147. #ifdef __cplusplus
  148. }
  149. #endif
  150. #endif /* __INCcmdParserh */
  151. /* End of file. */