⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smpd_get_opt.c

📁 fortran并行计算包
💻 C
📖 第 1 页 / 共 2 页
字号:
	*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 + -