Part of the swftools package.
Copyright (c) 2000, 2001 Rainer Böhme <rfxswf@reflex-studio.de>
-
+
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
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 __RFX_SWF_INCLUDED__
#define __RFX_SWF_INCLUDED__
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "./mem.h"
#include "./types.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#define DEBUG_RFXSWF
#ifdef RFXSWF_DISABLESOUND
#define NO_MP3
U8 readBit; // for Bit-Manipulating Functions [read]
U8 writeBit; // [write]
-
+
} TAG;
#define swf_ResetReadBits(tag) if (tag->readBit) { tag->pos++; tag->readBit = 0; }
#define swf_ResetWriteBits(tag) if (tag->writeBit) { tag->writeBit = 0; }
-typedef struct _SOUNDINFO
+typedef struct _SOUNDINFO
{
U8 stop;
U8 nomultiple; //continue playing if already started
void swf_OptimizeTagOrder(SWF*swf);
// basic routines:
-
+
TAG * swf_InsertTag(TAG * after,U16 id); // updates frames, if necessary
TAG * swf_InsertTagBefore(SWF*swf, TAG * before,U16 id); // like InsertTag, but insert tag before argument
int swf_DeleteTag(TAG * t);
void swf_ClearTag(TAG * t); //frees tag data
void swf_ResetTag(TAG*tag, U16 id); //set's tag position and length to 0, without freeing it
TAG* swf_CopyTag(TAG*tag, TAG*to_copy); //stores a copy of another tag into this taglist
-
+
void swf_SetTagPos(TAG * t,U32 pos); // resets Bitcount
U32 swf_GetTagPos(TAG * t);
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);
#define ST_PLACEOBJECT 4
#define ST_REMOVEOBJECT 5
#define ST_DEFINEBITS 6
-#define ST_DEFINEBITSJPEG 6
+#define ST_DEFINEBITSJPEG 6
#define ST_DEFINEBUTTON 7
#define ST_JPEGTABLES 8
#define ST_SETBACKGROUNDCOLOR 9
#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 */
typedef struct _FILLSTYLE
{ U8 type;
RGBA color;
- MATRIX m;
+ MATRIX m;
U16 id_bitmap;
GRADIENT gradient;
} FILLSTYLE;
-
+
typedef struct _SHAPE // NEVER access a Shape-Struct directly !
-{
+{
struct
{ LINESTYLE * data;
U16 n;
} linestyle;
-
- struct
+
+ struct
{ FILLSTYLE * data;
U16 n;
} fillstyle;
-
+
struct
{ U16 fill;
U16 line;
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;
void swf_ParseDefineShape(TAG*tag, SHAPE2*shape);
void swf_SetShape2(TAG*tag, SHAPE2*shape2);
-void swf_RecodeShapeData(U8*data, int bitlen, int in_bits_fill, int in_bits_line,
+void swf_RecodeShapeData(U8*data, int bitlen, int in_bits_fill, int in_bits_line,
U8**destdata, U32*destbitlen, int out_bits_fill, int out_bits_line);
// swfdraw.c
#define FONT_STYLE_BOLD 1
#define FONT_STYLE_ITALIC 2
#define FONT_ENCODING_UNICODE 1
-#define FONT_ENCODING_ANSI 2
+#define FONT_ENCODING_ANSI 2
#define FONT_ENCODING_SHIFTJIS 4
typedef struct _SWFFONT
SWFLAYOUT * layout;
U16 numchars;
U16 maxascii; // highest mapped ascii value
-
+
U8 style;
U8 encoding;
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);
int swf_FontSetID(SWFFONT * f,U16 id);
int swf_FontReduce(SWFFONT * f);
+int swf_FontReduce_swfc(SWFFONT * f);
int swf_FontInitUsage(SWFFONT * f);
int swf_FontUseGlyph(SWFFONT * f, int glyph);
+int swf_FontUseAll(SWFFONT* f);
+int swf_FontUseUTF8(SWFFONT * f, U8 * s);
int swf_FontUse(SWFFONT* f,U8 * s);
int swf_FontSetDefine(TAG * t,SWFFONT * f);
void swf_FontPrepareForEditText(SWFFONT * f);
/* notice: if you set the fontid, make sure you call swf_FontPrepareForEditText() for the font first */
-void swf_SetEditText(TAG*tag, U16 flags, SRECT r, char*text, RGBA*color,
+void swf_SetEditText(TAG*tag, U16 flags, SRECT r, char*text, RGBA*color,
int maxlength, U16 font, U16 height, EditTextLayout*layout, char*variable);
SRECT swf_SetDefineText(TAG*tag, SWFFONT*font, RGBA*rgb, char*text, int scale);
void swf_DumpHeader(FILE * f,SWF * swf);
void swf_DumpMatrix(FILE * f,MATRIX * m);
-void swf_DumpTag(FILE * f,TAG * t);
+void swf_DumpTag(FILE * f,TAG * t);
void swf_DumpSWF(FILE * f,SWF*swf);
void swf_DumpGradient(FILE* f, GRADIENT*gradient);
char* swf_TagGetName(TAG*tag);
// Button Conditions
-/* missing: IDLE_OUTDOWN
+/* missing: IDLE_OUTDOWN
OUTDOWN_OVERUP
OVERUP_OUTDOWN
*/
/* everything above 0x4000 is standard ascii:
0x4000 ' ' 0x4200 '!' 0x4600 '#' 0x4800 '$' 0x4a00 '%' 0x4c00 '&' ...
- 0x6000 '0' ... 0x7200 '9'
- 0x8000 '@'
- 0x8200 'A' ... 0xb400 'Z'
+ 0x6000 '0' ... 0x7200 '9'
+ 0x8000 '@'
+ 0x8200 'A' ... 0xb400 'Z'
...
0xfc00 '~'
*/
// swfaction.c
-typedef struct _ActionTAG
+typedef struct _ActionTAG
{ U8 op;
U16 len;
U8 * data;
ActionTAG* action_BitRShift(ActionTAG*atag);
ActionTAG* action_BitURShift(ActionTAG*atag);
ActionTAG* action_GotoFrame(ActionTAG*atag, U16 frame);
-ActionTAG* action_GetUrl(ActionTAG*atag, char* url, char* label);
+ActionTAG* action_GetUrl(ActionTAG*atag, const char* url, char* label);
ActionTAG* action_StoreRegister(ActionTAG*atag, U8 reg);
ActionTAG* action_Constantpool(ActionTAG*atag, char* constantpool);
ActionTAG* action_WaitForFrame(ActionTAG*atag, U16 frame, U8 skip);
ActionTAG* action_GotoLabel(ActionTAG*atag, char* label);
ActionTAG* action_WaitForFrame2(ActionTAG*atag, U8 skip);
ActionTAG* action_With(ActionTAG*atag, char*object);
-ActionTAG* action_PushString(ActionTAG*atag, char*str);
+ActionTAG* action_PushString(ActionTAG*atag, const char*str);
ActionTAG* action_PushFloat(ActionTAG*atag, float f);
ActionTAG* action_PushNULL(ActionTAG*atag);
ActionTAG* action_PushRegister(ActionTAG*atag, U8 reg);
// swfrender.c
-typedef struct RENDERBUF
+typedef struct RENDERBUF
{
int width;
int height;
RGBA* swf_Render(RENDERBUF*dest);
void swf_RenderShape(RENDERBUF*dest, SHAPE2*shape, MATRIX*m, CXFORM*c, U16 depth,U16 clipdepth);
void swf_RenderSWF(RENDERBUF*buf, SWF*swf);
-void swf_Render_AddImage(RENDERBUF*buf, U16 id, RGBA*img, int width, int height);
+void swf_Render_AddImage(RENDERBUF*buf, U16 id, RGBA*img, int width, int height); /* img is non-premultiplied */
void swf_Render_ClearCanvas(RENDERBUF*dest);
void swf_Render_Delete(RENDERBUF*dest);
#define FILTERTYPE_CONVOLUTION 5
#define FILTERTYPE_COLORMATRIX 6
#define FILTERTYPE_GRADIENTBEVEL 7
-
+
extern char*filtername[];
typedef struct _FILTER_GRADIENTGLOW {
FILTER*swf_GetFilter(TAG*tag);
FILTER*swf_NewFilter(U8 type);
+void AVM2_InsertStops(SWF*swf);
+
#ifdef __cplusplus
}
#endif
#endif
-