git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Version 0.94.1 of the bladeenc mp3 encoder
[swftools.git]
/
src
/
swfextract.c
diff --git
a/src/swfextract.c
b/src/swfextract.c
index
126eff4
..
99844eb
100644
(file)
--- a/
src/swfextract.c
+++ b/
src/swfextract.c
@@
-13,7
+13,12
@@
#include "../lib/rfxswf.h"
#include "../lib/args.h"
#include "reloc.h"
#include "../lib/rfxswf.h"
#include "../lib/args.h"
#include "reloc.h"
+#ifdef HAVE_ZLIB_H
+#ifdef HAVE_LIBZ
#include "zlib.h"
#include "zlib.h"
+#define _ZLIB_INCLUDED_
+#endif
+#endif
char * filename = 0;
char * destfilename = "output.swf";
char * filename = 0;
char * destfilename = "output.swf";
@@
-80,6
+85,7
@@
int args_callback_option(char*name,char*val)
extractjpegids = val;
return 1;
}
extractjpegids = val;
return 1;
}
+#ifdef _ZLIB_INCLUDED_
else if(!strcmp(name, "p")) {
if(extractpngids) {
fprintf(stderr, "Only one --pngs argument is allowed. (Try to use a range, e.g. -p 1,2,3)\n");
else if(!strcmp(name, "p")) {
if(extractpngids) {
fprintf(stderr, "Only one --pngs argument is allowed. (Try to use a range, e.g. -p 1,2,3)\n");
@@
-88,6
+94,7
@@
int args_callback_option(char*name,char*val)
extractpngids = val;
return 1;
}
extractpngids = val;
return 1;
}
+#endif
else if(!strcmp(name, "f")) {
extractframes = val;
return 1;
else if(!strcmp(name, "f")) {
extractframes = val;
return 1;
@@
-115,7
+122,9
@@
void args_callback_usage(char*name)
printf("\t-n , --name name\t\t instance name of the object to extract\n");
printf("\t-i , --id IDs\t\t\t ID of the object to extract\n");
printf("\t-j , --jpeg IDs\t\t\t IDs of the JPEG pictures to extract\n");
printf("\t-n , --name name\t\t instance name of the object to extract\n");
printf("\t-i , --id IDs\t\t\t ID of the object to extract\n");
printf("\t-j , --jpeg IDs\t\t\t IDs of the JPEG pictures to extract\n");
+#ifdef _ZLIB_INCLUDED_
printf("\t-p , --pngs IDs\t\t\t IDs of the PNG pictures to extract\n");
printf("\t-p , --pngs IDs\t\t\t IDs of the PNG pictures to extract\n");
+#endif
printf("\t-f , --frame frames\t\t frame numbers to extract\n");
printf("\t-w , --hollow\t\t\t hollow mode: don't remove empty frames (use with -f)\n");
printf("\t-V , --version\t\t\t Print program version and exit\n");
printf("\t-f , --frame frames\t\t frame numbers to extract\n");
printf("\t-w , --hollow\t\t\t hollow mode: don't remove empty frames (use with -f)\n");
printf("\t-V , --version\t\t\t Print program version and exit\n");
@@
-143,9
+152,9
@@
char * tagused;
void idcallback(void*data)
{
void idcallback(void*data)
{
- if(!(used[*(U16*)data]&1)) {
+ if(!(used[GET16(data)]&1)) {
changed = 1;
changed = 1;
- used[*(U16*)data] |= 1;
+ used[GET16(data)] |= 1;
}
}
}
}
@@
-156,13
+165,16
@@
void enumerateIDs(TAG*tag, void(*callback)(void*))
if(tag->len>=64) {
len += 6;
data = (U8*)malloc(len);
if(tag->len>=64) {
len += 6;
data = (U8*)malloc(len);
- *(U16*)data = (tag->id<<6)+63;
- *(U32*)&data[2] = tag->len;
+ PUT16(data, (tag->id<<6)+63);
+ *(U8*)&data[2] = tag->len;
+ *(U8*)&data[3] = tag->len>>8;
+ *(U8*)&data[4] = tag->len>>16;
+ *(U8*)&data[5] = tag->len>>24;
memcpy(&data[6], tag->data, tag->len);
} else {
len += 2;
data = (U8*)malloc(len);
memcpy(&data[6], tag->data, tag->len);
} else {
len += 2;
data = (U8*)malloc(len);
- *(U16*)data = (tag->id<<6)+tag->len;
+ PUT16(data, (tag->id<<6)+tag->len);
memcpy(&data[2], tag->data, tag->len);
}
map_ids_mem(data, len, callback);
memcpy(&data[2], tag->data, tag->len);
}
map_ids_mem(data, len, callback);
@@
-383,7
+395,7
@@
void handlejpeg(TAG*tag)
{
char name[80];
FILE*fi;
{
char name[80];
FILE*fi;
- sprintf(name, "pic%d.jpeg", *(U16*)tag->data);
+ sprintf(name, "pic%d.jpeg", GET16(tag->data));
/* swf jpeg images have two streams, which both start with ff d8 and
end with ff d9. The following code handles sorting the middle
<ff d9 ff d8> bytes out, so that one stream remains */
/* swf jpeg images have two streams, which both start with ff d8 and
end with ff d9. The following code handles sorting the middle
<ff d9 ff d8> bytes out, so that one stream remains */
@@
-405,7
+417,7
@@
void handlejpeg(TAG*tag)
fclose(fi);
}
if(tag->id == ST_DEFINEBITSJPEG3 && tag->len>6) {
fclose(fi);
}
if(tag->id == ST_DEFINEBITSJPEG3 && tag->len>6) {
- U32 end = *(U32*)&tag->data[2]+6;
+ U32 end = GET32(&tag->data[2])+6;
int pos = findjpegboundary(&tag->data[6], tag->len-6);
if(pos<0)
return;
int pos = findjpegboundary(&tag->data[6], tag->len-6);
if(pos<0)
return;
@@
-417,6
+429,7
@@
void handlejpeg(TAG*tag)
}
}
}
}
+#ifdef _ZLIB_INCLUDED_
static U32 mycrc32;
static U32*crc32_table = 0;
static U32 mycrc32;
static U32*crc32_table = 0;
@@
-633,6
+646,7
@@
void handlelossless(TAG*tag)
free(data2);
free(data3);
}
free(data2);
free(data3);
}
+#endif
int main (int argc,char ** argv)
{
int main (int argc,char ** argv)
{
@@
-732,9
+746,11
@@
int main (int argc,char ** argv)
if(extractjpegids && is_in_range(id, extractjpegids)) {
handlejpeg(tag);
}
if(extractjpegids && is_in_range(id, extractjpegids)) {
handlejpeg(tag);
}
+#ifdef _ZLIB_INCLUDED_
if(extractpngids && is_in_range(id, extractpngids)) {
handlelossless(tag);
}
if(extractpngids && is_in_range(id, extractpngids)) {
handlelossless(tag);
}
+#endif
}
else if (tag->id == ST_SETBACKGROUNDCOLOR) {
mainr = tag->data[0];
}
else if (tag->id == ST_SETBACKGROUNDCOLOR) {
mainr = tag->data[0];