コード例 #1
0
/**
 * shell_runscript
 *
 * Parse and execute a script.
 */
int shell_runscript(char *buffer)
{
	char *token, *save;
	char *delim = ";\n";
	char *argv[MAXLINE];
	int stat, line, argc;

	if (buffer == NULL)
		return -1;

	token = strtok_r(buffer, delim, &save);
	for (line = 1; token != NULL; line++) {
		if ((argc = shell_parseline(token, argv)) == -1) {
			printf("runscript: syntax error on line %d, aborting.\n", line);
			stat = -2;
			break;
		}
		if ((stat = shell_callcmd(argc, argv)) != 0) {
			printf("runscript: command error on line %d, aborting.\n", line);
			stat = -3;
			break;
		}
		shell_flushargs(argv);
		token = strtok_r(NULL, delim, &save);
	}

	return stat;
}
コード例 #2
0
ファイル: shell.c プロジェクト: powertang/yard-ice
int exec(FILE * f, char * line, const struct shell_cmd * cmd_tab)
{
	char * argv[SHELL_ARG_MAX];
	struct shell_cmd * cmd;
	value_t val;
	int argc;
	int n;

/* if ((s = shell_stripline(line)) == NULL) {
		return 0;
	} */

	if ((argc = shell_parseline(line, argv, SHELL_ARG_MAX)) == 0) {
		return 0;
	}

#if 0
	for (n = 0; n < argc; n++) {
		printf(" '%s'", argv[n]);
	}
	printf("\n");
#endif

	/* */
	if (argc > 2) {
		if (strcmp(argv[1], "=") == 0) {
			argv[1] = argv[0];
			argv[0] = "let";
		}
	}

	if ((cmd = cmd_lookup(cmd_tab, argv[0])) == NULL) {

		DCC_LOG(LOG_TRACE, "cmd_lookup() == NULL");

		if ((n = eval_uint32(&val, argc, argv)) < 0) {
			DCC_LOG(LOG_WARNING, "eval_uint32()");
			return n;
		}

		if (n != argc) {
			DCC_LOG(LOG_WARNING, "parse error");
			return -2;
		}

		show_uint32(f, val.uint32);
		return 0;
	}

	return cmd->callback(f, argc, argv);
}
コード例 #3
0
/**
 * shell_prompt
 *
 * An interactive shell for xBoot.
 */
void shell_prompt(const char *prompt)
{
	int argc, guard;
	char *argv[MAXLINE];
	char buffer[MAXLINE];

	printf("\n\nEntering interactive shell. Run \'help\' for a list of commands.\n\n");

	guard = (strlen(prompt));

	while (1) {
		printf("%s", prompt);
		shell_getline(buffer, guard, MAXLINE);
		argc = shell_parseline(buffer, argv);
		shell_callcmd(argc, argv);
		shell_flushargs(argv);
		shell_flushbuffer(buffer);
	}

	return;
}