-/* Asset Package Compiler */
-%{
- #include <stdio.h>
- #include <string.h>
- #include <dirent.h>
- #include "sprite.h"
- #include "symbol.h"
- #include <png.h>
-
-
- extern void yyerror();
- extern int rinit();
- extern int yylex();
- #define DIR_SIZE 128/* size when all files have been concatenated together */
-
- char dir_files[DIR_SIZE];
- FILE* yyin;
-
- int populate_yyin(FILE*);
- int handle_vdat(char *);
- int eval_png_file(char*);
- int read_png_file(char*);
-
-%}
-%define parse.error verbose
-%union{
- char* str;
- }
-
-/* %token <str> EXT */
-/* %token <str> FW */
-/* %token <str> SPR */
-/* %token CC */
-
-/* /\* Rules *\/ */
-/* %% */
-/* SS: SPR '/' MD '.' EXT */
-/* MD: CC '_' FW */
-/* | FW */
-/* | CC */
-
-
-%token <str> VDAT
-%token ODAT
-%token ADAT
-
-/* Rules */
-%%
-FLIST : FNAME /* Now output to VDAT.o */
-FNAME : VDAT {printf("handle_vdat(%s)\n", $1);handle_vdat(yylval.str);printf("handled vdat\n");}
- | ADAT
- | ODAT
-
-%%
-int
-main(int argc, char** argv)
-{
- /* Take arguments */
-
- /* Concatenate all files into buf, they are null-terminated
- by default */
- FILE *fp;
-
- fp = fopen("all_files", "w+");
-
- if(!populate_yyin(fp))
- printf("error processing the directory");
-
- yyin = fp;
- rinit();
- yyparse(); /* runs handle_vdat after token is scanned */
-
-
-
- return 0;
-}
-void
-yyerror (char const *s)
-{
- fprintf(stderr, "%s\n", s);
-}
-
-/* TODO: READ INTO SINGLE BUFFER, NOT A FILE */
-int
-populate_yyin(FILE* fp)
-{
- int files_pos = 0;
- int file_len = 0;
- struct dirent* ep;
-
- DIR* dp = opendir("pngfiles");
- /* Concatenate all file names, seperated by '\0'
- into files[] */
- if(dp != NULL)
- {
- while(ep = readdir(dp))
- { file_len = strlen(ep->d_name);
- fwrite(ep->d_name, 1, file_len, fp);
- printf("writing %s to file\n", ep->d_name);
- }
- fseek(fp, SEEK_SET, 0);
- return 0;
- }
- else
- {return 1;
- }
- closedir(dp);
-}
-
-
-
-
-/* Analyze file_name for information on sprite sheet,
- store sprite sheet and label into sprite then
- push sprite onto sprites[]*/
-int
-handle_vdat(char* file_name)
-{
- /* Parse the file_name for data */
-
-
- /* Get the specs of the PNG file */
- if(!eval_png_file(file_name))
- {
- printf("Failed in read_png_file\n");
- return 1;
- }
-
- /* Insert sprite sheet from PNG into sprite_sheets */
- push_sprite();
-
-
-
-
- /* Store dir/filename in label as well as any other data that fits */
-}
-int eval_png_file(char* file_name)
-{
- /* Evaluate file_name for metadata */
-
- /* Extracts header info from png_file */
- read_png_file(file_name);
-
-
- /* Create the symbol and put it in symbol_table[]*/
-
- return 0;
-}
-
-
-
-/* variables for libPNG */
-int png_width,png_height;
-png_byte bit_depth;
-png_byte color_type;
-png_structp png_ptr;
-png_infop info_ptr;
-
-int
-read_png_file( char* file_name)
-{
- /* Setup PNG file */
- char header[8];
- int is_png = 0;
- char* dir = "pngfiles";
-
- /* TODO: Change this fopen to a real var! */
- FILE *fp = fopen("pngfiles/env_street_road03_0.png","rb");
-
- if(!fp)
- { printf("Could not read file %s in handle_vdat()", file_name);
- return 1;
- }
-
- fread(header, 1, 8, fp);
-
- is_png = !png_sig_cmp(header, 0, 8);
- if(!is_png)
- return 1;
-
- png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-
- if (!png_ptr)
- { printf("Failed to allocate png_ptr\n");
- return 1;
- }
- info_ptr = png_create_info_struct(png_ptr);
-
- if (!info_ptr)
- { printf("Failed to create info_ptr\n");
- png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL);
- return 1;
- }
-
- png_infop end_info = png_create_info_struct(png_ptr);
- if (!end_info)
- { printf("Failed to create end_info \n");
- png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL);
- return 1;
- }
-
- if(setjmp(png_jmpbuf(png_ptr)))
- { printf("Failed in init_io\n");
- png_destroy_read_struct(&png_ptr,(png_infopp)NULL, (png_infopp)NULL);
- fclose(fp);
- return 1;
- }
- png_init_io(png_ptr, fp);
- png_set_sig_bytes(png_ptr, 8);
-
- png_read_info(png_ptr, info_ptr);
-
- png_width = png_get_image_width(png_ptr, info_ptr);
- png_height = png_get_image_height(png_ptr, info_ptr);
- color_type = png_get_color_type(png_ptr, info_ptr);
- bit_depth = png_get_bit_depth(png_ptr, info_ptr);
-
- png_read_update_info(png_ptr, info_ptr);
-
-
- return 0;
-
-}