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

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

?? commands.c

?? ucosII 移植到VC上的源代碼
?? C
字號:
/*	 
 *	commands.c
 *	the genie shell command part for ucosII
 *	under skyeye
 *
 *	Bugs report:	 ganganwen@163.com
 *	Last modified:	 2005-04-25 
 *  changed by: wenjia
 */


#include	"includes.h"



command ShellComms[MAX_COMMAND_NUM];

FS_FILE *myfile;
char mybuffer[0x100];

char CurDir[64]="\\";		//show current dir
char TargetVal[64] = "\\";  
//TargetVal數組第一功能功能:用于組合當前目錄與輸入數據如 
//CurDir = "\mydir"   cat 1.txt 時組合成cat \mydir\1.txt
//第二功能:保留CurDir目錄,因為如果cd參數第一個字符為\時就從&CurDir[0] 
//開始復制,但若輸入目錄出錯則將原來的CurDir目錄還原。

INT8U DirExist(const char *DirName);
void RewindRoot(void);


void CreateTargetVal(const char *arg);

//判斷目錄名是否存在
//1:目錄存在  0:目錄不存在
INT8U DirExist(const char *DirName)
{
    FS_DIR *dirp;
    dirp = FS_OpenDir(DirName);
    if (dirp)
    {
        FS_CloseDir(dirp);
       // _log("Open %s Exist!\n", DirName);
        return 1;
    } else {
       // _log("The %s Dir is not exist!\n", DirName);
        return 0;
    }
} 
//--------------------------------------------
//#define CUR_DRI_MAX_LEN 32
//FS_DIR CurDir[CUR_DRI_MAX_LEN 32];
 // struct FS_DIRENT *direntp;
/*********************************************************************
*
*             _write_file
*
  This routine demonstrates, how to create and write to a file
  using the file system.
*/

static void _write_file(const char *name, const char *txt) {
  int x;
  
  /* create file */
  myfile = FS_FOpen(name,"w");
  if (myfile) {
    /* write to file */
    x = FS_FWrite(txt,1,strlen(txt),myfile);
    /* all data written ? */
    if (x!=(int)strlen(txt)) {
      /* check, why not all data was written */
      x = FS_FError(myfile);
      sprintf(mybuffer,"Not all bytes written because of error %d.\n\n",x);
      _error(mybuffer);
    }
    /* close file */
    FS_FClose(myfile);
	_log("\n\n");
  }
  else {
    sprintf(mybuffer,"Unable to create file %s\n\n",name);
    _error(mybuffer);
  }
}


/*********************************************************************
*
*             _dump_file
*
  This routine demonstrates, how to open and read from a file using 
  the file system.
*/

static void _dump_file(const char *name) {
  int x;

  /* open file */
  myfile = FS_FOpen(name,"r");
  if (myfile) {
    /* read until EOF has been reached */
    do {
      x = FS_FRead(mybuffer,1,sizeof(mybuffer)-1,myfile);
      mybuffer[x]=0;
      if (x) {
        _log(mybuffer);
      }
    } while (x);
    /* check, if there is no more data, because of EOF */
    x = FS_FError(myfile);
    if (x!=FS_ERR_EOF) {
      /* there was a problem during read operation */
      sprintf(mybuffer,"Error %d during read operation.\n",x);
      _error(mybuffer);
    }
    /* close file */
    FS_FClose(myfile);
	_log("\n\n");
  }
  else {
    sprintf(mybuffer,"Unable to open file %s.\n",name);
    _error(mybuffer);
  }
}


/*********************************************************************
*
*             _show_directory
*
  This routine demonstrates, how to read a directory.
*/

#if FS_POSIX_DIR_SUPPORT

static void _show_directory(const char *name) {
  FS_DIR *dirp;
  struct FS_DIRENT *direntp;

  dirp = FS_OpenDir(name);
  if (dirp) {
    do {
      direntp = FS_ReadDir(dirp);
      if (direntp) {
        sprintf(mybuffer,"%s\n",direntp->d_name);
        _log(mybuffer);
      }
    } while (direntp);
    FS_CloseDir(dirp);
	_log("\n");
  }
  else {
    _error("Unable to open directory\n");
  }
}

/*static INT8U _cd_directory(const char *name)
{
    FS_DIR *dirp;
    struct FS_DIRENT *direntp;   
	
}*/
#endif /* FS_POSIX_DIR_SUPPORT */


/*********************************************************************
*
*             _show_free
*
  This routine demonstrates, how to read disk space information.
*/

static void _show_free(const char *device) {
  FS_DISKFREE_T disk_data;
  int x;

  _log("Disk information of ");
  _log(device);
  _log("\n");
  x = FS_IoCtl(device,FS_CMD_GET_DISKFREE,0,(void*) &disk_data);
  if (x==0) {
    sprintf(mybuffer,"total clusters     : %lu\navailable clusters : %lu\nsectors/cluster    : %u\nbytes per sector   : %u\n",
          disk_data.total_clusters, disk_data.avail_clusters, disk_data.sectors_per_cluster, disk_data.bytes_per_sector);
    _log(mybuffer);
  } 
  else {
    _error("Invalid drive specified\n\n");
  }
}

/*********************************************************************
*
*             InitCommands
*
  This routine init shell
*/
void InitCmd(void)
{
    INT8U TmpCnt = MAX_COMMAND_NUM;
    while (TmpCnt--)
    {
        ShellComms[TmpCnt].CommandFunc = NULL;
        ShellComms[TmpCnt].name = NULL;
        ShellComms[TmpCnt].num  = 0;
    }
}

INT8U InitCommands()
{
    InitCmd();
	ShellComms[0].num = 0;
	ShellComms[0].name = "ls";
	ShellComms[0].CommandFunc = lsFunc;

	ShellComms[1].num = 1;
	ShellComms[1].name = "rm";
	ShellComms[1].CommandFunc = rmFunc;

	ShellComms[2].num = 2;
	ShellComms[2].name = "write";
	ShellComms[2].CommandFunc = writeFunc;

	ShellComms[3].num = 3;
	ShellComms[3].name = "cat";
	ShellComms[3].CommandFunc = catFunc;

	ShellComms[4].num = 4;
	ShellComms[4].name = "format";
	ShellComms[4].CommandFunc = formatFunc;

	ShellComms[5].num = 5;
	ShellComms[5].name = "mkdir";
	ShellComms[5].CommandFunc = mkdirFunc;

	ShellComms[6].num = 6;
	ShellComms[6].name = "rmdir";
	ShellComms[6].CommandFunc = rmdirFunc;

	ShellComms[7].num = 7;
	ShellComms[7].name = "free";
	ShellComms[7].CommandFunc = freeFunc;

	ShellComms[8].num = 8;
	ShellComms[8].name = "help";
	ShellComms[8].CommandFunc = helpFunc;

	ShellComms[9].num = 9;
	ShellComms[9].name = "cd";
	ShellComms[9].CommandFunc = cdFunc;

	ShellComms[10].num = 10;
	ShellComms[10].name = "pwd";
	ShellComms[10].CommandFunc = pwdFunc;


    ShellComms[11].num = 11;
	ShellComms[11].name = "exit";
	ShellComms[11].CommandFunc = ExitFunc;
        
    ShellComms[12].num = 12;
	ShellComms[12].name = "show";
	ShellComms[12].CommandFunc = ShowFunc;

	return 0;
}

INT8U ShowFunc(INT8U argc,char **argv)
{

    _log("\n=========  TargetVal =  ");
	_log(TargetVal);
	_log("========\n");
    return 0;
}

INT8U ExitFunc(INT8U argc,char **argv)
{
    exit(0);    
    return 0;
}


INT8U pwdFunc(INT8U argc,char **argv)
{
	if (argc != 0)
	{
		_error("PWD is single arg\n");
		return 1;
	}
	_log(CurDir);
	_log("\n");
	return 0;
}
//功能:設置成根目錄
void RewindRoot(void)
{
    CurDir[0] = '\\';
    CurDir[1] = '\0';
}


//更改當前目錄命令
INT8U cdFunc(INT8U argc,char **argv)
{
	INT8U DirCurPos = 0;
    INT8U CmdLen    = 0;
	INT8U TmpVal    = 0;
    INT8U IsRoot    = 0;
    INT8U IsBackup  = 0;
    INT8U BackupLen = 0;
	DirCurPos = strlen(CurDir);   //取得當前目錄的字符長度
    if (argc != 1)
	{
		_error("please input command as:cd directoryname ");
        _error("\n cd \\ change to root\n cd .. \n cd \\MyDir\\Dir1\n");
		_error("\n\n");
		return 1;
	}
	if (strcmp(argv[0], "..") == 0)  //回到上一級
	{
		if (1 == DirCurPos)         //設定長度為1的為根目錄
		{
#if EN_DEBUG == 1
			_error("This is root dir\n");
#endif
			return 1;
		} else {
			TmpVal = DirCurPos;   //取得當前目錄的長度并從最后開始查找\
		   //從最后開始查找將該級目錄清除 
           //例:\my\dir1  從1開始找到r最后找到\dir的\清除
            while (TmpVal--) 
		   {
			   if (CurDir[TmpVal] == '\\')   //是否找到上一級目錄
			   {
				   if (TmpVal == 0)         //根目錄
				   {
					   RewindRoot();
				   } else {
				      CurDir[TmpVal] = '\0';   //將最后的\換成結束符
				   }
#if EN_DEBUG  == 1
                   _log("\n CurDir Len = %d\n", strlen(CurDir));
#endif
				   break;    //退出循環
               } else {
                   CurDir[TmpVal] = '\0';  //清除字符
               }
		   }
		}
    } else	if (strcmp(argv[0], "\\") == 0)	{   //
		RewindRoot();   //回到根目錄
	} else {
	    if (strcmp(CurDir, "\\") == 0)   //比較方法用于比較是否是當前目錄
		{
            IsRoot = 1;
            if ('\\' == argv[0][0])   //如果當輸入參數是帶\開始的,如cd \dir\dir1
            {
                DirCurPos = 0;   
            }
#if EN_DEBUG == 1
            _log("\ncd start at root! DirCurPos = %d\n", DirCurPos);
#endif
		} else {
            if ('\\' == argv[0][0])   //如果當輸入參數是帶\開始的,如cd \dir\dir1
            {
                //因為當前目錄不是根目錄,所以為了防止出錯保留原目錄
                IsBackup  = 1;
                BackupLen = DirCurPos + 1;
                FS__CLIB_strncpy(&TargetVal[0], &CurDir[0], BackupLen);
                DirCurPos = 0;     //從頭開始復制命令
            } else {
		        CurDir[DirCurPos] = '\\';
			    DirCurPos++;
            }
		}
        CmdLen    = strlen(argv[0]);
        FS__CLIB_strncpy(&CurDir[DirCurPos], argv[0], CmdLen + 1);  //確保字符是以'\0'結束請看FS__CLIB_strncpy源碼
#if EN_DEBUG == 1
        _log("\nafter FS__CLIB_strncpy() CurDir= %s  DirCurPos = %d CmdLen = %d\n", CurDir, DirCurPos, CmdLen);
#endif
        if (DirExist(CurDir) == 0)  //目錄不存在
        {
			_log(argv[0]);
            _log("  Dir is not exist!\n", );
            if (1 == IsRoot)   //是否是根目錄
            {
                RewindRoot();               
            } else {
                if (1 == IsBackup)
                {
                    FS__CLIB_strncpy(&CurDir[0], &TargetVal[0], BackupLen);
                } else {
                    CurDir[DirCurPos - 1] = '\0';   //將加入的目錄清除
                }
            }
        } else {
#if EN_DEBUG == 1
            _log("Open %s Exist!\n", CurDir);  //目錄存在
#endif
        }
	}
#if EN_DEBUG == 1
    _log("\nCurDir = %s \n", CurDir);
#endif
	return 0;
}

INT8U lsFunc(INT8U argc,char **argv)
{			

	if(argc == 0)
    {
        _show_directory(CurDir);//_show_directory("");
    } else {
        _show_directory(argv[0]);
    }
	return 0;
}
		

INT8U rmFunc(INT8U argc,char **argv)
{

	if(argc != 1)
	{
		_error("please input command as:rm filename");
		_error("\n\n");
		return 1;
	}
    CreateTargetVal(argv[0]);
	//if(!FS_Remove(argv[0]))
    if(!FS_Remove(TargetVal))
	{
		_log("remove ");
		_log(argv[0]);
		_log(" successful\n\n");
	}
	else
	{
		_error("remove failure!\n\n");
	}
	return 0;
}

INT8U writeFunc(INT8U argc,char **argv)
{
	if(argc != 2)
	{
		_error("please input command as:create filename data");
		_error("\n\n");
		return 1;
	}
    CreateTargetVal(argv[0]);

	//_write_file(argv[0], argv[1]);
    _write_file(TargetVal, argv[1]);

	return 0;
}


//用于將arg參數構造成CurDir + arg = TargetParam
void CreateTargetVal(const char *arg)
{
    INT8U CurDirLen = 0;
    //INT8U ArgIsStartRoot = 0;

    CurDirLen = strlen(CurDir);
    if ('\\' == arg[0])
    {
     //   ArgIsStartRoot  = 1;
        FS__CLIB_strncpy(&TargetVal[0], arg, strlen(arg) + 1);
    } else {
        if (1 == CurDirLen)  //判斷是否當前目錄
        {
           //if (1 == ArgIsStartRoot)
        //{
        //    FS__CLIB_strncpy(&TargetVal[0], arg, strlen(arg) + 1);
        //} else{
            FS__CLIB_strncpy(&TargetVal[CurDirLen], arg, strlen(arg) + 1);
        //}
    //} else {
      //  if (1 == ArgIsStartRoot)
       // {
       //      FS__CLIB_strncpy(&TargetVal[0], arg, strlen(arg) + 1);
        } else {
            FS__CLIB_strncpy(TargetVal, CurDir, CurDirLen + 1);
            TargetVal[CurDirLen++] = '\\';
#if EN_DEBUG == 1
            _log("\n %s\n", TargetVal);
#endif
            FS__CLIB_strncpy(&TargetVal[CurDirLen], arg, strlen(arg) + 1);
        }
    }
#if EN_DEBUG == 1
    _log("\nTargetVal = %s\n", TargetVal);
#endif
}

INT8U catFunc(INT8U argc,char **argv)
{
    if(argc != 1)
	{
		_error("please input command as:cat filename");
		_error("\n\n");
		return 1;
	}
    CreateTargetVal(argv[0]);
    _dump_file(TargetVal);
	return 0;
}

INT8U formatFunc(INT8U argc,char **argv)
{
	int x;

    /* format your RAM disk */
    x = FS_IoCtl("ram:0:",FS_CMD_FORMAT_MEDIA,FS_MEDIA_RAM_16KB,0);
    if (x!=0) {
      _error("Cannot format RAM disk.\n\n");
	  return 1;
	}
	else{
		_log("format successful\n\n");
		return 0;
	}
}

INT8U mkdirFunc(INT8U argc,char **argv)
{
	if(argc != 1)
	{
		_error("please input command as:mkdir filename");
		_error("\n\n");
		return 1;
	}
    CreateTargetVal(argv[0]);
	//if(!FS_MkDir(argv[0]))
    if(!FS_MkDir(TargetVal))
	{
		_log("make directory ");
		_log(argv[0]);
		_log(" successful\n\n");
	}
	else
	{
		_error("mkdir failure! please check disk full or unformated\n");
	}
	return 0;
}

INT8U rmdirFunc(INT8U argc,char **argv)
{
	if(argc != 1)
	{
		_error("please input command as:mkdir filename");
		_error("\n\n");
		return 1;
	}
    CreateTargetVal(argv[0]);
	//if(!FS_RmDir(argv[0]))
    if(!FS_RmDir(TargetVal))
	{
		_log("remove ");
		_log(argv[0]);
		_log(" successful\n\n");
	}
	else
	{
		_error("remove failure! please check the directory name\n");
	}
	return 0;
}


INT8U freeFunc(INT8U argc,char **argv)
{
	_show_free("");
	_log("\n");
	return 0;
}

INT8U helpFunc(INT8U argc,char **argv)
{
    ShowHelp();
	return 0;
}

void ShowHelp(void)
{
	_log("\nformat - 格式化\nmkdir  - 建立目錄\nwrite  - 創建文件\nrmdir  - 刪除目錄\nls  \
   - 顯示目錄\ncat    - 打開文件\nrm     - 刪除文件\nfree   - 顯示空間\ncd  \
   - 更改當前目錄\nshow   - 顯示TargetVal值\npwd    - 顯示當前目錄\nexit   - 退出\n");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美视频一区二区| 一区二区在线观看免费| 蜜桃视频免费观看一区| 亚洲精品一区二区三区福利| 久久99九九99精品| 中文字幕在线一区| 欧美视频你懂的| 国产成人免费xxxxxxxx| 亚洲欧洲日产国码二区| 欧美老年两性高潮| 国产成人综合精品三级| 亚洲精品videosex极品| 日韩一区二区三区观看| www.激情成人| 国内欧美视频一区二区| 亚洲激情校园春色| 久久久99免费| 日韩女优av电影| 在线欧美日韩国产| 五月天丁香久久| 成人免费毛片app| 精品国产伦理网| 日韩欧美一区电影| 精品视频一区二区不卡| 国产精品一区二区你懂的| 亚洲午夜免费电影| 亚洲日本丝袜连裤袜办公室| 精品噜噜噜噜久久久久久久久试看| 91在线视频网址| 99re这里只有精品首页| 成人性生交大片免费看中文| 蜜桃视频一区二区三区在线观看| 一区二区三区在线免费观看| 自拍偷自拍亚洲精品播放| 国产日韩欧美亚洲| 中文字幕亚洲一区二区av在线 | 日韩一区二区在线免费观看| 日本韩国一区二区三区| 欧美中文字幕一区二区三区| 欧美日韩色一区| 欧美一级片在线| 久久综合中文字幕| 中文字幕的久久| 性欧美大战久久久久久久久| 免费观看在线综合| av在线综合网| 日韩一区二区电影在线| 久久久无码精品亚洲日韩按摩| 久久九九久精品国产免费直播| 国产日韩视频一区二区三区| 国产精品色呦呦| 捆绑变态av一区二区三区 | 激情另类小说区图片区视频区| 久热成人在线视频| 91麻豆swag| 国产亚洲综合在线| 亚洲国产综合人成综合网站| 久久国产成人午夜av影院| 日本久久精品电影| 日韩视频国产视频| 国产蜜臀av在线一区二区三区| 亚洲国产精品麻豆| fc2成人免费人成在线观看播放| 欧美日韩色综合| 亚洲激情第一区| 91亚洲精品乱码久久久久久蜜桃| 欧美一区二区视频在线观看 | 日韩欧美亚洲另类制服综合在线| 国产精品系列在线| 国产一区二区福利| 日韩精品中文字幕一区| 亚洲图片自拍偷拍| 欧美吻胸吃奶大尺度电影| 国产精品久久国产精麻豆99网站 | 五月婷婷综合在线| 欧美日韩亚洲综合| 日本一道高清亚洲日美韩| 欧美久久久一区| 亚洲超碰精品一区二区| 4438亚洲最大| 国产成人99久久亚洲综合精品| 在线播放亚洲一区| 狠狠色综合日日| 欧美激情一区二区三区在线| 成人黄色在线看| 亚洲电影你懂得| 精品噜噜噜噜久久久久久久久试看 | 色婷婷久久一区二区三区麻豆| 国产剧情一区二区三区| 欧美一区日韩一区| 国产激情一区二区三区桃花岛亚洲| 欧美国产视频在线| 欧美日本免费一区二区三区| 麻豆国产精品官网| 中文字幕亚洲不卡| 日韩欧美国产不卡| 91在线观看高清| 久久99久久精品| 一区二区三区四区在线播放| 日韩手机在线导航| 91蝌蚪国产九色| 国产一区二区三区日韩| 亚洲一区免费在线观看| 国产欧美综合在线| 久久亚洲二区三区| 7777精品久久久大香线蕉 | 国内精品伊人久久久久av一坑| 日韩理论片在线| 国产精品久久久久婷婷| 日韩欧美国产麻豆| 欧美一级二级三级乱码| 日本精品一区二区三区高清| 粉嫩在线一区二区三区视频| 久久国产精品72免费观看| 日韩福利电影在线| 日本va欧美va瓶| 麻豆国产精品777777在线| 日本亚洲天堂网| 毛片av一区二区三区| 日韩电影在线免费| 久久电影网站中文字幕 | 韩国毛片一区二区三区| 精品一区二区在线免费观看| 捆绑调教一区二区三区| 麻豆成人91精品二区三区| 青青草视频一区| 国产精品18久久久| 高清不卡一二三区| www.99精品| 欧美日本精品一区二区三区| 日韩视频免费直播| ...xxx性欧美| 六月丁香综合在线视频| 国产成人午夜高潮毛片| 在线观看视频一区二区欧美日韩| 欧美三级在线视频| 久久女同互慰一区二区三区| 综合久久久久久| 久久精品国产999大香线蕉| 成人av免费观看| 久久精品亚洲国产奇米99| 亚洲男女毛片无遮挡| 国产精品乡下勾搭老头1| 在线观看免费成人| 国产精品久久久久三级| 久久不见久久见免费视频7| 色婷婷国产精品| 国产精品不卡在线| 国产电影一区在线| 欧美精品一区二区三| 丝袜a∨在线一区二区三区不卡| 高清不卡一区二区在线| 欧美成人video| 久久成人18免费观看| 在线综合亚洲欧美在线视频| 亚洲综合一区二区三区| 91一区一区三区| 久久精品一区二区三区四区| 九色|91porny| 国产女同性恋一区二区| 狠狠色丁香九九婷婷综合五月| 欧美大片日本大片免费观看| 蜜臀精品一区二区三区在线观看 | www.66久久| 亚洲欧美另类久久久精品| 精品视频1区2区| 久久91精品国产91久久小草| 亚洲精品一区二区三区99| 国产伦理精品不卡| 亚洲欧洲日韩av| 欧美久久久久久久久| 国产精品影视天天线| 亚洲欧美乱综合| 日韩精品专区在线影院观看| 欧美日韩一区 二区 三区 久久精品| 91精品国产高清一区二区三区蜜臀| 午夜视频在线观看一区| 精品精品国产高清a毛片牛牛| 国产一区二区视频在线播放| 最新国产精品久久精品| 日韩亚洲欧美综合| 丁香桃色午夜亚洲一区二区三区| 亚洲美女视频在线| 国产亚洲一区二区三区| 欧美日韩亚洲综合在线 | 国产老肥熟一区二区三区| 日韩毛片一二三区| 亚洲精品在线观看视频| 在线精品视频免费观看| 国产成人一区在线| 老鸭窝一区二区久久精品| 综合精品久久久| 久久久久久久久久久久久女国产乱| 欧美系列在线观看| 色综合久久六月婷婷中文字幕| 黑人巨大精品欧美一区| 日韩av电影免费观看高清完整版 | 中文字幕在线不卡| 国产欧美日韩卡一| 亚洲国产精品激情在线观看|