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); } }
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); } }
static int kill_me(void) { const char *status = cmdtok(NULL); if (status != NULL) exit(atoi(status)); exit(0); }
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); } }
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; }
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); } }
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); } } }
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; }
/** * 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(); }