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

📄 anongame_infos.c

📁 打魔兽战网的都知道他是什么
💻 C
📖 第 1 页 / 共 5 页
字号:
    {"gametype_2v2_short",	gametype_2v2_short},    {"gametype_2v2_long",	gametype_2v2_long},    {"gametype_3v3_short",	gametype_3v3_short},    {"gametype_3v3_long",	gametype_3v3_long},    {"gametype_4v4_short",	gametype_4v4_short},    {"gametype_4v4_long",	gametype_4v4_long},    {"gametype_sffa_short",	gametype_sffa_short},    {"gametype_sffa_long",	gametype_sffa_long},    {"gametype_tffa_short",	gametype_tffa_short},    {"gametype_tffa_long",	gametype_tffa_long},    {"gametype_2v2v2_short",	gametype_2v2v2_short},    {"gametype_2v2v2_long",	gametype_2v2v2_long},    {"gametype_3v3v3_short",	gametype_3v3v3_short},    {"gametype_3v3v3_long",	gametype_3v3v3_long},    {"gametype_4v4v4_short",	gametype_4v4v4_short},    {"gametype_4v4v4_long",	gametype_4v4v4_long},    {"gametype_2v2v2v2_short",	gametype_2v2v2v2_short},    {"gametype_2v2v2v2_long",	gametype_2v2v2v2_long},    {"gametype_3v3v3v3_short",	gametype_3v3v3v3_short},    {"gametype_3v3v3v3_long",	gametype_3v3v3v3_long},    {"gametype_5v5_short",	gametype_5v5_short},    {"gametype_5v5_long",	gametype_5v5_long},    {"gametype_6v6_short",	gametype_6v6_short},    {"gametype_6v6_long",	gametype_6v6_long},    {NULL, -1}};static const t_anongame_infos_THUMBSDOWN_table_row THUMBSDOWN_handler_table[] = {    {"PG_1v1", PG_1v1},    {"PG_2v2", PG_2v2},    {"PG_3v3", PG_3v3},    {"PG_4v4", PG_4v4},    {"PG_ffa", PG_ffa},    {"AT_2v2", AT_2v2},    {"AT_3v3", AT_3v3},    {"AT_4v4", AT_4v4},    {"AT_ffa", AT_ffa},    {"PG_5v5", PG_5v5},    {"PG_6v6", PG_6v6},    {"PG_2v2v2", PG_2v2v2},    {"PG_3v3v3", PG_3v3v3},    {"PG_4v4v4", PG_4v4v4},    {"PG_2v2v2v2", PG_2v2v2v2},    {"PG_3v3v3v3", PG_3v3v3v3},    {"AT_2v2v2", AT_2v2v2},    {NULL, -1}};static const t_anongame_infos_ICON_REQ_WAR3_table_row ICON_REQ_WAR3_handler_table[] = {    {"Level1", ICON_REQ_WAR3_Level1},    {"Level2", ICON_REQ_WAR3_Level2},    {"Level3", ICON_REQ_WAR3_Level3},    {"Level4", ICON_REQ_WAR3_Level4},    {NULL, -1}};static const t_anongame_infos_ICON_REQ_W3XP_table_row ICON_REQ_W3XP_handler_table[] = {    {"Level1", ICON_REQ_W3XP_Level1},    {"Level2", ICON_REQ_W3XP_Level2},    {"Level3", ICON_REQ_W3XP_Level3},    {"Level4", ICON_REQ_W3XP_Level4},    {"Level5", ICON_REQ_W3XP_Level5},    {NULL, -1}};static const t_anongame_infos_ICON_REQ_TOURNEY_table_row ICON_REQ_TOURNEY_handler_table[] = {    {"Level1", ICON_REQ_TRNY_Level1},    {"Level2", ICON_REQ_TRNY_Level2},    {"Level3", ICON_REQ_TRNY_Level3},    {"Level4", ICON_REQ_TRNY_Level4},    {"Level5", ICON_REQ_TRNY_Level5},    {NULL, -1}};typedef enum {    parse_UNKNOWN,    parse_URL,    parse_DESC,    parse_THUMBSDOWN,    parse_ICON_REQ_WAR3,    parse_ICON_REQ_W3XP,    parse_ICON_REQ_TOURNEY} t_parse_mode;typedef enum {    changed,    unchanged} t_parse_state;static t_parse_mode switch_parse_mode(char *text, char *langID){    if (!(text))	return parse_UNKNOWN;    else if (strcmp(text, "[URL]") == 0)	return parse_URL;    else if (strcmp(text, "[THUMBS_DOWN_LIMIT]") == 0)	return parse_THUMBSDOWN;    else if (strcmp(text, "[ICON_REQUIRED_RACE_WINS_WAR3]") == 0)	return parse_ICON_REQ_WAR3;    else if (strcmp(text, "[ICON_REQUIRED_RACE_WINS_W3XP]") == 0)	return parse_ICON_REQ_W3XP;    else if (strcmp(text, "[ICON_REQUIRED_TOURNEY_WINS]") == 0)	return parse_ICON_REQ_TOURNEY;    else if (strcmp(text, "[DEFAULT_DESC]") == 0)    {	langID[0] = '\0';	return parse_DESC;    } else if (strlen(text) == 6)    {	strncpy(langID, &(text[1]), 4);	langID[4] = '\0';	return parse_DESC;    } else	eventlog(eventlog_level_error, __FUNCTION__, "got invalid section name: %s", text);    return parse_UNKNOWN;}extern int anongame_infos_load(char const *filename){    unsigned int line;    unsigned int pos;    char *buff;    char *temp;    char langID[5];    t_parse_mode parse_mode = parse_UNKNOWN;    t_parse_state parse_state = unchanged;    t_anongame_infos_DESC *anongame_infos_DESC = NULL;    char *pointer;    char *variable;    char *value = NULL;    t_anongame_infos_DESC_table_row const *DESC_table_row;    t_anongame_infos_URL_table_row const *URL_table_row;    t_anongame_infos_THUMBSDOWN_table_row const *THUMBSDOWN_table_row;    t_anongame_infos_ICON_REQ_WAR3_table_row const *ICON_REQ_WAR3_table_row;    t_anongame_infos_ICON_REQ_W3XP_table_row const *ICON_REQ_W3XP_table_row;    t_anongame_infos_ICON_REQ_TOURNEY_table_row const *ICON_REQ_TOURNEY_table_row;    int int_value;    char char_value;    langID[0] = '\0';    if (!filename)    {	eventlog(eventlog_level_error, __FUNCTION__, "got NULL filename");	return -1;    }    if (!(anongame_infos = anongame_infos_init()))    {	eventlog(eventlog_level_error, __FUNCTION__, "could not init anongame_infos");	return -1;    }    if (!(fp = fopen(filename, "r")))    {	eventlog(eventlog_level_error, "anongameinfo_load", "could not open file \"%s\" for reading (fopen: %s), using default values", filename, pstrerror(errno));	goto anongame_infos_loading_failure;    }    for (line = 1; (buff = file_get_line(fp)); line++)    {	for (pos = 0; buff[pos] == '\t' || buff[pos] == ' '; pos++);	if (buff[pos] == '\0' || buff[pos] == '#')	{	    continue;	}	if ((temp = strrchr(buff, '#')))	{	    unsigned int len;	    unsigned int endpos;	    *temp = '\0';	    len = strlen(buff) + 1;	    for (endpos = len - 1; buff[endpos] == '\t' || buff[endpos] == ' '; endpos--);	    buff[endpos + 1] = '\0';	}	if ((buff[0] == '[') && (buff[strlen(buff) - 1] == ']'))	{	    if ((parse_state == unchanged) && (anongame_infos_DESC != NULL))	    {		if (langID[0] != '\0')		    list_append_data(anongame_infos->anongame_infos_DESC_list, anongame_infos_DESC);		else		{		    if (anongame_infos->anongame_infos_DESC == NULL)			anongame_infos->anongame_infos_DESC = anongame_infos_DESC;		    else		    {			eventlog(eventlog_level_error, __FUNCTION__, "found another default_DESC block, deleting previous");			anongame_infos_DESC_destroy(anongame_infos->anongame_infos_DESC);			anongame_infos->anongame_infos_DESC = anongame_infos_DESC;		    }		}		anongame_infos_DESC = NULL;	    }	    parse_mode = switch_parse_mode(buff, langID);	    parse_state = changed;	} else if (buff[0] != '\0')	    switch (parse_mode)	    {	    case parse_UNKNOWN:		{		    if ((buff[0] != '[') || (buff[strlen(buff) - 1] != ']'))		    {			eventlog(eventlog_level_error, __FUNCTION__, "expected [] section start, but found %s on line %u", buff, line);		    } else		    {			parse_mode = switch_parse_mode(buff, langID);			parse_state = changed;		    }		    break;		}	    case parse_URL:		{		    parse_state = unchanged;		    variable = buff;		    pointer = strchr(variable, '=');		    for (pointer--; pointer[0] == ' '; pointer--);		    pointer[1] = '\0';		    pointer++;		    pointer++;		    pointer = strchr(pointer, '\"');		    pointer++;		    value = pointer;		    pointer = strchr(pointer, '\"');		    pointer[0] = '\0';		    for (URL_table_row = URL_handler_table; URL_table_row->anongame_infos_URL_string != NULL; URL_table_row++)			if (strcmp(URL_table_row->anongame_infos_URL_string, variable) == 0)			{			    if (URL_table_row->member != -1)			        anongame_infos_URL_set_URL(URL_table_row->member, value);			}		    break;		}	    case parse_DESC:		{		    if (parse_state == changed)		    {			anongame_infos_DESC = anongame_infos_DESC_init();			parse_state = unchanged;			eventlog(eventlog_level_info, __FUNCTION__, "got langID: [%s]", langID);			if (langID[0] != '\0')			    anongame_infos_DESC->langID = xstrdup(langID);		    }		    variable = buff;		    pointer = strchr(variable, '=');		    for (pointer--; pointer[0] == ' '; pointer--);		    pointer[1] = '\0';		    pointer++;		    pointer++;		    pointer = strchr(pointer, '\"');		    pointer++;		    value = pointer;		    pointer = strchr(pointer, '\"');		    pointer[0] = '\0';		    for (DESC_table_row = DESC_handler_table; DESC_table_row->anongame_infos_DESC_string != NULL; DESC_table_row++)			if (strcmp(DESC_table_row->anongame_infos_DESC_string, variable) == 0)			{			    if (DESC_table_row->member != -1)			        anongame_infos_DESC_set_DESC(anongame_infos_DESC, DESC_table_row->member, value);			}		    break;		}	    case parse_THUMBSDOWN:		{		    parse_state = unchanged;		    variable = buff;		    pointer = strchr(variable, '=');		    for (pointer--; pointer[0] == ' '; pointer--);		    pointer[1] = '\0';		    pointer++;		    pointer++;		    pointer = strchr(pointer, '=');		    pointer++;		    int_value = atoi(pointer);		    if (int_value < 0)			int_value = 0;		    if (int_value > 127)			int_value = 127;		    char_value = (char) int_value;		    for (THUMBSDOWN_table_row = THUMBSDOWN_handler_table; THUMBSDOWN_table_row->anongame_infos_THUMBSDOWN_string != NULL; THUMBSDOWN_table_row++)			if (strcmp(THUMBSDOWN_table_row->anongame_infos_THUMBSDOWN_string, variable) == 0)			{			    if (THUMBSDOWN_table_row->member != -1)				anongame_infos_THUMBSDOWN_set_THUMBSDOWN(anongame_infos->anongame_infos_THUMBSDOWN, 				                                         THUMBSDOWN_table_row->member,char_value);			}		    break;		}	    case parse_ICON_REQ_WAR3:		{		    parse_state = unchanged;		    variable = buff;		    pointer = strchr(variable, '=');		    for (pointer--; pointer[0] == ' '; pointer--);		    pointer[1] = '\0';		    pointer++;		    pointer++;		    pointer = strchr(pointer, '=');		    pointer++;		    int_value = atoi(pointer);		    if (int_value < 0)			int_value = 0;		    for (ICON_REQ_WAR3_table_row = ICON_REQ_WAR3_handler_table; ICON_REQ_WAR3_table_row->anongame_infos_ICON_REQ_WAR3_string != NULL; ICON_REQ_WAR3_table_row++)			if (strcmp(ICON_REQ_WAR3_table_row->anongame_infos_ICON_REQ_WAR3_string, variable) == 0)			{			    if (ICON_REQ_WAR3_table_row->member != -1)			        anongame_infos_ICON_REQ_set_REQ(anongame_infos,ICON_REQ_WAR3_table_row->member,int_value);			}		    break;		}	    case parse_ICON_REQ_W3XP:		{		    parse_state = unchanged;		    variable = buff;		    pointer = strchr(variable, '=');		    for (pointer--; pointer[0] == ' '; pointer--);		    pointer[1] = '\0';		    pointer++;		    pointer++;		    pointer = strchr(pointer, '=');		    pointer++;		    int_value = atoi(pointer);		    if (int_value < 0)			int_value = 0;		    for (ICON_REQ_W3XP_table_row = ICON_REQ_W3XP_handler_table; ICON_REQ_W3XP_table_row->anongame_infos_ICON_REQ_W3XP_string != NULL; ICON_REQ_W3XP_table_row++)			if (strcmp(ICON_REQ_W3XP_table_row->anongame_infos_ICON_REQ_W3XP_string, variable) == 0)			{			    if (ICON_REQ_W3XP_table_row->member != -1)			        anongame_infos_ICON_REQ_set_REQ(anongame_infos,ICON_REQ_W3XP_table_row->member,int_value);			}		    break;		}	    case parse_ICON_REQ_TOURNEY:		{		    parse_state = unchanged;		    variable = buff;		    pointer = strchr(variable, '=');		    for (pointer--; pointer[0] == ' '; pointer--);		    pointer[1] = '\0';		    pointer++;		    pointer++;		    pointer = strchr(pointer, '=');		    pointer++;		    int_value = atoi(pointer);		    if (int_value < 0)			int_value = 0;		    for (ICON_REQ_TOURNEY_table_row = ICON_REQ_TOURNEY_handler_table; ICON_REQ_TOURNEY_table_row->anongame_infos_ICON_REQ_TOURNEY_string != NULL; ICON_REQ_TOURNEY_table_row++)			if (strcmp(ICON_REQ_TOURNEY_table_row->anongame_infos_ICON_REQ_TOURNEY_string, variable) == 0)			{			    if (ICON_REQ_TOURNEY_table_row->member != -1)			        anongame_infos_ICON_REQ_set_REQ(anongame_infos,ICON_REQ_TOURNEY_table_row->member,int_value);			}		    break;		}	    }    }    if (anongame_infos_DESC)    {	if (langID[0] != '\0')	{	    list_append_data(anongame_infos->anongame_infos_DESC_list, anongame_infos_DESC);	} else	{	    if (anongame_infos->anongame_infos_DESC == NULL)		anongame_infos->anongame_infos_DESC = anongame_infos_DESC;	    else	    {		eventlog(eventlog_level_error, __FUNCTION__, "found another default_DESC block, deleting previous");		anongame_infos_DESC_destroy(anongame_infos->anongame_infos_DESC);		anongame_infos->anongame_infos_DESC = anongame_infos_DESC;	    }	}    }    file_get_line(NULL); // clear file_get_line buffer

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -