added dumpgradient
[swftools.git] / lib / modules / swfdump.c
1 /* swfdump.c
2
3    Dump / debug functions
4    
5    Extension module for the rfxswf library.
6    Part of the swftools package.
7
8    Copyright (c) 2001 Rainer Böhme <rfxswf@reflex-studio.de>
9  
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 2 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
23
24 void swf_DumpHeader(FILE * f,SWF * swf)
25 { if (!f) f = stderr;
26   fprintf(f,"File size\t%u\n",swf->fileSize);
27   fprintf(f,"Movie width\t%u\n",(swf->movieSize.xmax - swf->movieSize.xmin)/20);
28   fprintf(f,"Movie height\t%u\n",(swf->movieSize.ymax - swf->movieSize.ymin)/20);
29   fprintf(f,"Frame rate\t%u.%u\n",swf->frameRate>>8,swf->frameRate&0xff);
30   fprintf(f,"Frame count\t%u\n",swf->frameCount);
31 }
32
33 void swf_DumpMatrix(FILE * f,MATRIX * m)
34 { if (!f) f = stderr;
35   /*fprintf(f,"[%08x][%08x]\n",m->sx,m->r1);
36   fprintf(f,"[%08x][%08x]\n",m->r0,m->sy);
37   fprintf(f," %08x, %08x\n",m->tx,m->ty);*/
38   fprintf(f,"[%08x][%08x] %5.2f %5.2f %5.2f\n",m->sx,m->r1, m->sx/65536.0,m->r1/65536.0, m->tx/20.0);
39   fprintf(f,"[%08x][%08x] %5.2f %5.2f %5.2f\n",m->r0,m->sy, m->r0/65536.0,m->sy/65536.0, m->ty/20.0 );
40   fprintf(f," %08x, %08x \n",m->tx,m->ty);
41 }
42
43 void swf_DumpGradient(FILE * f,GRADIENT * g)
44 { if (!f) f = stderr;
45     fprintf(f, "%d gradient steps\n", g->num);
46     int t;
47     for(t=0;t<g->num;t++) {
48         RGBA c = g->rgba[t];
49         fprintf(f, "%d) %02x%02x%02x%02x at %d\n", t, c.r,c.g,c.b,c.a, g->ratios[t]);
50     }
51 }
52
53 void swf_DumpTag(FILE * f,TAG * t)
54 { int i;
55   if (!f) f = stderr;
56   for (i=0;i<t->len;i++)
57   { if (!(i&15)) fprintf(f,"\n");
58     fprintf(f,"%02x ",t->data[i]);
59   }
60   fprintf(f,"\n");
61 }
62
63 void swf_DumpSWF(FILE * f, SWF*swf)
64 {
65     TAG* tag = swf->firstTag;
66     fprintf(f, "vvvvvvvvvvvvvvvvvvvvv\n");
67     while(tag) {
68         printf("%8d %s\n", tag->len, swf_TagGetName(tag));
69         tag = tag->next;
70     }
71     fprintf(f, "^^^^^^^^^^^^^^^^^^^^^\n");
72 }
73
74 void swf_DumpFont(SWFFONT * font)
75 {
76     printf("ID: %d\n", font->id);
77     printf("Version: %d\n", font->version);
78     printf("name: %s\n", font->name);
79     printf("characters: %d\n", font->numchars);
80     printf("biggest mapped ascii value: %d\n", font->maxascii);
81     printf("layout: %s\n", font->layout?"yes":"no");
82     if(font->layout)
83     {
84         printf(" ascent:%d\n", font->layout->ascent);
85         printf(" descent:%d\n", font->layout->descent);
86         printf(" leading:%d\n", font->layout->leading);
87         printf(" bounds: (not shown)\n");
88         printf(" kerning records:%d\n", font->layout->kerningcount);
89         printf(" kerning records: (not shown)\n");
90     }
91     printf("style: %d\n", font->style);
92     printf("encoding: %d\n", font->encoding);
93     printf("language: %d\n", font->language);
94 }
95
96 void swf_DumpShape(SHAPE2*shape2)
97 {
98     SHAPELINE*l = shape2->lines;
99     while(l) {
100         if(l->type == moveTo) {
101             //printf("fill %d/%d line %d\n", l->fillstyle0, l->fillstyle1, l->linestyle);
102             printf("moveTo %.2f,%.2f (fill0:%d fill1:%d line:%d)\n", l->x/20.0, l->y/20.0, l->fillstyle0, l->fillstyle1, l->linestyle);
103         }
104         if(l->type == lineTo) {
105             //printf("fill %d/%d line %d\n", l->fillstyle0,  l->fillstyle1, l->linestyle);
106             printf("lineTo %.2f,%.2f (fill0:%d fill1:%d line:%d)\n", l->x/20.0, l->y/20.0, l->fillstyle0, l->fillstyle1, l->linestyle);
107         }
108         if(l->type == splineTo) {
109             //printf("fill %d/%d line %d\n", l->fillstyle0, l->fillstyle1, l->linestyle);
110             printf("splineTo %.2f,%.2f %.2f,%.2f (fill0:%d fill1:%d line:%d)\n", l->sx/20.0, l->sy/20.0, l->x/20.0, l->y/20.0, l->fillstyle0, l->fillstyle1, l->linestyle);
111         }
112         l = l->next;
113     }
114 }
115
116 char* swf_TagGetName(TAG*tag)
117 {
118     switch(tag->id)
119     {
120         case ST_END:
121             return "END";
122         case ST_SHOWFRAME:
123             return "SHOWFRAME";
124         case ST_DEFINESHAPE:
125             return "DEFINESHAPE";
126         case ST_FREECHARACTER:
127             return "FREECHARACTER";
128         case ST_PLACEOBJECT:
129             return "PLACEOBJECT";
130         case ST_REMOVEOBJECT:
131             return "REMOVEOBJECT";
132         case ST_DEFINEBITS:
133             return "DEFINEBITS";
134         case ST_DEFINEBUTTON:
135             return "DEFINEBUTTON";
136         case ST_JPEGTABLES:
137             return "JPEGTABLES";
138         case ST_SETBACKGROUNDCOLOR:
139             return "SETBACKGROUNDCOLOR";
140         case ST_DEFINEFONT:
141             return "DEFINEFONT";
142         case ST_DEFINETEXT:
143             return "DEFINETEXT";
144         case ST_DEFINEEDITTEXT:
145             return "DEFINEEDITTEXT";
146         case ST_DOACTION:
147             return "DOACTION";
148         case ST_DEFINEFONTINFO:
149             return "DEFINEFONTINFO";
150         case ST_DEFINESOUND:
151             return "DEFINESOUND";
152         case ST_STARTSOUND:
153             return "STARTSOUND";
154         case ST_DEFINEBUTTONSOUND:
155             return "DEFINEBUTTONSOUND";
156         case ST_SOUNDSTREAMHEAD:
157             return "SOUNDSTREAMHEAD";
158         case ST_SOUNDSTREAMBLOCK:
159             return "SOUNDSTREAMBLOCK";
160         case ST_DEFINEBITSLOSSLESS:
161             return "DEFINEBITSLOSSLESS";
162         case ST_DEFINEBITSJPEG2:
163             return "DEFINEBITSJPEG2";
164         case ST_DEFINESHAPE2:
165             return "DEFINESHAPE2";
166         case ST_DEFINEBUTTONCXFORM:
167             return "DEFINEBUTTONCXFORM";
168         case ST_PROTECT:
169             return "PROTECT";
170         case ST_PLACEOBJECT2:
171             return "PLACEOBJECT2";
172         case ST_REMOVEOBJECT2:
173             return "REMOVEOBJECT2";
174         case ST_DEFINESHAPE3:
175             return "DEFINESHAPE3";
176         case ST_DEFINETEXT2:
177             return "DEFINETEXT2";
178         case ST_DEFINEBUTTON2:
179             return "DEFINEBUTTON2";
180         case ST_DEFINEBITSJPEG3:
181             return "DEFINEBITSJPEG3";
182         case ST_DEFINEBITSLOSSLESS2:
183             return "DEFINEBITSLOSSLESS2";
184         case ST_DEFINESPRITE:
185             return "DEFINESPRITE";
186         case ST_NAMECHARACTER:
187             return "NAMECHARACTER";
188         case ST_SERIALNUMBER:
189             return "SERIALNUMBER";
190         case ST_GENERATORTEXT:
191             return "GENERATORTEXT";
192         case ST_FRAMELABEL:
193             return "FRAMELABEL";
194         case ST_SOUNDSTREAMHEAD2:
195             return "SOUNDSTREAMHEAD2";
196         case ST_DEFINEMORPHSHAPE:
197             return "DEFINEMORPHSHAPE";
198         case ST_DEFINEFONT2:
199             return "DEFINEFONT2";
200         case ST_TEMPLATECOMMAND:
201             return "TEMPLATECOMMAND";
202         case ST_GENERATOR3:
203             return "GENERATOR3";
204         case ST_EXTERNALFONT:
205             return "EXTERNALFONT";
206         case ST_EXPORTASSETS:
207             return "EXPORTASSETS";
208         case ST_IMPORTASSETS:
209             return "IMPORTASSETS";
210         case ST_ENABLEDEBUGGER:
211             return "ENABLEDEBUGGER";
212         case ST_DOINITACTION:
213             return "DOINITACTION";
214         case ST_DEFINEMOVIE:
215             return "DEFINEMOVIE";
216         case ST_DEFINEVIDEOSTREAM:
217             return "DEFINEVIDEOSTREAM";
218         case ST_VIDEOFRAME:
219             return "VIDEOFRAME";
220         case ST_DEFINEFONTINFO2:
221             return "DEFINEFONTINFO2";
222         case ST_FILEATTRIBUTES:
223             return "FILEATTRIBUTES";
224         case ST_IMPORTASSETS2:
225             return "IMPORTASSETS2";
226         case ST_DEFINESCALINGGRID:
227             return "DEFINESCALINGGRID";
228         case ST_DEFINESHAPE4:
229             return "DEFINESHAPE4";
230         case ST_DEFINEFONT3:
231             return "DEFINEFONT3";
232         case ST_DEFINEFONTALIGNZONES:
233             return "DEFINEFONTALIGNZONES";
234         case ST_CSMTEXTSETTINGS:
235             return "CSMTEXTSETTINGS";
236         case ST_FREEALL:
237             return "FREEALL";
238         case ST_MX4:
239             return "MX4";
240         case ST_SCRIPTLIMITS:
241             return "SCRIPTLIMITS";
242         case ST_SETTABINDEX:
243             return "SETTABINDEX";
244         case ST_ENABLEDEBUGGER2:
245             return "ENABLEDEBUGGER2";
246         case ST_PLACEOBJECT3:
247             return "PLACEOBJECT3";
248         case ST_METADATA:
249             return "METADATA";
250         
251         case ST_REFLEX:
252             return "REFLEX";
253         case ST_GLYPHNAMES:
254             return "GLYPHNAMES";
255     }
256     return 0;
257 }