svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r22717:22875
[blender.git] / release / datafiles / datatoc.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 #include <stdio.h>
31 #include <string.h>
32 #include <stdlib.h>
33
34 int main(int argc, char**argv) {
35         FILE *fpin,  *fpout;
36         char cname[256];
37         char sizest[256];
38         size_t size;
39         int i;
40         
41         if (argc<1) {
42                         printf ("Usage: datatoc <data_file>\n");
43                         exit(1);
44         }
45         
46         fpin= fopen(argv[1], "rb");
47         if (!fpin) {
48                         printf ("Unable to open input <%s>\n", argv[1]);
49                         exit(1);
50         }
51         
52         fseek (fpin, 0L,  SEEK_END);
53         size= ftell(fpin);
54         fseek (fpin, 0L,  SEEK_SET);
55
56         if (argv[1][0]=='.') argv[1]++;
57
58         sprintf(cname, "%s.c", argv[1]);
59         printf ("Making C file <%s>\n", cname);
60
61         for (i=0; i < (int)strlen(argv[1]); i++)
62                 if (argv[1][i]=='.') argv[1][i]='_';
63
64         sprintf(sizest, "%d", (int)size);
65         printf ("Input filesize is %ld, Output size should be %ld\n", size, ((int)size)*4 + strlen("/* DataToC output of file <> */\n\n") + strlen("char datatoc_[]= {\"") + strlen ("\"};\n") + (strlen(argv[1])*3) + strlen(sizest) + strlen("int datatoc__size= ;\n") +(((int)(size/256)+1)*5));
66         
67         fpout= fopen(cname, "w");
68         if (!fpout) {
69                         printf ("Unable to open output <%s>\n", cname);
70                         exit(1);
71         }
72         
73         fprintf (fpout, "/* DataToC output of file <%s> */\n\n",argv[1]);
74         fprintf (fpout, "int datatoc_%s_size= %s;\n", argv[1], sizest);
75         /*
76         fprintf (fpout, "char datatoc_%s[]= {\"", argv[1]);
77
78         while (size--) {
79                 if(size%256==0)
80                         fprintf(fpout, "\" \\\n\"");
81                         
82                 fprintf (fpout, "\\x%02x", getc(fpin));
83         }
84
85         fprintf (fpout, "\"};\n");
86         */
87         
88         fprintf (fpout, "char datatoc_%s[]= {\n", argv[1]);
89         while (size--) {
90                 if(size%32==31)
91                         fprintf(fpout, "\n");
92                         
93                 /* fprintf (fpout, "\\x%02x", getc(fpin)); */
94                 fprintf (fpout, "%3d,", getc(fpin));
95         }
96         /* null terminate for the case it is a string */
97         fprintf (fpout, "\n  0};\n\n");
98         
99         fclose(fpin);
100         fclose(fpout);
101         return 0;
102 }