コード例 #1
0
ファイル: kernel.c プロジェクト: hirokiht/rtenv-plus
void check_keyword()
{
	char *argv[MAX_ARGC + 1] = {NULL};
	char cmdstr[CMDBUF_SIZE];
	int argc = 1;
	int i;

	find_events();
	fill_arg(cmdstr, cmd[cur_his]);
	argv[0] = cmdtok(cmdstr);
	if (!argv[0])
		return;

	for(argc = 1 ; argv[argc-1] && argc < MAX_ARGC ; argc++)
		if(!(argv[argc] = cmdtok(NULL)))
			break;

	for (i = 0; i < CMD_COUNT; i++) {
		if (!strcmp(argv[0], cmd_data[i].cmd)) {
			cmd_data[i].func(argc, argv);
			break;
		}
	}
	if (i == CMD_COUNT) {
		write(fdout, argv[0], strlen(argv[0]) + 1);
		write(fdout, ": command not found", 20);
		write(fdout, next_line, 3);
	}
}
コード例 #2
0
ファイル: p35sh.c プロジェクト: XanClic/muxomucota
int main(void)
{
    char input[128];

    if (getenv("PWD") != NULL)
        chdir(getenv("PWD"));
    else
    {
        char cwd[256];
        if (getcwd(cwd, 256) == NULL)
        {
            chdir("/");
            setenv("PWD", "/", 1);
        }
        else
        {
            chdir(cwd);
            setenv("PWD", cwd, 1);
        }
    }

    for (;;)
    {
        printf("\033[31;1m root \033[7;34m► %s \033[0;34m►\033[0m ", getenv("PWD"));

        fflush(stdout);

        my_fgets(input, 128, STDIN_FILENO);

        cmd_called(cmdtok(input));


        while (waitpid(-1, NULL, WNOHANG) > 0);
    }
}
コード例 #3
0
ファイル: p35sh.c プロジェクト: XanClic/muxomucota
static int kill_me(void)
{
    const char *status = cmdtok(NULL);
    if (status != NULL)
        exit(atoi(status));
    exit(0);
}
コード例 #4
0
ファイル: shell.c プロジェクト: openbox00/rtenv
void check_keyword()
{
	/*use hardcoded array*/	
	char tok[MAX_ARGC + 1][MAX_CMDHELP];
	char *argv[MAX_ARGC + 1];
	int k = 0;
	
	for (k;k<MAX_ARGC + 1;k++){
	argv[k] = &tok[k][0];
	}
	int i;
	int argc;
	
	char cmdstr[CMDBUF_SIZE];
	strcpy(cmdstr, &cmd[cur_his][0]);
	
	argc = cmdtok(argv, cmdstr);

	for (i = 0; i < CMD_COUNT; i++) {
		if (!strcmp(cmd_data[i].cmd, argv[0])) {
			cmd_data[i].func(argc, argv);
			break;
		}
	}

	if (i == CMD_COUNT) {
		printf("%s",argv[0]);
		printf(": command not found");
		printf("%s",next_line);
	}
}
コード例 #5
0
ファイル: p35sh.c プロジェクト: XanClic/muxomucota
static int change_dir(void)
{
    const char *dir = cmdtok(NULL);
    if (dir == NULL)
    {
        dir = getenv("HOME");
        if (dir == NULL)
            dir = "/";
    }

    size_t total_sz = strlen(getenv("PWD")) + 1 + strlen(dir) + 1;
    char curpath[total_sz];


    curpath[0] = 0;

    if ((dir[0] != '/') && (dir[0] != '('))
    {
        const char *colon = strchr(dir, ':');
        const char *slash = strchr(dir, '/');

        if ((colon == NULL) || (slash == NULL) || (colon + 1 != slash))
        {
            strcpy(curpath, getenv("PWD"));
            strcat(curpath, "/");
        }
    }

    strcat(curpath, dir);

    if (chdir(curpath))
    {
        fprintf(stderr, "cd: %s: %s\n", dir, strerror(errno));
        return 1;
    }

    // Gewusst, wie (__simplify_path)
    if ((curpath[0] == '/') || (curpath[0] == '('))
        __simplify_path(curpath);
    else
    {
        // bspw. "tar://blub", erst ab dem zweiten Slash arbeiten (sonst werden beide zusammengestrichen)
        __simplify_path(strchr(curpath, ':') + 2);
    }

    if (!curpath[0])
    {
        curpath[0] = '/';
        curpath[1] = 0;
    }

    setenv("OLDPWD", getenv("PWD"), 1);
    setenv("PWD", curpath, 1);

    return 0;
}
コード例 #6
0
ファイル: kernel.c プロジェクト: davesjoewang/rtenv
void check_keyword()
{
	char *argv[MAX_ARGC + 1] = {NULL};
	char cmdstr[CMDBUF_SIZE];
	char buffer[CMDBUF_SIZE * MAX_ENVVALUE / 2 + 1];
	char *p = buffer;
	int argc = 1;
	int i;

	find_events();
	strcpy(cmdstr, cmd[cur_his]);
	argv[0] = cmdtok(cmdstr);
	if (!argv[0])
		return;

	while (1) {
		argv[argc] = cmdtok(NULL);
		if (!argv[argc])
			break;
		argc++;
		if (argc >= MAX_ARGC)
			break;
	}

	for(i = 0; i < argc; i++) {
		int l = fill_arg(p, argv[i]);
		argv[i] = p;
		p += l + 1;
	}

	for (i = 0; i < CMD_COUNT; i++) {
		if (!strcmp(argv[0], cmd_data[i].cmd)) {
			cmd_data[i].func(argc, argv);
			break;
		}
	}
	if (i == CMD_COUNT) {
		write(fdout, argv[0], strlen(argv[0]) + 1);
		write(fdout, ": command not found", 20);
		write(fdout, next_line, 3);
	}
}
コード例 #7
0
ファイル: shell.c プロジェクト: musicguitar/mini-arm-os
void shell_thread(void* arg)
{
        char *p = NULL;
	int i;
	char *argv[MAX_ARGC + 1] = {NULL};
        int argc = 1;

	register_console_rx(shell_pid);
        while(1) {
		print_str(PROMPT);
		p = cmd;
		argc = 1;
		wait_cmd_in(p);
		argv[0] = cmdtok(cmd);

        	if (!argv[0])
                	continue;
		while (1) {
        	        argv[argc] = cmdtok(NULL);
        	        if (!argv[argc])
        	                break;
        	        argc++;
        	        if (argc >= MAX_ARGC)
        	                break;
        	}

		/* Check CMD list */
		for (i = 0; i < CMD_COUNT; i++) {
        	        if (!strcmp(cmd, cmd_data[i].cmd)) {
        	                //cmd_data[i].func(NULL);
				thread_create(cmd_data[i].func, (void *)argv[1]);
				thread_sleep(shell_pid);
        	                break;
        	        }
        	}
        	if (i == CMD_COUNT) {
        	        print_str(cmd);
        	        print_str(": command not found");
        	        print_str(NEXT_LINE);
        	}
        }
}
コード例 #8
0
ファイル: p35sh.c プロジェクト: XanClic/muxomucota
static int cmd_called(char *cmd)
{
    if (!*cmd || (*cmd == '#'))
        return 0;

    for (size_t i = 0; i < sizeof(builtins) / sizeof(builtins[0]); i++)
        if (!strcmp(cmd, builtins[i].name))
            return builtins[i].function();

    // FIXME
    const char *argv[32];
    bool in_background = false;

    argv[0] = cmd;
    for (int i = 1; i < 31; i++)
    {
        argv[i] = cmdtok(NULL);
        if (argv[i] == NULL)
        {
            if ((i > 1) && !strcmp(argv[i - 1], "&"))
            {
                argv[i - 1] = NULL;
                in_background = true;
            }
            break;
        }
    }
    argv[31] = NULL;

    int exit_code;

    pid_t pid = fork();
    if (pid < 0)
        perror("Could not fork");
    else if (!pid)
    {
        execvp(cmd, (char *const *)argv);
        perror(cmd);
        exit(1);
    }

    if (in_background)
        exit_code = 0;
    else
    {
        waitpid(pid, &exit_code, 0);
        if (WIFEXITED(exit_code))
            exit_code = WEXITSTATUS(exit_code);
        else
            exit_code = 1;
    }

    return exit_code;
}
コード例 #9
0
ファイル: MainAndroid.cpp プロジェクト: James-Z/OpenGLSamples
/**
 * This is the main entry point of a native application that is using
 * android_native_app_glue.  It runs in its own thread, with its own
 * event loop for receiving input events and doing other things.
 */
void android_main(struct android_app* app) {
    if (!app)
        return;

    NvAssetLoaderInit((void*)app->activity->assetManager);

    Engine* engine = new Engine(app);

    char* commandLine = NULL;
    
    if (getCommandLine(engine, commandLine)) {
        LOGI("Found command line %s", commandLine);
        // add command line arguments
        NvTokenizer cmdtok(commandLine);
        std::string sarg;
        while (cmdtok.getTokenString(sarg))
            engine->m_commandLine.push_back(sarg);
    }

    NvAppBase* sdkapp = NvAppFactory(engine);

    sdkapp->configurationCallback(sDefaultConfig);

    engine->mEGL = NvEGLUtil::create(localEGLChooser);
    if (!engine->mEGL) 
    {
        // if we have a basic EGL failure, we need to exit immediately; nothing else we can do
        delete sdkapp;
        sdkapp = NULL;
        nv_app_force_quit_no_cleanup(app);
    }
    NvEGLAppContext* context = new NvEGLAppContext(engine->mEGL);
    sdkapp->setGLContext(context);

    // Make sure glue isn't stripped.
    app_dummy();

    // loop waiting for stuff to do.
    sdkapp->mainLoop();

    delete sdkapp;
    delete engine;
    NvAssetLoaderShutdown();
}