int resolve_label_ref(argument *arg) { if (Mode == mode_label_undef) { if (symbol_exists(labels, (char *) Index)) { char *msg; char *label; Mode = mode_constant; label = (char *) Index; Value = symbol_value(labels, label); Index = 0; msg = validate_argument(arg); if (msg) { eprintf("Resolving Label \"%s\": %s\n", label, msg); return 1; } return 0; } else { if (unresolved_labels) { set_symbol( unresolved_labels, (char *) Index, symbol_value(unresolved_labels, (char *) Index) + 1 ); } return 1; } } return 0; }
int main(int argc, string argv[]) { if (validate_argument(argc, argv) == 1) { return 1; } int key = atoi(argv[1]); // convert argument to integer string text = GetString(); caesar_encrypt(text, key); printf("\n"); return 0; }
char *validate_instruction(instruction *instr) { int argc = symbol_value(argcounts, instr->instruction); int cnt = count_args(instr); int idx; char *err_msg; argument *arg; if (Is_Meta) { argc = cnt; err_msg = Meta->validate(instr); if (err_msg) return err_msg; } if (cnt != argc) { sprintf( err_buf, "Wrong number of arguments for \"%s\". Expected %i, parsed %i", instr->instruction, argc, cnt ); return err_buf; } for (idx = 0, arg = instr->args; idx < cnt; idx++, arg = arg->next) { if ((Mode == mode_string) && ! String_Allowed) { sprintf( err_buf, "String arguments are not allowed for \"%s\"", instr->instruction ); return err_buf; } if (Data_Required && ! mode_is_data(Mode)) { sprintf( err_buf, "\"%s\" accepts constant data arguments only", instr->instruction ); return err_buf; } err_msg = validate_argument(arg); if (err_msg) { sprintf( err_buf, "%s arg: %s", Ordinal(idx), err_msg ); return err_buf; } } return NULL; }