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

📄 command.c

📁 C写的MCU基于中断的串口驱动及显示程序
💻 C
字号:
#include <command.h>


#define STATE_WHITESPACE	0
#define STATE_WORD			1

#define	MAX_ARGS	MAX_CMD_LEN/4


int argc, num_commands;
char *argv[MAX_ARGS];
int Help();
int Dir();

typedef int (*cmdproc)();

typedef struct {
	char *cmd;
	char *hlp;
	cmdproc proc;
}CMD_STRUC;

CMD_STRUC CMD_INNER[] =
				{ 	{"help", "show help", Help},
					{"?", "= help", Help},
					{"dir", "dir", Dir},
					{NULL, NULL, NULL}
				};
int Dir()
{
	int i;	
	for(i=0;i<argc;i++)
	{
		PrintStr(argv[i]);
		PrintStr("\r\n");
	}
	for(i=0; CMD_INNER[i].cmd!=NULL; i++)
	{
		if(CMD_INNER[i].hlp!=NULL)
		{
			PrintStr(CMD_INNER[i].cmd);
			PrintStr("	------	");
			PrintStr(CMD_INNER[i].hlp);
			PrintChar('\r');
			PrintChar('\n');
		}
	}
	return 0;
}
int Help()
{
	char i;
	for(i=0;i<argc;i++)
	{
		PrintStr(argv[i]);
		PrintStr("\r\n");
	}
	PrintStr("Welcome you come here\r\n");
	PrintStr("2004.9.22\r\n");
	return 0;
}

int GetCmdMatche(char *cmdline)
{
	int i,j;	
	char temp;

	for(i=0; CMD_INNER[i].cmd!=NULL; i++)
	{
		j=0;
		while(*(cmdline+j) != 0)
		{
			temp = *(cmdline+j);
			if(temp > 'A' && temp < 'Z') temp=temp+32;
			if(*(CMD_INNER[i].cmd+j) != temp)
			{
				break;
			}
			j++;
		}
		if(*(CMD_INNER[i].cmd+j)==0&& *(cmdline+j)==0)
		{
			return i;
		}
		
	}
	return -1;
}
void ParseArgs(char *cmdline, int *argc, char **argv)
{
	char *c;
	int state = STATE_WHITESPACE;
	int i;

	*argc = 0;

	if(strlen(cmdline) == 0)
		return;

	/* convert all tabs into single spaces */
	c = cmdline;
	while(*c != '\0')
	{
		if(*c == '\t')
			*c = ' ';
		c++;
	}
	
	c = cmdline;
	i = 0;

	/* now find all words on the command line */
	while(*c != '\0')
	{
		if(state == STATE_WHITESPACE)
		{
			if(*c != ' ')
			{
				argv[i] = c;		//将argv[i]指向c
				i++;
				state = STATE_WORD;
			}
		}
		else
		{ /* state == STATE_WORD */
			if(*c == ' ')
			{
				*c = '\0';
				state = STATE_WHITESPACE;
			}
		}
		c++;
	}
	
	*argc = i;
}
int ParseCmd(char *cmdline, int cmd_len)
{
	int num_commands;

	if(cmd_len == 0)return 0;
	ParseArgs(cmdline, &argc, argv);

	/* only whitespace */
	if(argc == 0) 
		return 0;
	
	num_commands = GetCmdMatche(argv[0]);
	if(num_commands<0)
		return -1;
		
	if(CMD_INNER[num_commands].proc!=NULL)	
		CMD_INNER[num_commands].proc();
				
	return 0;			
}

⌨️ 快捷键说明

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