Esempio n. 1
0
File: svm.c Progetto: shouya/svm
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);
}    
Esempio n. 2
0
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);
}