-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathop_exec.c
43 lines (39 loc) · 1.6 KB
/
op_exec.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* op_exec.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: aait-ihi <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/10/09 12:28:26 by aait-ihi #+# #+# */
/* Updated: 2019/11/04 05:30:43 by aait-ihi ### ########.fr */
/* */
/* ************************************************************************** */
#include "corewar.h"
_Bool *parse_operation(t_process *prc)
{
int i;
ft_bzero(&prc->cmp,sizeof(t_op_component));
prc->cmp.code = prc->memory[prc->pc];
if (prc->cmp.code < 1 || prc->cmp.code > 16)
return (0);
prc->pc++;
if(!set_arg(prc, prc->cmp.code), prc->cmp.code))
return(0);
return(1);
}
int exe_op(t_process *prc)
{
if(parse_operation(prc))
{
if(op_tab[prc->cmp.code].op_type == 1)
logical_op(prc, &prc->cmp);
else if(op_tab[prc->cmp.code].op_type == 2)
fork_op(prc, &prc->cmp);
st_op(prc, &prc->cmp);
if(op_tab[prc->cmp.code].carry)
set_carry(prc, &prc->cmp);
prc->cycle = op_tab[prc->cmp.code].waiting_cycle;
}
return(-1);
}