/* * === FUNCTION ====================================================================== * Name: parse_input * Description: separates a line of input into tokens. Passes tokens off for additional * processing. * ===================================================================================== */ void parse_input (char *input, size_t size) { char s[(int)size]; strcpy(s, input); char *op_code = strtok(s, " "); char *raw_arg_a = strtok(NULL, " "); char *raw_arg_b = strtok(NULL, " "); char *raw_arg_c = strtok(NULL, " "); int argc = 0; struct arg_t args[3]; if(raw_arg_a != 0) { args[0] = parse_arg(raw_arg_a); argc++; } if(raw_arg_b != 0) { args[1] = parse_arg(raw_arg_b); argc++; } if(raw_arg_c != 0) { args[2] = parse_arg(raw_arg_b); argc++; } op_code = trim_whitespace(op_code); str_to_lower(op_code); unsigned long op_hashed = hash(op_code); assemble_op(op_hashed, args, argc); } /* ----- end of function parse_input ----- */
int assemble_token(enum Token token) { switch (token) { case Addr: { if (curad == 0) text_addr = token_num; curad = token_num; return 1; } case EndL: return 1; case Symbol: { int opn; if ((opn = search_op(token_buf)) != -1) assemble_op(opcodes[opn]); else if ((opn = search_pop(token_buf)) != -1) assemble_pop((enum POp)opn); else if (token_buf[0] == 'o' && token_buf[1] == 'p' && token_buf[2] == 'c') { int op1 = (int)strtoul(token_buf + 3, &dummy, 10); uint64_t num; if (!parse_value(&num)) return 0; assemble_pcd(op1, (int)num); } else return 0; return 1; } } return 0; }