1 /* Asset Package Compiler */
11 extern void yyerror();
14 #define DIR_SIZE 128/* size when all files have been concatenated together */
16 char dir_files[DIR_SIZE];
19 int populate_yyin(FILE*);
20 int handle_vdat(char *);
21 int eval_png_file(char*);
22 int read_png_file(char*);
25 %define parse.error verbose
30 /* %token <str> EXT */
32 /* %token <str> SPR */
37 /* SS: SPR '/' MD '.' EXT */
49 FLIST : FNAME /* Now output to VDAT.o */
50 FNAME : VDAT {printf("handle_vdat(%s)\n", $1);handle_vdat(yylval.str);printf("handled vdat\n");}
56 main(int argc, char** argv)
60 /* Concatenate all files into buf, they are null-terminated
64 fp = fopen("all_files", "w+");
66 if(!populate_yyin(fp))
67 printf("error processing the directory");
71 yyparse(); /* runs handle_vdat after token is scanned */
78 yyerror (char const *s)
80 fprintf(stderr, "%s\n", s);
83 /* TODO: READ INTO SINGLE BUFFER, NOT A FILE */
85 populate_yyin(FILE* fp)
91 DIR* dp = opendir("pngfiles");
92 /* Concatenate all file names, seperated by '\0'
96 while(ep = readdir(dp))
97 { file_len = strlen(ep->d_name);
98 fwrite(ep->d_name, 1, file_len, fp);
99 printf("writing %s to file\n", ep->d_name);
101 fseek(fp, SEEK_SET, 0);
113 /* Analyze file_name for information on sprite sheet,
114 store sprite sheet and label into sprite then
115 push sprite onto sprites[]*/
117 handle_vdat(char* file_name)
119 /* Parse the file_name for data */
122 /* Get the specs of the PNG file */
123 if(!eval_png_file(file_name))
125 printf("Failed in read_png_file\n");
129 /* Insert sprite sheet from PNG into sprite_sheets */
135 /* Store dir/filename in label as well as any other data that fits */
137 int eval_png_file(char* file_name)
139 /* Evaluate file_name for metadata */
141 /* Extracts header info from png_file */
142 read_png_file(file_name);
145 /* Create the symbol and put it in symbol_table[]*/
152 /* variables for libPNG */
153 int png_width,png_height;
160 read_png_file( char* file_name)
165 char* dir = "pngfiles";
167 /* TODO: Change this fopen to a real var! */
168 FILE *fp = fopen("pngfiles/env_street_road03_0.png","rb");
171 { printf("Could not read file %s in handle_vdat()", file_name);
175 fread(header, 1, 8, fp);
177 is_png = !png_sig_cmp(header, 0, 8);
181 png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
184 { printf("Failed to allocate png_ptr\n");
187 info_ptr = png_create_info_struct(png_ptr);
190 { printf("Failed to create info_ptr\n");
191 png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL);
195 png_infop end_info = png_create_info_struct(png_ptr);
197 { printf("Failed to create end_info \n");
198 png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL);
202 if(setjmp(png_jmpbuf(png_ptr)))
203 { printf("Failed in init_io\n");
204 png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL);
208 png_init_io(png_ptr, fp);
209 png_set_sig_bytes(png_ptr, 8);
211 png_read_info(png_ptr, info_ptr);
213 png_width = png_get_image_width(png_ptr, info_ptr);
214 png_height = png_get_image_height(png_ptr, info_ptr);
215 color_type = png_get_color_type(png_ptr, info_ptr);
216 bit_depth = png_get_bit_depth(png_ptr, info_ptr);
218 png_read_update_info(png_ptr, info_ptr);