?? cli_main.c
字號:
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 + -