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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? command.c

?? s3c2440 bootloader 源碼
?? C
字號:
/* * vivi/lib/command.c:  *   - to support user commands on the boot loader * * Copyright (C) 2001 MIZI Research, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * * * Author: Janghoon Lyu <nandy@mizi.com> * Date  : $Date: 2004/02/04 06:22:25 $ * * $Revision: 1.1.1.1 $ * *  * History *  * 2001-12-23: Janghoon Lyu <nandy@mizi.com> *    - Initial code *    - Base on bootldr/bootldr.c  * * 2002-02-23: Janghoon Lyu <nandy@mizi.com> *    -  Add flash commands * * 2002-07-13: Janghoon Lyu <nandy@mizi.com> * */#include "config.h"#include "machine.h"#include "command.h"#include <priv_data.h>#include "heap.h"#include "vivi_string.h"#include "vivi_lib.h"#include "printk.h"#include <string.h>#include <types.h>static user_command_t *head_cmd = NULL;static user_command_t *tail_cmd = NULL;/* * Parse user command line */void parseargs(char *argstr, int *argc_p, char **argv, char** resid){	int argc = 0;	char c;	enum ParseState lastState = PS_WHITESPACE;	/* tokenize the argstr */	while ((c = *argstr) != 0) {		enum ParseState newState;		if (c == ';' && lastState != PS_STRING && lastState != PS_ESCAPE)			break;		if (lastState == PS_ESCAPE) {			newState = stackedState;		} else if (lastState == PS_STRING) {			if (c == '"') {				newState = PS_WHITESPACE;				*argstr = 0;			} else {				newState = PS_STRING;			}		} else if ((c == ' ') || (c == '\t')) {			/* whitespace character */			*argstr = 0;			newState = PS_WHITESPACE;		} else if (c == '"') {			newState = PS_STRING;			*argstr++ = 0;			argv[argc++] = argstr;		} else if (c == '\\') {			stackedState = lastState;			newState = PS_ESCAPE;		} else {			/* token */			if (lastState == PS_WHITESPACE) {				argv[argc++] = argstr;			}			newState = PS_TOKEN;		}		lastState = newState;		argstr++;	}#if 0 /* for debugging */	{		int i;		putLabeledWord("parseargs: argc=", argc);		for (i = 0; i < argc; i++) {			putstr("   ");			putstr(argv[i]);			putstr("\r\n");		}	}#endif		argv[argc] = NULL;	if (argc_p != NULL)		*argc_p = argc;	if (*argstr == ';') {		*argstr++ = '\0';	}	*resid = argstr;}void unparseargs(char *argstr, int argc, const char **argv){	int i;	for (i = 0; i < argc; i++) {		if (argv[i] != NULL) {			strcat(argstr, " ");			strcat(argstr, argv[i]);		}	}}/* * Genernal interface *//* * For (main) commands *//* add user command */void add_command(user_command_t *cmd){	if (head_cmd == NULL) {		head_cmd = tail_cmd = cmd;	} else {		tail_cmd->next_cmd = cmd;		tail_cmd = cmd;	}	/*printk("Registered '%s' command\n", cmd->name);*/}/* find command */user_command_t *find_cmd(const char *cmdname){	user_command_t *curr;	/* do da string compare for the first offset character of cmdstr	  against each number of the cmdlist */	curr = head_cmd;	while(curr != NULL) {		if (strncmp(curr->name, cmdname, strlen(cmdname)) == 0)			return curr;		curr = curr->next_cmd;	}	return NULL;}/* execute a function */void execcmd(int argc, const char **argv){	user_command_t *cmd = find_cmd(argv[0]);	if (cmd == NULL) {		printk("Could not found '%s' command\n", argv[0]);		printk("If you want to konw available commands, type 'help'\n"); 		return;	}	/*printk("execcmd: cmd=%s, argc=%d\n", argv[0], argc);*/	cmd->cmdfunc(argc, argv);}/* parse and execute a string */void exec_string(char *buf){	int argc;	char *argv[128];	char *resid;	while (*buf) {		memset(argv, 0, sizeof(argv));		parseargs(buf, &argc, argv, &resid);		if (argc > 0)			execcmd(argc, (const char **)argv);		buf = resid;	}}/* * For sub-commands */void execsubcmd(user_subcommand_t *cmds, int argc, const char **argv){	while (cmds->name != NULL) {		if (strncmp(argv[0], cmds->name, strlen(argv[0])) == 0) {			/*printk("subexeccmd: cmd=%s, argc=%d\n", argv[0], argc);*/			cmds->cmdfunc(argc, argv);			return;		}		cmds++;	}	printk("Could not found '%s' sub-command\n", argv[0]);}void print_usage(char *strhead, user_subcommand_t *cmds){	printk("Usage:\n");	while (cmds->name != NULL) {		if (strhead)			printk("%s ", strhead);		if (*cmds->helpstr)			printk("%s\n", cmds->helpstr);		cmds++;	}}void invalid_cmd(const char *cmd_name, user_subcommand_t *cmds){	printk("invalid '%s' command: wrong argumets\n", cmd_name);	print_usage("  ", cmds);}/* * Define (basic) built-in commands */#if 0	"help [{cmds}] -- Help about help?"	"boot [{cmds}] - Booting linux kernel"	"call <addr> <args> -- Execute binaries"	"dump <addr> <length> -- Display (hex dump) a range of memory."	"flash [{cmds}]-- Manage Flash memory"	"info -- Display vivi information"	"load [{cmds}] -- Load a file"	"mem -- Show info about memory"	"reset -- Reset the System"	"param [eval|show|save [-n]|reset]"	"part [ help | add | delete | show | reset ] -- MTD partition"	"test -- Test items" #endif/* help command */void command_help(int argc, const char **argv){	user_command_t *curr;	/* help <command>. invoke <command> with 'help' as an argument */	if (argc == 2) {		if (strncmp(argv[1], "help", strlen(argv[1])) == 0) {			printk("Are you kidding?\n");			return;		}		argv[0] = argv[1];		argv[1] = "help";		execcmd(argc, argv);		return;	}	printk("Usage:\n");	curr = head_cmd;	while(curr != NULL) {		printk("   %s\n", curr->helpstr);		curr = curr->next_cmd;	}}user_command_t help_cmd = {	"help",	command_help,	NULL,	"help [{cmds}] \t\t\t-- Help about help?"};/* dump command */void command_dump(int argc, const char *argv[]){	size_t num;	unsigned char *p;	if (argc == 3)	/* size spcified */		num = strtoul(argv[2], NULL, 0, NULL);	else		num = 16;	p = (unsigned char *)strtoul(argv[1], NULL, 0, NULL);	hex_dump(p, num);}user_command_t dump_cmd = {	"dump",	command_dump,	NULL,	"dump <addr> <length> \t\t-- Display (hex dump) a range of memory."};extern user_command_t boot_cmd;#ifdef CONFIG_CMD_MEMextern user_command_t mem_cmd;#endifextern user_command_t load_cmd;extern user_command_t reset_cmd;extern user_command_t go_cmd;extern user_command_t call_cmd;#ifdef CONFIG_CMD_PARTextern user_command_t part_cmd;#endif#ifdef CONFIG_CMD_PARAMextern user_command_t param_cmd;#endif#ifdef CONFIG_CMD_SLEEPextern user_command_t sleep_cmd;#endif#ifdef CONFIG_CMD_BONFSextern user_command_t bon_cmd;#endif#ifdef CONFIG_CMD_PROMPTextern user_command_t prompt_cmd;#endif#ifdef CONFIG_TESTextern user_command_t test_cmd;#endif#ifdef CONFIG_CMD_AMD_FLASHextern user_command_t amd_cmd;#endifextern user_command_t vga_cmd;extern user_command_t tv_cmd;/* Register basic user commands */int init_builtin_cmds(void){#ifdef CONFIG_DEBUG	printk("init built-in commands\n");#endif#ifdef CONFIG_CMD_AMD_FLASH	add_command(&amd_cmd);#endif#ifdef CONFIG_TEST	add_command(&test_cmd);#endif#ifdef CONFIG_CMD_PROMPT	add_command(&prompt_cmd);#endif#ifdef CONFIG_CMD_SLEEP	add_command(&sleep_cmd);#endif#ifdef CONFIG_CMD_BONFS	add_command(&bon_cmd);#endif	add_command(&reset_cmd);#ifdef CONFIG_CMD_PARAM	add_command(&param_cmd);#endif#ifdef CONFIG_CMD_PART	add_command(&part_cmd);#endif#ifdef CONFIG_CMD_MEM	add_command(&mem_cmd);#endif			add_command(&vga_cmd);	add_command(&tv_cmd);		add_command(&load_cmd);	add_command(&go_cmd);	add_command(&dump_cmd);	add_command(&call_cmd);	add_command(&boot_cmd);	add_command(&help_cmd);	return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品视频观看| 欧美va亚洲va国产综合| 亚洲欧美日韩国产手机在线| 成人污视频在线观看| 亚洲天天做日日做天天谢日日欢| 一本到三区不卡视频| 一区二区三区在线影院| 欧美三级日韩三级| 日韩不卡手机在线v区| 欧美www视频| 国产99精品视频| 亚洲欧美日韩国产综合在线| 欧美色偷偷大香| 成人手机在线视频| 国产精品久久久久久久久晋中| 色综合久久综合| 日韩电影网1区2区| 久久久99精品久久| 在线影院国内精品| 乱一区二区av| 亚洲视频一二三| 欧美一级片在线| 91精品久久久久久久久99蜜臂| 国产一区二区三区免费在线观看| 中文字幕不卡在线| 91精品国产综合久久国产大片| 国产精品一区二区黑丝| 一二三四社区欧美黄| 精品国产百合女同互慰| 色婷婷激情一区二区三区| 久久国产麻豆精品| 亚洲免费观看高清| 欧美成人艳星乳罩| 在线一区二区三区做爰视频网站| 免费久久99精品国产| 亚洲人成网站在线| 久久嫩草精品久久久精品一| 欧美三级日本三级少妇99| 国产成人aaaa| 精品在线播放免费| 亚洲综合色噜噜狠狠| 亚洲国产精品成人综合| 日韩欧美视频一区| 在线一区二区视频| 国产91高潮流白浆在线麻豆| 日韩精品一卡二卡三卡四卡无卡| 亚洲欧美日韩国产手机在线 | 国产v日产∨综合v精品视频| 香蕉成人伊视频在线观看| 国产精品不卡一区| 久久久久久久久99精品| 91精品国产入口| 91极品美女在线| 99久久精品国产导航| 国产精品资源在线看| 久久精品国产亚洲5555| 亚洲第一精品在线| 一区二区三区中文字幕| 日韩理论片在线| 国产精品乱人伦| 日本一区二区三区国色天香| 日韩欧美一区在线| 欧美一区二区三区四区在线观看 | 欧美一区二区三区婷婷月色| 欧美性色综合网| 99久久伊人精品| 成人污视频在线观看| 91蜜桃婷婷狠狠久久综合9色| 国产精品天干天干在线综合| 国产成人夜色高潮福利影视| 婷婷激情综合网| 亚洲.国产.中文慕字在线| 亚洲一级二级在线| 亚洲综合在线电影| 一区二区高清免费观看影视大全| 亚洲激情自拍视频| 一区二区三区中文字幕精品精品| 亚洲精品高清在线观看| 亚洲免费色视频| 亚洲一区在线观看免费| 一区二区三区视频在线看| 亚洲精品国产精品乱码不99| 亚洲色图欧美在线| 亚洲曰韩产成在线| 日韩中文字幕一区二区三区| 天堂av在线一区| 蜜桃av一区二区在线观看 | 六月丁香婷婷色狠狠久久| 奇米色一区二区| 麻豆久久一区二区| 国产成人在线观看| 成人av网站免费| 日本电影亚洲天堂一区| 欧美日韩国产不卡| 欧美精品一区二区精品网| 久久久久久日产精品| 国产精品对白交换视频| 亚洲永久精品大片| 日本美女视频一区二区| 激情小说欧美图片| 99re这里只有精品首页| 在线视频一区二区免费| 正在播放亚洲一区| 国产亚洲精品资源在线26u| 亚洲少妇30p| 青青国产91久久久久久| 高清成人免费视频| 色婷婷综合五月| 日韩手机在线导航| 中文字幕欧美国产| 亚洲成人www| 国产在线视频精品一区| 97精品国产97久久久久久久久久久久| 在线观看日韩电影| 久久综合精品国产一区二区三区| 国产精品网站在线| 午夜a成v人精品| 国产精品123区| 欧美亚洲国产怡红院影院| 久久综合九色综合97婷婷女人| 亚洲人精品午夜| 精品一区二区三区在线播放视频| 色哟哟一区二区在线观看| 欧美精品一区视频| 一二三四社区欧美黄| 国产成人在线视频网站| 欧美视频完全免费看| 国产女主播在线一区二区| 日韩中文字幕亚洲一区二区va在线| 成人妖精视频yjsp地址| 日韩一区二区在线观看视频| 亚洲欧美另类综合偷拍| 久久成人综合网| 欧美日韩成人综合天天影院 | 欧美在线高清视频| 久久精品网站免费观看| 蜜臀久久99精品久久久久久9| 91影视在线播放| 国产日韩欧美在线一区| 久草在线在线精品观看| 欧美日韩在线亚洲一区蜜芽| 国产精品久久久久久久久免费丝袜 | 五月天中文字幕一区二区| 不卡的av电影在线观看| 久久综合99re88久久爱| 日本午夜一区二区| 精品视频在线免费| 一区二区三区四区不卡在线| www.亚洲免费av| 欧美激情综合五月色丁香 | 视频一区欧美精品| 欧美在线免费视屏| 亚洲狼人国产精品| 成人蜜臀av电影| 国产精品久久久久影院亚瑟 | 91视频在线观看| 久久久久久久久免费| 国产主播一区二区| 久久夜色精品一区| 国产一区 二区 三区一级| 精品蜜桃在线看| 精彩视频一区二区三区| 欧美videofree性高清杂交| 青青国产91久久久久久| 日韩视频在线你懂得| 老司机一区二区| 欧美第一区第二区| 精品一区二区日韩| 久久亚洲一级片| 国产99久久久国产精品潘金| 国产日本一区二区| 成人精品小蝌蚪| 亚洲摸摸操操av| 欧美日韩成人激情| 久久精品国产99| 久久精品视频一区二区三区| 成人黄色片在线观看| 中文字幕一区二区三区不卡在线| 91网上在线视频| 亚洲国产一区视频| 欧美一级理论性理论a| 国产老妇另类xxxxx| 欧美激情综合五月色丁香| 一本到不卡精品视频在线观看 | 图片区小说区国产精品视频| 欧美日韩亚洲综合一区二区三区| 免费在线一区观看| 国产日韩视频一区二区三区| 色综合天天综合网天天狠天天 | 精品综合久久久久久8888| 久久嫩草精品久久久久| 99久久精品免费看国产免费软件| 亚洲精品成人悠悠色影视| 制服丝袜国产精品| 国产高清不卡一区二区| 亚洲人成伊人成综合网小说| 制服丝袜国产精品| 成人免费毛片app| 午夜精品久久久久久久99水蜜桃| 精品欧美乱码久久久久久|