root/util/swftypes.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/****************************************************************************
 *
 *  Copyright (C) 2005-2006 "Stuart R. Anderson" <anderson@netsweng.com>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 ****************************************************************************/

#ifndef _SWFTYPES_H_
#define _SWFTYPES_H_
typedef signed char     SI8;    /* Signed  8-bit integer value */
typedef signed short    SI16;   /* Signed 16-bit integer value */
typedef signed long     SI32;   /* Signed 32-bit integer value */
typedef unsigned char   UI8;    /* Unsigned  8-bit integer value */
typedef unsigned short  UI16;   /* Unsigned 16-bit integer value */
typedef unsigned long   UI32;   /* Unsigned 32-bit integer value */
typedef unsigned long   U30;    /* Unsigned 30-bit variable-length encoded integer value */
typedef unsigned long   U32;    /* Unsigned 32-bit variable-length encoded integer value */
typedef signed long     S32;    /* Signed 32-bit variable-length encoded integer value */

typedef unsigned long   FIXED;  /* 32-bit 16.16 fixed-point number */
typedef unsigned short  FIXED8; /* 16-bit 8.8 fixed-point number */
typedef unsigned long   SB32;   /* Signed bit value */
typedef unsigned long   UB32;   /* Unsigned bit value */
typedef float           FB32;   /* Signed fixed-point bit value */
typedef char    *STRING;/* String */

typedef UI8 LANGCODE;
typedef UI8 BYTE;
typedef SI16 WORD;
typedef UI8 BOOLEAN;
typedef float           FLOAT;  /* 32-bit IEEE single-precision little endian fp value */
typedef double          DOUBLE; /* 64-bit IEEE double-precision little endian double value */
typedef float           FLOAT16; /* 16-bit IEEE double-precision little endian double value */

/* Types to represent Actions */

struct SWF_ACTIONRECORD {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
};

/* v3 actions */

struct SWF_ACTIONGOTOFRAME {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        WORD    Frame;
};

struct SWF_ACTIONGETURL {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        STRING  UrlString;
        STRING  TargetString;
};

struct SWF_ACTIONNEXTFRAME {
        UI8     ActionCode;
};

struct SWF_ACTIONPREVIOUSFRAME {
        UI8     ActionCode;
};

struct SWF_ACTIONPLAY {
        UI8     ActionCode;
};

struct SWF_ACTIONSTOP {
        UI8     ActionCode;
};

struct SWF_ACTIONTOGGLEQUALITY {
        UI8     ActionCode;
};

struct SWF_ACTIONSTOPSOUNDS {
        UI8     ActionCode;
};

struct SWF_ACTIONWAITFORFRAME {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        WORD    Frame;
        BYTE    SkipCount;
};

struct SWF_ACTIONSETTARGET {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        STRING  TargetName;
};

struct SWF_ACTIONGOTOLABEL {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        STRING  FrameLabel;
};

/* v4 actions */

struct SWF_ACTIONPUSHPARAM {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        UI8     Type;
        union {
                STRING  String;
                FLOAT   Float;
                int     RegisterNumber;
                int     Boolean;
                DOUBLE  Double;
                SI32    Integer;
                UI8     Constant8;
                UI16    Constant16;
        } p;
};

struct SWF_ACTIONPUSH {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        UI16    NumParam;
        struct SWF_ACTIONPUSHPARAM *Params;
};

struct SWF_ACTIONPOP {
        UI8     ActionCode;
};

struct SWF_ACTIONADD {
        UI8     ActionCode;
};

struct SWF_ACTIONSUBTRACT {
        UI8     ActionCode;
};

struct SWF_ACTIONMULTIPLY {
        UI8     ActionCode;
};

struct SWF_ACTIONDIVIDE {
        UI8     ActionCode;
};

struct SWF_ACTIONEQUALS {
        UI8     ActionCode;
};

struct SWF_ACTIONLESS {
        UI8     ActionCode;
};

struct SWF_ACTIONAND {
        UI8     ActionCode;
};

struct SWF_ACTIONOR {
        UI8     ActionCode;
};

struct SWF_ACTIONNOT {
        UI8     ActionCode;
        BOOLEAN Boolean;
};

struct SWF_ACTIONSTRINGEQUALS {
        UI8     ActionCode;
};

struct SWF_ACTIONSTRINGLENGTH {
        UI8     ActionCode;
};

struct SWF_ACTIONSTRINGADD {
        UI8     ActionCode;
};

struct SWF_ACTIONSTRINGEXTRACT {
        UI8     ActionCode;
};

struct SWF_ACTIONSTRINGLESS {
        UI8     ActionCode;
};

struct SWF_ACTIONMBSTRINGLEN {
        UI8     ActionCode;
};

struct SWF_ACTIONMBSTRINGEXTRACT {
        UI8     ActionCode;
};

struct SWF_ACTIONTOINTEGER {
        UI8     ActionCode;
};

struct SWF_ACTIONCHARTOASCII {
        UI8     ActionCode;
};

struct SWF_ACTIONASCIITOCHAR {
        UI8     ActionCode;
};

struct SWF_ACTIONMBCHARTOASCII {
        UI8     ActionCode;
};

struct SWF_ACTIONMBASCIITOCHAR {
        UI8     ActionCode;
};

struct SWF_ACTIONJUMP {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        WORD    BranchOffset;
};

struct SWF_ACTIONIF {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        WORD    BranchOffset;
        int     numActions;
        union SWF_ACTION *Actions;
};

struct SWF_ACTIONCALL {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
};

struct SWF_ACTIONGETVARIABLE {
        UI8     ActionCode;
};

struct SWF_ACTIONSETVARIABLE {
        UI8     ActionCode;
};

struct SWF_ACTIONGETURL2 {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        union {
                struct {
                        UI8     SendVarsMethod:2;
                        UI8     Reserved:4;
                        UI8     LoadTargetFlag:1;
                        UI8     LoadVariableFlag:1;
                } FlagBits;
                UI8     Flags;
        } f;
};

struct SWF_ACTIONGOTOFRAME2 {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        union {
                struct {
                        UI8     Reserved:6;
                        UI8     SceneBiasFlag:1;
                        UI8     PlayFlag:1;
                } FlagBits;
                UI8     Flags;
        } f;
        UI16    SceneBias;
};

struct SWF_ACTIONSETTARGET2 {
        UI8     ActionCode;
};

struct SWF_ACTIONGETPROPERTY {
        UI8     ActionCode;
};

struct SWF_ACTIONSETPROPERTY {
        UI8     ActionCode;
};

struct SWF_ACTIONCLONESPRITE {
        UI8     ActionCode;
};

struct SWF_ACTIONREMOVESPRITE {
        UI8     ActionCode;
};

struct SWF_ACTIONSTARTDRAG {
        UI8     ActionCode;
};

struct SWF_ACTIONENDDRAG {
        UI8     ActionCode;
};

struct SWF_ACTIONWAITFORFRAME2 {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        UI8     SkipCount;
};

struct SWF_ACTIONTRACE {
        UI8     ActionCode;
};

struct SWF_ACTIONGETTIME {
        UI8     ActionCode;
};

struct SWF_ACTIONRANDOMNUMBER {
        UI8     ActionCode;
};


/* v5 actions */

struct SWF_ACTIONCALLFUNCTION {
        UI8     ActionCode;
};

struct SWF_ACTIONCALLMETHOD {
        UI8     ActionCode;
};

struct SWF_ACTIONCONSTANTPOOL {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        UI16    Count;
        STRING  *ConstantPool;
};

struct SWF_ACTIONDEFINEFUNCTION {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        STRING  FunctionName;
        WORD    NumParams;
        STRING  *Params;
        WORD    CodeSize;
        int     numActions;
        union SWF_ACTION *Actions;
};

struct SWF_ACTIONWITH {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        UI16    Size;
        int     numActions;
        union SWF_ACTION *Actions;
};

struct SWF_ACTIONSTOREREGISTER {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        UI8     Register;
};

/* v6 actions */
struct SWF_ACTIONINSTANCEOF {
        UI8     ActionCode;
};

struct SWF_ACTIONENUMERATE2 {
        UI8     ActionCode;
};

struct SWF_ACTIONSTRICTEQUALS {
        UI8     ActionCode;
};

struct SWF_ACTIONGREATER {
        UI8     ActionCode;
};

struct SWF_ACTIONSTRINGGREATER {
        UI8     ActionCode;
};

/* v7 actions */
struct REGISTERPARAM {
        UI8     Register;
        STRING  ParamName;
};

struct SWF_ACTIONDEFINEFUNCTION2 {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        STRING  FunctionName;
        UI16    NumParams;
        UI8     RegisterCount;
        UI16    PreloadParentFlag:1;
        UI16    PreloadRootFlag:1;
        UI16    SuppressSuperFlag:1;
        UI16    PreloadSuperFlag:1;
        UI16    SuppressArgumentsFlag:1;
        UI16    PreloadArgumentsFlag:1;
        UI16    SuppressThisFlag:1;
        UI16    PreloadThisFlag:1;
        UI16    Reserved:7;
        UI16    PreloadGlobalFlag:1;
        struct REGISTERPARAM    *Params;
        UI16    CodeSize;
        int     numActions;
        union SWF_ACTION *Actions;
};

struct SWF_ACTIONTRY {
        UI8     ActionCode;
        UI16    Length;
        UI32    Offset;
        UI8     Reserved:5;
        UI8     CatchInRegisterFlag:1;
        UI8     FinallyBlockFlag:1;
        UI8     CatchBlockFlag:1;
        UI16    TrySize;
        UI16    CatchSize;
        UI16    FinallySize;
        STRING  CatchName;
        UI8     CatchRegister;
        int     numTryActs;
        union SWF_ACTION *TryActs;
        int     numCatchActs;
        union SWF_ACTION *CatchActs;
        int     numFinallyActs;
        union SWF_ACTION *FinallyActs;
};

typedef union SWF_ACTION {
        /* v3 actions */
        struct SWF_ACTIONRECORD SWF_ACTIONRECORD;
        struct SWF_ACTIONGOTOFRAME SWF_ACTIONGOTOFRAME;
        struct SWF_ACTIONGETURL SWF_ACTIONGETURL;
        struct SWF_ACTIONNEXTFRAME SWF_ACTIONNEXTFRAME;
        struct SWF_ACTIONPREVIOUSFRAME SWF_ACTIONPREVIOUSFRAME;
        struct SWF_ACTIONPLAY SWF_ACTIONPLAY;
        struct SWF_ACTIONSTOP SWF_ACTIONSTOP;
        struct SWF_ACTIONTOGGLEQUALITY SWF_ACTIONTOGLEQUALITY;
        struct SWF_ACTIONSTOPSOUNDS SWF_ACTIONSTOPSOUNDS;
        struct SWF_ACTIONWAITFORFRAME SWF_ACTIONWAITFORFRAME;
        struct SWF_ACTIONSETTARGET SWF_ACTIONSETTARGET;
        struct SWF_ACTIONGOTOLABEL SWF_ACTIONGOTOLABEL;
        /* v4 actions */
        struct SWF_ACTIONPUSH SWF_ACTIONPUSH;
        struct SWF_ACTIONPOP SWF_ACTIONPOP;
        struct SWF_ACTIONADD SWF_ACTIONADD;
        struct SWF_ACTIONSUBTRACT SWF_ACTIONSUBTRACT;
        struct SWF_ACTIONMULTIPLY SWF_ACTIONMULTIPLY;
        struct SWF_ACTIONDIVIDE SWF_ACTIONDIVIDE;
        struct SWF_ACTIONEQUALS SWF_ACTIONEQUALS;
        struct SWF_ACTIONLESS SWF_ACTIONLESS;
        struct SWF_ACTIONAND SWF_ACTIONAND;
        struct SWF_ACTIONOR SWF_ACTIONOR;
        struct SWF_ACTIONNOT SWF_ACTIONNOT;
        struct SWF_ACTIONSTRINGEQUALS SWF_ACTIONSTRINGEQUALS;
        struct SWF_ACTIONSTRINGLENGTH SWF_ACTIONSTRINGLENGTH;
        struct SWF_ACTIONSTRINGADD SWF_ACTIONSTRINGADD;
        struct SWF_ACTIONSTRINGEXTRACT SWF_ACTIONSTRINGEXTRACT;
        struct SWF_ACTIONSTRINGLESS SWF_ACTIONSTRINGLESS;
        struct SWF_ACTIONMBSTRINGLEN SWF_ACTIONMBSTRINGLEN;
        struct SWF_ACTIONMBSTRINGEXTRACT SWF_ACTIONMBSTRINGEXTRACT;
        struct SWF_ACTIONTOINTEGER SWF_ACTIONTOINTEGER;
        struct SWF_ACTIONCHARTOASCII SWF_ACTIONCHARTOASCII;
        struct SWF_ACTIONASCIITOCHAR SWF_ACTIONASCIITOCHAR;
        struct SWF_ACTIONMBCHARTOASCII SWF_ACTIONMBCHARTOASCII;
        struct SWF_ACTIONMBASCIITOCHAR SWF_ACTIONMBASCIITOCHAR;
        struct SWF_ACTIONJUMP SWF_ACTIONJUMP;
        struct SWF_ACTIONIF SWF_ACTIONIF;
        struct SWF_ACTIONCALL SWF_ACTIONCALL;
        struct SWF_ACTIONGETVARIABLE SWF_ACTIONGETVARIABLE;
        struct SWF_ACTIONSETVARIABLE SWF_ACTIONSETVARIABLE;
        struct SWF_ACTIONGETURL2 SWF_ACTIONGETURL2;
        struct SWF_ACTIONGOTOFRAME2 SWF_ACTIONGOTOFRAME2;
        struct SWF_ACTIONSETTARGET2 SWF_ACTIONSETTARGET2;
        struct SWF_ACTIONGETPROPERTY SWF_ACTIONGETPROPERTY;
        struct SWF_ACTIONSETPROPERTY SWF_ACTIONSETPROPERTY;
        struct SWF_ACTIONCLONESPRITE SWF_ACTIONCLONESPRITE;
        struct SWF_ACTIONREMOVESPRITE SWF_ACTIONREMOVESPRITE;
        struct SWF_ACTIONSTARTDRAG SWF_ACTIONSTARTDRAG;
        struct SWF_ACTIONENDDRAG SWF_ACTIONENDDRAG;
        struct SWF_ACTIONWAITFORFRAME2 SWF_ACTIONWAITFORFRAME2;
        struct SWF_ACTIONTRACE SWF_ACTIONTRACE;
        struct SWF_ACTIONGETTIME SWF_ACTIONGETTIME;
        struct SWF_ACTIONRANDOMNUMBER SWF_ACTIONRANDOMNUMBER;
        /* v5 actions */
        struct SWF_ACTIONCALLFUNCTION SWF_ACTIONCALLFUNCTION;
        struct SWF_ACTIONCALLMETHOD SWF_ACTIONCALLMETHOD;
        struct SWF_ACTIONCONSTANTPOOL SWF_ACTIONCONSTANTPOOL;
        struct SWF_ACTIONDEFINEFUNCTION SWF_ACTIONDEFINEFUNCTION;
        struct SWF_ACTIONWITH SWF_ACTIONWITH;
        struct SWF_ACTIONSTOREREGISTER SWF_ACTIONSTOREREGISTER;
        /* v6 actions */
        struct SWF_ACTIONINSTANCEOF SWF_ACTIONINSTANCEOF;
        struct SWF_ACTIONENUMERATE2 SWF_ACTIONENUMERATE2;
        struct SWF_ACTIONSTRICTEQUALS SWF_ACTIONSTRICTEQUALS;
        struct SWF_ACTIONGREATER SWF_ACTIONGREATER;
        struct SWF_ACTIONSTRINGGREATER SWF_ACTIONSTRINGGREATER;
        /* v7 actions */
        struct SWF_ACTIONDEFINEFUNCTION2 SWF_ACTIONDEFINEFUNCTION2;
        struct SWF_ACTIONTRY SWF_ACTIONTRY;
} SWF_ACTION;



/* Types Flash Types */

typedef struct SWF_RGBA {
        UI8     red;
        UI8     green;
        UI8     blue;
        UI8     alpha;
} SWF_RGBA;

typedef struct SWF_RECT {
        UI8     Nbits:5;
        SB32    Xmin;
        SB32    Xmax;
        SB32    Ymin;
        SB32    Ymax;
} SWF_RECT;

typedef struct SWF_GRADIENTRECORD {
        UI8             Ratio;
        SWF_RGBA        Color;
} SWF_GRADIENTRECORD;

typedef struct SWF_GRADIENT {
        UI8     SpreadMode:2;
        UI8     InterpolationMode:2;
        UI8     NumGradients:4;
        SWF_GRADIENTRECORD      GradientRecords[15];
} SWF_GRADIENT;

typedef struct SWF_FOCALGRADIENT {
        UI8     SpreadMode:2;
        UI8     InterpolationMode:2;
        UI8     NumGradients:4;
        SWF_GRADIENTRECORD      GradientRecords[15];
        FIXED8  FocalPoint;
} SWF_FOCALGRADIENT;

typedef struct SWF_MATRIX {
        UI8     HasScale:1;
        UI8     NScaleBits:5;
        FB32    ScaleX;
        FB32    ScaleY;
        UI8     HasRotate:1;
        UI8     NRotateBits:5;
        FB32    RotateSkew0;
        FB32    RotateSkew1;
        UI8     NTranslateBits:5;
        SB32    TranslateX;
        SB32    TranslateY;
} SWF_MATRIX;

typedef struct SWF_CXFORM {
        UI8     HasAddTerms:1;
        UI8     HasMultTerms:1;
        UI8     Nbits:4;
        SI32    RedMultTerm;
        SI32    GreenMultTerm;
        SI32    BlueMultTerm;
        SI32    RedAddTerm;
        SI32    GreenAddTerm;
        SI32    BlueAddTerm;
} SWF_CXFORM;

typedef struct SWF_CXFORMWITHALPHA {
        UI8     HasAddTerms:1;
        UI8     HasMultTerms:1;
        UI8     Nbits:4;
        SI32    RedMultTerm;
        SI32    GreenMultTerm;
        SI32    BlueMultTerm;
        SI32    AlphaMultTerm;
        SI32    RedAddTerm;
        SI32    GreenAddTerm;
        SI32    BlueAddTerm;
        SI32    AlphaAddTerm;
} SWF_CXFORMWITHALPHA;

typedef struct SWF_BLURFILTER {
        FIXED   BlurX;
        FIXED   BlurY;
        UI8     Passes:5;
        UI8     Reserved:3;
} SWF_BLURFILTER;

typedef struct SWF_BEVELFILTER {
        SWF_RGBA        ShadowColor;
        SWF_RGBA        HighlightColor;
        FIXED           BlurX;
        FIXED           BlurY;
        FIXED           Angle;
        FIXED           Distance;
        FIXED8          Strength;
        UI8             InnerShadow:1;
        UI8             Kockout:1;
        UI8             CompositeSource:1;
        UI8             OnTop:1;
        UI8             Passes:4;
} SWF_BEVELFILTER;

typedef struct SWF_GRADIENTFILTER
{
        UI8             NumColors;
        SWF_RGBA*       GradientColors;
        UI8*            GradientRatio;
        FIXED           BlurX;
        FIXED           BlurY;
        FIXED           Angle;
        FIXED           Distance;
        FIXED8          Strength;
        UI8             InnerShadow:1;
        UI8             Kockout:1;
        UI8             CompositeSource:1;
        UI8             OnTop:1;
        UI8             Passes:4;
} SWF_GRADIENTFILTER;
        
typedef struct SWF_GLOWFILTER {
        SWF_RGBA        GlowColor;
        FIXED           BlurX;
        FIXED           BlurY;
        FIXED8          Strength;
        UI8             InnerGlow:1;
        UI8             Kockout:1;
        UI8             CompositeSource:1;
        UI8             Passes:5;
} SWF_GLOWFILTER;

typedef struct SWF_CONVOLUTIONFILTER {
        UI8             MatrixX;
        UI8             MatrixY;
        FLOAT           Divisor;
        FLOAT           Bias;
        FLOAT*          Matrix;
        SWF_RGBA        DefaultColor;
        UI8             Reserved:6;
        UI8             Clamp:1;
        UI8             PreserveAlpha:1;
} SWF_CONVOLUTIONFILTER;

typedef struct SWF_COLORMATRIXFILTER
{
        FLOAT Matrix[20];
} SWF_COLORMATRIXFILTER;

typedef struct SWF_DROPSHADOWFILTER {
        SWF_RGBA        DropShadowColor;
        FIXED           BlurX;
        FIXED           BlurY;
        FIXED           Angle;
        FIXED           Distance;
        FIXED8          Strength;
        UI8             InnerShadow:1;
        UI8             Kockout:1;
        UI8             CompositeSource:1;
        UI8             Passes:5;
} SWF_DROPSHADOWFILTER;

enum
{
        FILTER_DROPSHADOW,
        FILTER_BLUR,
        FILTER_GLOW,
        FILTER_BEVEL,
        FILTER_GRADIENTGLOW,
        FILTER_CONVOLUTION,
        FILTER_COLORMATRIX,
        FILTER_GRADIENTBEVEL
};

typedef struct SWF_FILTER {
        UI8     FilterId;
        union {
                SWF_DROPSHADOWFILTER dropShadow;
                SWF_BLURFILTER blur;
                SWF_GLOWFILTER glow;
                SWF_BEVELFILTER bevel;
                SWF_GRADIENTFILTER gradientGlow;
                SWF_CONVOLUTIONFILTER convolution;
                SWF_COLORMATRIXFILTER colorMatrix;
                SWF_GRADIENTFILTER gradientBevel;
        } filter;
} SWF_FILTER;

typedef struct SWF_FILTERLIST {
        UI8             NumberOfFilters;
        SWF_FILTER      *Filter;
} SWF_FILTERLIST;

typedef struct SWF_BUTTONRECORD {
        UI8     ButtonReserved:2;
        UI8     ButtonHasBlendMode:1;
        UI8     ButtonHasFilterList:1;
        UI8     ButtonStateHitTest:1;
        UI8     ButtonStateDown:1;
        UI8     ButtonStateOver:1;
        UI8     ButtonStateUp:1;
        UI16    CharacterId;
        UI16    PlaceDepth;
        SWF_MATRIX      PlaceMatrix;
        SWF_CXFORMWITHALPHA     ColorTransform;
        SWF_FILTERLIST  FilterList;     
        UI8     BlendMode;
} SWF_BUTTONRECORD;

typedef struct SWF_BUTTONCONDACTION {
        UI16    CondActionSize;
        UI16    CondIdleToOverDown:1;
        UI16    CondOutDownToIdle:1;
        UI16    CondOutDownToOverDown:1;
        UI16    CondOverDownToOutDown:1;
        UI16    CondOverDownToOverUp:1;
        UI16    CondOverUpToOverDown:1;
        UI16    CondOverUpToIdle:1;
        UI16    CondIdleToOverUp:1;
        UI16    CondKeyPress:7;
        UI16    CondOverDownToIdle:1;
        int     numActions;
        SWF_ACTION *Actions;
} SWF_BUTTONCONDACTION;

typedef struct SWF_CLIPEVENTFLAGS {
        UI8     ClipEventKeyUp:1;
        UI8     ClipEventKeyDown:1;
        UI8     ClipEventMouseUp:1;
        UI8     ClipEventMouseDown:1;
        UI8     ClipEventMouseMove:1;
        UI8     ClipEventUnload:1;
        UI8     ClipEventEnterFrame:1;
        UI8     ClipEventLoad:1;
        UI8     ClipEventDragOver:1;
        UI8     ClipEventRollOut:1;
        UI8     ClipEventRollOver:1;
        UI8     ClipEventReleaseOutside:1;
        UI8     ClipEventRelease:1;
        UI8     ClipEventPress:1;
        UI8     ClipEventInitialize:1;
        UI8     ClipEventData:1;
        UI8     Reserved:5;
        UI8     ClipEventConstruct:1;
        UI8     ClipEventKeyPress:1;
        UI8     ClipEventDragOut:1;
        UI8     Reserved2:8;
} SWF_CLIPEVENTFLAGS;

typedef struct SWF_CLIPACTIONRECORD {
        SWF_CLIPEVENTFLAGS      EventFlag;
        UI32    ActionRecordSize;
        UI8     KeyCode;
        int     numActions;
        SWF_ACTION      *Actions;
} SWF_CLIPACTIONRECORD;

typedef struct SWF_CLIPACTIONS {
        UI16    Reserved;
        SWF_CLIPEVENTFLAGS      AllEventFlags;
        int     NumClipRecords;
        SWF_CLIPACTIONRECORD    *ClipActionRecords;
        UI32    ClipActionEndFlag;
} SWF_CLIPACTIONS;

typedef struct SWF_FILLSTYLE {
        UI8             FillStyleType;
        SWF_RGBA        Color;
        SWF_MATRIX      GradientMatrix;
        SWF_GRADIENT    Gradient;
        SWF_FOCALGRADIENT FocalGradient;
        UI16            BitmapId;
        SWF_MATRIX      BitmapMatrix;
} SWF_FILLSTYLE;

typedef struct SWF_FILLSTYLEARRAY {
        UI8     FillStyleCount;
        UI16    FillStyleCountExtended;
        SWF_FILLSTYLE   *FillStyles;
} SWF_FILLSTYLEARRAY;

typedef struct SWF_LINESTYLE {
        UI16            Width;
        SWF_RGBA        Color;
} SWF_LINESTYLE;

typedef struct SWF_LINESTYLE2 {
        UI16            Width;
        UI8             StartCapStyle:2;
        UI8             JoinStyle:2;
        UI8             HasFillFlag:1;
        UI8             NoHScaleFlag:1;
        UI8             NoVScaleFlag:1;
        UI8             PixelHintingFlag:1;
        UI8             Reserved:5;
        UI8             NoClose:1;
        UI8             EndCapStyle:2;
        UI16            MiterLimitFactor;
        SWF_RGBA        Color;
        SWF_FILLSTYLE   FillType;
} SWF_LINESTYLE2;

typedef struct SWF_LINESTYLEARRAY {
        UI16    LineStyleCount;
        SWF_LINESTYLE   *LineStyles;
        SWF_LINESTYLE2  *LineStyles2;
} SWF_LINESTYLEARRAY;

typedef struct SWF_ENDSHAPERECORD {
        UI16    TypeFlag:1;
        UI16    EndOfShape:5;
} SWF_ENDSHAPERECORD;

typedef struct SWF_STYLECHANGERECORD {
        UI16    TypeFlag:1;
        UI16    StateNewStyles:1;
        UI16    StateLineStyle:1;
        UI16    StateFillStyle1:1;
        UI16    StateFillStyle0:1;
        UI16    StateMoveTo:1;
        UI16    MoveBits:5;
        SB32    MoveDeltaX;
        SB32    MoveDeltaY;
        UB32    FillStyle0;
        UB32    FillStyle1;
        UB32    LineStyle;
        SWF_FILLSTYLEARRAY      FillStyles;
        SWF_LINESTYLEARRAY      LineStyles;
        UI8     NumFillBits:4;
        UI8     NumLineBits:4;
} SWF_STYLECHANGERECORD;

typedef struct SWF_CURVEDEDGERECORD {
        UI16    TypeFlag:1;
        UI16    StraightFlag:1;
        UI16    NumBits:4;
        SB32    ControlDeltaX;
        SB32    ControlDeltaY;
        SB32    AnchorDeltaX;
        SB32    AnchorDeltaY;
} SWF_CURVEDEDGERECORD;

typedef struct SWF_STRAIGHTEDGERECORD {
        UI16    TypeFlag:1;
        UI16    StraightEdge:1;
        UI16    NumBits:4;
        UI16    GeneralLineFlag:1;
        SB32    DeltaX;
        SB32    DeltaY;
        SI8     VertLineFlag:1;
        SB32    VLDeltaX;
        SB32    VLDeltaY;
} SWF_STRAIGHTEDGERECORD;

typedef union SWF_SHAPERECORD {
        SWF_ENDSHAPERECORD      EndShape;
        SWF_STYLECHANGERECORD   StyleChange;
        SWF_STRAIGHTEDGERECORD  StraightEdge;
        SWF_CURVEDEDGERECORD    CurvedEdge;
} SWF_SHAPERECORD;

typedef struct SWF_MORPHGRADIENTRECORD {
        UI8             StartRatio;
        SWF_RGBA        StartColor;
        UI8             EndRatio;
        SWF_RGBA        EndColor;
} SWF_MORPHGRADIENTRECORD;

typedef struct SWF_MORPHGRADIENT {
        UI8     NumGradients;
        SWF_MORPHGRADIENTRECORD GradientRecords[8];
} SWF_MORPHGRADIENT;

typedef struct SWF_MORPHFILLSTYLE {
        UI8             FillStyleType;
        SWF_RGBA        StartColor;
        SWF_RGBA        EndColor;
        SWF_MATRIX      StartGradientMatrix;
        SWF_MATRIX      EndGradientMatrix;
        SWF_MORPHGRADIENT       Gradient;
        UI16            BitmapId;
        SWF_MATRIX      StartBitmapMatrix;
        SWF_MATRIX      EndBitmapMatrix;
} SWF_MORPHFILLSTYLE;

typedef struct SWF_MORPHFILLSTYLES {
        UI8     FillStyleCount;
        UI16    FillStyleCountExtended;
        SWF_MORPHFILLSTYLE      *FillStyles;
} SWF_MORPHFILLSTYLES;


typedef struct SWF_MORPHLINESTYLE {
        UI16            StartWidth;
        UI16            EndWidth;
        SWF_RGBA        StartColor;
        SWF_RGBA        EndColor;
} SWF_MORPHLINESTYLE;

typedef struct SWF_MORPHLINESTYLE2 {
        UI16            StartWidth;
        UI16            EndWidth;
        UI16            StartCapStyle:2;
        UI16            JoinStyle:2;
        UI16            HasFillFlag:2;
        UI16            NoHScaleFlag:1;
        UI16            NoVScaleFlag:1;
        UI16            PixelHintingFlag:1;
        UI16            Reserved:5;
        UI16            NoClose:1;
        UI16            EndCapStyle:2;
        UI16            MiterLimitFactor;
        SWF_RGBA        StartColor;
        SWF_RGBA        EndColor;
        SWF_MORPHFILLSTYLE FillType;
} SWF_MORPHLINESTYLE2;

typedef struct SWF_MORPHLINESTYLES {
        UI8     LineStyleCount;
        UI16    LineStyleCountExtended;
        SWF_MORPHLINESTYLE      *LineStyles;
        SWF_MORPHLINESTYLE2     *LineStyles2;
} SWF_MORPHLINESTYLES;

typedef struct SWF_SHAPE {
        UI8     NumFillBits:4;
        UI8     NumLineBits:4;
        int     NumShapeRecords;
        SWF_SHAPERECORD *ShapeRecords;
} SWF_SHAPE;

typedef struct SWF_SHAPEWITHSTYLE {
        SWF_FILLSTYLEARRAY      FillStyles;
        SWF_LINESTYLEARRAY      LineStyles;
        UI8     NumFillBits:4;
        UI8     NumLineBits:4;
        int     NumShapeRecords;
        SWF_SHAPERECORD *ShapeRecords;
} SWF_SHAPEWITHSTYLE;

typedef struct SWF_GLYPHENTRY {
        UI32    *GlyphIndex;
        UI32    *GlyphAdvance;
} SWF_GLYPHENTRY;

typedef struct SWF_TEXTRECORD {
        UI8     TextRecordType:1;
        UI8     StyleFlagsReserved:3;
        UI8     StyleFlagHasFont:1;
        UI8     StyleFlagHasColor:1;
        UI8     StyleFlagHasYOffset:1;
        UI8     StyleFlagHasXOffset:1;
        UI16    FontID;
        SWF_RGBA        TextColor;
        SI16    XOffset;
        SI16    YOffset;
        UI16    TextHeight;
        UI8     GlyphCount;
        SWF_GLYPHENTRY *GlyphEntries;
} SWF_TEXTRECORD;

typedef struct SWF_SOUNDENVELOPE {
        UI32    Pos44;
        UI16    LeftLevel;
        UI16    RightLevel;
} SWF_SOUNDENVELOPE;

typedef struct SWF_SOUNDINFO {
        UI8     Reserved:2;
        UI8     SyncStop:1;
        UI8     SyncNoMultiple:1;
        UI8     HasEnvelope:1;
        UI8     HasLoops:1;
        UI8     HasOutPoint:1;
        UI8     HasInPoint:1;
        UI32    InPoint;
        UI32    OutPoint;
        UI16    LoopCount;
        UI8     EnvPoints;
        SWF_SOUNDENVELOPE *EnvelopeRecords;
} SWF_SOUNDINFO;



/* Types to represent Blocks */

struct SWF_CHARACTERSET
{
  int chid;
};

struct SWF_DEFINEBITS
{
  UI16 CharacterID;
  int JPEGDataSize;
  UI8 *JPEGData;
};

struct SWF_DEFINEBITSJPEG2
{
  UI16 CharacterID;
  int JPEGDataSize;
  UI8 *JPEGData;
};

struct SWF_DEFINEBITSJPEG3
{
  UI16 CharacterID;
  UI32 AlphaDataOffset;
  UI8 *JPEGData;
  int AlphaDataSize;
  UI8 *BitmapAlphaData;
};

// XXX: obsolete
struct SWF_DEFINEBITSPTR
{
  int chid;
};

struct SWF_DEFINEBUTTON
{
  UI16 ButtonId;
  SWF_BUTTONRECORD *Characters;
  int numCharacters;
  UI8 CharacterEndFlag;
  int numActions;
  SWF_ACTION *Actions;
  UI8 ActionEndFlag;
};

struct SWF_DEFINEBUTTON2
{
  UI16 Buttonid;
  UI8 ReservedFlags:7;
  UI8 TrackAsMenu:1;
  UI16 ActionOffset;
  int numCharacters;
  SWF_BUTTONRECORD *Characters;
  UI8 CharacterEndFlag;
  int numActions;
  SWF_BUTTONCONDACTION *Actions;
};

struct SWF_DEFINEBUTTONCXFORM
{
  UI16 ButtonId;
  SWF_CXFORM ButtonColorTransform;
};

struct SWF_DEFINEBUTTONSOUND
{
  UI16 CharacterID;
  UI16 ButtonSoundChar0;
  SWF_SOUNDINFO ButtonSoundInfo0;
  UI16 ButtonSoundChar1;
  SWF_SOUNDINFO ButtonSoundInfo1;
  UI16 ButtonSoundChar2;
  SWF_SOUNDINFO ButtonSoundInfo2;
  UI16 ButtonSoundChar3;
  SWF_SOUNDINFO ButtonSoundInfo3;
};


// XXX: obsolete ?
struct SWF_DEFINECOMMANDOBJ
{
  int chid;
};

struct SWF_DEFINEEDITTEXT
{
  UI16 CharacterID;
  SWF_RECT Bounds;
  UI8   HasText:1;
  UI8   WordWrap:1;
  UI8   Multiline:1;
  UI8   Password:1;
  UI8   ReadOnly:1;
  UI8   HasTextColor:1;
  UI8   HasMaxLength:1;
  UI8   HasFont:1;
  UI8   HasFontClass:1;
  UI8   AutoSize:1;
  UI8   HasLayout:1;
  UI8   NoSelect:1;
  UI8   Border:1;
  UI8   WasStatic:1;
  UI8   HTML:1;
  UI8   UseOutlines:1;
  UI16  FontID;
  STRING FontClass;
  UI16  FontHeight;
  SWF_RGBA      TextColor;
  UI16  MaxLength;
  UI8   Align;
  UI16  LeftMargin;
  UI16  RightMargin;
  UI16  Indent;
  UI16  Leading;
  STRING        VariableName;
  STRING        InitialText;
};

struct SWF_DEFINEFONT
{
  UI16 FontID;
  int NumGlyphs;
  UI16 *OffsetTable;
  SWF_SHAPE *GlyphShapeTable;
};

struct SWF_KERNINGRECORD
{
  UI16 FontKerningCode1;
  UI16 FontKerningCode2;
  SI16 FontKerningAdjustment;
};

struct SWF_DEFINEFONT2
{
  UI16 FontID;
  UI8 FontFlagsHasLayout:1;
  UI8 FontFlagsShiftJis:1;
  UI8 FontFlagsSmallText:1;
  UI8 FontFlagsFlagANSI:1;
  UI8 FontFlagsWideOffsets:1;
  UI8 FontFlagsWideCodes:1;
  UI8 FontFlagsFlagsItalics:1;
  UI8 FontFlagsFlagsBold:1;
  LANGCODE LanguageCode;
  UI8 FontNameLen;
  STRING FontName;
  UI16 NumGlyphs;
  union {
    UI16 *UI16;
    UI32 *UI32;
  } OffsetTable;
  union {
    UI16 UI16;
    UI32 UI32;
  } CodeTableOffset;
  SWF_SHAPE *GlyphShapeTable;
  int *CodeTable;
  SI16 FontAscent;
  SI16 FontDecent;
  SI16 FontLeading;
  SI16 *FontAdvanceTable;
  SWF_RECT *FontBoundsTable;
  UI16 KerningCount;
  struct SWF_KERNINGRECORD *FontKerningTable;
};

struct SWF_DEFINEFONT3
{
  UI16 FontID;
  UI8 FontFlagsHasLayout:1;
  UI8 FontFlagsShiftJis:1;
  UI8 FontFlagsSmallText:1;
  UI8 FontFlagsFlagANSI:1;
  UI8 FontFlagsWideOffsets:1;
  UI8 FontFlagsWideCodes:1;
  UI8 FontFlagsFlagsItalics:1;
  UI8 FontFlagsFlagsBold:1;
  LANGCODE LanguageCode;
  UI8 FontNameLen;
  STRING FontName;
  UI16 NumGlyphs;
  union {
    UI16 *UI16;
    UI32 *UI32;
  } OffsetTable;
  union {
    UI16 UI16;
    UI32 UI32;
  } CodeTableOffset;
  SWF_SHAPE *GlyphShapeTable;
  UI16 *CodeTable;
  SI16 FontAscent;
  SI16 FontDecent;
  SI16 FontLeading;
  SI16 *FontAdvanceTable;
  SWF_RECT *FontBoundsTable;
  UI16 KerningCount;
  struct SWF_KERNINGRECORD *FontKerningTable;
};

struct SWF_DEFINEFONTINFO
{
  UI16 FontID;
  UI8 FontNameLen;
  STRING FontName;
  UI8 FontFlagsReserved:2;
  UI8 FontFlagsSmallText:1;
  UI8 FontFlagsShiftJIS:1;
  UI8 FontFlagsANSI:1;
  UI8 FontFlagsItalic:1;
  UI8 FontFlagsBold:1;
  UI8 FontFlagsWideCodes:1;
  int nGlyph;
  UI16 *CodeTable;
};

struct SWF_DEFINEFONTINFO2
{
  UI16 FontID;
  UI8 FontNameLen;
  STRING FontName;
  UI8 FontFlagsReserved:2;
  UI8 FontFlagsSmallText:1;
  UI8 FontFlagsShiftJIS:1;
  UI8 FontFlagsANSI:1;
  UI8 FontFlagsItalic:1;
  UI8 FontFlagsBold:1;
  UI8 FontFlagsWideCodes:1;
  LANGCODE LanguageCode;
  int nGlyph;
  UI16 *CodeTable;
};

struct SWF_ZONEDATA
{
  FLOAT16 AlignmentCoordinate;
  FLOAT16 Range;
};

struct SWF_ZONERECORD
{
  UI8 NumZoneData;
  struct SWF_ZONEDATA *ZoneData;
  UI8 ZoneMaskX:1;
  UI8 ZoneMaskY:1;
  UI8 Reserved:6;
};

struct SWF_DEFINEFONTALIGNZONES
{
  UI16 FontID;
  UI8 CSMTableHint:2;
  UI8 Reserved:6;
  int GlyphCount;
  struct SWF_ZONERECORD *ZoneTable;
};

struct SWF_CSMTEXTSETTINGS
{
  UI16 TextID;
  UI8 UseFlashType:2;
  UI8 GridFit:3;
  UI8 Reserved:3;
  FB32 Thickness;
  FB32 Sharpness;
  UI8 Reserved2;
};

struct SWF_DEFINEFONTNAME
{
  UI16 FontId;
  STRING FontName;
  STRING FontCopyright;
};

struct SWF_DEFINELOSSLESS
{
  UI16 CharacterID;
  UI8  BitmapFormat;
  UI16 BitmapWidth;
  UI16 BitmapHeight;
  UI8  BitmapColorTableSize;
  UI8  *ZlibBitmapData;
};

struct SWF_DEFINELOSSLESS2
{
  UI16 CharacterID;
  UI8  BitmapFormat;
  UI16 BitmapWidth;
  UI16 BitmapHeight;
  UI8  BitmapColorTableSize;
  UI8  *ZlibBitmapData;
};

struct SWF_DEFINEMORPHSHAPE
{
  UI16 CharacterID;
  SWF_RECT StartBounds;
  SWF_RECT EndBounds;
  UI32 Offset;
  SWF_MORPHFILLSTYLES MorphFillStyles;
  SWF_MORPHLINESTYLES MorphLineStyles;
  SWF_SHAPE StartEdges;
  SWF_SHAPE EndEdges;
};

struct SWF_DEFINEMORPHSHAPE2
{
  UI16 CharacterID;
  SWF_RECT StartBounds;
  SWF_RECT EndBounds;
  SWF_RECT StartEdgeBounds;
  SWF_RECT EndEdgeBounds;
  UI8 Reserved:6;
  UI8 UsesNonScalingStrokes:1;
  UI8 UsesScalingStrokes:1;
  UI32 Offset;
  SWF_MORPHFILLSTYLES MorphFillStyles;
  SWF_MORPHLINESTYLES MorphLineStyles;
  SWF_SHAPE StartEdges;
  SWF_SHAPE EndEdges;
};


struct SWF_DEFINESHAPE
{
  UI16 ShapeID;
  SWF_RECT ShapeBounds;
  SWF_SHAPEWITHSTYLE Shapes;
};

struct SWF_DEFINESHAPE2
{
  UI16 ShapeID;
  SWF_RECT ShapeBounds;
  SWF_SHAPEWITHSTYLE Shapes;
};

struct SWF_DEFINESHAPE3
{
  UI16 ShapeID;
  SWF_RECT ShapeBounds;
  SWF_SHAPEWITHSTYLE Shapes;
};

struct SWF_DEFINESHAPE4
{
  UI16 ShapeID;
  SWF_RECT ShapeBounds;
  SWF_RECT EdgeBounds;
  UI8 Reserved:6;
  UI8 UsesNonScalingStrokes:1;
  UI8 UsesScalingStrokes:1;
  SWF_SHAPEWITHSTYLE Shapes;
};

struct SWF_DEFINESPRITE
{
  UI16 SpriteId;
  UI16 FrameCount;
  UI16 BlockCount;
  UI16 *tagTypes;
  struct SWF_Parserstruct_s **Tags;
};

struct SWF_DEFINETEXT
{
  UI16 CharacterID;
  SWF_RECT TextBounds;
  SWF_MATRIX TextMatrix;
  UI8   GlyphBits;
  UI8   AdvanceBits;
  int numTextRecords;
  SWF_TEXTRECORD *TextRecords;
};

struct SWF_DEFINETEXT2
{
  UI16 CharacterID;
  SWF_RECT TextBounds;
  SWF_MATRIX TextMatrix;
  UI8   GlyphBits;
  UI8   AdvanceBits;
  int numTextRecords;
  SWF_TEXTRECORD *TextRecords;
};

// XXX obsolete ?
struct SWF_DEFINETEXTFORMAT
{
  int chid;
};

// XXX obsolete ?
struct SWF_DEFINEVIDEO
{
  int chid;
};

struct SWF_DEFINEVIDEOSTREAM
{
  UI16 CharacterID;
  UI16 NumFrames;
  UI16 Width;
  UI16 Height;
  UI8 Reserved:5;
  UI8 VideoFlagsDeblocking:2;
  UI8 VideoFlagsSmoothing:1;
  UI8 CodecID;
};

struct SWF_DOACTION
{
  int  numActions;
  SWF_ACTION *Actions;
};

struct SWF_ENABLEDEBUGGER
{
  STRING Password;
};

struct SWF_ENABLEDEBUGGER2
{
  UI16 Reserved;
  STRING Password;
};

struct SWF_END
{ /* empty tag */ };

struct SWF_EXPORTASSETS
{
  UI16 Count;
  UI16 *Tags;
  STRING *Names;
};

// XXX obsolete ?
struct SWF_FONTREF
{
  int chid;
};

struct SWF_FRAMELABEL
{
  STRING        Name;
  UI8           IsAnchor;
};

// XXX obsolete ?
struct SWF_FRAMETAG
{
  int chid;
};

// XXX obsolete ?
struct SWF_FREEALL
{
  int chid;
};

// XXX obsolete ?
struct SWF_FREECHARACTER
{
  int chid;
};

// XXX obsolete ?
struct SWF_GENCOMMAND
{
  int chid;
};

struct SWF_IMPORTASSETS
{
  STRING URL;
  UI16  Count;
  UI16 *Tags;
  STRING *Names;
};

struct SWF_IMPORTASSETS2
{
  STRING URL;
  UI8 Reserved;
  UI8 Reserved2;
  UI16  Count;
  UI16 *Tags;
  STRING *Names;
};


struct SWF_JPEGTABLES
{
  int JPEGDataSize;
  UI8 *JPEGData;
};

struct SWF_NAMECHARACTER
{
  UI16 Id;
  STRING Name;
};

// XXX: obsolete?
struct SWF_PATHSAREPOSTSCRIPT
{
  int chid;
};

struct SWF_PLACEOBJECT
{
  UI16 CharacterId;
  UI16 Depth;
  SWF_MATRIX Matrix;
  SWF_CXFORMWITHALPHA ColorTransform;
};

struct SWF_PLACEOBJECT2
{
  UI8 PlaceFlagHasClipActions:1;
  UI8 PlaceFlagHasClipDepth:1;
  UI8 PlaceFlagHasName:1;
  UI8 PlaceFlagHasRatio:1;
  UI8 PlaceFlagHasColorTransform:1;
  UI8 PlaceFlagHasMatrix:1;
  UI8 PlaceFlagHasCharacter:1;
  UI8 PlaceFlagMove:1;
  UI16 Depth;
  UI16 CharacterId;
  SWF_MATRIX Matrix;
  SWF_CXFORMWITHALPHA ColorTransform;
  UI16 Ratio;
  STRING Name;
  UI16 ClipDepth;
  SWF_CLIPACTIONS ClipActions;
};

struct SWF_PLACEOBJECT3
{
  UI8 PlaceFlagHasClipActions:1;
  UI8 PlaceFlagHasClipDepth:1;
  UI8 PlaceFlagHasName:1;
  UI8 PlaceFlagHasRatio:1;
  UI8 PlaceFlagHasColorTransform:1;
  UI8 PlaceFlagHasMatrix:1;
  UI8 PlaceFlagHasCharacter:1;
  UI8 PlaceFlagMove:1;
  UI8 Reserved:3;
  UI8 PlaceFlagHasImage:1;
  UI8 PlaceFlagHasClassName:1;
  UI8 PlaceFlagHasCacheAsBitmap:1;
  UI8 PlaceFlagHasBlendMode:1;
  UI8 PlaceFlagHasFilterList:1;
  UI16 Depth;
  STRING ClassName;
  UI16 CharacterId;
  SWF_MATRIX Matrix;
  SWF_CXFORMWITHALPHA ColorTransform;
  UI16 Ratio;
  STRING Name;
  UI16 ClipDepth;
  SWF_FILTERLIST SurfaceFilterList;
  UI8 BlendMode;
  SWF_CLIPACTIONS ClipActions;
};

struct SWF_PREBUILT
{
  int chid;
};

struct SWF_PREBUILTCLIP
{
  int chid;
};

struct SWF_PROTECT
{
  STRING Password;
};

struct SWF_REMOVEOBJECT
{
  UI16 CharacterId;
  UI16 Depth;
};

struct SWF_REMOVEOBJECT2
{
  UI16 Depth;
};

struct SWF_SERIALNUMBER
{ 
  UI32 Id;
  UI32 Edition;
  UI8 Major;
  UI8 Minor;
  UI32 BuildL;
  UI32 BuildH;
  UI32 TimestampL;
  UI32 TimestampH;
};

struct SWF_SETBACKGROUNDCOLOR
{
  SWF_RGBA rgb;
};

struct SWF_SHOWFRAME
{
  int chid;
};

struct MP3STREAMSOUNDDATA
{
  SI16 SampleCount;
  SI16 SeekSamples;
  UI8 *frames;
};

struct SWF_SOUNDSTREAMBLOCK
{
  union {
    struct MP3STREAMSOUNDDATA mp3;
    UI8 *data;
  } StreamData;
};

struct SWF_SOUNDSTREAMHEAD
{
  UI16  Reserved:4;
  UI16  PlaybackSoundRate:2;
  UI16  PlaybackSoundSize:1;
  UI16  PlaybackSoundType:1;
  UI16  StreamSoundCompression:4;
  UI16  StreamSoundRate:2;
  UI16  StreamSoundSize:1;
  UI16  StreamSoundType:1;
  UI16  StreamSoundSampleCount;
  UI16  LatencySeek;
};

struct SWF_SOUNDSTREAMHEAD2
{
  UI16  Reserved:4;
  UI16  PlaybackSoundRate:2;
  UI16  PlaybackSoundSize:1;
  UI16  PlaybackSoundType:1;
  UI16  StreamSoundCompression:4;
  UI16  StreamSoundRate:2;
  UI16  StreamSoundSize:1;
  UI16  StreamSoundType:1;
  UI16  StreamSoundSampleCount;
  UI16  LatencySeek;
};

struct SWF_DEFINESOUND
{
  UI16 SoundId;
  UI8  SoundFormat:4;
  UI8  SoundRate:2;
  UI8  SoundSize:1;
  UI8  SoundType:1;
  UI32  SoundSampleCount;
  union {
    struct MP3STREAMSOUNDDATA mp3;
    UI8 *data;
  } SoundData;
};

struct SWF_STARTSOUND
{
  UI16 SoundId;
  SWF_SOUNDINFO SoundInfo;
};

struct SWF_STARTSOUND2
{
  STRING SoundClassName;
  SWF_SOUNDINFO SoundInfo;
};


// XXX: obsolete?
struct SWF_SYNCFRAME
{
  int chid;
};

struct SWF_INITACTION
{
  UI16 SpriteId;
  int  numActions;
  SWF_ACTION *Actions;
};

struct SWF_VIDEOFRAME
{
  UI16 StreamID;
  UI16 FrameNum;
  UI8 *VideoData;
};

struct SWF_REFLEX
{
  UI8 rfx[3];
};

struct SWF_FILEATTRIBUTES
{
        UI8     Reserved:3;
        UI8     HasMetadata:1;
        UI8     ActionScript3:1;
        UI8     Reserved2:2;
        UI8     UseNetwork:1;
        UI16    Reserved3;
        UI8     Reserved4;
};

struct SWF_METADATA
{
        STRING Metadata;
};

struct SWF_SCRIPTLIMITS
{
        UI16 MaxRecursionDepth;
        UI16 ScriptTimeoutSeconds;
};

struct SWF_DEFINESCALINGGRID
{
        UI16 CharacterId;
        SWF_RECT Splitter;
};

struct SWF_SETTABINDEX
{
        UI16 Depth;
        UI16 TabIndex;
};

struct ABC_OPTION_DETAIL
{
        U30 Val;
        UI8 Kind;
};

struct ABC_OPTION_INFO
{
        U30 OptionCount;
        struct ABC_OPTION_DETAIL *Option;       
};

struct ABC_PARAM_INFO
{
        U30 *ParamNames;
};

struct ABC_METHOD_INFO
{
        U30 ParamCount;
        U30 ReturnType;
        U30 *ParamType;
        U30 Name;
        UI8 Flags;
        struct ABC_OPTION_INFO Options;
        struct ABC_PARAM_INFO ParamNames;
};      

struct ABC_STRING_INFO
{
        U30 Size;
        UI8 *UTF8String;
};

struct ABC_NS_INFO
{
        UI8 Kind;
        U30 Name;
};

struct ABC_NS_SET_INFO
{
        U30 Count;
        U30 *NS;
};

struct ABC_QNAME
{
        U30 NS;
        U30 Name;
};

struct ABC_RTQNAME
{
        U30 Name;
};

struct ABC_RTQNAME_L
{
        // empty
};

struct ABC_MULTINAME
{
        U30 Name;
        U30 NSSet;
};

struct ABC_MULTINAME_L
{
        U30 NSSet;
};

struct ABC_MULTINAME_INFO
{
        UI8 Kind;
        union {
                struct ABC_QNAME QName;
                struct ABC_QNAME QNameA;
                struct ABC_RTQNAME RTQName;
                struct ABC_RTQNAME RTQNameA;
                struct ABC_RTQNAME_L RTQNameL;
                struct ABC_RTQNAME_L RTQNameLA;
                struct ABC_MULTINAME Multiname;
                struct ABC_MULTINAME MultinameA;
                struct ABC_MULTINAME_L MultinameL;
                struct ABC_MULTINAME_L MultinameLA;
        } Data;

};

struct ABC_CONSTANT_POOL
{
        U30 IntCount;
        S32 *Integers;
        U30 UIntCount;
        U32 *UIntegers;
        U30 DoubleCount;
        DOUBLE *Doubles;
        U30 StringCount;
        struct ABC_STRING_INFO *Strings;
        U30 NamespaceCount;
        struct ABC_NS_INFO *Namespaces;
        U30 NamespaceSetCount;
        struct ABC_NS_SET_INFO *NsSets;
        U30 MultinameCount;
        struct ABC_MULTINAME_INFO *Multinames;
};

struct ABC_ITEM_INFO
{
        U30 Key;
        U30 Value;
};

struct ABC_METADATA_INFO
{
        U30 Name;
        U30 ItemCount;
        struct ABC_ITEM_INFO *Items;
};


struct ABC_TRAIT_SLOT
{
        U30 SlotId;
        U30 TypeName;
        U30 VIndex;
        UI8 VKind;

};

struct ABC_TRAIT_CLASS
{
        U30 SlotId;
        U30 ClassIndex;
};

struct ABC_TRAIT_FUNCTION
{
        U30 SlotId;
        U30 Function;
};

struct ABC_TRAIT_METHOD
{
        U30 DispId;
        U30 Method;
};

struct ABC_TRAITS_INFO
{
        U30 Name;
        UI8 Kind;
        UI8 Attr;
        union {
                struct ABC_TRAIT_SLOT Slot;
                struct ABC_TRAIT_CLASS Class;
                struct ABC_TRAIT_FUNCTION Function;
                struct ABC_TRAIT_METHOD Method;
        } Data;
        U30 MetadataCount;
        U30 *Metadata;
};

struct ABC_INSTANCE_INFO
{
        U30 Name;
        U30 SuperName;
        UI8 Flags;
        U30 ProtectedNs;
        U30 InterfaceCount;
        U30 *Interfaces;
        U30 IInit;
        U30 TraitCount;
        struct ABC_TRAITS_INFO *Traits;
};      

struct ABC_CLASS_INFO
{
        U30 CInit;
        U30 TraitCount;
        struct ABC_TRAITS_INFO *Traits;
};

struct ABC_SCRIPT_INFO
{
        U30 Init;
        U30 TraitCount;
        struct ABC_TRAITS_INFO *Traits;
};

struct ABC_EXCEPTION_INFO
{
        U30 From;
        U30 To;
        U30 Target;
        U30 ExcType;
        U30 VarName;
};

struct ABC_METHOD_BODY_INFO
{
        U30 Method;
        U30 MaxStack;
        U30 LocalCount;
        U30 InitScopeDepth;
        U30 MaxScopeDepth;
        U30 CodeLength;
        UI8 *Code;
        U30 ExceptionCount;
        struct ABC_EXCEPTION_INFO *Exceptions;
        U30 TraitCount;
        struct ABC_TRAITS_INFO *Traits;
};

struct ABC_FILE
{
        UI16 Minor;
        UI16 Major;
        struct ABC_CONSTANT_POOL ConstantPool;
        U30 MethodCount;
        struct ABC_METHOD_INFO *Methods;
        U30 MetadataCount;
        struct ABC_METADATA_INFO *Metadata;
        U30 ClassCount;
        struct ABC_INSTANCE_INFO *Instances;
        struct ABC_CLASS_INFO *Classes;
        U30 ScriptCount;
        struct ABC_SCRIPT_INFO *Scripts;
        U30 MethodBodyCount;
        struct ABC_METHOD_BODY_INFO *MethodBodies;      
};

struct SWF_DOABC
{
        UI32 Flags;
        STRING Name;
        struct ABC_FILE AbcFile;
};

struct AS_SYMBOL
{
        UI16 SymbolId;
        STRING SymbolName;
};

struct SWF_SYMBOLCLASS
{
        UI16 SymbolCount;
        struct AS_SYMBOL *SymbolList;
};

struct SWF_DEFINEBINARYDATA
{       
        UI32 Reserved;
        int DataLength;
        UI8 *Data;
};

struct SCENE_DATA
{
        U32 Offset;
        STRING Name;
};

struct FRAME_DATA
{
        U32 FrameNum;
        STRING FrameLabel;
};

struct SWF_DEFINESCENEANDFRAMEDATA
{
        U32 SceneCount;
        struct SCENE_DATA *Scenes;
        U32 FrameLabelCount;
        struct FRAME_DATA *Frames;
};

struct SWF_DEBUGID
{
        UI8* UUID;
};

struct SWF_UNKNOWNBLOCK
{
        UI8 *Data;
};

typedef union _inline_SWF_Parserstruct
{
  struct SWF_CHARACTERSET SWF_CHARACTERSET;
  struct SWF_DEFINEBITS SWF_DEFINEBITS;
  struct SWF_DEFINEBITSJPEG2 SWF_DEFINEBITSJPEG2;
  struct SWF_DEFINEBITSJPEG3 SWF_DEFINEBITSJPEG3;
  struct SWF_DEFINEBITSPTR SWF_DEFINEBITSPTR;
  struct SWF_DEFINEBUTTON SWF_DEFINEBUTTON;
  struct SWF_DEFINEBUTTON2 SWF_DEFINEBUTTON2;
  struct SWF_DEFINEBUTTONCXFORM SWF_DEFINEBUTTONCXFORM;
  struct SWF_DEFINEBUTTONSOUND SWF_DEFINEBUTTONSOUND;
  struct SWF_DEFINECOMMANDOBJ SWF_DEFINECOMMANDOBJ;
  struct SWF_DEFINEEDITTEXT SWF_DEFINEEDITTEXT;
  struct SWF_DEFINEFONT SWF_DEFINEFONT;
  struct SWF_DEFINEFONT2 SWF_DEFINEFONT2;
  struct SWF_DEFINEFONT3 SWF_DEFINEFONT3;
  struct SWF_DEFINEFONTINFO SWF_DEFINEFONTINFO;
  struct SWF_DEFINEFONTINFO2 SWF_DEFINEFONTINFO2;
  struct SWF_DEFINEFONTALIGNZONES SWF_DEFINEFONTALIGNZONES;
  struct SWF_CSMTEXTSETTINGS SWF_CSMTEXTSETTINGS;
  struct SWF_DEFINEFONTNAME SWF_DEFINEFONTNAME;
  struct SWF_DEFINELOSSLESS SWF_DEFINELOSSLESS;
  struct SWF_DEFINELOSSLESS2 SWF_DEFINELOSSLESS2;
  struct SWF_DEFINEMORPHSHAPE SWF_DEFINEMORPHSHAPE;
  struct SWF_DEFINEMORPHSHAPE2 SWF_DEFINEMORPHSHAPE2;
  struct SWF_DEFINESHAPE SWF_DEFINESHAPE;
  struct SWF_DEFINESHAPE2 SWF_DEFINESHAPE2;
  struct SWF_DEFINESHAPE3 SWF_DEFINESHAPE3;
  struct SWF_DEFINESHAPE4 SWF_DEFINESHAPE4;
  struct SWF_DEFINESOUND SWF_DEFINESOUND;
  struct SWF_DEFINESPRITE SWF_DEFINESPRITE;
  struct SWF_DEFINETEXT SWF_DEFINETEXT;
  struct SWF_DEFINETEXT2 SWF_DEFINETEXT2;
  struct SWF_DEFINETEXTFORMAT SWF_DEFINETEXTFORMAT;
  struct SWF_DEFINEVIDEO SWF_DEFINEVIDEO;
  struct SWF_DEFINEVIDEOSTREAM SWF_DEFINEVIDEOSTREAM;
  struct SWF_DOACTION SWF_DOACTION;
  struct SWF_ENABLEDEBUGGER SWF_ENABLEDEBUGGER;
  struct SWF_ENABLEDEBUGGER2 SWF_ENABLEDEBUGGER2;
  struct SWF_END SWF_END;
  struct SWF_EXPORTASSETS SWF_EXPORTASSETS;
  struct SWF_FONTREF SWF_FONTREF;
  struct SWF_FRAMELABEL SWF_FRAMELABEL;
  struct SWF_FRAMETAG SWF_FRAMETAG;
  struct SWF_FREEALL SWF_FREEALL;
  struct SWF_FREECHARACTER SWF_FREECHARACTER;
  struct SWF_GENCOMMAND SWF_GENCOMMAND;
  struct SWF_IMPORTASSETS SWF_IMPORTASSETS;
  struct SWF_IMPORTASSETS2 SWF_IMPORTASSETS2;
  struct SWF_JPEGTABLES SWF_JPEGTABLES;
  struct SWF_NAMECHARACTER SWF_NAMECHARACTER;
  struct SWF_PATHSAREPOSTSCRIPT SWF_PATHSAREPOSTSCRIPT;
  struct SWF_PLACEOBJECT SWF_PLACEOBJECT;
  struct SWF_PLACEOBJECT2 SWF_PLACEOBJECT2;
  struct SWF_PLACEOBJECT3 SWF_PLACEOBJECT3;
  struct SWF_PREBUILT SWF_PREBUILT;
  struct SWF_PREBUILTCLIP SWF_PREBUILTCLIP;
  struct SWF_PROTECT SWF_PROTECT;
  struct SWF_REMOVEOBJECT SWF_REMOVEOBJECT;
  struct SWF_REMOVEOBJECT2 SWF_REMOVEOBJECT2;
  struct SWF_SERIALNUMBER SWF_SERIALNUMBER;
  struct SWF_SETBACKGROUNDCOLOR SWF_SETBACKGROUNDCOLOR;
  struct SWF_SHOWFRAME SWF_SHOWFRAME;
  struct SWF_SOUNDSTREAMBLOCK SWF_SOUNDSTREAMBLOCK;
  struct SWF_SOUNDSTREAMHEAD SWF_SOUNDSTREAMHEAD;
  struct SWF_SOUNDSTREAMHEAD2 SWF_SOUNDSTREAMHEAD2;
  struct SWF_STARTSOUND SWF_STARTSOUND;
  struct SWF_STARTSOUND2 SWF_STARTSOUND2;
  struct SWF_SYNCFRAME SWF_SYNCFRAME;
  struct SWF_INITACTION SWF_INITACTION;
  struct SWF_VIDEOFRAME SWF_VIDEOFRAME;
  struct SWF_REFLEX SWF_REFLEX;
  struct SWF_FILEATTRIBUTES SWF_FILEATTRIBUTES;
  struct SWF_METADATA SWF_METADATA;
  struct SWF_SCRIPTLIMITS SWF_SCRIPTLIMITS;
  struct SWF_DEFINESCALINGGRID SWF_DEFINESCALINGGRID;
  struct SWF_SETTABINDEX SWF_SETTABINDEX;
  struct SWF_DOABC SWF_DOABC;
  struct SWF_SYMBOLCLASS SWF_SYMBOLCLASS;
  struct SWF_DEFINEBINARYDATA SWF_DEFINEBINARYDATA;
  struct SWF_DEFINESCENEANDFRAMEDATA SWF_DEFINESCENEANDFRAMEDATA;
  struct SWF_DEBUGID SWF_DEBUGID;
  struct SWF_UNKNOWNBLOCK SWF_UNKNOWNBLOCK;
} _inline_SWF_Parserstruct;

struct SWF_Parserstruct_s
{
        _inline_SWF_Parserstruct block;
        int offset;
        int length;
};
typedef struct SWF_Parserstruct_s SWF_Parserstruct; 

#endif /* _SWFTYPES_H_ */

/* [<][>][^][v][top][bottom][index][help] */