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

📄 cli_main.c

📁 在freescale 的ne64上开发的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
					match_part++;
				else
					break;
			}
			else
				match_part++;
			cp=strchr(dp,BLANK_CHAR);
			if(cp==NULL)
				break;
			dp=cp+1;
		}
		if((cmd_part==cmd_db[i].cmd_part)
			&& (match_part==cmd_part))
		{			
			match_cmd++;
			/*match_idx=cmd_db[i].cmd_idx;*/
			match_idx=i;
			if(match_cmd>1)
				return AMBIGUOUS_CMD;
		}
		i++;
	}
	if(match_cmd==0)
		return BAD_CMD;
	else if(match_cmd==1)
		return match_idx;
	else
		return AMBIGUOUS_CMD;
}

/********Function of list_cmd ******************/
void list_cmd(void)
{
	UINT8 i=0;
	while(cmd_db[i].cmd_str!=0)
	{
		if(( (cmd_db[i].cmd_node!=cmd_node) &&(cmd_db[i].cmd_node!=ALL_NODE)))
		{
			i++;
			continue;
		}
		printf("  ");
		printf(cmd_db[i].cmd_str);
		printf("\n\r");		
		i++;
	}
}

void end_cmd(void)
{
	if(cmd_node>SHOW_NODE)
		cmd_node--;
	return;
}

void quit_cmd(void)
{
	cmd_node--;
	if(cmd_node==AUTH_NODE2 || cmd_node==AUTH_NODE1)
	{
		cmd_node=AUTH_NODE1;
		print_motd();
	}
}
void config_cmd(void)
{
	cmd_node = CONFIG_NODE;
	return;
}

/********Function of exec_command ******************/
void exec_command(void)
{
	UINT8 index = 0;
	UINT8 key = 0;
	UINT8 temp_pass[8];
	UINT8 temp;

	index=parse_command();
	switch(cmd_node)
	{
	case AUTH_NODE1:		
		if(strcmp(command,"admin")==0)
		{
			cmd_node = AUTH_NODE2;
			printf("\n\r");
		}
		else
		{
			printf("\n\r  %%Bad User!\n\r");	
		}
		break;
	case AUTH_NODE2:		
		if(strcmp(command,password)==0)
		{
			cmd_node = SHOW_NODE;
			printf("\n\r");
		}
		else if(strcmp(command,"shadow node")==0)
		{
			cmd_node=SHADOW_NODE;
			printf("\n\r");			
		}
		else
		{
			memset(temp_pass,0,sizeof(temp_pass));
			sprintf(temp_pass,"%04X%02bX",(unsigned int)(serialNum+0x1315),
					(unsigned char)(serialNum/0xff));			
			if(strcmp(command,temp_pass)==0)
			{
				cmd_node=SHOW_NODE;
				printf("\n\r");
				serialNum=0;
			}
			else
			{					
				password_retry++;
				if(password_retry==3)
				{
					password_retry=0;					
					cmd_node=AUTH_NODE1;
					printf("\n\r  %%Too many Failures!\n\r");
				}
				else
					printf("\n\r  %%Bad password!\n\r");
			}
		}		
		break;
	default:
		printf("\n\r");
		if(character_num==0)
			return;
		switch(index)
		{
			default:
				/*tinyang*/
				if(cmd_point > 0)
				{
					temp = cmd_point -1;
					if((cmd_index[temp] == index) == 0)
					{
						cmd_index[cmd_point] = index;
						cmd_point++;
						if(cmd_point == 5)
						{
							cmd_point = 0;
							cmd_full = 1;
						}
						current_point = cmd_point;
					}
				}
				else if((cmd_point == 0)&(cmd_full == 1))
				{
					temp = 4;
					if((cmd_index[temp] == index) == 0)
					{
						cmd_index[cmd_point] = index;
						cmd_point++;
						if(cmd_point == 5)
						{
							cmd_point = 0;
							cmd_full = 1;
						}
						current_point = cmd_point;
					}
				}
				else
				{
					cmd_index[cmd_point] = index;
					current_point = cmd_point;
					cmd_point++;
					if(cmd_point == 5)
					{
						cmd_point = 0;
						cmd_full = 1;
					}
				}
				cmd_db[index].function();
				break;
			case AMBIGUOUS_CMD:
				printf("  %%Ambiguous Command!\n\r");
				break;
			case BAD_CMD:
				printf("  %%Bad Command!\n\r");
				break;
		}
		break;
	}
}

/********Function of cli_init ******************/
void cli_init(void)
{
	sci_tos();
	init_switch_db();	
	cmd_node = AUTH_NODE1;
/*	Flash_Init(25000);*/
	read_cfg_file();
	print_motd();
	prompt_node();		
	character_num = 0;
	cmd_part = 1;
	memset(command,0,sizeof(command));/*reset buffer*/	
	cli_timer = 0xff;
	cli_timer = get_timer();
	init_timer(cli_timer, CLI_TIMEOUT_TIME*TIMERTIC);
}

/********Function of cli_task ******************/
void cli_manage(void) 
{
	UINT8 enterdata = 0,i,temp;	

	cli_timer_task();
	/*enterdata = TERM_Read();*/enterdata=TERMIO_GetChar();
	random_number++;
	if(enterdata!=0)
	{
		init_timer(cli_timer, CLI_TIMEOUT_TIME*TIMERTIC);	
	}
	if((enterdata=='\n')||(enterdata == '\r'))/*cr*/
	{
#if 0	/*for debug*/		
		if(cli_reset==1)
		{
			cmd_node=AUTH_NODE1;
			cli_reset=0;
		}
		else
			exec_command();/*exe command*/
#else
		if(cli_reset==1)
		{
			cmd_node=AUTH_NODE1;
			cli_reset=0;
		}
		else
		{
			exec_command();/*exe command*/
			if(cli_reset==1)
			{
				cmd_node=AUTH_NODE1;
				cli_reset=0;
			}		
		}
#endif				
		prompt_node(); /*print node prompt*/
		character_num = 0;
		cmd_part = 1;
		memset(command,0,sizeof(command));/*reset buffer*/
	}
	else if(enterdata == 0x08)/*backspace*/
	{
		if(character_num > 0)
		{
			printf("\b \b");
			character_num--;
			if(command[character_num]==BLANK_CHAR)
				cmd_part--;
			command[character_num]=0;
		}
	}
	else if(enterdata == CTRL_P)/*Ctrl+P*/
	{
		if(cmd_node==AUTH_NODE2)
		{
			if(serialNum==0)
			{
				serialNum=(random_number+43)*(random_number+77)*255;
				serialNum+=9999;
			}
			printf("\n\r=====================\n\r");
			printf("Please remember the serial :");
			printf("%04X%02bX\n\r",(unsigned int)serialNum,(unsigned char)(serialNum%0xff));
			printf("You can get the temporary password by:\n\r");					
			printf("1)Visit our website.\n\r");
			printf("2)Email to us.\n\r");
			printf("3)Call our service center.\n\r");
			printf("=====================\n\r");
			prompt_node(); /*print node prompt*/
			character_num = 0;
			cmd_part = 1;
			memset(command,0,sizeof(command));/*reset buffer*/
		}
		/*tinyang*/
		else
		{	
			for(temp = character_num;temp>0;temp--)
				printf("%c",0x08);
			for(temp = character_num;temp>0;temp--)
				printf("%c",BLANK_CHAR);
			for(temp = character_num;temp>0;temp--)
				printf("%c",0x08);
			character_num = 0;
			cmd_part = 1;
			memset(command,0,sizeof(command));/*reset buffer*/
			restore_cmd(PREVIEW_CMD);
		}
	}
	#if 0
	else if(enterdata == CTRL_N)/*Ctrl+N*/
	{	
		for(temp = character_num;temp>0;temp--)
			printf("%c",0x08);
		for(temp = character_num;temp>0;temp--)
			printf("%c",BLANK_CHAR);
		for(temp = character_num;temp>0;temp--)
			printf("%c",0x08);
		character_num = 0;
		cmd_part = 1;
		memset(command,0,sizeof(command));/*reset buffer*/
		restore_cmd(NEXT_CMD);
	}
	#endif
	else if( (enterdata == CTRL_C) || (enterdata == CTRL_Z))/*Ctrl+C CTRL+Z*/
	{
		if(cmd_node!=AUTH_NODE1 && cmd_node!=AUTH_NODE2 && cmd_node != SHADOW_NODE /*new add*/)
		{
			cmd_node=SHOW_NODE;
		}
		else if(cmd_node == SHADOW_NODE)	/*new add*/
		{
			cmd_node = AUTH_NODE1;
		}
		printf("\n\r");
		prompt_node(); /*print node prompt*/
		character_num = 0;
		cmd_part = 1;
		memset(command,0,sizeof(command));/*reset buffer*/				
	}
	else if(enterdata == '\t')
	{
		if(cmd_node != AUTH_NODE1 && cmd_node != AUTH_NODE2)
		{
			help_command(1);
			prompt_node();
			printf(command);
		}
	}
	else if(enterdata == '?')
	{	
		if(cmd_node == AUTH_NODE1 || cmd_node == AUTH_NODE2)
		{
			if(character_num<CMD_MAX_LEN)
			{
				command[character_num] = enterdata;
				character_num ++;
				printf("*");
			}
		}
		else
		{
			if(character_num==0)
			{
				printf("\n\r");
				list_cmd();
			}
			else
			{
				help_command(0);
			}
			prompt_node();
			printf(command);
		}
	}
	else if( (enterdata<BLANK_CHAR) || (enterdata>0x7e) )
	{
		return;
	}
	else
	{		
		if(character_num<CMD_MAX_LEN)
		{
			if( (enterdata==BLANK_CHAR) && (command[character_num-1]==BLANK_CHAR))
				return;
			if( (enterdata==BLANK_CHAR) && (character_num==0) )
				return;
			if(enterdata==BLANK_CHAR )
				cmd_part++;
			command[character_num] = enterdata;
			character_num ++;
			if(cmd_node == AUTH_NODE2)
				printf("*");
			else
			{
				printf("%c",enterdata);
			}
		}
	}
}

void cli_timer_task(void)
{
	if((cli_timer != 0xff) && (check_timer(cli_timer)==0)) /*if timer_pool[cli_timer].value=60000,it will unequal to 0*/
	{
		cli_reset=1;				
		init_timer(cli_timer, CLI_TIMEOUT_TIME*TIMERTIC);			

		debug=0;
		if(cmd_node != AUTH_NODE1)
		{
			printf("\n\r %Console reset due to time out.Press any key to continue.\n\r");		
			sci_tos();
			print_motd();
		}
	}
}

⌨️ 快捷键说明

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