#include #include #include #include "argpase.h" char *Optarg, *Optstr; int Optindex = 0; OptList *Options_Creat(char *name, OptId index) { OptList *p; p = (OptList *) malloc(sizeof(OptList)); memset(p, 0, sizeof(OptList)); Option *opt = (Option *) malloc(sizeof(Option)); memset(opt, 0, sizeof(Option)); opt->name = name; opt->id = index; p->Option = opt; p->next = NULL; return p; } OptList *Options_CreatOpt(Option *opt) { OptList *p; p = (OptList *) malloc(sizeof(OptList)); memset(p, 0, sizeof(OptList)); p->Option = opt; p->next = NULL; return p; } void Options_Add(OptList *opts, OptList *opt) { OptList *p = opts; while (NULL != p->next) { p = p->next; } p->next = opt; } bool Options_Del(OptList *opts, char *opt) { //获取当前头节点的位置 OptList *p = opts; OptList *prev = NULL; while (NULL != p->next) { //保存当前节点的前一个节点的指针 prev = p; //然后让当前的指针继续往后移动 p = p->next; //判断,找到了要删除的数据 if (0 == strcmp(p->Option->name, opt)) { //两种情况,一种是普通节点,还有一种是尾节点 if (p->next != NULL) //普通节点的情况 { prev->next = p->next; free(p); } else //尾节点的情况 { prev->next = NULL; //将这个尾节点的上一个节点的指针域指向空 free(p); } return true; } } return false; } void Options_Print(OptList *opts) { OptList *p = opts; while (NULL != p) { printf("Option[%d]:%s\n", p->Option->id, p->Option->name); p = p->next; } } OptId Options_Load(OptList *opts, char *argv[], size_t argc) { OptList *p = opts; OptId id = -2; while (NULL != p) { if (0 == strcmp(p->Option->name, argv[Optindex])) { Optarg = argv[Optindex + 1]; Optstr = p->Option->name; id = p->Option->id; } p = p->next; } Optindex++; if (Optindex >= argc) { return -1; } return id; } size_t Str_To_Args(char *str, char *argv[]) { char *p; size_t argc = 0; size_t l = strlen(str); char *buf = (char *) malloc(sizeof(char) * l + 1); strcpy(buf, str); p = strtok(buf, " "); while (p) { argv[argc] = p; argc++; p = strtok(NULL, " "); } return argc; }