亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cmd.c

?? ARM7TDMI軟件模擬器
?? C
字號:
/*
 *   cmd, kernel module, console shell, 
 *   similar to Cisco command shell, by risonhan. 
 *   email: risonhan@sina.com
 */

/*
**ucosII for simuCPU,you can only free use it for personal study purpose!
**www.MShowTec.com for more information.
**lmjx,Email:limiao@yeah.com,All Right Reserved.
**/

#include <stdio.h>
#include <string.h>
#include "cmd.h"
#include "iofn.h"

static int  scan(struct cmd *cmd_ptr,char *name);

static int value_argc;
static char *value_argv[32]; /* how many args is best? */

static struct cmd *cmd_root; /* note 'static' here */

static char outbuf[128];


/*
 *   process the incoming command,main routine of cmd
 */
int cmd_process(int argc,char *argv[])
{
    int i,position,scan_state,offset;
    struct cmd *cur_cur,*cur_top;
    char tmp_buf[128];

    /* 
     *  meaning of the scan_state:
     *  0 - uncompleted command
     *  1 - unknown command
     *  2 - token OK
     *  3 - value OK 
     *  4 - help 
     *  5 - too many arguments
     */

    value_argc=0;
    scan_state=0;
    
    cur_cur=cur_top=cmd_root;
    for(i=0;i<argc;i++)
    {
       switch (cur_cur->type)
       {
        case TOKEN: 
        case TOKEN_LEAF:
             offset=scan(cur_cur,argv[i]);
             if(offset>=0)
             {
               if((cur_cur+offset)->type==TOKEN)
               {
               	 /* find a available one in this level */
                 if(i<argc-1)
                 { 
                   /* go ahead */
                   cur_top=(cur_cur+offset)->next;
                   cur_cur=cur_top;
                   
                 }
                 else 
                 {
                   /* i=argc-1 here,the last arg */
                   /* args end,but not reach leaf */
                   scan_state=0;
                 }
               }  
               else /* type==TOKEN_LEAF */ 
               {
               	  if(i<argc-1)
                  {
                    /* reach leaf,but args not end */
                    scan_state=5;
                  }
                  else
                  {
                  	/* find a available one,OK! */
                    scan_state=2;
                    cur_cur+=offset;
                  }
               }     	
             }
             else /* offset<0 */
             {
                /* if it's a help request */ 
                if(!strcmp(argv[i], "?"))
                {
                  scan_state=4;
                } 
                else
                { 
                  scan_state=1;
                } 
             }                  
             break;
        case VALUE:
        case VALUE_LEAF:
             if(!strcmp(argv[i], "?"))
             {
                 scan_state=4;
             }
             else
             {
               /* save arg pointer */
               value_argv[value_argc]=argv[i];
               value_argc++;	
               if(cur_cur->type==VALUE)
               {
               	 if(i<argc-1)
                 {
                    /* go ahead */
                    cur_top=cur_cur->next;
                    cur_cur=cur_top;
                 }
                 else
                 {
                    /* value end, but not reach leaf */
                    scan_state=0;
                 }
               }
               else /* type==VALUE_LEAF */ 
               {
               	 if(i<argc-1)
                 {
                   /* reach leaf,but args not end */
                   scan_state=5;
                 }
                 else
                 {
                   /* value OK! but we don't check whether it's valid */ 	
                   scan_state=3;
                 }
               } 
             }
             break;
       }/* switch */
       
       if((scan_state==1)||(scan_state==4)||(scan_state==5))
       {
         /* needn't go on,abort */
         break;
       }
    }/* for */
    
    switch(scan_state)
    {
     case 0: /* uncompleted command */
          sprintf(tmp_buf,"%s","");
          for (i=0;i<argc;i++)
          {
             strcat(tmp_buf,argv[i]);
             strcat(tmp_buf," ");
          } 
          sprintf(outbuf,"uncompleted command, type: %s ? \r\n",tmp_buf);
          output(outbuf);
          break; 
     case 1: /* unknown command */
          sprintf(tmp_buf,"%s","");
          /* save position from where it's unknown */
          position=i;
          for (i=0;i<position;i++)
          {
             strcat(tmp_buf,argv[i]);
             strcat(tmp_buf," ");
          } 
          sprintf(outbuf,"unknown command, type: %s ? \r\n",tmp_buf);
          output(outbuf);
          break;
     case 2: /* token OK */
          if(cur_cur->func)
          { 
             (*cur_cur->func)(argc,argv);
          }
          break;
     case 3: /* value OK */
          if(cur_cur->func)
          {
             (*cur_cur->func)(value_argc,value_argv);
          }
          break; 
     case 4: /* help */
          cur_cur=cur_top;
          while(cur_cur->type)
          {
             sprintf(outbuf,"%-15s %s\r\n",cur_cur->name,cur_cur->tip);
             output(outbuf);
             cur_cur++;
          }
          sprintf(outbuf,"%-15s %s\r\n","?","help");
          output(outbuf);
          break;
     case 5: /* too many arguments*/
          output("too many arguments\r\n");
          break;
    }

    return 0;
}


/*
 *   nice scan,try to find the best match one 
 */
static int scan(struct cmd *cmd_ptr,char *name)
{
	int best,best_match_chars,i,j,name_len;
	
	best=-1;
	best_match_chars=0;
	name_len=strlen(name);
	for(i=0;cmd_ptr->type;i++)
	{
		if(name_len<=(int)strlen(cmd_ptr->name))
		{
		  for(j=0;j<name_len;j++)
		  {
		  	if((name[j]!=(cmd_ptr->name)[j]))
		  	{
		  	   break;	
		  	}
		  }
		  if(j==name_len)
		  {
		  	if(j>best_match_chars)
		  	{
		  		best_match_chars=j;
		  		best=i;
		  	}
		  }
		}
		cmd_ptr++;  
	}/* for */
	
    return best;
}

void cmd_root_set(struct cmd *root)
{
   cmd_root=root;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91成人网在线| 国产一区二区三区免费观看| 国产精品久久久久久久久久久免费看 | 97se亚洲国产综合自在线不卡| 国内精品国产成人国产三级粉色 | 日韩一区二区三区视频在线| 91在线视频免费91| 99久久99久久精品国产片果冻| 精品国产免费一区二区三区四区 | 久久久久国色av免费看影院| 亚洲aaa精品| 91同城在线观看| 久久久久久毛片| 久久精品国产99久久6| 欧美男男青年gay1069videost | 91在线观看污| 本田岬高潮一区二区三区| 成人精品视频一区二区三区| 色综合一个色综合| 欧美日韩视频第一区| 7799精品视频| 国产午夜精品一区二区| 亚洲精品国产一区二区精华液| 亚洲图片一区二区| 久久精品国产在热久久| 成人一级片在线观看| 91久久香蕉国产日韩欧美9色| 成人免费视频视频在线观看免费| 高清成人免费视频| 欧美无砖砖区免费| 欧美精品一区二区三区高清aⅴ| 国产精品久久久久影视| 午夜av电影一区| 成人激情小说网站| 欧美一级xxx| 亚洲三级免费电影| 极品尤物av久久免费看| 91亚洲精品久久久蜜桃网站| 欧美一级二级三级蜜桃| 亚洲色欲色欲www| 久久 天天综合| 色域天天综合网| xfplay精品久久| 亚洲大片免费看| a在线欧美一区| 精品久久久影院| 亚洲高清免费在线| av电影天堂一区二区在线观看| 欧美成人午夜电影| 亚洲精品国产品国语在线app| 韩国视频一区二区| 3751色影院一区二区三区| 国产精品成人免费在线| 美女看a上一区| 欧美影院一区二区| 亚洲视频一区二区在线| 九九国产精品视频| 91精品国产aⅴ一区二区| 亚洲精品亚洲人成人网在线播放| 国产精品一区二区在线看| 欧美日韩免费视频| 亚洲精品乱码久久久久久黑人 | 成人免费在线视频| 国产精品888| 久久久精品蜜桃| 精一区二区三区| 欧美成人bangbros| 久久国内精品自在自线400部| 欧美日韩视频在线观看一区二区三区 | 中文字幕一区二区三区四区| 国产真实乱子伦精品视频| 日韩欧美一区二区在线视频| 亚洲午夜一区二区| 欧美少妇一区二区| 亚洲午夜激情网页| 欧美二区乱c少妇| 日本伊人色综合网| 欧美一区二区三区视频免费| 麻豆成人av在线| 日韩欧美一区电影| 国产一区二区不卡| 国产精品欧美经典| 91原创在线视频| 亚洲午夜羞羞片| 91精品国产91久久久久久一区二区 | 日韩欧美在线网站| 韩国av一区二区三区四区| 久久久亚洲综合| 成人激情小说网站| 一二三区精品视频| 欧美大片在线观看一区二区| 国产高清不卡二三区| 最新国产精品久久精品| 欧美日韩在线三级| 久久av老司机精品网站导航| 国产午夜精品在线观看| 不卡的电影网站| 亚洲国产欧美日韩另类综合 | 一本大道久久a久久综合婷婷| 亚洲最大成人网4388xx| 欧美精品丝袜久久久中文字幕| 麻豆久久久久久久| 久久精品无码一区二区三区| 在线欧美小视频| 韩国一区二区三区| 亚洲黄一区二区三区| 日韩视频中午一区| 99视频超级精品| 视频一区中文字幕国产| 国产视频亚洲色图| 欧美三级日韩三级国产三级| 韩国一区二区三区| 亚洲自拍欧美精品| 国产三区在线成人av| 91久久香蕉国产日韩欧美9色| 久久国产乱子精品免费女| 18成人在线视频| 日韩限制级电影在线观看| 波多野结衣中文字幕一区二区三区 | 91免费在线看| 韩国一区二区三区| 日韩中文字幕区一区有砖一区| 中文字幕第一区二区| 欧美丰满美乳xxx高潮www| 国产精品夜夜嗨| 日韩国产精品91| 亚洲乱码国产乱码精品精小说| 国产精品全国免费观看高清 | 91猫先生在线| 国产不卡一区视频| 美女精品自拍一二三四| 亚洲一级二级三级| 亚洲欧洲性图库| 国产女人aaa级久久久级 | 一区二区三区精品久久久| 国产农村妇女毛片精品久久麻豆 | 亚洲电影一级黄| 国产精品卡一卡二| www激情久久| 久久尤物电影视频在线观看| 91精品国产一区二区人妖| 欧洲av在线精品| 在线一区二区视频| 色中色一区二区| 色激情天天射综合网| 色狠狠综合天天综合综合| 色综合天天综合| 色视频欧美一区二区三区| 91性感美女视频| 日本精品一区二区三区四区的功能| 成人国产一区二区三区精品| 岛国av在线一区| caoporn国产精品| 色综合久久久久久久久| 色综合一区二区| 欧美性大战久久久久久久蜜臀 | 国产麻豆视频精品| 国产精品白丝jk黑袜喷水| 国产乱子伦一区二区三区国色天香 | 欧洲一区在线电影| 欧美日韩国产小视频| 91麻豆精品国产自产在线观看一区 | 欧美三级电影在线看| 欧美绝品在线观看成人午夜影视| 欧美日韩国产影片| 久久亚洲私人国产精品va媚药| 精品国产电影一区二区| 国产日本欧美一区二区| 亚洲欧美欧美一区二区三区| 一区二区三区在线视频免费| 亚洲成av人影院在线观看网| 美女视频一区二区| 国产成人亚洲精品狼色在线| 91麻豆国产精品久久| 欧美日韩国产成人在线91| 精品国产一二三区| ㊣最新国产の精品bt伙计久久| 午夜精品福利一区二区三区av| 男男gaygay亚洲| av高清不卡在线| 欧美一区二区精美| 久久精品视频在线看| 亚洲国产日韩精品| 国产曰批免费观看久久久| 日本精品视频一区二区| 日韩欧美的一区二区| 亚洲品质自拍视频| 免费成人你懂的| 97久久人人超碰| 精品国产亚洲一区二区三区在线观看| 亚洲国产成人自拍| 性做久久久久久久久| 成人一级片在线观看| 欧美日本一道本| 国产精品国产a| 国产一区二区在线免费观看| 在线观看日韩国产| 欧美激情一区二区三区全黄| 日韩中文字幕不卡| 色综合网色综合|