From 888a5d065640ff601e07bc35710daec2c4e6cc0b Mon Sep 17 00:00:00 2001 From: inmarket Date: Wed, 5 Feb 2014 08:45:28 +1000 Subject: [PATCH] Update file2c tool to enable creation of directory entries for the ROM file system. --- include/gfile/gfile.h | 5 -- include/gfile/options.h | 6 +- tools/file2c/binaries/windows/file2c.exe | Bin 9728 -> 22030 bytes tools/file2c/src/Makefile.mingw32 | 10 +++ tools/file2c/src/file2c.c | 95 +++++++++++++++-------- 5 files changed, 77 insertions(+), 39 deletions(-) create mode 100644 tools/file2c/src/Makefile.mingw32 diff --git a/include/gfile/gfile.h b/include/gfile/gfile.h index 9d171050..6cd2d9ad 100644 --- a/include/gfile/gfile.h +++ b/include/gfile/gfile.h @@ -177,11 +177,6 @@ extern "C" { //setbuf //setvbuf //fflush - //fscanf - //scanf - //sscanf - //vscanf - //vsscanf //fgetc //fgets //fputc diff --git a/include/gfile/options.h b/include/gfile/options.h index a64937f1..55c37f8e 100644 --- a/include/gfile/options.h +++ b/include/gfile/options.h @@ -65,9 +65,9 @@ * @note If GFILE_ALLOW_DEVICESPECIFIC is on then you can ensure that you are * opening a file on the ROM file system by prefixing * its name with "S|" (the letter 'S', followed by a vertical bar). - * @note This requires a file called romfs_files.h to be included in the - * users project. This file includes all the files converted to .h files - * using the file2c utility using the "-r" flag. + * @note This requires a file called romfs_files.h to be in the + * users project include path. This file should include all the files + * converted to .h files using the file2c utility (using flags "-dbcs"). */ #ifndef GFILE_NEED_ROMFS #define GFILE_NEED_ROMFS FALSE diff --git a/tools/file2c/binaries/windows/file2c.exe b/tools/file2c/binaries/windows/file2c.exe index 333b11383dd11ca03c20c72462fb8f7350a34b05..dc530bf904193e21b279af39407c0893d60dbd04 100644 GIT binary patch literal 22030 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 y(A{MCLdUW literal 9728 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 diff --git a/tools/file2c/src/Makefile.mingw32 b/tools/file2c/src/Makefile.mingw32 new file mode 100644 index 00000000..470330bd --- /dev/null +++ b/tools/file2c/src/Makefile.mingw32 @@ -0,0 +1,10 @@ + +CC = i686-pc-mingw32-gcc +CFLAGS = -Wall -O2 + +all: + $(CC) $(CFLAGS) -o file2c.exe file2c.c + +clean: + @rm file2c.exe + diff --git a/tools/file2c/src/file2c.c b/tools/file2c/src/file2c.c index f7bc1e9c..1c279ff2 100644 --- a/tools/file2c/src/file2c.c +++ b/tools/file2c/src/file2c.c @@ -8,11 +8,14 @@ #include #include #include +#include +#include #ifdef WIN32 #include #endif -static unsigned char buf[1024]; +static unsigned char buf[1024]; +static char tname[FILENAME_MAX]; static char *filenameof(char *fname) { char *p; @@ -25,6 +28,13 @@ static char *filenameof(char *fname) { #endif p = strrchr(fname, '/'); if (p) fname = p+1; + return fname; +} + +static char *basenameof(char *fname) { + char *p; + + fname = filenameof(fname); p = strchr(fname, '.'); if (p) *p = 0; return fname; @@ -43,34 +53,35 @@ char * opt_progname; char * opt_inputfile; char * opt_outputfile; char * opt_arrayname; +char * opt_dirname; int opt_breakblocks; +int opt_romdir; char * opt_static; char * opt_const; FILE * f_input; FILE * f_output; unsigned blocknum; -size_t len; +size_t len, totallen; size_t i; /* Default values for our parameters */ - opt_progname = filenameof(argv[0]); - opt_inputfile = 0; - opt_outputfile = 0; - opt_arrayname = 0; - opt_breakblocks = 0; - opt_static = ""; - opt_const = ""; + opt_progname = basenameof(argv[0]); + opt_inputfile = opt_outputfile = opt_arrayname = opt_dirname = 0; + opt_breakblocks = opt_romdir = 0; + opt_static = opt_const = ""; /* Read the arguments */ while(*++argv) { if (argv[0][0] == '-') { while (*++(argv[0])) { switch(argv[0][0]) { - case '?': case 'h': goto usage; - case 'b': opt_breakblocks = 1; break; - case 'c': opt_const = "const "; break; - case 's': opt_static = "static "; break; - case 'n': opt_arrayname = *++argv; goto nextarg; + case '?': case 'h': goto usage; + case 'd': opt_romdir = 1; break; + case 'b': opt_breakblocks = 1; break; + case 'c': opt_const = "const "; break; + case 's': opt_static = "static "; break; + case 'n': opt_arrayname = *++argv; goto nextarg; + case 'f': opt_romdir = 1; opt_dirname = *++argv; goto nextarg; default: fprintf(stderr, "Unknown flag -%c\n", argv[0][0]); goto usage; @@ -82,20 +93,28 @@ size_t i; opt_outputfile = argv[0]; else { usage: - fprintf(stderr, "Usage:\n\t%s -?\n" - "\t%s [-bs] [-n name] [inputfile] [outputfile]\n" - "\t\t-?\tThis help\n" - "\t\t-h\tThis help\n" - "\t\t-b\tBreak the arrays for compilers that won't handle large arrays\n" - "\t\t-c\tDeclare the arrays as const (useful to ensure they end up in Flash)\n" - "\t\t-s\tDeclare the arrays as static\n" - "\t\t-n name\tUse \"name\" as the name of the array\n" + fprintf(stderr, "Usage:\n\n%s -?\n" + "%s [-dbcs] [-n name] [-f file] [inputfile] [outputfile]\n" + "\t-?\tThis help\n" + "\t-h\tThis help\n" + "\t-d\tAdd a directory entry for the ROM file system\n" + "\t-b\tBreak the arrays for compilers that won't handle large arrays\n" + "\t-c\tDeclare as const (useful to ensure they end up in Flash)\n" + "\t-s\tDeclare as static\n" + "\t-n name\tUse \"name\" as the name of the array\n" + "\t-f file\tUse \"file\" as the filename in the ROM directory entry\n" , opt_progname, opt_progname); return 1; } nextarg: ; } + /* Make sure we can generate a default directory name if required */ + if (opt_romdir && !opt_dirname && !opt_inputfile) { + fprintf(stderr, "If using -d you must either specify an input filename or use -f to specify a directory entry filename\n"); + goto usage; + } + /* Open the input file */ if (opt_inputfile) { f_input = fopen(opt_inputfile, @@ -129,43 +148,57 @@ size_t i; fprintf(f_output, "/**\n * This file was generated "); if (opt_inputfile) fprintf(f_output, "from \"%s\" ", opt_inputfile); fprintf(f_output, "using...\n *\n *\t%s", opt_progname); - if (opt_arrayname || opt_static[0] || opt_const[0] || opt_breakblocks) { + if (opt_arrayname || opt_static[0] || opt_const[0] || opt_breakblocks || opt_romdir) { fprintf(f_output, " -"); + if (opt_romdir) fprintf(f_output, "b"); if (opt_breakblocks) fprintf(f_output, "b"); if (opt_const[0]) fprintf(f_output, "c"); if (opt_static[0]) fprintf(f_output, "s"); if (opt_arrayname) fprintf(f_output, "n %s", opt_arrayname); + if (opt_dirname) fprintf(f_output, (opt_arrayname ? " -f %s" : "f %s"), opt_dirname); } if (opt_inputfile) fprintf(f_output, " %s", opt_inputfile); if (opt_outputfile) fprintf(f_output, " %s", opt_outputfile); fprintf(f_output, "\n *\n */\n"); /* - * Set the array name. - * We do this after printing opt_inputfile for the last time as we - * modify opt_inputfile in place to generate opt_arrayname. + * Set the array name and dir name */ if (!opt_arrayname) { if (opt_inputfile) - opt_arrayname = filenameof(opt_inputfile); - if (!opt_arrayname || !opt_arrayname[0]) - opt_arrayname = "filearray"; + opt_arrayname = basenameof(strcpy(tname, opt_inputfile)); + if (!opt_arrayname || !opt_arrayname[0]) { + srand(time(NULL)); + sprintf(tname, "filearray%u", rand()); + opt_arrayname = tname; + } } opt_arrayname = clean4c(opt_arrayname); + if (opt_romdir && !opt_dirname) + opt_dirname = filenameof(opt_inputfile); /* Read the file processing 1K at a time */ blocknum = 0; + totallen = 0; while((len = fread(buf, 1, sizeof(buf), f_input))) { if (!blocknum++) - fprintf(f_output, "%s%sunsigned char %s[] = {", opt_static, opt_const, opt_arrayname); + fprintf(f_output, "%s%schar %s[] = {", opt_static, opt_const, opt_arrayname); else if (opt_breakblocks) - fprintf(f_output, "\n};\n%s%sunsigned char %s_p%u[] = {", opt_static, opt_const, opt_arrayname, blocknum); + fprintf(f_output, "\n};\n%s%schar %s_p%u[] = {", opt_static, opt_const, opt_arrayname, blocknum); for(i = 0; i < len; i++) { fprintf(f_output, (i & 0x0F) ? " 0x%02X," : "\n\t0x%02X,", buf[i]); } + totallen += len; } fprintf(f_output, "\n};\n"); + /* Add the directory entry if required */ + if (opt_romdir) { + fprintf(f_output, "\n#ifdef ROMFS_DIRENTRY_HEAD\n"); + fprintf(f_output, "\t%s%sROMFS_DIRENTRY %s_dir = { ROMFS_DIRENTRY_HEAD, \"%s\", %u, %s };\n", opt_static, opt_const, opt_arrayname, opt_dirname, totallen, opt_arrayname); + fprintf(f_output, "\t#undef ROMFS_DIRENTRY_HEAD\n\t#define ROMFS_DIRENTRY_HEAD &%s_dir\n#endif\n", opt_arrayname); + } + /* Clean up */ if (ferror(f_input)) fprintf(stderr, "Input file read error\n");