1 /*
2 flasm, command line assembler & disassembler of flash actionscript bytecode
3 Copyright (c) 2001 Opaque Industries, (c) 2002-2007 Igor Kogan, (c) 2005 Wang Zhen
4 All rights reserved. See LICENSE.TXT for terms of use.
5 */
6 
7 #ifndef	ACTION_H_INCLUDED
8 #define	ACTION_H_INCLUDED
9 
10 /* math */
11 #define MATH_LOG2E						1.442695040888963
12 #define MATH_LOG10E						0.4342944819032518
13 #define MATH_LN2						0.6931471805599453
14 #define MATH_LN10						2.302585092994046
15 #define MATH_PI							3.141592653589793
16 #define MATH_SQRT1_2					0.7071067811865476
17 #define MATH_SQRT2						1.414213562373095
18 #define MATH_DELTA						10000000000.0
19 #define NUMBER_MAX_VALUE				1.79769313486231e+308
20 #define NUMBER_MIN_VALUE				5.e-324
21 
22 typedef	enum
23 {
24 	SWFACTION_END						= 0x00,
25 
26 /* v3 actions */
27 	SWFACTION_NEXTFRAME					= 0x04,
28 	SWFACTION_PREVFRAME					= 0x05,
29 	SWFACTION_PLAY						= 0x06,
30 	SWFACTION_STOP						= 0x07,
31 	SWFACTION_TOGGLEQUALITY				= 0x08,
32 	SWFACTION_STOPSOUNDS				= 0x09,
33 	SWFACTION_GOTOFRAME					= 0x81,	/* >= 0x80 means record	has	args */
34 	SWFACTION_GETURL					= 0x83,
35 	SWFACTION_IFFRAMELOADED				= 0x8A,
36 	SWFACTION_SETTARGET					= 0x8B,
37 	SWFACTION_GOTOLABEL					= 0x8C,
38 
39 /* v4 actions */
40 	SWFACTION_ADD						= 0x0A,
41 	SWFACTION_SUBTRACT					= 0x0B,
42 	SWFACTION_MULTIPLY					= 0x0C,
43 	SWFACTION_DIVIDE					= 0x0D,
44 	SWFACTION_EQUALS					= 0x0E,
45 	SWFACTION_LESSTHAN					= 0x0F,
46 	SWFACTION_LOGICALAND				= 0x10,
47 	SWFACTION_LOGICALOR					= 0x11,
48 	SWFACTION_LOGICALNOT				= 0x12,
49 	SWFACTION_STRINGEQ					= 0x13,
50 	SWFACTION_STRINGLENGTH				= 0x14,
51 	SWFACTION_SUBSTRING					= 0x15,
52 	SWFACTION_POP						= 0x17,
53 	SWFACTION_INT						= 0x18,
54 	SWFACTION_GETVARIABLE				= 0x1C,
55 	SWFACTION_SETVARIABLE				= 0x1D,
56 	SWFACTION_SETTARGETEXPRESSION		= 0x20,
57 	SWFACTION_STRINGCONCAT				= 0x21,
58 	SWFACTION_GETPROPERTY				= 0x22,
59 	SWFACTION_SETPROPERTY				= 0x23,
60 	SWFACTION_DUPLICATECLIP				= 0x24,
61 	SWFACTION_REMOVECLIP				= 0x25,
62 	SWFACTION_TRACE						= 0x26,
63 	SWFACTION_STARTDRAGMOVIE			= 0x27,
64 	SWFACTION_STOPDRAGMOVIE				= 0x28,
65 	SWFACTION_STRINGLESSTHAN			= 0x29,
66 	SWFACTION_RANDOM					= 0x30,
67 	SWFACTION_MBLENGTH					= 0x31,
68 	SWFACTION_ORD						= 0x32,
69 	SWFACTION_CHR						= 0x33,
70 	SWFACTION_GETTIMER					= 0x34,
71 	SWFACTION_MBSUBSTRING				= 0x35,
72 	SWFACTION_MBORD						= 0x36,
73 	SWFACTION_MBCHR						= 0x37,
74 	SWFACTION_IFFRAMELOADEDEXPRESSION	= 0x8D,
75 	SWFACTION_PUSHDATA					= 0x96,
76 	SWFACTION_BRANCHALWAYS				= 0x99,
77 	SWFACTION_GETURL2					= 0x9A,
78 	SWFACTION_BRANCHIFTRUE				= 0x9D,
79 	SWFACTION_CALLFRAME					= 0x9E,
80 	SWFACTION_GOTOEXPRESSION			= 0x9F,
81 
82 /* v5 actions */
83 	SWFACTION_DELETE					= 0x3A,
84 	SWFACTION_DELETE2					= 0x3B,
85 	SWFACTION_VAREQUALS					= 0x3C,
86 	SWFACTION_CALLFUNCTION				= 0x3D,
87 	SWFACTION_RETURN					= 0x3E,
88 	SWFACTION_MODULO					= 0x3F,
89 	SWFACTION_NEW						= 0x40,
90 	SWFACTION_VAR						= 0x41,
91 	SWFACTION_INITARRAY					= 0x42,
92 	SWFACTION_INITOBJECT				= 0x43,
93 	SWFACTION_TYPEOF					= 0x44,
94 	SWFACTION_TARGETPATH				= 0x45,
95 	SWFACTION_ENUMERATE					= 0x46,
96 	SWFACTION_NEWADD					= 0x47,
97 	SWFACTION_NEWLESSTHAN				= 0x48,
98 	SWFACTION_NEWEQUALS					= 0x49,
99 	SWFACTION_TONUMBER					= 0x4A,
100 	SWFACTION_TOSTRING					= 0x4B,
101 	SWFACTION_DUP						= 0x4C,
102 	SWFACTION_SWAP						= 0x4D,
103 	SWFACTION_GETMEMBER					= 0x4E,
104 	SWFACTION_SETMEMBER					= 0x4F,
105 	SWFACTION_INCREMENT					= 0x50,
106 	SWFACTION_DECREMENT					= 0x51,
107 	SWFACTION_CALLMETHOD				= 0x52,
108 	SWFACTION_NEWMETHOD					= 0x53,
109 	SWFACTION_BITWISEAND				= 0x60,
110 	SWFACTION_BITWISEOR					= 0x61,
111 	SWFACTION_BITWISEXOR				= 0x62,
112 	SWFACTION_SHIFTLEFT					= 0x63,
113 	SWFACTION_SHIFTRIGHT				= 0x64,
114 	SWFACTION_SHIFTRIGHT2				= 0x65,
115 	SWFACTION_SETREGISTER				= 0x87,
116 	SWFACTION_CONSTANTPOOL				= 0x88,
117 	SWFACTION_WITH						= 0x94,
118 	SWFACTION_DEFINEFUNCTION			= 0x9B,
119 
120 /* v6 actions */
121 	SWFACTION_INSTANCEOF				= 0x54,
122 	SWFACTION_ENUMERATEVALUE			= 0x55,
123 	SWFACTION_STRICTEQUALS				= 0x66,
124 	SWFACTION_GREATERTHAN				= 0x67,
125 	SWFACTION_STRINGGREATERTHAN			= 0x68,
126 	SWFACTION_STRICTMODE				= 0x89,
127 
128 /* v7 actions */
129 	SWFACTION_CAST						= 0x2B,
130 	SWFACTION_IMPLEMENTS				= 0x2C,
131 	SWFACTION_EXTENDS					= 0x69,
132 	SWFACTION_DEFINEFUNCTION2			= 0x8E,
133 	SWFACTION_TRY						= 0x8F,
134 	SWFACTION_THROW						= 0x2A,
135 
136 /* FlashLite */
137 	SWFACTION_FSCOMMAND2				= 0x2D
138 } Action;
139 
140 typedef	enum
141 {
142 	PF_MOVE								= 0x01,  /* this place moves an exisiting object */
143 	PF_CHARACTER						= 0x02,  /* there is a character tag (if no tag, must be a move) */
144 	PF_MATRIX							= 0x04,  /* there is a matrix (matrix) */
145 	PF_COLORTRANSFORM					= 0x08,  /* there is a color transform (cxform	with alpha) */
146 	PF_RATIO							= 0x10,  /* there is a blend ratio (word) */
147 	PF_NAME								= 0x20,  /* there is an object name (string) */
148 	PF_DEFINECLIP						= 0x40,  /* this shape should open or close a clipping bracket (character != 0 to open, character == 0 to close) */
149 	PF_ONCLIPEVENTS						= 0x80,  /* there are onClipEvents */
150 	PF_FILTERS							= 0x100, /* there are filters */
151 	PF_BLENDMODE						= 0x200, /* there is a blend mode */
152 	PF_BITMAPCACHING					= 0x400  /* use runtime bitmap caching */
153 } placeflags;
154 
155 typedef	enum
156 {
157 	FILTER_DROPSHADOW					= 0,
158 	FILTER_BLUR							= 1,
159 	FILTER_GLOW							= 2,
160 	FILTER_BEVEL						= 3,
161 	FILTER_GRADIENTGLOW					= 4,
162 	FILTER_ADJUSTCOLOR					= 6,
163 	FILTER_GRADIENTBEVEL				= 7
164 } filtertype;
165 
166 typedef	enum
167 {
168 	ATTR_USENETWORK						= 0x01,
169 	ATTR_RELATIVEURLS					= 0x02,
170 	ATTR_SUPPRESSCROSSDOMAINCACHE		= 0x04,
171 	ATTR_ACTIONSCRIPT3					= 0x08,
172 	ATTR_HASMETADATA					= 0x10
173 } fileattributes;
174 
175 typedef	enum
176 {
177 	TAG_END								= 0,  /* end tag for movie clip or swf */
178 	TAG_SHOWFRAME						= 1,  /* frame is completely described now, please show */
179 	TAG_DEFINESHAPE						= 2,
180 	TAG_FREECHARACTER					= 3,
181 	TAG_PLACEOBJECT						= 4,
182 	TAG_REMOVEOBJECT					= 5,
183 	TAG_DEFINEBITS						= 6,
184 	TAG_DEFINEBUTTON					= 7,
185 	TAG_JPEGTABLES						= 8,
186 	TAG_SETBACKGROUNDCOLOR				= 9,
187 	TAG_DEFINEFONT						= 10,
188 	TAG_DEFINETEXT						= 11,
189 	TAG_DOACTION						= 12, /* normal action block */
190 	TAG_DEFINEFONTINFO					= 13,
191 	TAG_DEFINESOUND						= 14,
192 	TAG_STARTSOUND						= 15,
193 	TAG_STOPSOUND						= 16,
194 	TAG_DEFINEBUTTONSOUND				= 17,
195 	TAG_SOUNDSTREAMHEAD					= 18,
196 	TAG_SOUNDSTREAMBLOCK				= 19,
197 	TAG_DEFINEBITSLOSSLESS				= 20,
198 	TAG_DEFINEBITSJPEG2					= 21,
199 	TAG_DEFINESHAPE2					= 22,
200 	TAG_DEFINEBUTTONCXFORM				= 23,
201 	TAG_PROTECT							= 24, /* the author doesn't want the file to be opened */
202 	TAG_PATHSAREPOSTSCRIPT				= 25,
203 	TAG_PLACEOBJECT2					= 26, /* possibly onClipEvents inside */
204 	TAG_REMOVEOBJECT2					= 28,
205 	TAG_SYNCFRAME						= 29,
206 	TAG_FREEALL							= 31,
207 	TAG_DEFINESHAPE3					= 32,
208 	TAG_DEFINETEXT2						= 33,
209 	TAG_DEFINEBUTTON2					= 34, /* possibly button events inside */
210 	TAG_DEFINEBITSJPEG3					= 35,
211 	TAG_DEFINEBITSLOSSLESS2				= 36,
212 	TAG_DEFINEEDITTEXT					= 37,
213 	TAG_DEFINEVIDEO						= 38,
214 	TAG_DEFINEMOVIECLIP					= 39, /* movie clip timeline comes */
215 	TAG_NAMECHARACTER					= 40,
216 	TAG_SERIALNUMBER					= 41,
217 	TAG_DEFINETEXTFORMAT				= 42,
218 	TAG_FRAMELABEL						= 43,
219 	TAG_SOUNDSTREAMHEAD2				= 45,
220 	TAG_DEFINEMORPHSHAPE				= 46,
221 	TAG_GENFRAME						= 47,
222 	TAG_DEFINEFONT2						= 48,
223 	TAG_GENCOMMAND						= 49,
224 	TAG_DEFINECOMMANDOBJ				= 50,
225 	TAG_CHARACTERSET					= 51,
226 	TAG_FONTREF							= 52,
227 	TAG_EXPORTASSETS					= 56,
228 	TAG_IMPORTASSETS					= 57,
229 	TAG_ENABLEDEBUGGER					= 58,
230 	TAG_INITMOVIECLIP					= 59, /* flash 6 mc initialization actions (#initclip .. #endinitclip) */
231 	TAG_DEFINEVIDEOSTREAM				= 60,
232 	TAG_VIDEOFRAME						= 61,
233 	TAG_DEFINEFONTINFO2					= 62,
234 	TAG_DEBUGID							= 63,
235 	TAG_ENABLEDEBUGGER2					= 64,
236 	TAG_SCRIPTLIMITS					= 65,
237 	TAG_SETTABINDEX						= 66,
238 	TAG_DEFINESHAPE4					= 67,
239 	TAG_FILEATTRIBUTES					= 69,
240 	TAG_PLACEOBJECT3					= 70, /* possibly onClipEvents inside */
241 	TAG_IMPORTASSETS2					= 71,
242 	TAG_DEFINEFONTINFO3					= 73,
243 	TAG_DEFINETEXTINFO					= 74,
244 	TAG_DEFINEFONT3						= 75,
245 	TAG_AVM2DECL						= 76,
246 	TAG_METADATA						= 77,
247 	TAG_SLICE9							= 78,
248 	TAG_AVM2ACTION						= 82,
249 	TAG_DEFINESHAPE5					= 83,
250 	TAG_DEFINEMORPHSHAPE2				= 84,
251 	TAG_DEFINEBITSPTR					= 1023
252 } tagheaderid;
253 
254 /* action block type - all places in SWF that may contain actions */
255 typedef enum
256 {
257 	AB_FRAME,
258 	AB_INITMC,
259 	AB_MCEVENT,
260 	AB_BUTTONEVENT
261 } abtype;
262 
263 typedef	enum
264 {
265 	MODE_DECOMPRESS,
266 	MODE_COMPRESS,
267 	MODE_ASSEMBLE,
268 	MODE_ASBYTECODE,
269 	MODE_DISASSEMBLE,
270 	MODE_UPDATE,
271 	MODE_IDE,
272 	MODE_FLASH_HELP
273 } processingmode;
274 
275 #endif /* ACTION_H_INCLUDED	*/
276