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