示例#1
0
文件: arg.c 项目: bondians/quence
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;
}
示例#2
0
文件: caesar.c 项目: ladmerc/cs50
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;
}
示例#3
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;
}