#include "./bitio.h"
#include "./MD5.h"
+#include "./os.h"
// internal constants
int swf_SetU30(TAG*tag, U32 u)
{
- if(u&0x80000000) {
- fprintf(stderr, "Error: Bit 31 set in U30 value\n");
- u&=0x7fffffff;
- }
int nr = 0;
do {
if(tag)
}
#endif
-int swf_SetU30String(TAG*tag, const char*str)
+int swf_SetU30String(TAG*tag, const char*str, int l)
{
- int l = strlen(str);
int len=0;
len+=swf_SetU30(tag, l);
len+=l;
return reader->pos;
}
+SWF* swf_OpenSWF(char*filename)
+{
+ int fi = open(filename, O_RDONLY|O_BINARY);
+ if(fi<0) {
+ fprintf(stderr, "Failed to open %s\n", filename);
+ return 0;
+ }
+ SWF* swf = rfx_alloc(sizeof(SWF));
+ swf_ReadSWF(fi, swf);
+ close(fi);
+ return swf;
+}
+
int swf_ReadSWF(int handle, SWF * swf)
{
reader_t reader;
return swf_ReadSWF2(&reader, swf);
}
+void swf_ReadABCfile(char*filename, SWF*swf)
+{
+ memset(swf, 0, sizeof(SWF));
+ swf->fileVersion=9;
+ swf->fileAttributes=FILEATTRIBUTE_AS3; //as3
+ TAG*tag = swf->firstTag = swf_InsertTag(0, ST_RAWABC);
+ memfile_t*file = memfile_open(filename);
+ swf_SetBlock(tag, file->data, file->len);
+ memfile_close(file);
+}
+
int no_extra_tags = 0;
int WriteExtraTags(SWF*swf, writer_t*writer)
if(swf->fileVersion >= 9) {
if(!has_fileattributes) {
- U32 flags = swf->fileAttributes|0x08; // 16 = has symbolclass tag | 8 = actionscript3 | 1 = usenetwork
+ U32 flags = swf->fileAttributes|FILEATTRIBUTE_AS3; // 16 = has symbolclass tag | 8 = actionscript3 | 1 = usenetwork
if(has_version_8_action && !has_version_9_action)
- flags &= ~0x08;
+ flags &= ~FILEATTRIBUTE_AS3;
TAG*fileattrib = swf_InsertTag(0, ST_FILEATTRIBUTES);
swf_SetU32(fileattrib, flags);
if(writer) {
if(swf_WriteTag2(writer, has_fileattributes)<0)
return -1;
}
- if(!has_scenedescription) {
+ if(0 && !has_scenedescription) {
TAG*scene = swf_InsertTag(0, ST_SCENEDESCRIPTION);
swf_SetU16(scene, 1);
swf_SetString(scene, (U8*)"Scene 1");
t = swf->firstTag;
frameCount = 0;
- len += WriteExtraTags(swf, 0);
+ if(swf->firstTag && !no_extra_tags) {
+ len += WriteExtraTags(swf, 0);
+ }
while(t) {
len += swf_WriteTag(-1,t);
if(t->id == ST_DEFINESPRITE && !swf_IsFolded(t)) inSprite++;
return -1;
}
- if(!no_extra_tags) {
+ if(swf->firstTag && !no_extra_tags) {
WriteExtraTags(swf, writer);
}
t = swf->firstTag;