514 lines
15 KiB
C++
514 lines
15 KiB
C++
// Copyright © 1999 Middlesoft, Inc. All rights reserved.
|
|
// First Created By Lee Thomason.
|
|
// First Created On 09/08/1999.
|
|
// Last Modified On 11/09/1999.
|
|
// Last Modified On 18/06/2002 by DV for Fixes
|
|
/****************************************************************************************
|
|
|
|
File Summary: Macromedia.h
|
|
|
|
This header file defines various structs and enums used by Flash File Format SDK
|
|
low-level manager.
|
|
|
|
****************************************************************************************/
|
|
|
|
#ifndef _MACROMEDIA_H_
|
|
#define _MACROMEDIA_H_
|
|
|
|
#ifdef WIN32 // added by DV
|
|
#pragma warning(disable : 4786)
|
|
#endif
|
|
|
|
#include "tcommon.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <assert.h>
|
|
|
|
class FSWFStream;
|
|
|
|
#ifdef _DEBUG
|
|
#ifndef DEBUG
|
|
#define DEBUG
|
|
#endif
|
|
#endif
|
|
|
|
// Some basic defines for debugging:
|
|
#ifdef DEBUG
|
|
#define FLASHOUTPUT printf
|
|
#define FLASHASSERT assert
|
|
#define FLASHPRINT printf
|
|
//
|
|
// #define FLASHOUTPUT ((void)0)
|
|
// #define FLASHASSERT ((void)0)
|
|
// #define FLASHPRINT ((void)0)
|
|
#else
|
|
inline void nothing(...)
|
|
{
|
|
}
|
|
#define FLASHOUTPUT nothing //((void)0)
|
|
#define FLASHASSERT nothing //((void)0)
|
|
#define FLASHPRINT printf
|
|
#endif
|
|
|
|
/* // removed by DV
|
|
#ifndef min
|
|
#define min( a, b ) ( ( a < b ) ? a : b )
|
|
#endif
|
|
#ifndef max
|
|
#define max( a, b ) ( ( a > b ) ? a : b )
|
|
#endif
|
|
*/
|
|
|
|
// Global Types
|
|
typedef float FLOAT;
|
|
typedef TUINT32 U32, *P_U32, **PP_U32;
|
|
typedef TINT32 S32, *P_S32, **PP_S32;
|
|
typedef unsigned short U16, *P_U16, **PP_U16;
|
|
typedef signed short S16, *P_S16, **PP_S16;
|
|
typedef unsigned char U8, *P_U8, **PP_U8;
|
|
typedef signed char S8, *P_S8, **PP_S8;
|
|
typedef TINT32 SFIXED, *P_SFIXED;
|
|
typedef TINT32 SCOORD, *P_SCOORD;
|
|
typedef int BOOL;
|
|
|
|
const SFIXED Fixed1 = 0x00010000;
|
|
const SCOORD SCoord1 = 20;
|
|
|
|
typedef struct SRECT {
|
|
SCOORD xmin;
|
|
SCOORD xmax;
|
|
SCOORD ymin;
|
|
SCOORD ymax;
|
|
} SRECT, *P_SRECT;
|
|
|
|
const U8 Snd5k = 0;
|
|
const U8 Snd11k = 1;
|
|
const U8 Snd22k = 2;
|
|
const U8 Snd44k = 3;
|
|
|
|
const U8 Snd8Bit = 0;
|
|
const U8 Snd16Bit = 1;
|
|
|
|
const U8 SndMono = 0;
|
|
const U8 SndStereo = 1;
|
|
|
|
typedef struct SSound {
|
|
U8 format; // 0 none, 1 PCM
|
|
U8 rate; // Snd5k...Snd44k
|
|
U8 size; // 0 8bit, 1 16bit
|
|
U8 type; // 0 mono, 1 stereo
|
|
U32 sampleCount; // the number of samples
|
|
U32 soundSize; // the number of bytes in the sample
|
|
U8 *sound; // pointer to the sound data
|
|
} SSound, *P_SSound;
|
|
|
|
typedef struct SPOINT {
|
|
SCOORD x;
|
|
SCOORD y;
|
|
} SPOINT, *P_SPOINT;
|
|
|
|
// Start Sound Flags
|
|
enum {
|
|
soundHasInPoint = 0x01,
|
|
soundHasOutPoint = 0x02,
|
|
soundHasLoops = 0x04,
|
|
soundHasEnvelope = 0x08
|
|
|
|
// the upper 4 bits are reserved for synchronization flags
|
|
};
|
|
|
|
enum {
|
|
fillSolid = 0x00,
|
|
fillGradient = 0x10,
|
|
fillLinearGradient = 0x10,
|
|
fillRadialGradient = 0x12,
|
|
fillMaxGradientColors = 8,
|
|
// Texture/bitmap fills
|
|
fillTiledBits = 0x40, // if this bit is set, must be a bitmap pattern
|
|
fillClippedBits = 0x41
|
|
};
|
|
|
|
enum {
|
|
CURVED_EDGE = 0,
|
|
STRAIGHT_EDGE = 1
|
|
};
|
|
|
|
enum {
|
|
NOT_EDGE_REC = 0,
|
|
EDGE_REC = 1
|
|
};
|
|
|
|
// Flags for defining a shape character
|
|
enum {
|
|
// These flag codes are used for state changes - and as return values from ShapeParser::GetEdge()
|
|
eflagsMoveTo = 0x01,
|
|
eflagsFill0 = 0x02,
|
|
eflagsFill1 = 0x04,
|
|
eflagsLine = 0x08,
|
|
eflagsNewStyles = 0x10,
|
|
|
|
eflagsEnd = 0x80 // a state change with no change marks the end
|
|
};
|
|
|
|
#ifndef NULL
|
|
#define NULL 0
|
|
#endif
|
|
|
|
// Tag values that represent actions or data in a Flash script.
|
|
enum {
|
|
stagEnd = 0,
|
|
stagShowFrame = 1,
|
|
stagDefineShape = 2,
|
|
stagFreeCharacter = 3,
|
|
stagPlaceObject = 4,
|
|
stagRemoveObject = 5,
|
|
stagDefineBits = 6,
|
|
stagDefineButton = 7,
|
|
stagJPEGTables = 8,
|
|
stagSetBackgroundColor = 9,
|
|
stagDefineFont = 10,
|
|
stagDefineText = 11,
|
|
stagDoAction = 12,
|
|
stagDefineFontInfo = 13,
|
|
stagDefineSound = 14, // Event sound tags.
|
|
stagStartSound = 15,
|
|
stagDefineButtonSound = 17,
|
|
stagSoundStreamHead = 18,
|
|
stagSoundStreamBlock = 19,
|
|
stagDefineBitsLossless = 20, // A bitmap using lossless zlib compression.
|
|
stagDefineBitsJPEG2 = 21, // A bitmap using an internal JPEG compression table.
|
|
stagDefineShape2 = 22,
|
|
stagDefineButtonCxform = 23,
|
|
stagProtect = 24, // This file should not be importable for editing.
|
|
|
|
stagPathsArePostScript = 25, // assume shapes are filled as PostScript style paths
|
|
|
|
// These are the new tags for Flash 3.
|
|
stagPlaceObject2 = 26, // The new style place w/ alpha color transform and name.
|
|
stagRemoveObject2 = 28, // A more compact remove object that omits the character tag (just depth).
|
|
|
|
// This tag is used for RealMedia only
|
|
stagSyncFrame = 29, // Handle a synchronization of the display list
|
|
|
|
stagFreeAll = 31, // Free all of the characters
|
|
|
|
stagDefineShape3 = 32, // A shape V3 includes alpha values.
|
|
stagDefineText2 = 33, // A text V2 includes alpha values.
|
|
stagDefineButton2 = 34, // A button V2 includes color transform, alpha and multiple actions
|
|
stagDefineBitsJPEG3 = 35, // A JPEG bitmap with alpha info.
|
|
stagDefineBitsLossless2 = 36, // A lossless bitmap with alpha info.
|
|
stagDefineSprite = 39, // Define a sequence of tags that describe the behavior of a sprite.
|
|
stagNameCharacter = 40, // Name a character definition, character id and a string, (used for buttons, bitmaps, sprites and sounds).
|
|
|
|
stagSerialNumber = 41, // a tag command for the Flash Generator customer serial id and cpu information
|
|
stagDefineTextFormat = 42, // define the contents of a text block with formating information
|
|
|
|
stagFrameLabel = 43, // A string label for the current frame.
|
|
stagSoundStreamHead2 = 45, // For lossless streaming sound, should not have needed this...
|
|
stagDefineMorphShape = 46, // A morph shape definition
|
|
|
|
stagFrameTag = 47, // a tag command for the Flash Generator (WORD duration, STRING label)
|
|
stagDefineFont2 = 48, // a tag command for the Flash Generator Font information
|
|
stagGenCommand = 49, // a tag command for the Flash Generator intrinsic
|
|
stagDefineCommandObj = 50, // a tag command for the Flash Generator intrinsic Command
|
|
stagCharacterSet = 51, // defines the character set used to store strings
|
|
stagFontRef = 52, // defines a reference to an external font source
|
|
|
|
// Flash 4 tags
|
|
stagDefineEditText = 37, // an edit text object (bounds, width, font, variable name)
|
|
stagDefineVideo = 38, // a reference to an external video stream
|
|
|
|
// NOTE: If tag values exceed 255 we need to expand SCharacter::tagCode from a BYTE to a WORD
|
|
stagDefineBitsPtr = 1023 // a special tag used only in the editor
|
|
};
|
|
|
|
// PlaceObject2 Flags
|
|
enum {
|
|
splaceMove = 0x01, // this place moves an exisiting object
|
|
splaceCharacter = 0x02, // there is a character tag (if no tag, must be a move)
|
|
splaceMatrix = 0x04, // there is a matrix (matrix)
|
|
splaceColorTransform = 0x08, // there is a color transform (cxform with alpha)
|
|
splaceRatio = 0x10, // there is a blend ratio (word)
|
|
splaceName = 0x20, // there is an object name (string)
|
|
splaceDefineClip = 0x40, // this shape should open or close a clipping bracket (character != 0 to open, character == 0 to close)
|
|
splaceCloneExternalSprite = 0x80 // cloning a movie which was loaded externally
|
|
// one bit left for expansion
|
|
};
|
|
|
|
//ActionConditions
|
|
enum {
|
|
OverDownToIdle = 1,
|
|
IdleToOverDown = 2,
|
|
OutDownToIdle = 3,
|
|
OutDownToOverDown = 4,
|
|
OverDownToOutDown = 5,
|
|
OverDownToOverUp = 6,
|
|
OverUpToOverDown = 7,
|
|
OverUpToIdle = 8,
|
|
IdleToOverUp = 9
|
|
};
|
|
|
|
//Clip Action
|
|
enum {
|
|
//Flash 5-
|
|
ClipEventLoad = 0x00000001,
|
|
ClipEventEnterFrame = 0x00000002,
|
|
ClipEventUnload = 0x00000004,
|
|
ClipEventMouseMove = 0x00000008,
|
|
ClipEventMouseDown = 0x00000010,
|
|
ClipEventMouseUp = 0x00000020,
|
|
ClipEventKeyDown = 0x00000040,
|
|
ClipEventKeyUp = 0x00000080,
|
|
ClipEventData = 0x00000100,
|
|
|
|
//Flash 6+
|
|
ClipEventInitialize = 0x00000200,
|
|
ClipEventPress = 0x00000400,
|
|
ClipEventRelease = 0x00000800,
|
|
ClipEventReleaseOutside = 0x00001000,
|
|
ClipEventRollOver = 0x00002000,
|
|
ClipEventRollOut = 0x00004000,
|
|
ClipEventDragOver = 0x00008000,
|
|
ClipEventDragOut = 0x00010000,
|
|
ClipEventKeyPress = 0x00020000,
|
|
};
|
|
|
|
//Key Codes
|
|
enum {
|
|
ID_KEY_LEFT = 0x01,
|
|
ID_KEY_RIGHT = 0x02,
|
|
ID_KEY_HOME = 0x03,
|
|
ID_KEY_END = 0x04,
|
|
ID_KEY_INSERT = 0x05,
|
|
ID_KEY_DELETE = 0x06,
|
|
ID_KEY_CLEAR = 0x07,
|
|
ID_KEY_BACKSPACE = 0x08,
|
|
ID_KEY_ENTER = 0x0D,
|
|
ID_KEY_UP = 0x0E,
|
|
ID_KEY_DOWN = 0x0F,
|
|
ID_KEY_PAGE_UP = 0x10,
|
|
ID_KEY_PAGE_DOWN = 0x11,
|
|
ID_KEY_TAB = 0x12
|
|
};
|
|
|
|
// Action codes
|
|
enum {
|
|
// Flash 1 and 2 actions
|
|
sactionHasLength = 0x80,
|
|
sactionNone = 0x00,
|
|
sactionGotoFrame = 0x81, // frame num (WORD)
|
|
sactionGetURL = 0x83, // url (STR), window (STR)
|
|
sactionNextFrame = 0x04,
|
|
sactionPrevFrame = 0x05,
|
|
sactionPlay = 0x06,
|
|
sactionStop = 0x07,
|
|
sactionToggleQuality = 0x08,
|
|
sactionStopSounds = 0x09,
|
|
sactionWaitForFrame = 0x8A, // frame needed (WORD), actions to skip (BYTE)
|
|
|
|
// Flash 3 Actions
|
|
sactionSetTarget = 0x8B, // name (STR)
|
|
sactionGotoLabel = 0x8C, // name (STR)
|
|
|
|
// Flash 4 Actions
|
|
sactionAdd = 0x0A, // Stack IN: number, number, OUT: number
|
|
sactionSubtract = 0x0B, // Stack IN: number, number, OUT: number
|
|
sactionMultiply = 0x0C, // Stack IN: number, number, OUT: number
|
|
sactionDivide = 0x0D, // Stack IN: dividend, divisor, OUT: number
|
|
sactionEquals = 0x0E, // Stack IN: number, number, OUT: bool
|
|
sactionLess = 0x0F, // Stack IN: number, number, OUT: bool
|
|
sactionAnd = 0x10, // Stack IN: bool, bool, OUT: bool
|
|
sactionOr = 0x11, // Stack IN: bool, bool, OUT: bool
|
|
sactionNot = 0x12, // Stack IN: bool, OUT: bool
|
|
sactionStringEquals = 0x13, // Stack IN: string, string, OUT: bool
|
|
sactionStringLength = 0x14, // Stack IN: string, OUT: number
|
|
sactionStringAdd = 0x21, // Stack IN: string, strng, OUT: string
|
|
sactionStringExtract = 0x15, // Stack IN: string, index, count, OUT: substring
|
|
sactionPush = 0x96, // type (BYTE), value (STRING or FLOAT)
|
|
sactionPop = 0x17, // no arguments
|
|
sactionToInteger = 0x18, // Stack IN: number, OUT: integer
|
|
sactionJump = 0x99, // offset (WORD)
|
|
sactionIf = 0x9D, // offset (WORD) Stack IN: bool
|
|
sactionCall = 0x9E, // Stack IN: name
|
|
sactionGetVariable = 0x1C, // Stack IN: name, OUT: value
|
|
sactionSetVariable = 0x1D, // Stack IN: name, value
|
|
sactionGetURL2 = 0x9A, // method (BYTE) Stack IN: url, window
|
|
sactionGotoFrame2 = 0x9F, // flags (BYTE) Stack IN: frame
|
|
sactionSetTarget2 = 0x20, // Stack IN: target
|
|
sactionGetProperty = 0x22, // Stack IN: target, property, OUT: value
|
|
sactionSetProperty = 0x23, // Stack IN: target, property, value
|
|
sactionCloneSprite = 0x24, // Stack IN: source, target, depth
|
|
sactionRemoveSprite = 0x25, // Stack IN: target
|
|
sactionTrace = 0x26, // Stack IN: message
|
|
sactionStartDrag = 0x27, // Stack IN: no constraint: 0, center, target
|
|
// constraint: x1, y1, x2, y2, 1, center, target
|
|
sactionEndDrag = 0x28, // no arguments
|
|
sactionStringLess = 0x29, // Stack IN: string, string, OUT: bool
|
|
sactionWaitForFrame2 = 0x8D, // skipCount (BYTE) Stack IN: frame
|
|
sactionRandomNumber = 0x30, // Stack IN: maximum, OUT: result
|
|
sactionMBStringLength = 0x31, // Stack IN: string, OUT: length
|
|
sactionCharToAscii = 0x32, // Stack IN: character, OUT: ASCII code
|
|
sactionAsciiToChar = 0x33, // Stack IN: ASCII code, OUT: character
|
|
sactionGetTime = 0x34, // Stack OUT: milliseconds since Player start
|
|
sactionMBStringExtract = 0x35, // Stack IN: string, index, count, OUT: substring
|
|
sactionMBCharToAscii = 0x36, // Stack IN: character, OUT: ASCII code
|
|
sactionMBAsciiToChar = 0x37, // Stack IN: ASCII code, OUT: character
|
|
|
|
// Flash 5 Actions
|
|
sactionConstantPool = 0x88, // create a set of constant
|
|
sactionLess2 = 0x48, // Stack IN: number, number, OUT: bool
|
|
sactionEquals2 = 0x49, // Stack IN: number, number, OUT: bool
|
|
sactionCallMethod = 0x52, // Stack IN: string, string, number, [number] OUT: return value or undefined
|
|
|
|
// Reserved for Quicktime
|
|
sactionQuickTime = 0xAA // I think this is what they are using...
|
|
};
|
|
|
|
enum {
|
|
kStringType = 0,
|
|
kFloatType = 1
|
|
};
|
|
|
|
enum {
|
|
kSpritePosX = 0,
|
|
kSpritePosY,
|
|
kSpriteScaleX,
|
|
kSpriteScaleY,
|
|
kSpriteCurFrame, // (can only get but not set)
|
|
kSpriteTotalframes, // (can only get but not set)
|
|
kSpriteAlpha, // (a value between 0 and 100 %)
|
|
kSpriteVisible, // (if zero this means we don't hit test the object)
|
|
kSpriteWidth, // (can only get, but not set)
|
|
kSpriteHeight, // (can only get, but not set),
|
|
kSpriteRotate,
|
|
kSpriteTarget,
|
|
kSpriteLastFrameLoaded,
|
|
kSpriteName,
|
|
kSpriteDropTarget,
|
|
kSpriteURL,
|
|
kSpriteHighQuality, // (global)
|
|
kSpriteFocusRect, // (global)
|
|
kSpriteSoundBufferTime // (global)
|
|
};
|
|
|
|
// Mouse target conditions
|
|
enum {
|
|
stargetMouseEnter = 1,
|
|
stargetMouseExit = 2,
|
|
stargetMouseDown = 3,
|
|
stargetMouseUp = 4
|
|
};
|
|
|
|
// Bitmap Alpha types
|
|
enum {
|
|
sbitsAlphaFlag = 0, // just a flag that the alpha channel is valid
|
|
sbitsAlphaCTab = 1, // alpha values for a color table
|
|
sbitsAlphaMask = 2 // a complete alpha mask for a jpeg image
|
|
};
|
|
|
|
// Server Packet Flags
|
|
enum {
|
|
spktObject = 0x00, // packet types
|
|
spktFrame = 0x01,
|
|
spktMask = 0x03,
|
|
|
|
spktResend = 0x04, // flags for object packets
|
|
|
|
spktSeekPoint = 0x04, // flags for frame packets
|
|
spktKeyFrame = 0x08
|
|
|
|
// Upper 4 bits are reserved for a sequence number
|
|
};
|
|
|
|
// Template Text Flags.
|
|
enum {
|
|
stextEnd = 0x00, // end of text flag
|
|
stextStyle = 0x80, // font style: followed by 8-bit flags (bold, italic, etc...)
|
|
stextFont = 0x81, // font identifier: followed by 16-bit font identifier
|
|
stextSize = 0x82, // font size: followed by 16-bit value in twips
|
|
stextColor = 0x83, // font color: followed by 32-bit RGB value
|
|
stextPosition = 0x84, // font position: followed by 8-bit position (normal, super or subscript)
|
|
stextKerning = 0x85, // font kerning: followed by 16-bit kerning value in twips
|
|
stextReserved1 = 0x86, // reserved value
|
|
stextReserved2 = 0x87, // reserved value
|
|
stextAlignment = 0x88, // paragraph alignment: followed by 8-bit alignment value
|
|
stextIndent = 0x89, // paragraph alignment: followed by 16-bit indent value in twips
|
|
stextLMargin = 0x8a, // paragraph left margin: followed by 16-bit left margin value in twips
|
|
stextRMargin = 0x8b, // paragraph right margin: followed by 16-bit right margin value in twips
|
|
stextLeading = 0x8c, // paragraph leading: followed by 16-bit leading value in twips
|
|
stextReserved3 = 0x8d, // reserved value
|
|
stextReserved4 = 0x8e, // reserved value
|
|
stextReserved5 = 0x8f // reserved value
|
|
};
|
|
|
|
// Template Text Style Flags
|
|
enum {
|
|
stextStyleNone = 0x00,
|
|
stextStyleBold = 0x01,
|
|
stextStyleItalic = 0x02
|
|
// 6 bits left for expansion
|
|
};
|
|
|
|
// Template Text Position Values
|
|
enum {
|
|
stextPosNormal = 0x00,
|
|
stextPosSuperScript = 0x01,
|
|
stextPosSubScript = 0x02
|
|
};
|
|
|
|
// Template Text Alignment Values
|
|
enum {
|
|
stextAlignLeft = 0x00,
|
|
stextAlignRight = 0x01,
|
|
stextAlignCenter = 0x02,
|
|
stextAlignJustify = 0x03
|
|
};
|
|
|
|
// Template Text Flags
|
|
enum {
|
|
sfontFlagsBold = 0x01,
|
|
sfontFlagsItalic = 0x02,
|
|
sfontFlagsWideCodes = 0x04,
|
|
sfontFlagsWideOffsets = 0x08,
|
|
sfontFlagsANSI = 0x10,
|
|
sfontFlagsUnicode = 0x20,
|
|
sfontFlagsShiftJIS = 0x40,
|
|
sfontFlagsHasLayout = 0x80
|
|
};
|
|
|
|
// GetURL2 methods
|
|
enum {
|
|
kHttpDontSend = 0,
|
|
kHttpSendUseGet = 1,
|
|
kHttpSendUsePost = 2,
|
|
kHttpLoadTarget = 0x40,
|
|
kHttpLoadVariables = 0x80
|
|
};
|
|
|
|
// Edit Text Flags
|
|
enum {
|
|
seditTextFlagsHasFont = 0x0001,
|
|
seditTextFlagsHasMaxLength = 0x0002,
|
|
seditTextFlagsHasTextColor = 0x0004,
|
|
seditTextFlagsReadOnly = 0x0008,
|
|
seditTextFlagsPassword = 0x0010,
|
|
seditTextFlagsMultiline = 0x0020,
|
|
seditTextFlagsWordWrap = 0x0040,
|
|
seditTextFlagsHasText = 0x0080,
|
|
seditTextFlagsUseOutlines = 0x0100,
|
|
seditTextFlagsBorder = 0x0800,
|
|
seditTextFlagsNoSelect = 0x1000,
|
|
seditTextFlagsHasLayout = 0x2000
|
|
};
|
|
|
|
// Drag constrants
|
|
enum {
|
|
sdragFromPoint = 0,
|
|
sdragFromCenter = 1
|
|
};
|
|
enum {
|
|
sdragNoConstraint = 0,
|
|
sdragRectConstraint = 1
|
|
};
|
|
|
|
#endif
|