Files
pasm/interpreter_states.h
ALittlePatate a97fde9f86 first commit of the recode
70% of the code was re-writter from scratch
2024-01-18 16:01:04 +01:00

72 lines
1.3 KiB
C

#pragma once
#include <stdio.h>
#define MAX_LABELS 256
#define MAX_ARG_SIZE 25
#define STACK_SIZE 50
extern FILE *fstream;
typedef enum cmp_return_codes {
CMP_ERROR = -1, //unused
CMP_EQUAL,
CMP_BELOW,
CMP_ABOVE,
} cmp_return_codes;
typedef enum check_args_codes {
ARG1_WRONG,
ARG2_WRONG,
WRONG_NUMBER,
OK
} check_args_codes ;
typedef enum stack_codes {
OVERFLOW,
UNDERFLOW,
STACK_OK
} stack_codes;
typedef struct t_arguments {
char* arg1;
char* arg2;
} s_arguments;
typedef struct t_registers {
int a1, a2, a3, a4, a5, a6, a7, a8, a9, eax;
} s_registers;
typedef struct t_state {
int curr_line;
int num_labels;
char **labels;
int *labels_values;
s_arguments *args;
s_registers *registers;
int should_exit;
int RET_STACK[STACK_SIZE];
int RET_STACK_IDX;
int STACK_IDX;
int STACK[STACK_SIZE];
int last_jmp_code;
stack_codes last_stack_code;
cmp_return_codes last_cmp_code;
check_args_codes last_check_args_code;
} s_state;
extern s_state *state;
typedef enum E_LABEL_ERR {
LABEL_OK,
LABEL_ALREADY_EXISTS,
LABEL_INVALID,
LABEL_MAX,
LABEL_ERROR
} LABEL_ERR;
int init_state();
void free_state();
void set_exit_state(int exit_state);
int get_exit_state();
LABEL_ERR add_label(char *label, int line);
int parse_arguments(char *args);