Esempio n. 1
0
void			ft_sub(t_env *env, t_process *proc)
{
	t_list	*params;
	t_param	**param;
	int		op_size;

	params = get_parameters(env, proc);
	op_size = calculate_size(env->arena[(proc->pc + 1) % MEM_SIZE], 3, 4);
	if (!(param = check_params(params)))
	{
		proc->pc = ft_mod((proc->pc + op_size + 2) % MEM_SIZE);
		ft_free(params);
		return ;
	}
	proc->carry = 0;
	proc->reg[param[2]->value - 1] = param[0]->real_value
		- param[1]->real_value;
	if (env->flags->v && env->flags->verbose->show_operations)
		verb_sub(env, proc);
	proc->pc = ft_mod((proc->pc + op_size + 2) % MEM_SIZE);
	if (proc->reg[param[2]->value - 1] == 0)
		proc->carry = 1;
	ft_free(params);
	free(param);
}
Esempio n. 2
0
File: ld.c Progetto: magouin/Corewar
void			ft_ld(t_env *env, t_process *proc)
{
	t_list	*params;
	int		op_size;
	t_param **param;

	params = get_parameters(env, proc);
	op_size = calculate_size(env->arena[(proc->pc + 1) % MEM_SIZE], 2, 4);
	if (!(param = check_params(params)))
	{
		proc->pc = ft_mod((proc->pc + op_size + 2) % MEM_SIZE);
		ft_free(params);
		return ;
	}
	proc->carry = 0;
	if (param[0]->type == IND_CODE)
		proc->reg[param[1]->value - 1] = ft_getnumber(env->arena
			, (proc->pc + param[0]->value % IDX_MOD) % MEM_SIZE, 4);
	else
		proc->reg[param[1]->value - 1] = param[0]->value;
	if (env->flags->v && env->flags->verbose->show_operations)
		verb_ld(proc, param);
	proc->pc = ft_mod((proc->pc + op_size + 2) % MEM_SIZE);
	if (proc->reg[param[1]->value - 1] == 0)
		proc->carry = 1;
	ft_free(params);
	free(param);
}
Esempio n. 3
0
void		ft_lldi(t_env *env, t_process *proc)
{
	t_list	*params;
	int		value;
	int		op_size;

	op_size = calculate_size(env->arena[proc->pc + 1], 3, 2);
	params = get_parameters(env, proc);
	if (count_t_param(params) != 3
			|| va(1, 1, 1, (t_param *)params->content) == -1
			|| va(1, 1, 0, (t_param *)params->next->content) == -1
			|| va(1, 0, 0, (t_param *)params->next->next->content) == -1)
	{
		proc->pc = ft_mod((proc->pc + op_size + 2) % MEM_SIZE);
		ft_free(params);
		return ;
	}
	value = ft_getnumber(env->arena, proc->pc
				+ (((t_param *)params->content)->real_value
				+ ((t_param *)params->next->content)->real_value), 4);
	proc->reg[((t_param *)params->next->next->content)->value - 1] = value;
	if (env->flags->v && env->flags->verbose->show_operations)
		verb_lldi(params, proc);
	proc->pc = ft_mod((proc->pc + op_size + 2) % MEM_SIZE);
	proc->carry = (value == 0) ? 1 : 0;
	ft_free(params);
}
Esempio n. 4
0
t_format *get_format(char **s)
{
	t_format	*opt;
	char		*p;
	char		*tmp;
	printf("checking format %s!\n", *s);

	if ((p = strdup(*s)) == NULL)
		return (NULL);
	tmp = p;
	if ((opt = malloc(sizeof(t_format))) == NULL)
		return (NULL);
	opt->arg = ft_get_nbrs(&tmp, 0);
	if (*tmp != '$')
		opt->arg = 0;
	opt->flags = ft_flags(&tmp);
	opt->width = ft_get_nbrs(&tmp, 0);
	opt->precision = ft_get_nbrs(&tmp, '.');
	opt->type = ft_mod(&tmp);
	opt->bad_type = ft_get_type(*tmp);
	opt->type |= opt->bad_type;
	printf("got that type ! is it good ? %hu\n", opt->type);
	opt->bad_type = (opt->bad_type) ? opt->bad_type : 0;
	*s += tmp + 1 - p;
	ft_memdel((void **)&p);
	return (opt);
}
Esempio n. 5
0
long long	ft_rights(t_file *elem1, t_file *elem2, t_opt opt)
{
	if (elem1->rights[0] == 'd' && elem2->rights[0] != 'd')
		return (1);
	else if (elem1->rights[0] != 'd' && elem2->rights[0] == 'd')
		return (-1);
	else
	{
		if (!opt.t && !opt.r)
			return (ft_lexic(elem1, elem2, opt));
		else if (opt.t && !opt.r)
			return (ft_mod(elem1, elem2, opt));
		else if (opt.t && opt.r)
			return (ft_mod_inv(elem1, elem2, opt));
		else if (!opt.t && opt.r)
			return (ft_lexic_inv(elem1, elem2, opt));
	}
	return (0);
}
Esempio n. 6
0
	while (5 - len)
	{
		ft_putchar(' ');
		len++;
	}
	ft_putnbr(proc->num);
	ft_putstr(" | sti r");
	ft_putnbr(param[0]->value);
	verbose_sti2(param, proc);
	free(str);
}

static void		set_value(t_env *env, t_process *proc, int value
					, int real_value)
{
	env->arena[ft_mod(proc->pc + value % IDX_MOD)
		% MEM_SIZE] = real_value >> 24;
	env->arena[ft_mod(proc->pc + value % IDX_MOD + 1)
		% MEM_SIZE] = (real_value & 0xff0000) >> 16;
	env->arena[ft_mod(proc->pc + value % IDX_MOD + 2)
		% MEM_SIZE] = (real_value & 0xff00) >> 8;
	env->arena[ft_mod(proc->pc + value % IDX_MOD + 3)
		% MEM_SIZE] = real_value & 0xff;
}

static t_param	**check_params(t_list *params)
{
	t_param	**param;

	if (!params || !params->next || !params->next->next)
		return (NULL);