搜索
bottom↓
回复: 1

cmdParseExample.c源码

[复制链接]

出0入0汤圆

发表于 2020-2-23 20:31:36 | 显示全部楼层 |阅读模式
  1. /*********************************************************************************************************
  2. ** 文件: cmdParseExample.c
  3. ** 作者: scilogyhunter
  4. ** 站点: https://me.csdn.net/ScilogyHunter
  5. ** 描述: cmdParse 例程
  6. *********************************************************************************************************/
  7. #include "cmdParse.h"
  8. /*********************************************************************************************************
  9.   宏定义
  10. *********************************************************************************************************/
  11. #define CFG_DEFAULT_BUF_SIZE                (64)                        /*  缓冲区大小                  */
  12. #define CFG_DEFAULT_ARRAY_SIZE              (4)                         /*  缓冲区个数                  */
  13. /*********************************************************************************************************
  14.   命令参数结构
  15. *********************************************************************************************************/
  16. typedef struct {
  17.     uint32_t    e;
  18.     uint32_t    b;
  19.     char        c;
  20.     uint8_t     u8;
  21.     int8_t      s8;
  22.     uint16_t    u16;
  23.     int16_t     s16;
  24.     uint32_t    u32;
  25.     int32_t     s32;
  26.     float       f32;
  27.     uint64_t    u64;
  28.     int64_t     s64;
  29.     double      f64;
  30.     char       *sptr;
  31.     char        sbuf[CFG_DEFAULT_BUF_SIZE];

  32.     int32_t     au8c;
  33.     uint8_t     au8v[CFG_DEFAULT_ARRAY_SIZE];
  34.     int32_t     abufc;
  35.     char        abufv[CFG_DEFAULT_ARRAY_SIZE][CFG_DEFAULT_BUF_SIZE];
  36. } CMD_ARG_ST;
  37. /*********************************************************************************************************
  38. ** 名称: getPrint
  39. ** 输入: cmd        命令参数
  40. **       opti       选项索引号
  41. ** 输出: 错误码,NONE成功,ERROR错误
  42. ** 说明: 帮助信息,列出参数列表信息
  43. *********************************************************************************************************/
  44. static  int  getPrint (command_st  *cmd, int opti)
  45. {
  46.     CMD_ARG_ST  *pArg = (CMD_ARG_ST  *)cmd->priv;
  47.     option_st   *opt;
  48.     uint32_t     i;

  49.     opt  = &cmd->optv[opti];
  50.     if (opt->index) {
  51.         printf("-p option input!\n");
  52.     } else {
  53.         printf("-p option no input!\n");
  54.     }

  55.     printf("e   = %u\n",   pArg->e);
  56.     printf("b   = %u\n",   pArg->b);
  57.     printf("c   = '%c'\n", pArg->c);
  58.     printf("u8  = %u\n",   pArg->u8);
  59.     printf("s8  = %d\n",   pArg->s8);
  60.     printf("u16 = %u\n",   pArg->u16);
  61.     printf("s16 = %d\n",   pArg->s16);
  62.     printf("u32 = %u\n",   pArg->u32);
  63.     printf("s32 = %d\n",   pArg->s32);
  64.     printf("f32 = %f\n",   pArg->f32);
  65.     printf("u64 = %llu\n", pArg->u64);
  66.     printf("s64 = %lld\n", pArg->s64);
  67.     printf("f64 = %lf\n",  pArg->f64);
  68.     printf("sptr= "%s"\n",   pArg->sptr);
  69.     printf("sbuf= "%s"\n",   pArg->sbuf);

  70.     printf("au8c  = %d, au8v data =", pArg->au8c);
  71.     for (i = 0; i < pArg->au8c; i++) {
  72.         if ((i % 8) == 0) {
  73.             printf("\n[%08x]", i);
  74.         }
  75.         printf(" %02x", pArg->au8v[i]);
  76.     }
  77.     printf("\n");

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

  82.     return  (NONE);
  83. }
  84. /*********************************************************************************************************
  85. ** 名称: cmdParseExample
  86. ** 输入: argc       参数个数
  87. **       argv       参数列表
  88. ** 输出: 错误码,NONE成功,ERROR错误
  89. ** 说明: 文件读写速度测试工具函数
  90. *********************************************************************************************************/
  91. static int cmdParseExample (int argc, char *argv[])
  92. {
  93.     CMD_ARG_ST  cmdArg = {
  94.         .e   = 0,
  95.         .b   = 0,
  96.         .c   = '1',
  97.         .u8  = 2,
  98.         .s8  = -3,
  99.         .u16 = 4,
  100.         .s16 = -5,
  101.         .u32 = 6,
  102.         .s32 = -7,
  103.         .f32 = 8.0,
  104.         .u64 = 9,
  105.         .s64 = -10,
  106.         .f64 = 11.0,
  107.         .sptr= "sptr",
  108.         .sbuf= "sbuf",

  109.         .au8c = 0,
  110.         .au8v = { 0 },
  111.         .abufc = 0,
  112.     };
  113.     option_st  optv[] = {
  114.         {ATT_TYPE_EXIST,&cmdArg.e,    "e",    "set e"},
  115.         {ATT_TYPE_BOOL, &cmdArg.b,    "b",    "set b"},
  116.         {ATT_TYPE_CHAR, &cmdArg.c,    "c",    "set c"},
  117.         {ATT_TYPE_U8,   &cmdArg.u8,   "u8",   "set u8"},
  118.         {ATT_TYPE_S8,   &cmdArg.s8,   "s8",   "set s8"},
  119.         {ATT_TYPE_U16,  &cmdArg.u16,  "u16",  "set u16"},
  120.         {ATT_TYPE_S16,  &cmdArg.s16,  "s16",  "set s16"},
  121.         {ATT_TYPE_U32,  &cmdArg.u32,  "u32",  "set u32"},
  122.         {ATT_TYPE_S32,  &cmdArg.s32,  "s32",  "set s32"},
  123.         {ATT_TYPE_F32,  &cmdArg.f32,  "f32",  "set f32"},
  124.         {ATT_TYPE_U64,  &cmdArg.u64,  "u64",  "set u64"},
  125.         {ATT_TYPE_S64,  &cmdArg.s64,  "s64",  "set s64"},
  126.         {ATT_TYPE_F64,  &cmdArg.f64,  "f64",  "set f64"},
  127.         {ATT_TYPE_SPTR, &cmdArg.sptr, "sptr", "set sptr"},
  128.         {ATT_BUF_SIZE(sizeof(cmdArg.sbuf)) |
  129.          ATT_TYPE_SBUF, &cmdArg.sbuf, "sbuf", "set sbuf"},

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

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

  134.         {ATT_FUNC |
  135.          ATT_FORCE,     getPrint,       "p", "print value"},

  136.     };
  137.     command_st  cmd;
  138.     int         err;

  139.     cmd.argc = argc;
  140.     cmd.argv = argv;
  141.     cmd.optc = GET_OPTC(optv);
  142.     cmd.optv = optv;
  143.     cmd.priv = &cmdArg;

  144.     err = cmdParse(&cmd);
  145.     if (err == NONE) {
  146.         printf("cmdParseExample ok!\n");
  147.     } else {
  148.         printf("cmdParseExample error = %d\n", err);
  149.     }

  150.     return  (NONE);
  151. }
  152. /*********************************************************************************************************
  153. ** 名称: main
  154. ** 描述: 程序入口
  155. ** 输入: argc   参数个数
  156. **       argv   参数列表
  157. ** 输出: ERROR_CODE
  158. *********************************************************************************************************/
  159. int main (int argc, char **argv)
  160. {
  161.     cmdParseExample(argc, argv);

  162.     return  (0);
  163. }
  164. /*********************************************************************************************************
  165.   END
  166. *********************************************************************************************************/
复制代码











阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2020-2-24 12:32:19 来自手机 | 显示全部楼层
感谢分享!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 15:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表