Example #1
0
/* central command parser */
void cmd_parser(char *buf)
{
    CMD_STR* cmd = (CMD_STR*)buf;

    g_ans->command = cmd->command;
    g_ans->status = CMD_STATUS_OK;
    g_ans->size = 0;
    switch (cmd->command & CMD_GROUP_MASK) {
    case CMD_GROUP_COMM:
        cmd_comm(cmd, g_ans);
        break;
    case CMD_GROUP_TAP:
        cmd_tap(cmd, g_ans);
        break;
    case CMD_GROUP_JTAG:
        cmd_jtag(cmd, g_ans);
        break;
    case CMD_GROUP_AVR32_JTAG1:
    case CMD_GROUP_AVR32_JTAG2:
        cmd_avr32_jtag(cmd, g_ans);
        break;
    case CMD_GROUP_AVR32_BSR:
        cmd_avr32_bsr(cmd, g_ans);
        break;
    case CMD_GROUP_AVR32_EBI:
        cmd_avr32_ebi(cmd, g_ans);
        break;
    case CMD_GROUP_FLASH:
        cmd_flash(cmd, g_ans);
        break;

    default:
        cmd_answer_error(cmd->command, CMD_STATUS_UNKOWN_COMMAND, g_ans);
        break;
    }

    for (uint16_t i=g_ans->size; i<(CMD_ANSWER_BUF_LENGTH-4); i++)
        g_ans->data[i] = 0xAA;

    answer(g_ans->size + 4);
}
Example #2
0
RESULT select_loop(GameContext* pContext, GameEventContext* pEvent, const SelOption options[], int optnum, const char* strAlter, int* out_value)
{
	int n;
	const char* s;
	const char* p;
	char  buffer[1024];
	int   buflen;
	int   v;

	while(1)
	{
		if(strAlter)
			MSG_OUT("%s\n", strAlter);

		for(n = 0; n < optnum; n++)
		{
			buflen = 0;
			buffer[0] = 0;
			buflen += sprintf(buffer + buflen, "(");
			s = options[n].input;
			
			if(*s == '\n' || *s == '\0')
			{
				buflen += sprintf(buffer + buflen, "%d", options[n].value);
				if(*s != 0)
					s++;
			}
			else
			{
				p = strchr_notnull(s, '\n');
				strncpy(buffer + buflen, s, p - s);
				buflen += (p-s);

				if(*p == '\0')
					s = p;
				else
					s = p + 1;
			}

			while(*s != '\0' && *s != '\n' )
			{
				p = strchr_notnull(s, '\n');

				buffer[buflen++] = '/';

				strncpy(buffer + buflen, s, p - s);
				buflen += (p-s);

				if(*p == 0)
					break;

				s = p + 1;
			}
			buflen += sprintf(buffer + buflen, ") %s", options[n].text);
			buffer[buflen] = 0;

			MSG_OUT(" %s\n", buffer);


		}

		if(NULL == get_cmd_line(pContext, pEvent, "[请选择] : ", buffer, sizeof(buffer)))
			return R_E_FAIL;

		strtrim(buffer);
		buflen = strlen(buffer);

		if(R_SUCC == to_int(buffer, &v))
		{
			
			for(n = 0; n < optnum; n++)
			{
				if((options[n].input[0] == '\0' || options[n].input[0] == '\n') && v == options[n].value)
				{
					*out_value = options[n].value;
					return R_SUCC;
				}
			}
		}

		for(n = 0; n < optnum; n++)
		{
			s = options[n].input;

			if(*s == '\n')
				s++;


			while(*s != '\0' && *s != '\n')
			{
				p = strchr_notnull(s, '\n');

				if(buflen == (p-s) && !strncasecmp(s, buffer, buflen))
				{
					*out_value = options[n].value;
					return R_SUCC;
				}

				if(*p == 0)
					break;

				s = p + 1;
			}
		}

		// 没有找到匹配,看看是不是info 指令 ,是的话,执行info 
		 
		cmd_comm(pContext, pEvent, buffer);
	}
	return R_E_FAIL;
}