2 Shows the structure of a swf file
\r
4 Part of the swftools package.
\r
6 Copyright (c) 2001 Matthias Kramm <kramm@quiss.org>
\r
8 This file is distributed under the GPL, see file COPYING for details */
\r
12 #ifdef HAVE_SYS_STAT_H
\r
13 #include <sys/stat.h>
\r
18 #ifdef HAVE_SYS_TYPES_H
\r
19 #include <sys/types.h>
\r
27 #include "../lib/rfxswf.h"
\r
28 #include "../lib/args.h"
\r
30 char * filename = 0;
\r
32 /* idtab stores the ids which are defined in the file. This allows us
\r
33 to detect errors in the file. (i.e. ids which are defined more than
\r
37 struct options_t options[] =
\r
45 int args_callback_option(char*name,char*val)
\r
47 if(!strcmp(name, "V")) {
\r
48 printf("swfdump - part of %s %s\n", PACKAGE, VERSION);
\r
52 int args_callback_longoption(char*name,char*val)
\r
54 return args_long2shortoption(options, name, val);
\r
56 void args_callback_usage(char*name)
\r
58 printf("Usage: %s file.swf\n", name);
\r
60 int args_callback_command(char*name,char*val)
\r
63 fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n",
\r
70 int main (int argc,char ** argv)
\r
75 struct stat statbuf;
\r
80 memset(idtab,0,65536);
\r
82 processargs(argc, argv);
\r
84 f = open(filename,O_RDONLY);
\r
88 perror("Couldn't open file: ");
\r
91 if FAILED(ReadSWF(f,&swf))
\r
93 fprintf(stderr,"%s is not a valid SWF file or contains errors.\n",filename);
\r
100 if(statbuf.st_size != swf.FileSize)
\r
101 fprintf(stderr, "Error: Real Filesize (%d) doesn't match header Filesize (%d)",
\r
102 statbuf.st_size, swf.FileSize);
\r
107 printf("[HEADER] File version: %d\n", swf.FileVersion);
\r
108 printf("[HEADER] File size: %d\n", swf.FileSize);
\r
109 printf("[HEADER] Frame rate: %f\n",swf.FrameRate/256.0);
\r
110 printf("[HEADER] Frame count: %d\n",swf.FrameCount);
\r
111 printf("[HEADER] Movie width: %.3f\n",(swf.MovieSize.xmax-swf.MovieSize.xmin)/20.0);
\r
112 printf("[HEADER] Movie height: %.3f\n",(swf.MovieSize.ymax-swf.MovieSize.ymin)/20.0);
\r
114 tag = swf.FirstTag;
\r
117 printf("[%03x] %9d %s%s", tag->id, tag->len, prefix, getTagName(tag));
\r
118 if(isDefiningTag(tag)) {
\r
119 U16 id = GetDefineID(tag);
\r
120 printf(" defines id %04x", id);
\r
122 fprintf(stderr, "Error: Id %04x is defined more than once.\n", id);
\r
125 else if(tag->id == ST_PLACEOBJECT ||
\r
126 tag->id == ST_PLACEOBJECT2) {
\r
127 printf(" places id %04x at depth %04x", GetPlaceID(tag), GetDepth(tag));
\r
129 printf(" name \"%s\"",GetName(tag));
\r
131 else if(tag->id == ST_REMOVEOBJECT) {
\r
132 printf(" removes id %04x from depth %04x", GetPlaceID(tag), GetDepth(tag));
\r
134 else if(tag->id == ST_REMOVEOBJECT2) {
\r
135 printf(" removes object from depth %04x", GetDepth(tag));
\r
140 if(tag->id == ST_DEFINESPRITE)
\r
142 sprintf(prefix, " ");
\r
144 if(tag->id == ST_END)
\r
146 sprintf(prefix, "");
\r