RT
parse.h
Go to the documentation of this file.
1 /* ************************************************************************** */
2 /* */
3 /* ::: :::::::: */
4 /* parse.h :+: :+: :+: */
5 /* +:+ +:+ +:+ */
6 /* By: sklepper <sklepper@student.42.fr> +#+ +:+ +#+ */
7 /* +#+#+#+#+#+ +#+ */
8 /* Created: 2018/11/28 05:12:37 by nihuynh #+# #+# */
9 /* Updated: 2019/07/18 15:50:40 by sklepper ### ########.fr */
10 /* */
11 /* ************************************************************************** */
12 
13 #ifndef PARSE_H
14 # define PARSE_H
15 
16 # include <stddef.h>
17 # include "rtstruct.h"
18 # include "t_data.h"
19 
20 # define ERR_P_CAMERA "Err : camera is missing"
21 # define ERR_P_CONTENT "Err : content is missing"
22 # define ERR_UNKNWD_OBJ "Err : Unknown object"
23 # define ERR_UNKNWD_MAT "Err : Unknown material"
24 # define ERR_UNKNWD_OBJ_A "Err : Unknown object in animation list"
25 # define ERR_UNKNWD_MOTION "Err : Unknown motion in animation list"
26 
27 # define ERR_PARSE_VEC3 "Err : [Vec3] Wrong number of args"
28 # define ERR_PARSE_FLOAT "Err : [Float] Wrong number of args"
29 # define ERR_PARSE_COLOR "Err : [Color] Wrong number of args"
30 # define ERR_PARSE_VEC2 "Err : [Vec2] Wrong number of args"
31 # define ERR_OP_EQUAL_OBJ "Err : [Csg] sizeof(t_obj) == sizeof(t_csg_op)"
32 # define ERR_PARSE_STRN "Err : line is NULL"
33 # define ERR_GREED_NULL "Err : greed is NULL"
34 # define ERR_PARSE_OUTR "Err : line_idx out of range"
35 
36 # define ERR_P_CLOSE_PAR "Err : Missing parenthese"
37 # define ERR_P_BRACKET_CLSE "Err : Missing closing bracket"
38 # define ERR_P_BRACKET_OPEN "Err : Missing opening bracket"
39 # define ERR_P_KEY "Err : Missing key"
40 
41 # define ERR_PARSE_SET_SP "Err : *sphere is null"
42 # define ERR_PARSE_SET_CY "Err : *cylinder is null"
43 # define ERR_PARSE_SET_PL "Err : *plan is null"
44 # define ERR_PARSE_SET_CO "Err : *cone is null"
45 # define ERR_PARSE_SET_LI "Err : *light is null"
46 # define ERR_PARSE_SET_CSG "Err : *csg is null"
47 # define ERR_FILE "Err : File is too small to be valid"
48 
49 # define CSV_MATERIAL_COLUMN_COUNT 17
50 
51 /*
52 ** Parsing structs :
53 */
54 
55 typedef struct s_parse_txt t_parse_txt;
56 
57 typedef struct s_parse
58 {
59  char *printout;
60  size_t content_size;
61  void (*setter) (t_obj*, void*, t_parse_txt*);
62  void (*export) (int, void*);
63 } t_parse;
64 
66 {
67  int line_idx;
68  int line_max;
69  char **greed;
70  char *filename;
72  const char *err_func;
73  const char *err_file;
75  bool is_pop;
77 };
78 
79 void err_set(t_parse_txt *scene_file, const char err_func[],
80  int line_in_code, const char err_file[]);
81 void err_exit(char *err_msg, t_parse_txt *scene_file);
82 char *pop_line(t_parse_txt *scene_file);
83 char *get_curr_line(t_parse_txt *scene_file);
84 
85 typedef struct s_objset
86 {
87  void (*f_inter) (t_inter*, t_obj*);
88  void (*f_gui) (void*, void*);
89  void (*find_normal) (t_inter*);
91 } t_objset;
92 
93 typedef struct s_built
94 {
95  void (*setter) (t_obj*, void*);
96 } t_built;
97 
98 /*
99 ** Parser :
100 */
101 
102 void init_parse_cfg(int type, t_parse *config);
103 int load_parse_txt(t_parse_txt *s_f, t_data *app, char *filename);
104 void check_opening_bracket(t_parse_txt *scene_file);
105 void check_closing_bracket(t_parse_txt *scene_file);
106 
107 void create_obj_from_txt(t_obj *obj, t_parse_txt *scene_f, int type);
108 void parse_light(t_parse_txt *scene_file);
109 void parse_shape(t_parse_txt *scene_file, int type);
110 void parse_anim(t_parse_txt *scene_file);
111 void parse_motion(t_parse_txt *scene_file, t_anim *anim);
112 
113 t_color parse_color(char *key, t_parse_txt *scene_file);
114 float parse_fval(char *key, t_parse_txt *scene_file);
115 t_vec3 parse_vector(char *key, t_parse_txt *scene_file);
116 t_vec2 parse_vec2(char *key, t_parse_txt *scene_file);
117 char *parse_str(t_parse_txt *scene_file, char *key);
118 t_texture *parse_texture(char *key_name, t_parse_txt *scene_file);
119 int parse_int(char *key, t_parse_txt *scene_file);
120 
121 /*
122 ** New object
123 */
124 
125 void sphere_new(t_obj *obj, void *res);
126 void plane_new(t_obj *obj, void *res);
127 void cylinder_new(t_obj *obj, void *res);
128 void cone_new(t_obj *obj, void *res);
129 void cube_new(t_obj *obj, void *res);
130 char *name_obj(int type, int *nb);
131 
132 /*
133 ** list of material & textures :
134 */
135 
136 int matcmp(void *content, void *key);
137 int texcmp(void *content, void *key);
138 int obj_cmp_key(void *content, void *key);
139 int light_cmp_key(void *content, void *key);
140 void load_texture(t_texture *tex);
141 void load_nbind_texture(t_texture *tex, uint32_t *bind);
142 void open_textures(t_data *app);
143 
144 /*
145 ** Getters :
146 */
147 
148 int get_obj_type(char *obj_type);
149 char *get_args_key_require(t_parse_txt *scene_file, const char *key);
150 char *get_args_after_key(t_parse_txt *scene_file, const char *key);
151 
152 /*
153 ** Setters :
154 */
155 
156 void obj_set(t_obj *obj, int type);
157 void light_set(t_light *light, t_parse_txt *scene_file);
158 void cone_set(t_obj *obj, void *cone, t_parse_txt *scene_file);
159 void cylinder_set(t_obj *obj, void *cylinder, t_parse_txt *scene_fi);
160 void plane_set(t_obj *obj, void *plane, t_parse_txt *scene_file);
161 void sphere_set(t_obj *obj, void *sphere, t_parse_txt *scene_file);
162 void csg_set(t_obj *obj, void *root, t_parse_txt *scene_file);
163 void cube_set(t_obj *obj, void *root, t_parse_txt *scene_file);
164 void tore_set(t_obj *obj, void *root, t_parse_txt *scene_file);
165 
166 /*
167 ** CSG :
168 */
169 
170 int csg_is_op(t_parse_txt *scene_file);
171 
172 #endif
s_vec3
Definition: rtstruct.h:30
s_parse_txt::filename
char * filename
Definition: parse.h:70
t_parse
struct s_parse t_parse
parse_vector
t_vec3 parse_vector(char *key, t_parse_txt *scene_file)
Definition: parse_toolbox.c:47
cube_new
void cube_new(t_obj *obj, void *res)
Definition: new_object_tools.c:83
cone_set
void cone_set(t_obj *obj, void *cone, t_parse_txt *scene_file)
Definition: setter.c:95
cube_set
void cube_set(t_obj *obj, void *root, t_parse_txt *scene_file)
Definition: set_shape.c:43
s_parse_txt::greed
char ** greed
Definition: parse.h:69
parse_texture
t_texture * parse_texture(char *key_name, t_parse_txt *scene_file)
Definition: parse_shape.c:18
create_obj_from_txt
void create_obj_from_txt(t_obj *obj, t_parse_txt *scene_f, int type)
General parser for all of the shapes.
Definition: parse_shape.c:87
s_objset::get_uv
t_vec3(* get_uv)(t_inter *)
Definition: parse.h:90
sphere_set
void sphere_set(t_obj *obj, void *sphere, t_parse_txt *scene_file)
Definition: setter.c:17
s_parse::printout
char * printout
Definition: parse.h:59
load_texture
void load_texture(t_texture *tex)
Definition: texture_loader.c:21
get_obj_type
int get_obj_type(char *obj_type)
tore_set
void tore_set(t_obj *obj, void *root, t_parse_txt *scene_file)
Definition: set_shape.c:17
cylinder_set
void cylinder_set(t_obj *obj, void *cylinder, t_parse_txt *scene_fi)
Definition: setter.c:69
s_color
Definition: color.h:23
check_opening_bracket
void check_opening_bracket(t_parse_txt *scene_file)
Verify that the curr_line is a opening bracket.
Definition: parse_utils.c:78
texcmp
int texcmp(void *content, void *key)
Definition: parse_cmp.c:28
parse_fval
float parse_fval(char *key, t_parse_txt *scene_file)
Definition: parse_toolbox.c:76
s_objset::f_inter
void(* f_inter)(t_inter *, t_obj *)
Definition: parse.h:87
s_parse_txt::exit_on_err
bool exit_on_err
Definition: parse.h:76
s_obj
Definition: rtstruct.h:245
s_built::setter
void(* setter)(t_obj *, void *)
Definition: parse.h:95
s_built
Definition: parse.h:93
s_parse_txt::is_pop
bool is_pop
Definition: parse.h:75
s_parse_txt::err_func
const char * err_func
Definition: parse.h:72
parse_str
char * parse_str(t_parse_txt *scene_file, char *key)
Definition: parser.c:38
get_args_key_require
char * get_args_key_require(t_parse_txt *scene_file, const char *key)
Verify curr_line is containing the proper value and key.
Definition: parse_utils.c:27
s_parse_txt::err_at_line
int err_at_line
Definition: parse.h:74
s_texture
Definition: rtstruct.h:166
light_cmp_key
int light_cmp_key(void *content, void *key)
Definition: parse_cmp.c:50
s_parse
Definition: parse.h:57
parse_int
int parse_int(char *key, t_parse_txt *scene_file)
Definition: parse_toolbox.c:118
parse_light
void parse_light(t_parse_txt *scene_file)
Built a light obj and add it to the scene.lst_light.
Definition: parser.c:24
obj_set
void obj_set(t_obj *obj, int type)
Setting the obj struct.
Definition: obj_data.c:120
s_parse::export
void(* export)(int, void *)
Definition: parse.h:62
s_parse_txt::app
t_data * app
Definition: parse.h:71
obj_cmp_key
int obj_cmp_key(void *content, void *key)
Definition: parse_cmp.c:39
load_parse_txt
int load_parse_txt(t_parse_txt *s_f, t_data *app, char *filename)
: Load a file into the t_parse_txt & bind the hooks and t_data app
Definition: parse_txt.c:123
sphere_new
void sphere_new(t_obj *obj, void *res)
Definition: new_object_tools.c:17
parse_vec2
t_vec2 parse_vec2(char *key, t_parse_txt *scene_file)
Definition: parse_toolbox.c:89
get_args_after_key
char * get_args_after_key(t_parse_txt *scene_file, const char *key)
Definition: parse_utils.c:48
csg_is_op
int csg_is_op(t_parse_txt *scene_file)
Definition: utils.c:89
cylinder_new
void cylinder_new(t_obj *obj, void *res)
Definition: new_object_tools.c:51
s_objset::find_normal
void(* find_normal)(t_inter *)
Definition: parse.h:89
rtstruct.h
s_data
Definition: t_data.h:24
s_parse_txt::line_max
int line_max
Definition: parse.h:68
s_objset::f_gui
void(* f_gui)(void *, void *)
Definition: parse.h:88
s_parse::content_size
size_t content_size
Definition: parse.h:60
parse_anim
void parse_anim(t_parse_txt *scene_file)
Definition: parse_anim.c:101
err_set
void err_set(t_parse_txt *scene_file, const char err_func[], int line_in_code, const char err_file[])
Save data that produce the exit.
Definition: parse_txt.c:105
get_curr_line
char * get_curr_line(t_parse_txt *scene_file)
Check if the line_idx is in range and return the curr_line.
Definition: parse_txt.c:28
s_parse_txt::err_file
const char * err_file
Definition: parse.h:73
s_parse_txt
Definition: parse.h:65
check_closing_bracket
void check_closing_bracket(t_parse_txt *scene_file)
Verify that the curr_line is a closing bracket.
Definition: parse_utils.c:96
load_nbind_texture
void load_nbind_texture(t_texture *tex, uint32_t *bind)
Definition: interface.c:88
light_set
void light_set(t_light *light, t_parse_txt *scene_file)
Definition: setter.c:121
s_parse::setter
void(* setter)(t_obj *, void *, t_parse_txt *)
Definition: parse.h:61
t_vec3
struct s_vec3 t_vec3
err_exit
void err_exit(char *err_msg, t_parse_txt *scene_file)
Print the exit message and exit after cleaning the data allocated.
Definition: parse_txt.c:75
init_parse_cfg
void init_parse_cfg(int type, t_parse *config)
Setting config for the type of object we want to parse.
Definition: obj_data.c:28
plane_set
void plane_set(t_obj *obj, void *plane, t_parse_txt *scene_file)
Definition: setter.c:39
parse_shape
void parse_shape(t_parse_txt *scene_file, int type)
Built a shape obj and add it to the scene.lst_obj.
Definition: parse_shape.c:120
plane_new
void plane_new(t_obj *obj, void *res)
Definition: new_object_tools.c:34
parse_color
t_color parse_color(char *key, t_parse_txt *scene_file)
Definition: parse_toolbox.c:18
s_anim
Definition: animate.h:20
s_inter
Definition: rtstruct.h:218
t_built
struct s_built t_built
csg_set
void csg_set(t_obj *obj, void *root, t_parse_txt *scene_file)
Definition: parse_csg.c:70
t_data.h
s_objset
Definition: parse.h:85
name_obj
char * name_obj(int type, int *nb)
Definition: obj_name.c:16
matcmp
int matcmp(void *content, void *key)
Definition: parse_cmp.c:17
open_textures
void open_textures(t_data *app)
Definition: texture_loader.c:62
parse_motion
void parse_motion(t_parse_txt *scene_file, t_anim *anim)
Definition: parse_anim.c:34
s_parse_txt::line_idx
int line_idx
Definition: parse.h:67
t_objset
struct s_objset t_objset
pop_line
char * pop_line(t_parse_txt *scene_file)
Return the curr_line and move line_idx to the next line.
Definition: parse_txt.c:57
s_vec2
Definition: rtstruct.h:24
cone_new
void cone_new(t_obj *obj, void *res)
Definition: new_object_tools.c:67
s_light
Definition: rtstruct.h:121