Esempio n. 1
0
static
void free_components(dumb_ptr<component_t> *component_holder)
{
    if (*component_holder == NULL)
        return;
    free_components(&(*component_holder)->next);
    (*component_holder).delete_();
    *component_holder = NULL;
}
Esempio n. 2
0
static
effect_set_t *check_spellguard(dumb_ptr<spellguard_t> guard,
        dumb_ptr<map_session_data> caster, dumb_ptr<env_t> env,
        int *near_miss)
{
    spellguard_check_t check;
    effect_set_t *retval;
    check.catalysts = NULL;
    check.components = NULL;
    check.mana = 0;
    check.casttime = interval_t::zero();

    retval = spellguard_check_sub(&check, guard, caster, env, near_miss);

    free_components(&check.catalysts);
    free_components(&check.components);

    return retval;
}
Esempio n. 3
0
int main(int argc, char *argv[])
{

	program *prog = (program *) malloc(sizeof(program));
	player *user = (player *) malloc(sizeof(player));
	whitespace_info *whitespace_prog = (whitespace_info *) malloc(sizeof(whitespace_info));
	printing_board *first_board = (printing_board *) malloc(sizeof(printing_board));
	password_info *pw_info = (password_info *) malloc(sizeof(password_info));

	SDL_Simplewin sw;
	other_arg_type argument_indicator;

	check_initialisation(prog, user, whitespace_prog, first_board, pw_info);
	password_check(pw_info);

	if(pw_info -> pw_indicator == accept){

		check_command_line_arguments(user, argc, &argument_indicator, argv, pw_info);
		initialisation(prog, user, first_board);

		if(argument_indicator == secret){

			whitespace_functions(argv[1], whitespace_prog);
			open_program_file("ws_to_reg_translation.txt", prog);

		}
		else if(argument_indicator == combine_files){

			combine_ws_reg_files(prog, whitespace_prog, argv[1], argv[2]);

		}
		else if(argument_indicator != password_change){

			open_program_file(argv[1], prog);

		}

		if(argument_indicator == regular || argument_indicator == secret){

			parse_text_and_interpret(prog, user, first_board);
			printing(user, first_board, &sw);

		}
		else if(argument_indicator != password_change){

			write_file_to_whitespace(prog);

		}

	}

	free_components(first_board, prog, user, whitespace_prog, pw_info);

	return(0);
}
Esempio n. 4
0
static
effect_set_t *spellguard_check_sub(spellguard_check_t *check,
        dumb_ptr<spellguard_t> guard,
        dumb_ptr<map_session_data> caster,
        dumb_ptr<env_t> env,
        int *near_miss)
{
    if (guard == NULL)
        return NULL;

    switch (guard->ty)
    {
        case SPELLGUARD::CONDITION:
            if (!magic_eval_int(env, guard->s.s_condition))
                return NULL;
            break;

        case SPELLGUARD::COMPONENTS:
            copy_components(&check->components, guard->s.s_components);
            break;

        case SPELLGUARD::CATALYSTS:
            copy_components(&check->catalysts, guard->s.s_catalysts);
            break;

        case SPELLGUARD::CHOICE:
        {
            spellguard_check_t altcheck = *check;
            effect_set_t *retval;

            altcheck.components = NULL;
            altcheck.catalysts = NULL;

            copy_components(&altcheck.catalysts, check->catalysts);
            copy_components(&altcheck.components, check->components);

            retval =
                spellguard_check_sub(&altcheck, guard->next, caster, env,
                                      near_miss);
            free_components(&altcheck.catalysts);
            free_components(&altcheck.components);
            if (retval)
                return retval;
            else
                return spellguard_check_sub(check, guard->s.s_alt, caster,
                                             env, near_miss);
        }

        case SPELLGUARD::MANA:
            check->mana += magic_eval_int(env, guard->s.s_mana);
            break;

        case SPELLGUARD::CASTTIME:
            check->casttime += static_cast<interval_t>(magic_eval_int(env, guard->s.s_mana));
            break;

        case SPELLGUARD::EFFECT:
            if (spellguard_can_satisfy(check, caster, env, near_miss))
                return &guard->s.s_effect;
            else
                return NULL;

        default:
            FPRINTF(stderr, "Unexpected spellguard type %d\n",
                    guard->ty);
            return NULL;
    }

    return spellguard_check_sub(check, guard->next, caster, env, near_miss);
}