int main(int argc, char** argv) { static FILE* _input_file; static int* _binary = NULL; int retval = 0; int _startpos = 0; int i = 0; if (argc > 1) { _input_file = fopen(argv[1], "r"); if (!_input_file) { fprintf(stderr, "open file failed: [%s]", argv[1]); exit(EXIT_FAILURE); } } else { _input_file = stdin; } if (parse_jmplbl(_input_file) == FAILURE) { fputs("error at parsing jump labels\n", stderr); goto free_and_exit; } if (parse_file(_input_file, &_binary) == FAILURE) { fputs("error at parsing file\n", stderr); goto free_and_exit; } for (; i != __jmp_tbl_size; ++i) { if (!util_stricmp(__jmp_tbl[i].name, "start")) { _startpos = __jmp_tbl[i].jmppos; } } free(__jmp_tbl); init_registers(); /* for (i = 0; i != __program_len; ++i) { printf("[%02d]get a: %d\n", i, _binary[i]); } */ // exit(0); if (exec_binary(_binary, __program_len, _startpos) == FAILURE) { fputs("error at executing\n", stderr); free(_binary); goto free_and_exit; } free(_binary); if (_input_file != stdin) { fclose(_input_file); } exit(retval); free_and_exit: if (_input_file != stdin) { fclose(_input_file); } exit(EXIT_FAILURE); }
int handle_cmd(\ char *cmd_buffer) { t_cmd cmd; int ret; ret = 1; cmd = parse_cmd(cmd_buffer); debug_cmd(cmd); if (cmd.not_found) nofound(cmd.arg_v[0]); else if (cmd.builtin) ret = cmd.built(cmd.arg_v); else exec_binary(cmd); free_cmd(&cmd); return (ret); }