added blend modes + filter lists
[swftools.git] / lib / rfxswf.h
index afe17a8..6e15da0 100644 (file)
@@ -39,48 +39,13 @@ extern "C" {
 #include "./bitio.h"
 #include "./drawer.h"
 #include "./mem.h"
+#include "./types.h"
 
 #define DEBUG_RFXSWF
 #ifdef RFXSWF_DISABLESOUND
 #define NO_MP3
 #endif
 
-#ifndef TRUE
-#define TRUE (1)
-#endif
-#ifndef FALSE
-#define FALSE (0)
-#endif
-
-
-/* little/big endian stuff */
-
-#define PUT8(ptr,x) {((U8*)(ptr))[0]=x;}
-#define PUT16(ptr,x) {((U8*)(ptr))[0]=(U8)(x);((U8*)(ptr))[1]=(U8)((x)>>8);}
-#define PUT32(ptr,x) {((U8*)(ptr))[0]=(U8)(x);((U8*)(ptr))[1]=(U8)((x)>>8);((U8*)(ptr))[2]=(U8)((x)>>16);((U8*)(ptr))[3]=(U8)((x)>>24);}
-#define GET16(ptr) (((U16)(((U8*)(ptr))[0]))+(((U16)(((U8*)(ptr))[1]))<<8))
-#define GET32(ptr) (((U16)(((U8*)(ptr))[0]))+(((U16)(((U8*)(ptr))[1]))<<8)+(((U16)(((U8*)(ptr))[2]))<<16)+(((U16)(((U8*)(ptr))[3]))<<24))
-
-#ifdef WORDS_BIGENDIAN
-#define SWAP16(s) ((((s)>>8)&0x00ff)|(((s)<<8)&0xff00))
-#define SWAP32(s) (SWAP16(((s)>>16)&0x0000ffff)|((SWAP16(s)<<16)&0xffff0000))
-#define REVERSESWAP16(x) (x)
-#define REVERSESWAP32(x) (x)
-#else
-#define SWAP16(x) (x)
-#define SWAP32(x) (x)
-#define REVERSESWAP16(s) ((((s)>>8)&0x00ff)|(((s)<<8)&0xff00))
-#define REVERSESWAP32(s) (REVERSESWAP16(((s)>>16)&0x0000ffff)|((REVERSESWAP16(s)<<16)&0xffff0000))
-#endif
-
-// SWF Types
-
-typedef         unsigned long   U32;
-typedef         signed long     S32;
-typedef         unsigned short  U16;
-typedef         signed short    S16;
-typedef         unsigned char   U8;
-typedef         signed char     S8;
 typedef         signed long     SFIXED;
 typedef         signed long     SCOORD;
 
@@ -134,6 +99,16 @@ typedef struct _GRADIENT
     RGBA rgba[8];
 } GRADIENT;
 
+typedef struct _FILTER
+{
+    U8 type;
+} FILTER;
+typedef struct _FILTERLIST
+{
+    int num;
+    FILTER*filter;
+} FILTERLIST;
+
 typedef struct _TAG             // NEVER access a Tag-Struct directly !
 { U16           id;
   U8 *          data;
@@ -182,9 +157,9 @@ typedef struct _SWF
 
 // Basic Functions
 
-int  swf_ReadSWF2(struct reader_t*reader, SWF * swf);   // Reads SWF via callback
+int  swf_ReadSWF2(reader_t*reader, SWF * swf);   // Reads SWF via callback
 int  swf_ReadSWF(int handle,SWF * swf);     // Reads SWF to memory (malloc'ed), returns length or <0 if fails
-int  swf_WriteSWF2(struct writer_t*writer, SWF * swf);     // Writes SWF via callback, returns length or <0 if fails
+int  swf_WriteSWF2(writer_t*writer, SWF * swf);     // Writes SWF via callback, returns length or <0 if fails
 int  swf_WriteSWF(int handle,SWF * swf);    // Writes SWF to file, returns length or <0 if fails
 int  swf_WriteSWC(int handle, SWF * swf);   // for convenience, equal to swf->compressed=1;swf_WriteSWF(..)
 int  swf_WriteCGI(SWF * swf);               // Outputs SWF with valid CGI header to stdout
@@ -193,11 +168,11 @@ SWF* swf_CopySWF(SWF*swf);
 
 // for streaming:
 int  swf_WriteHeader(int handle,SWF * swf);    // Writes Header of swf to file
-int  swf_WriteHeader2(struct writer_t*writer,SWF * swf);    // Writes Header of swf to file
+int  swf_WriteHeader2(writer_t*writer,SWF * swf);    // Writes Header of swf to file
 int  swf_WriteTag(int handle,TAG * tag);    // Writes TAG to file
-int  swf_WriteTag2(struct writer_t*writer, TAG * t); //Write TAG via callback
+int  swf_WriteTag2(writer_t*writer, TAG * t); //Write TAG via callback
 
-int  swf_ReadHeader(struct reader_t*reader, SWF * swf);   // Reads SWF Header via callback
+int  swf_ReadHeader(reader_t*reader, SWF * swf);   // Reads SWF Header via callback
 
 // folding/unfolding:
 
@@ -335,8 +310,18 @@ SRECT swf_TurnRect(SRECT r, MATRIX* m);
 #define ST_VIDEOFRAME           61
 #define ST_DEFINEFONTINFO2     62
 #define ST_MX4                 63 /*(?) */
+#define ST_ENABLEDEBUGGER2      64 /* version 8 */
 #define ST_SCRIPTLIMITS                65 /* version 7- u16 maxrecursedepth, u16 scripttimeoutseconds */
 #define ST_SETTABINDEX         66 /* version 7- u16 depth(!), u16 tab order value */
+#define ST_FILEATTRIBUTES      69 /* version 8 (required)- */
+#define ST_PLACEOBJECT3                70 /* version 8 */
+#define ST_IMPORTASSETS2       71 /* version 8 */
+#define ST_DEFINEFONTALIGNZONES 73 /* version 8 */
+#define ST_CSMTEXTSETTINGS     74 /* version 8 */
+#define ST_DEFINEFONT3         75 /* version 8 */
+#define ST_METADATA            77 /* version 8 */
+#define ST_DEFINESCALINGGRID    78 /* version 8 */
+#define ST_DEFINESHAPE4                83 /* version 8 */
 
 /* custom tags- only valid for swftools */
 #define ST_REFLEX              777 /* to identify generator software */
@@ -492,6 +477,7 @@ typedef struct
 typedef struct _FONTUSAGE
 { int* chars;
   char is_reduced;
+  int used_glyphs;
 } FONTUSAGE;
 
 #define FONT_STYLE_BOLD 1
@@ -912,8 +898,11 @@ void action_fixjump(ActionMarker m1, ActionMarker m2);
 
 // The following 3 routines only use placeobject2:
 
+extern char*blendModeNames[];
+
 int swf_ObjectPlace(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,U8 * name);
 int swf_ObjectPlaceClip(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,U8 * name, U16 clipaction);
+int swf_ObjectPlaceBlend(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,U8 * name, U8 blendmode);
 int swf_ObjectMove(TAG * t,U16 depth,MATRIX * m,CXFORM * cx);
 
 typedef struct _SWFPLACEOBJECT {
@@ -926,6 +915,8 @@ typedef struct _SWFPLACEOBJECT {
     U8*name;
     U16 clipdepth;
     ActionTAG* actions;
+    U8 blendmode;
+    FILTERLIST*filters;
 } SWFPLACEOBJECT;
 
 void swf_SetPlaceObject(TAG * t,SWFPLACEOBJECT* obj);