📄 smpd_get_opt.c
字号:
*val_ptr = atoi(int_str); smpd_exit_fn(FCNAME); return SMPD_TRUE; } smpd_exit_fn(FCNAME); return SMPD_FALSE;}#undef FCNAME#define FCNAME "quoted_printf"static int quoted_printf(char *str, int maxlen, const char *val){ int count = 0; smpd_enter_fn(FCNAME); if (maxlen < 1) { smpd_exit_fn(FCNAME); return 0; } *str = SMPD_QUOTE_CHAR; str++; maxlen--; count++; while (maxlen) { if (*val == '\0') break; if (*val == SMPD_QUOTE_CHAR) { *str = SMPD_ESCAPE_CHAR; str++; maxlen--; count++; if (maxlen == 0) { smpd_exit_fn(FCNAME); return count; } } *str = *val; str++; maxlen--; count++; val++; } if (maxlen) { *str = SMPD_QUOTE_CHAR; str++; maxlen--; count++; if (maxlen == 0) { smpd_exit_fn(FCNAME); return count; } *str = '\0'; } smpd_exit_fn(FCNAME); return count;}#undef FCNAME#define FCNAME "smpd_add_string"int smpd_add_string(char *str, int maxlen, const char *val){ int num_chars; smpd_enter_fn(FCNAME); if (strstr(val, " ") || val[0] == SMPD_QUOTE_CHAR) { num_chars = quoted_printf(str, maxlen, val); if (num_chars < maxlen) { str[num_chars] = SMPD_SEPAR_CHAR; str[num_chars+1] = '\0'; } num_chars++; } else { num_chars = snprintf(str, maxlen, "%s ", val); } smpd_exit_fn(FCNAME); return num_chars;}#undef FCNAME#define FCNAME "smpd_get_string"const char * smpd_get_string(const char *str, char *val, int maxlen, int *num_chars){ smpd_enter_fn(FCNAME); if (maxlen < 1) { *num_chars = 0; smpd_exit_fn(FCNAME); return NULL; } /* line up with the first token */ str = first_token(str); if (str == NULL) { *num_chars = 0; smpd_exit_fn(FCNAME); return NULL; } /* copy the token */ token_copy(str, val, maxlen); *num_chars = (int)strlen(val); /* move to the next token */ str = next_token(str); smpd_exit_fn(FCNAME); return str;}#undef FCNAME#define FCNAME "smpd_add_string_arg"int smpd_add_string_arg(char **str_ptr, int *maxlen_ptr, const char *flag, const char *val){ int num_chars; smpd_enter_fn(FCNAME); if (*maxlen_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FAIL; } /* add the flag */ if (strstr(flag, " ") || strstr(flag, SMPD_DELIM_STR) || flag[0] == SMPD_QUOTE_CHAR) { num_chars = quoted_printf(*str_ptr, *maxlen_ptr, flag); } else { num_chars = snprintf(*str_ptr, *maxlen_ptr, "%s", flag); } *maxlen_ptr = *maxlen_ptr - num_chars; if (*maxlen_ptr < 1) { (*str_ptr)[num_chars-1] = '\0'; smpd_dbg_printf("partial argument added to string: '%s'\n", *str_ptr); smpd_exit_fn(FCNAME); return SMPD_FAIL; } *str_ptr = *str_ptr + num_chars; /* add the deliminator character */ **str_ptr = SMPD_DELIM_CHAR; *str_ptr = *str_ptr + 1; *maxlen_ptr = *maxlen_ptr - 1; /* add the value string */ if (strstr(val, " ") || strstr(val, SMPD_DELIM_STR) || val[0] == SMPD_QUOTE_CHAR) { num_chars = quoted_printf(*str_ptr, *maxlen_ptr, val); } else { num_chars = snprintf(*str_ptr, *maxlen_ptr, "%s", val); } *str_ptr = *str_ptr + num_chars; *maxlen_ptr = *maxlen_ptr - num_chars; if (*maxlen_ptr < 2) { *str_ptr = *str_ptr - 1; **str_ptr = '\0'; smpd_dbg_printf("partial argument added to string: '%s'\n", *str_ptr); smpd_exit_fn(FCNAME); return SMPD_FAIL; } /* add the trailing space */ **str_ptr = SMPD_SEPAR_CHAR; *str_ptr = *str_ptr + 1; **str_ptr = '\0'; *maxlen_ptr = *maxlen_ptr - 1; smpd_exit_fn(FCNAME); return SMPD_SUCCESS;}#undef FCNAME#define FCNAME "smpd_add_int_arg"int smpd_add_int_arg(char **str_ptr, int *maxlen_ptr, const char *flag, int val){ int result; char val_str[12]; smpd_enter_fn(FCNAME); sprintf(val_str, "%d", val); result = smpd_add_string_arg(str_ptr, maxlen_ptr, flag, val_str); smpd_exit_fn(FCNAME); return result;}#undef FCNAME#define FCNAME "smpd_get_opt"int smpd_get_opt(int *argc, char ***argv, char * flag){ int i,j; smpd_enter_fn(FCNAME); if (flag == NULL) { smpd_exit_fn(FCNAME); return 0; } for (i=0; i<*argc; i++) { if (strcmp((*argv)[i], flag) == 0) { for (j=i; j<*argc; j++) { (*argv)[j] = (*argv)[j+1]; } *argc -= 1; smpd_exit_fn(FCNAME); return 1; } } smpd_exit_fn(FCNAME); return 0;}#undef FCNAME#define FCNAME "smpd_get_opt_int"int smpd_get_opt_int(int *argc, char ***argv, char * flag, int *n){ int i,j; smpd_enter_fn(FCNAME); if (flag == NULL) { smpd_exit_fn(FCNAME); return 0; } for (i=0; i<*argc; i++) { if (strcmp((*argv)[i], flag) == 0) { if (i+1 == *argc) { smpd_exit_fn(FCNAME); return 0; } *n = atoi((*argv)[i+1]); for (j=i; j<*argc-1; j++) { (*argv)[j] = (*argv)[j+2]; } *argc -= 2; smpd_exit_fn(FCNAME); return 1; } } smpd_exit_fn(FCNAME); return 0;}#undef FCNAME#define FCNAME "smpd_get_opt_long"int smpd_get_opt_long(int *argc, char ***argv, char * flag, long *n){ int i; smpd_enter_fn(FCNAME); if (smpd_get_opt_int(argc, argv, flag, &i)) { *n = (long)i; smpd_exit_fn(FCNAME); return 1; } smpd_exit_fn(FCNAME); return 0;}#undef FCNAME#define FCNAME "smpd_get_opt_double"int smpd_get_opt_double(int *argc, char ***argv, char * flag, double *d){ int i,j; smpd_enter_fn(FCNAME); if (flag == NULL) { smpd_exit_fn(FCNAME); return 0; } for (i=0; i<*argc; i++) { if (strcmp((*argv)[i], flag) == 0) { if (i+1 == *argc) { smpd_exit_fn(FCNAME); return 0; } *d = atof((*argv)[i+1]); for (j=i; j<*argc-1; j++) { (*argv)[j] = (*argv)[j+2]; } *argc -= 2; smpd_exit_fn(FCNAME); return 1; } } smpd_exit_fn(FCNAME); return 0;}#undef FCNAME#define FCNAME "smpd_get_opt_string"int smpd_get_opt_string(int *argc, char ***argv, char * flag, char *str, int len){ int i,j; smpd_enter_fn(FCNAME); if (flag == NULL) { smpd_exit_fn(FCNAME); return 0; } for (i=0; i<*argc; i++) { if (strcmp((*argv)[i], flag) == 0) { if (i+1 == (*argc)) { smpd_exit_fn(FCNAME); return 0; } if ((*argv)[i+1][0] == '-') { smpd_exit_fn(FCNAME); return 0; } strncpy(str, (*argv)[i+1], len); str[len-1] = '\0'; for (j=i; j<(*argc)-1; j++) { (*argv)[j] = (*argv)[j+2]; } *argc -= 2; smpd_exit_fn(FCNAME); return 1; } } smpd_exit_fn(FCNAME); return 0;}#undef FCNAME#define FCNAME "smpd_get_opt_two_strings"int smpd_get_opt_two_strings(int *argc, char ***argv, char * flag, char *str1, int len1, char *str2, int len2){ int i, j; smpd_enter_fn(FCNAME); if (flag == NULL) { smpd_exit_fn(FCNAME); return 0; } for (i=0; i<*argc; i++) { if (strcmp((*argv)[i], flag) == 0) { if (i+1 == (*argc)) { smpd_exit_fn(FCNAME); return 0; } if ((*argv)[i+1][0] == '-') { smpd_exit_fn(FCNAME); return 0; } if (i+2 == (*argc)) { smpd_exit_fn(FCNAME); return 0; } if ((*argv)[i+2][0] == '-') { smpd_exit_fn(FCNAME); return 0; } strncpy(str1, (*argv)[i+1], len1); str1[len1-1] = '\0'; strncpy(str2, (*argv)[i+2], len2); str2[len2-1] = '\0'; for (j=i; j<(*argc)-2; j++) { (*argv)[j] = (*argv)[j+3]; } *argc -= 3; smpd_exit_fn(FCNAME); return 1; } } smpd_exit_fn(FCNAME); return 0;}#undef FCNAME#define FCNAME "smpd_get_win_opt_string"int smpd_get_win_opt_string(int *argc, char ***argv, char * flag, char *str, int len){ int i,j; char *iter; smpd_enter_fn(FCNAME); if (flag == NULL) { smpd_exit_fn(FCNAME); return 0; } for (i=0; i<*argc; i++) { if (strncmp((*argv)[i], flag, strlen(flag)) == 0) { if (strlen(flag) == strlen((*argv)[i])) { /* option specified with no value: /flag */ continue; } iter = &(*argv)[i][strlen(flag)]; if ((*iter != ':') && (*iter != '=')) /* /flag=val or /flag:val */ { /* partial option match: /flag=val == /flagger=val */ continue; } iter++; strncpy(str, iter, len); str[len-1] = '\0'; for (j=i; j<(*argc); j++) { (*argv)[j] = (*argv)[j+1]; } *argc -= 1; smpd_exit_fn(FCNAME); return 1; } } smpd_exit_fn(FCNAME); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -