科技猎人 发表于 2020-2-23 20:31:36

cmdParseExample.c源码

/*********************************************************************************************************
** 文件: cmdParseExample.c
** 作者: scilogyhunter
** 站点: https://me.csdn.net/ScilogyHunter
** 描述: cmdParse 例程
*********************************************************************************************************/
#include "cmdParse.h"
/*********************************************************************************************************
宏定义
*********************************************************************************************************/
#define CFG_DEFAULT_BUF_SIZE                (64)                        /*缓冲区大小                  */
#define CFG_DEFAULT_ARRAY_SIZE            (4)                         /*缓冲区个数                  */
/*********************************************************************************************************
命令参数结构
*********************************************************************************************************/
typedef struct {
    uint32_t    e;
    uint32_t    b;
    char      c;
    uint8_t   u8;
    int8_t      s8;
    uint16_t    u16;
    int16_t   s16;
    uint32_t    u32;
    int32_t   s32;
    float       f32;
    uint64_t    u64;
    int64_t   s64;
    double      f64;
    char       *sptr;
    char      sbuf;

    int32_t   au8c;
    uint8_t   au8v;
    int32_t   abufc;
    char      abufv;
} CMD_ARG_ST;
/*********************************************************************************************************
** 名称: getPrint
** 输入: cmd      命令参数
**       opti       选项索引号
** 输出: 错误码,NONE成功,ERROR错误
** 说明: 帮助信息,列出参数列表信息
*********************************************************************************************************/
staticintgetPrint (command_st*cmd, int opti)
{
    CMD_ARG_ST*pArg = (CMD_ARG_ST*)cmd->priv;
    option_st   *opt;
    uint32_t   i;

    opt= &cmd->optv;
    if (opt->index) {
      printf("-p option input!\n");
    } else {
      printf("-p option no input!\n");
    }

    printf("e   = %u\n",   pArg->e);
    printf("b   = %u\n",   pArg->b);
    printf("c   = '%c'\n", pArg->c);
    printf("u8= %u\n",   pArg->u8);
    printf("s8= %d\n",   pArg->s8);
    printf("u16 = %u\n",   pArg->u16);
    printf("s16 = %d\n",   pArg->s16);
    printf("u32 = %u\n",   pArg->u32);
    printf("s32 = %d\n",   pArg->s32);
    printf("f32 = %f\n",   pArg->f32);
    printf("u64 = %llu\n", pArg->u64);
    printf("s64 = %lld\n", pArg->s64);
    printf("f64 = %lf\n",pArg->f64);
    printf("sptr= \"%s\"\n",   pArg->sptr);
    printf("sbuf= \"%s\"\n",   pArg->sbuf);

    printf("au8c= %d, au8v data =", pArg->au8c);
    for (i = 0; i < pArg->au8c; i++) {
      if ((i % 8) == 0) {
            printf("\n[%08x]", i);
      }
      printf(" %02x", pArg->au8v);
    }
    printf("\n");

    printf("abufc = %d, abufv data =\n", pArg->abufc);
    for (i = 0; i < pArg->abufc; i++) {
      printf("[%02d]%s\n", i, pArg->abufv);
    }

    return(NONE);
}
/*********************************************************************************************************
** 名称: cmdParseExample
** 输入: argc       参数个数
**       argv       参数列表
** 输出: 错误码,NONE成功,ERROR错误
** 说明: 文件读写速度测试工具函数
*********************************************************************************************************/
static int cmdParseExample (int argc, char *argv[])
{
    CMD_ARG_STcmdArg = {
      .e   = 0,
      .b   = 0,
      .c   = '1',
      .u8= 2,
      .s8= -3,
      .u16 = 4,
      .s16 = -5,
      .u32 = 6,
      .s32 = -7,
      .f32 = 8.0,
      .u64 = 9,
      .s64 = -10,
      .f64 = 11.0,
      .sptr= "sptr",
      .sbuf= "sbuf",

      .au8c = 0,
      .au8v = { 0 },
      .abufc = 0,
    };
    option_stoptv[] = {
      {ATT_TYPE_EXIST,&cmdArg.e,    "e",    "set e"},
      {ATT_TYPE_BOOL, &cmdArg.b,    "b",    "set b"},
      {ATT_TYPE_CHAR, &cmdArg.c,    "c",    "set c"},
      {ATT_TYPE_U8,   &cmdArg.u8,   "u8",   "set u8"},
      {ATT_TYPE_S8,   &cmdArg.s8,   "s8",   "set s8"},
      {ATT_TYPE_U16,&cmdArg.u16,"u16","set u16"},
      {ATT_TYPE_S16,&cmdArg.s16,"s16","set s16"},
      {ATT_TYPE_U32,&cmdArg.u32,"u32","set u32"},
      {ATT_TYPE_S32,&cmdArg.s32,"s32","set s32"},
      {ATT_TYPE_F32,&cmdArg.f32,"f32","set f32"},
      {ATT_TYPE_U64,&cmdArg.u64,"u64","set u64"},
      {ATT_TYPE_S64,&cmdArg.s64,"s64","set s64"},
      {ATT_TYPE_F64,&cmdArg.f64,"f64","set f64"},
      {ATT_TYPE_SPTR, &cmdArg.sptr, "sptr", "set sptr"},
      {ATT_BUF_SIZE(sizeof(cmdArg.sbuf)) |
         ATT_TYPE_SBUF, &cmdArg.sbuf, "sbuf", "set sbuf"},

      {ATT_ARRAY(GET_ARRAY_COUNT(cmdArg.au8v)) |
         ATT_TYPE_U8,   &cmdArg.au8v,"au8", "set u8 array", &cmdArg.au8c},

      {ATT_ARRAY(GET_ARRAY_COUNT(cmdArg.abufv)) | ATT_BUF_SIZE(sizeof(cmdArg.abufv)) |
         ATT_TYPE_SBUF, &cmdArg.abufv, "abuf", "set sbuf array", &cmdArg.abufc},

      {ATT_FUNC |
         ATT_FORCE,   getPrint,       "p", "print value"},

    };
    command_stcmd;
    int         err;

    cmd.argc = argc;
    cmd.argv = argv;
    cmd.optc = GET_OPTC(optv);
    cmd.optv = optv;
    cmd.priv = &cmdArg;

    err = cmdParse(&cmd);
    if (err == NONE) {
      printf("cmdParseExample ok!\n");
    } else {
      printf("cmdParseExample error = %d\n", err);
    }

    return(NONE);
}
/*********************************************************************************************************
** 名称: main
** 描述: 程序入口
** 输入: argc   参数个数
**       argv   参数列表
** 输出: ERROR_CODE
*********************************************************************************************************/
int main (int argc, char **argv)
{
    cmdParseExample(argc, argv);

    return(0);
}
/*********************************************************************************************************
END
*********************************************************************************************************/



https://img-blog.csdnimg.cn/20200221124620452.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NjaWxvZ3lIdW50ZXI=,size_16,color_FFFFFF,t_70
https://img-blog.csdnimg.cn/20200221124721386.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NjaWxvZ3lIdW50ZXI=,size_16,color_FFFFFF,t_70
https://img-blog.csdnimg.cn/20200221124820946.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NjaWxvZ3lIdW50ZXI=,size_16,color_FFFFFF,t_70
https://img-blog.csdnimg.cn/20200221124957704.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NjaWxvZ3lIdW50ZXI=,size_16,color_FFFFFF,t_70
https://img-blog.csdnimg.cn/20200221125057593.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NjaWxvZ3lIdW50ZXI=,size_16,color_FFFFFF,t_70
https://img-blog.csdnimg.cn/20200221125214380.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NjaWxvZ3lIdW50ZXI=,size_16,color_FFFFFF,t_70
https://img-blog.csdnimg.cn/20200221125357212.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NjaWxvZ3lIdW50ZXI=,size_16,color_FFFFFF,t_70

dbwu8280 发表于 2020-2-24 12:32:19

感谢分享!
页: [1]
查看完整版本: cmdParseExample.c源码