#ifndef __RFX_SWF_INCLUDED__
#define __RFX_SWF_INCLUDED__
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
+#ifndef WIN32
#include <unistd.h>
+#endif
#include <fcntl.h>
#include <ctype.h>
#include "../config.h"
#include "./mem.h"
#include "./types.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define DEBUG_RFXSWF
#ifdef RFXSWF_DISABLESOUND
#define NO_MP3
int swf_ReadSWF(int handle,SWF * swf); // Reads SWF to memory (malloc'ed), 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
void swf_FreeTags(SWF * swf); // Frees all malloc'ed memory for swf
SWF* swf_CopySWF(SWF*swf);
U32 swf_GetBits(TAG * t,int nbits);
S32 swf_GetSBits(TAG * t,int nbits);
int swf_SetBits(TAG * t,U32 v,int nbits);
+int swf_CountUBits(U32 v,int nbits);
+int swf_CountBits(U32 v,int nbits);
int swf_GetBlock(TAG * t,U8 * b,int l); // resets Bitcount
-int swf_SetBlock(TAG * t,U8 * b,int l);
+int swf_SetBlock(TAG * t,const U8 * b,int l);
U8 swf_GetU8(TAG * t); // resets Bitcount
U16 swf_GetU16(TAG * t);
void swf_GetRGB(TAG * t, RGBA * col);
void swf_GetRGBA(TAG * t, RGBA * col);
void swf_GetGradient(TAG * t, GRADIENT * gradient, char alpha);
+void swf_SetGradient(TAG * tag, GRADIENT * gradient, char alpha);
void swf_FreeGradient(GRADIENT* gradient);
char* swf_GetString(TAG*t);
int swf_SetU8(TAG * t,U8 v); // resets Bitcount
int swf_SetU16(TAG * t,U16 v);
void swf_SetS16(TAG * t,int v);
int swf_SetU32(TAG * t,U32 v);
-#define swf_SetString(t,s) swf_SetBlock(t,s,strlen(s)+1)
+#define swf_SetString(t,s) swf_SetBlock(t,s,strlen((const char *)s)+1)
//int swf_GetPoint(TAG * t,SPOINT * p); // resets Bitcount
int swf_GetRect(TAG * t,SRECT * r);
// helper functions:
+SRECT swf_ClipRect(SRECT border, SRECT r);
void swf_ExpandRect(SRECT*src, SPOINT add);
void swf_ExpandRect2(SRECT*src, SRECT*add);
void swf_ExpandRect3(SRECT*src, SPOINT center, int radius);
#define ST_DEFINEFONTALIGNZONES 73 /* version 8 */
#define ST_CSMTEXTSETTINGS 74 /* version 8 */
#define ST_DEFINEFONT3 75 /* version 8 */
+#define ST_SYMBOLCLASS 76 /* version 9 */
#define ST_METADATA 77 /* version 8 */
#define ST_DEFINESCALINGGRID 78 /* version 8 */
+#define ST_DOABC 82 /* version 9 */
#define ST_DEFINESHAPE4 83 /* version 8 */
#define ST_DEFINEMORPHSHAPE2 84 /* version 8 */
#define ST_SCENEDESCRIPTION 86 /* version 9 */
+#define ST_DEFINEBINARY 87 /* version 9 */
+#define ST_DEFINEFONTNAME 88 /* version 9 */
/* custom tags- only valid for swftools */
#define ST_REFLEX 777 /* to identify generator software */
SRECT* bbox; // may be NULL
} SHAPE2;
+enum SHAPELINETYPE {moveTo, lineTo, splineTo};
typedef struct _SHAPELINE
{
- enum {moveTo, lineTo, splineTo} type;
+ enum SHAPELINETYPE type;
SCOORD x,y;
SCOORD sx,sy; //only if type==splineTo
int fillstyle0;
int swf_ShapeSetCurve(TAG * t,SHAPE * s,S32 x,S32 y,S32 ax,S32 ay);
int swf_ShapeSetCircle(TAG * t,SHAPE * s,S32 x,S32 y,S32 rx,S32 ry);
int swf_ShapeSetEnd(TAG * t);
+int swf_SetShapeStyleCount(TAG * t,U16 n);
+int swf_SetFillStyle(TAG * t,FILLSTYLE * f);
+int swf_SetLineStyle(TAG * t,LINESTYLE * l);
+
void swf_ShapeSetBitmapRect(TAG * t, U16 gfxid, int width, int height);
{ int* chars;
char is_reduced;
int used_glyphs;
+ int glyphs_specified;
} FONTUSAGE;
#define FONT_STYLE_BOLD 1
int swf_FontExtract(SWF * swf,int id,SWFFONT ** f);
// Fetches all available information from DefineFont, DefineFontInfo, DefineText, ...
// id = FontID, id=0 -> Extract first Font
+int swf_FontExtract_DefineFont2(int id, SWFFONT * font, TAG * tag);
+int swf_FontExtract_DefineFontInfo(int id, SWFFONT * f, TAG * t);
+int swf_FontExtract_DefineFont(int id, SWFFONT * f, TAG * t);
+int swf_FontExtract_GlyphNames(int id, SWFFONT * f, TAG * tag);
int swf_FontIsItalic(SWFFONT * f);
int swf_FontIsBold(SWFFONT * f);
void swf_uncgi(); // same behaviour as Steven Grimm's uncgi-library
+// swfabc.c
+
+void AVM2_InsertStops(SWF*swf);
+void swf_DissassembleABC(TAG*tag);
+
// swfaction.c
typedef struct _ActionTAG
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_ObjectPlace(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const U8 * name);
+int swf_ObjectPlaceClip(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const U8 * name, U16 clipaction);
+int swf_ObjectPlaceBlend(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const U8 * name, U8 blendmode);
int swf_ObjectMove(TAG * t,U16 depth,MATRIX * m,CXFORM * cx);
+#define PF_MOVE 0x01
+#define PF_CHAR 0x02
+#define PF_MATRIX 0x04
+#define PF_CXFORM 0x08
+#define PF_RATIO 0x10
+#define PF_NAME 0x20
+#define PF_CLIPDEPTH 0x40
+#define PF_ACTIONEVENT 0x80
+
+#define PF2_FILTERS 0x01
+#define PF2_BLENDMODE 0x02
+#define PF2_ASBITMAP 0x04
+//...
+
typedef struct _SWFPLACEOBJECT {
U16 depth;
U16 id; // may be 0
int passes;
} FILTER_BLUR;
+typedef struct _FILTER_GLOW {
+ U8 type;
+ RGBA rgba;
+ double blurx;
+ double blury;
+ double strength;
+ int passes;
+ char innerglow;
+ char knockout;
+ char composite;
+} FILTER_GLOW;
+
void swf_SetFilter(TAG*tag, FILTER*f);
FILTER*swf_GetFilter(TAG*tag);
FILTER*swf_NewFilter(U8 type);
+void swf_DeleteFilter(FILTER*f);
#ifdef __cplusplus
}
#endif
#endif
-