} MATRIX, * LPMATRIX;
typedef struct _CXFORM
-{ S16 a0, a1;
+{ S16 a0, a1; /* mult, add */
S16 r0, r1;
S16 g0, g1;
S16 b0, b1;
} TAG, * LPTAG;
+typedef struct _SOUNDINFO
+{
+ U8 stop;
+ U8 multiple; //continue playing if already started
+
+ U32 inpoint;
+ U32 outpoint;
+
+ U16 loops;
+ U8 envelopes;
+
+ //envelope:
+ U32* pos;
+ U32* left;
+ U32* right;
+} SOUNDINFO;
typedef struct _SWF
{ U8 fileVersion;
// folding/unfolding:
void swf_FoldAll(SWF*swf);
+void swf_UnFoldAll(SWF*swf);
void swf_FoldSprite(TAG*tag);
+void swf_UnFoldSprite(TAG*tag);
+
+// tag reordering:
+
+void swf_OptimizeTagOrder(SWF*swf);
// basic routines:
int swf_SetRGB(TAG * t,RGBA * col);
int swf_SetRGBA(TAG * t,RGBA * col);
+// helper functions:
+
+void swf_ExpandRect(SRECT*src, SPOINT add);
+void swf_ExpandRect2(SRECT*src, SRECT*add);
+SPOINT swf_TurnPoint(SPOINT p, MATRIX* m);
+SRECT swf_TurnRect(SRECT r, MATRIX* m);
+
// Function Macros
#define swf_GetS8(tag) ((S8)swf_GetU8(tag))
#define swf_GetS32(tag) ((S32)swf_GetU32(tag))
#define swf_GetCoord(tag) ((SCOORD)swf_GetU32(tag))
#define swf_GetFixed(tag) ((SFIXED)swf_GetU32(tag))
+#define swf_GetString(t) ((char*)(&(t)->data[(t)->pos]))
#define swf_SetS8(tag,v) swf_SetU8(tag,(U8)v)
#define swf_SetS16(tag,v) swf_SetU16(tag,(U16)v)
#define ST_PROTECT 24 /* This file should not be importable for editing. */
#define ST_PLACEOBJECT2 26 /* The new style place w/ alpha color transform and name. */
#define ST_REMOVEOBJECT2 28 /* A more compact remove object that omits the character tag (just depth). */
+#define ST_FREEALL 31 /* ? */
#define ST_DEFINESHAPE3 32 /* A shape V3 includes alpha values. */
#define ST_DEFINETEXT2 33 /* A text V2 includes alpha values. */
#define ST_DEFINEBUTTON2 34 /* A button V2 includes color transform, alpha and multiple actions */
#define ST_EXPORTASSETS 56
#define ST_IMPORTASSETS 57
#define ST_ENABLEDEBUGGER 58
-#define ST_MX0 59 /*(?) Components/InitClip */
-#define ST_MX1 60 /*(?) Sorensen Video*/
-#define ST_MX2 61 /*(?) Sorensen Video*/
-#define ST_MX3 62 /*(?) fontinfo2? */
+#define ST_DOINITACTION 59
+#define ST_DEFINEVIDEOSTREAM 60
+#define ST_VIDEOFRAME 61
+#define ST_DEFINEFONTINFO2 62
#define ST_MX4 63 /*(?) */
#define ST_REFLEX 777 /* to identify generator software */
U16 * glyph2ascii;
int * ascii2glyph;
SWFGLYPH * glyph;
+ U8 language;
} SWFFONT, * LPSWFFONT;
typedef struct _FONTUSAGE
#define ET_HASMAXLENGTH 512
#define ET_HASFONT 256
#define ET_X3 128
-#define ET_X2 64
+#define ET_AUTOSIZE 64 /* MX */
#define ET_HASLAYOUT 32
#define ET_NOSELECT 16
#define ET_BORDER 8
#define ET_X1 4
-#define ET_X0 2
+#define ET_HTML 2 /* MX? */
#define ET_USEOUTLINES 1
typedef struct _EditTextLayout
// swfsound.c
void swf_SetSoundStreamHead(TAG*tag, int avgnumsamples);
-/* expects 2304 samples */
-void swf_SetSoundStreamBlock(TAG*tag, S16*samples, char first);
+void swf_SetSoundStreamBlock(TAG*tag, S16*samples, char first); /* expects 2304 samples */
+
+void swf_SetSoundDefine(TAG*tag, S16*samples, int num);
+
+void swf_SetSoundInfo(TAG*tag, SOUNDINFO*info);
#endif // RFXSWF_DISABLESOUND
// swfobject.c
-// The following routines only use placeobject2:
+// The following 3 routines only use placeobject2:
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);