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

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

?? cmd.c

?? ADS環境下
?? C
字號:
/*
 *   cmd, kernel module, console shell, 
 *   similar to Cisco command shell, by risonhan. 
 *   email: risonhan@sina.com
 */

#include "cmd.h"
#include "iofn.h"

static int  scan(struct cmd *cmd_ptr,char *name);
static int  scan_0(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;
}


/*
 *   simple scan,only compare entirely name
 */
static int scan_0(struct cmd *cmd_ptr,char *name)
{
    int i;

    for(i=0;;i++)
    {
       if(cmd_ptr->type==0)
           return -1;
       if(!strcmp(cmd_ptr->name, name))
           return i;
       cmd_ptr++;
    }
}

/*
 *   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一区二区三区免费野_久草精品视频
精品三级av在线| 日韩欧美国产高清| 91影院在线免费观看| 国产一区二区按摩在线观看| 秋霞av亚洲一区二区三| 午夜伦欧美伦电影理论片| 亚洲成年人网站在线观看| 亚洲成人精品影院| 免费久久精品视频| 国产原创一区二区| 成人做爰69片免费看网站| 成人在线一区二区三区| 99久久精品国产毛片| 成人国产亚洲欧美成人综合网| 国产·精品毛片| 一本一本久久a久久精品综合麻豆| 成人av第一页| 日本韩国欧美一区| 69av一区二区三区| 久久影院电视剧免费观看| 久久精品欧美一区二区三区不卡| 国产亚洲欧美一级| 亚洲九九爱视频| 麻豆国产欧美一区二区三区| 风间由美一区二区三区在线观看| 99精品视频在线观看免费| 日本高清成人免费播放| 欧美一级二级三级乱码| 国产亚洲精品福利| 亚洲成人中文在线| 国产激情91久久精品导航| 色久综合一二码| 精品国产露脸精彩对白| 尤物在线观看一区| 久久av老司机精品网站导航| 99在线精品免费| 91精品蜜臀在线一区尤物| 国产精品电影一区二区| 乱中年女人伦av一区二区| 99r国产精品| 久久一二三国产| 亚洲一区二区在线免费看| 韩国欧美一区二区| 欧美日韩午夜精品| 成人免费在线观看入口| 伦理电影国产精品| 欧美丝袜丝交足nylons图片| 欧美激情一区二区三区全黄| 免费成人你懂的| 色婷婷激情一区二区三区| 欧美精品一区二区三区高清aⅴ| 亚洲最色的网站| 粉嫩欧美一区二区三区高清影视| 欧美一区午夜视频在线观看| **欧美大码日韩| 国产精品亚洲午夜一区二区三区| 欧美日韩免费视频| 一区二区三区在线视频观看58| 国v精品久久久网| 欧美tickling网站挠脚心| 亚洲va欧美va国产va天堂影院| 99九九99九九九视频精品| 国产精品嫩草影院com| 精品一区二区日韩| 精品国产91九色蝌蚪| 青青草原综合久久大伊人精品优势| 欧美在线观看视频一区二区| 中文字幕一区视频| 91香蕉视频在线| 亚洲同性gay激情无套| eeuss鲁片一区二区三区| 欧美国产日韩a欧美在线观看| 国产精品正在播放| 国产亚洲精品久| 不卡的av电影| 亚洲乱码精品一二三四区日韩在线| 99国产一区二区三精品乱码| 国产精品二三区| 91免费小视频| 亚洲午夜影视影院在线观看| 色哟哟在线观看一区二区三区| 中文字幕中文在线不卡住| caoporn国产一区二区| 一区二区三区加勒比av| 精品视频在线看| 免费观看成人av| 日本一区二区三区四区| 成人av资源在线| 亚洲人成人一区二区在线观看| 日本道精品一区二区三区| 亚洲国产精品一区二区www在线| 91精品啪在线观看国产60岁| 国产一区二区导航在线播放| 国产精品理论在线观看| 91高清在线观看| 久草中文综合在线| 国产精品久久久久四虎| 欧美日韩一二三| 国产一区91精品张津瑜| 国产精品国产三级国产aⅴ无密码| 91美女视频网站| 日本午夜一区二区| 国产精品久久久久7777按摩| 欧美理论片在线| 国产成人三级在线观看| 一区二区三区欧美日| 日韩精品资源二区在线| 成人av电影在线播放| 免费成人在线观看视频| 亚洲欧美偷拍三级| 日韩欧美的一区二区| 色欧美日韩亚洲| 国产麻豆91精品| 性做久久久久久免费观看欧美| 久久先锋影音av| 91精品在线观看入口| 91色|porny| 国产福利91精品| 久久激情五月婷婷| 亚洲一区二区三区在线| xf在线a精品一区二区视频网站| 色婷婷综合久久久久中文一区二区 | 亚洲日本中文字幕区| 欧美电影影音先锋| 91视频xxxx| 成人毛片在线观看| 国内外成人在线视频| 午夜电影网一区| 亚洲精品久久久久久国产精华液| 久久亚洲一区二区三区明星换脸| 欧美性xxxxxx少妇| 91在线精品秘密一区二区| 精品伊人久久久久7777人| 亚洲成a人v欧美综合天堂 | 国产成都精品91一区二区三| 亚洲成人你懂的| 亚洲精品一卡二卡| 中文字幕色av一区二区三区| 欧美v国产在线一区二区三区| 欧美日韩电影一区| 在线视频一区二区三| 99re在线视频这里只有精品| 国产乱码一区二区三区| 久久99久久久久久久久久久| 奇米精品一区二区三区在线观看一| 一区二区在线观看免费| 国产精品国产三级国产普通话蜜臀 | 欧美mv日韩mv| 欧美一级高清片| 欧美r级电影在线观看| 日韩免费视频线观看| 欧美成人在线直播| 精品国产青草久久久久福利| 日韩网站在线看片你懂的| 日韩欧美卡一卡二| 亚洲精品一区二区三区蜜桃下载 | 99久久免费精品高清特色大片| 久久99九九99精品| 国产一区视频网站| 国产91富婆露脸刺激对白| k8久久久一区二区三区| av在线不卡观看免费观看| 91丨porny丨国产入口| 色94色欧美sute亚洲线路一久| 色94色欧美sute亚洲线路一ni | 精品国产乱码久久久久久图片| 欧美一区二区在线免费播放| 91精选在线观看| 精品久久一二三区| 中文字幕va一区二区三区| 日韩理论片在线| 午夜精品久久久久久久99水蜜桃| 日本成人在线网站| 国产精品一区在线| 欧美一级高清大全免费观看| 日韩精品一区二区三区四区| 久久―日本道色综合久久| 国产一区二区三区香蕉| www.亚洲免费av| 久久久久久亚洲综合| 欧美激情自拍偷拍| 久久精品国产精品亚洲精品| 国内成人精品2018免费看| 国产一区二区三区综合| 91在线视频观看| 欧美一级午夜免费电影| 中文字幕制服丝袜一区二区三区 | 色婷婷av久久久久久久| 欧洲在线/亚洲| 欧美v亚洲v综合ⅴ国产v| 91精品国产综合久久精品图片| 精品人在线二区三区| 国产欧美视频在线观看| 亚洲mv大片欧洲mv大片精品| 亚洲欧美福利一区二区| 日韩精品久久理论片| 成人av资源站| 不卡影院免费观看| 日韩欧美成人午夜| 一二三四区精品视频|