Adobe at Sourceforge

Adobe of Github

// Copyright � 1999 Middlesoft, Inc. All rights reserved.
// First Created By Lee Thomason.
// First Created On 09/08/1999.
// Last Modified On 11/09/1999.

/****************************************************************************************

				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_

#pragma warning (disable:4786)

#include 
#include 
#include 

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

#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 unsigned long U32, *P_U32, **PP_U32;
typedef signed long 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 signed long SFIXED, *P_SFIXED;
typedef signed long 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
};

//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 

	// 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