1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: local quad ActionTagEnd = 0 ; 20: local byte isCompressed = 0 ; 21: 22: typedef struct { 23: ubyte Register ; 24: string ParamName ; 25: } REGISTERPARAM ; 26: 27: typedef struct { 28: string value ; 29: } CONSTANTPOOL ; 30: 31: typedef struct { 32: string value ; 33: } PARAMS ; 34: 35: typedef struct { 36: ubyte Type ; 37: switch ( Type ) { 38: case 0 : 39: string String ; 40: break ; 41: case 1 : 42: float Float ; 43: break ; 44: case 4 : 45: ubyte RegisterNumber ; 46: break ; 47: case 5 : 48: ubyte Boolean ; 49: break ; 50: case 6 : 51: double Double ; 52: break ; 53: case 7 : 54: int Integer ; 55: break ; 56: case 8 : 57: ubyte Constant8 ; 58: break ; 59: case 9 : 60: ushort Constant16 ; 61: break ; 62: default : 63: Warning ( "Unexpected Value detected." ) ; 64: } 65: } TYPECONST ; 66: 67: typedef struct { 68: local int i ; 69: 70: ubyte ActionCode ; 71: if ( ActionCode >= 0x80 ) { 72: ushort Length ; 73: ActionTagEnd = FTell ( ) + Length ; 74: } 75: 76: switch ( ActionCode ) { 77: 78: 79: 80: case 0x81 : 81: if ( Length != 2 ) { 82: Warning ( "ActionGotoFrame: Length must be 2." ) ; 83: } 84: ushort Frame ; 85: break ; 86: case 0x83 : 87: string UrlString ; 88: string TargetString ; 89: break ; 90: case 0x4 : 91: case 0x5 : 92: case 0x6 : 93: case 0x7 : 94: case 0x8 : 95: case 0x9 : 96: break ; 97: case 0x8A : 98: if ( Length != 3 ) { 99: Warning ( "ActionWaitForFrame: Length must be 3." ) ; 100: } 101: ushort Frame ; 102: ubyte SkipCount ; 103: break ; 104: case 0x8B : 105: string TargetName ; 106: break ; 107: case 0x8C : 108: string Label ; 109: break ; 110: 111: 112: 113: 114: case 0x96 : 115: do { 116: TYPECONST TypeConst ; 117: } while ( FTell ( ) < ActionTagEnd ) ; 118: break ; 119: case 0x17 : 120: case 0xA : 121: case 0xB : 122: case 0xC : 123: case 0xD : 124: case 0xE : 125: case 0xF : 126: case 0x10 : 127: case 0x11 : 128: case 0x12 : 129: case 0x13 : 130: case 0x14 : 131: case 0x21 : 132: case 0x15 : 133: case 0x29 : 134: case 0x31 : 135: case 0x35 : 136: case 0x18 : 137: case 0x32 : 138: case 0x33 : 139: case 0x36 : 140: case 0x37 : 141: break ; 142: case 0x99 : 143: short BranchOffset ; 144: break ; 145: case 0x9D : 146: short BranchOffset ; 147: break ; 148: case 0x9E : 149: case 0x1C : 150: case 0x1D : 151: break ; 152: case 0x9A : 153: ubyte SendVarsMethod : 2 ; 154: ubyte Reserved : 4 ; 155: ubyte LoadTargetFlag : 1 ; 156: ubyte LoadVariablesFlag : 1 ; 157: break ; 158: case 0x9F : 159: ubyte Reserved : 6 ; 160: ubyte SceneBiasFlag : 1 ; 161: ubyte PlayFlag : 1 ; 162: if ( SceneBiasFlag == 1 ) { 163: ushort SceneBias ; 164: } 165: break ; 166: case 0x20 : 167: case 0x22 : 168: case 0x23 : 169: case 0x24 : 170: case 0x25 : 171: case 0x27 : 172: case 0x28 : 173: break ; 174: case 0x8D : 175: ubyte SkipCount ; 176: break ; 177: case 0x26 : 178: case 0x34 : 179: case 0x30 : 180: break ; 181: 182: 183: 184: 185: case 0x3D : 186: case 0x52 : 187: break ; 188: case 0x88 : 189: ushort Count ; 190: for ( i = 0 ; i < Count ; i ++ ) { 191: CONSTANTPOOL Constant ; 192: } 193: break ; 194: case 0x9B : 195: string FunctionName ; 196: ushort NumParams ; 197: for ( i = 0 ; i < NumParams ; i ++ ) { 198: PARAMS Param ; 199: } 200: ushort codeSize ; 201: break ; 202: case 0x3C : 203: case 0x41 : 204: case 0x3A : 205: case 0x3B : 206: case 0x46 : 207: case 0x49 : 208: case 0x4E : 209: case 0x42 : 210: case 0x43 : 211: case 0x53 : 212: case 0x40 : 213: case 0x4F : 214: case 0x45 : 215: break ; 216: case 0x94 : 217: ushort Size ; 218: break ; 219: case 0x4A : 220: case 0x4B : 221: case 0x44 : 222: case 0x47 : 223: case 0x48 : 224: case 0x3F : 225: case 0x60 : 226: case 0x63 : 227: case 0x61 : 228: case 0x64 : 229: case 0x65 : 230: case 0x62 : 231: case 0x51 : 232: case 0x50 : 233: case 0x4C : 234: case 0x3E : 235: case 0x4D : 236: break ; 237: case 0x87 : 238: ubyte RegisterNumber ; 239: break ; 240: 241: 242: 243: 244: case 0x55 : 245: case 0x66 : 246: case 0x67 : 247: case 0x68 : 248: break ; 249: 250: 251: 252: 253: case 0x8E : 254: string FunctionName ; 255: ushort NumParams ; 256: ubyte RegisterCount ; 257: ubyte PreloadParentFlag : 1 ; 258: ubyte PreloadRootFlag : 1 ; 259: ubyte SuppressSuperFlag : 1 ; 260: ubyte PreloadSuperFlag : 1 ; 261: ubyte SuppressArgumentsFlag : 1 ; 262: ubyte PreloadArgumentsFlag : 1 ; 263: ubyte SuppressThisFlag : 1 ; 264: ubyte PreloadThisFlag : 1 ; 265: ubyte Reserved : 7 ; 266: ubyte PreloadGlobalFlag : 1 ; 267: 268: for ( i = 0 ; i < NumParams ; i ++ ) { 269: REGISTERPARAM Parameter ; 270: } 271: ushort codeSize ; 272: break ; 273: case 0x69 : 274: case 0x2B : 275: case 0x2C : 276: break ; 277: case 0x8F : 278: ubyte Reserved : 5 ; 279: ubyte CatchInRegisterFlag : 1 ; 280: ubyte FinallyBlockFlag : 1 ; 281: ubyte CatchBlockFlag : 1 ; 282: ushort TrySize ; 283: ushort CatchSize ; 284: ushort FinallySize ; 285: if ( CatchInRegisterFlag == 0 ) { 286: string CatchName ; 287: } 288: else { 289: ubyte CatchRegister ; 290: } 291: if ( TrySize ) ubyte TryBody [ TrySize ] ; 292: if ( CatchSize ) ubyte CatchBody [ CatchSize ] ; 293: if ( FinallySize ) ubyte FinallyBody [ FinallySize ] ; 294: break ; 295: case 0x2A : 296: break ; 297: 298: 299: 300: 301: 302: default : 303: if ( ActionCode >= 0x80 ) { 304: ubyte Padding [ ActionTagEnd - FTell ( ) ] ; 305: } 306: break ; 307: } 308: 309: 310: 311: 312: 313: 314: 315: 316: if ( ActionCode >= 0x80 ) { 317: if ( ActionTagEnd > FTell ( ) ) { 318: ubyte Padding [ ActionTagEnd - FTell ( ) ] ; 319: Printf ( "WARNING: ActionTag padded to 0x%LXh\n" , FTell ( ) ) ; 320: } 321: else if ( ActionTagEnd < FTell ( ) - 1 ) { 322: Printf ( "WARNING: ActionTag overrun to 0x%LXh, expected end at 0x%LXh\n" , FTell ( ) , ActionTagEnd ) ; 323: } 324: } 325: 326: } ACTIONRECORD < read = GetActionType > ; 327: 328: string GetActionType ( ACTIONRECORD & ActionTag ) 329: { 330: string action ; 331: ubyte ActionType = ActionTag . ActionCode ; 332: 333: switch ( ActionType ) 334: { 335: case 0x81 : return "ActionGotoFrame" ; 336: case 0x83 : return "ActionGetURL" ; 337: case 0x4 : return "ActionNextFrame" ; 338: case 0x5 : return "ActionPreviousFrame" ; 339: case 0x6 : return "ActionPlay" ; 340: case 0x7 : return "ActionStop" ; 341: case 0x8 : return "ActionToggleQuality" ; 342: case 0x9 : return "ActionStopSounds" ; 343: case 0x8A : return "ActionWaitForFrame" ; 344: case 0x8B : return "ActionSetTarget" ; 345: case 0x8C : return "ActionGoToLabel" ; 346: case 0x96 : return "ActionPush" ; 347: case 0x17 : return "ActionPop" ; 348: case 0xA : return "ActionAdd" ; 349: case 0xB : return "ActionSubtract" ; 350: case 0xC : return "ActionMultiply" ; 351: case 0xD : return "ActionDivide" ; 352: case 0xE : return "ActionEquals" ; 353: case 0xF : return "ActionLess" ; 354: case 0x10 : return "ActionAnd" ; 355: case 0x11 : return "ActionOr" ; 356: case 0x12 : return "ActionNot" ; 357: case 0x13 : return "ActionStringEquals" ; 358: case 0x14 : return "ActionStringLength" ; 359: case 0x21 : return "ActionStringAdd" ; 360: case 0x15 : return "ActionStringExtract" ; 361: case 0x29 : return "ActionStringLess" ; 362: case 0x31 : return "ActionMBStringLength" ; 363: case 0x35 : return "ActionMBStringExtract" ; 364: case 0x18 : return "ActionToInteger" ; 365: case 0x32 : return "ActionCharToAscii" ; 366: case 0x33 : return "ActionAsciiToChar" ; 367: case 0x36 : return "ActionMBCharToAscii" ; 368: case 0x37 : return "ActionMBAsciiToChar" ; 369: case 0x99 : return "ActionJump" ; 370: case 0x9D : return "ActionIf" ; 371: case 0x9E : return "ActionCall" ; 372: case 0x1C : return "ActionGetVariable" ; 373: case 0x1D : return "ActionSetVariable" ; 374: case 0x9A : return "ActionGetURL2" ; 375: case 0x9F : return "ActionGotoFrame2" ; 376: case 0x20 : return "ActionSetTarget2" ; 377: case 0x22 : return "ActionGetProperty" ; 378: case 0x23 : return "ActionSetProperty" ; 379: case 0x24 : return "ActionCloneSprite" ; 380: case 0x25 : return "ActionRemoveSprite" ; 381: case 0x27 : return "ActionStartDrag" ; 382: case 0x28 : return "ActionEndDrag" ; 383: case 0x8D : return "ActionWaitForFrame2" ; 384: case 0x26 : return "ActionTrace" ; 385: case 0x34 : return "ActionGetTime" ; 386: case 0x30 : return "ActionRandomNumber" ; 387: case 0x3D : return "ActionCallFunction" ; 388: case 0x52 : return "ActionCallMethod" ; 389: case 0x88 : return "ActionConstantPool" ; 390: case 0x9B : return "ActionDefineFunction" ; 391: case 0x3C : return "ActionDefineLocal" ; 392: case 0x41 : return "ActionDefineLocal2" ; 393: case 0x3A : return "ActionDelete" ; 394: case 0x3B : return "ActionDelete2" ; 395: case 0x46 : return "ActionEnumerate" ; 396: case 0x49 : return "ActionEquals2" ; 397: case 0x4E : return "ActionGetMember" ; 398: case 0x42 : return "ActionInitArray" ; 399: case 0x43 : return "ActionInitObject" ; 400: case 0x53 : return "ActionNewMethod" ; 401: case 0x40 : return "ActionNewObject" ; 402: case 0x4F : return "ActionSetMember" ; 403: case 0x45 : return "ActionTargetPath" ; 404: case 0x94 : return "ActionWith" ; 405: case 0x4A : return "ActionToNumber" ; 406: case 0x4B : return "ActionToString" ; 407: case 0x44 : return "ActionTypeOf" ; 408: case 0x47 : return "ActionAdd2" ; 409: case 0x48 : return "ActionLess2" ; 410: case 0x3F : return "ActionModulo" ; 411: case 0x60 : return "ActionBitAnd" ; 412: case 0x63 : return "ActionBitLShift" ; 413: case 0x61 : return "ActionBitOr" ; 414: case 0x64 : return "ActionBitRShift" ; 415: case 0x65 : return "ActionBitURShift" ; 416: case 0x62 : return "ActionBitXor" ; 417: case 0x51 : return "ActionDecrement" ; 418: case 0x50 : return "ActionIncrement" ; 419: case 0x4C : return "ActionPushDuplicate" ; 420: case 0x3E : return "ActionReturn" ; 421: case 0x4D : return "ActionStackSwap" ; 422: case 0x87 : return "ActionStoreRegister" ; 423: case 0x55 : return "ActionEnumerate2" ; 424: case 0x66 : return "ActionStrictEquals" ; 425: case 0x67 : return "ActionGreater" ; 426: case 0x68 : return "ActionStringGreater" ; 427: case 0x8E : return "ActionDefineFunction2" ; 428: case 0x69 : return "ActionExtends" ; 429: case 0x2B : return "ActionCastOp" ; 430: case 0x2C : return "ActionImplementsOp" ; 431: case 0x8F : return "ActionTry" ; 432: case 0x2A : return "ActionThrow" ; 433: 434: case 0x0 : return "END" ; 435: default : SPrintf ( action , "%02Xh" , ActionType ) ; 436: 437: } 438: return action ; 439: } 440: 441: 442: 443: 444: 445: 446: local quad SWFTagEnd ; 447: local ushort CurrentTag ; 448: 449: typedef struct { 450: byte value ; 451: } SI8 ; 452: 453: typedef struct { 454: short value ; 455: } SI16 ; 456: 457: typedef struct { 458: int value ; 459: } SI32 ; 460: 461: typedef struct { 462: ubyte value ; 463: } UI8 ; 464: 465: typedef struct { 466: ushort value ; 467: } UI16 ; 468: 469: typedef struct { 470: uint value ; 471: } UI32 ; 472: 473: typedef struct { 474: quad value ; 475: } UI64 ; 476: 477: typedef struct { 478: int whole : 16 ; 479: int decimal : 16 ; 480: } FIXED ; 481: 482: typedef struct { 483: short whole : 8 ; 484: short decimal : 8 ; 485: } FIXED8 ; 486: 487: typedef struct { 488: ushort sign : 1 ; 489: ushort exponent : 5 ; 490: ushort mantissa : 10 ; 491: } FLOAT16 ; 492: 493: typedef struct { 494: BigEndian ( ) ; 495: local int i = 0 ; 496: do { 497: byte next : 1 ; 498: byte value : 7 ; 499: i ++ ; 500: } while ( i < 5 & next ) ; 501: } EncodedU32 ; 502: 503: typedef struct { 504: do { 505: char character ; 506: } while ( character != 0x0 ) ; 507: } STRING ; 508: 509: typedef struct { 510: ubyte LanguageCode ; 511: } LANGCODE ; 512: 513: typedef struct { 514: ubyte Red ; 515: ubyte Green ; 516: ubyte Blue ; 517: } RGB ; 518: 519: typedef struct { 520: ubyte Red ; 521: ubyte Green ; 522: ubyte Blue ; 523: ubyte Alpha ; 524: } RGBA ; 525: 526: typedef struct { 527: ubyte Alpha ; 528: ubyte Red ; 529: ubyte Green ; 530: ubyte Blue ; 531: } ARGB ; 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: typedef struct { 544: ubyte Nbits : 5 ; 545: BitfieldDisablePadding ( ) ; 546: int Xmin : Nbits ; 547: int Xmax : Nbits ; 548: int Ymin : Nbits ; 549: int Ymax : Nbits ; 550: BitfieldEnablePadding ( ) ; 551: } RECT ; 552: 553: typedef struct { 554: BitfieldEnablePadding ( ) ; 555: BitfieldLeftToRight ( ) ; 556: ubyte HasScale : 1 ; 557: if ( HasScale ) { 558: ubyte NScaleBits : 5 ; 559: BitfieldDisablePadding ( ) ; 560: int ScaleX : NScaleBits ; 561: int ScaleY : NScaleBits ; 562: } 563: ubyte HasRotate : 1 ; 564: if ( HasRotate ) { 565: ubyte NRotateBits : 5 ; 566: BitfieldDisablePadding ( ) ; 567: int RotateSkew0 : NRotateBits ; 568: int RotateSkew1 : NRotateBits ; 569: } 570: ubyte NTranslateBits : 5 ; 571: BitfieldDisablePadding ( ) ; 572: int TranslateX : NTranslateBits ; 573: int TranslateY : NTranslateBits ; 574: BitfieldEnablePadding ( ) ; 575: } MATRIX ; 576: 577: typedef struct { 578: ushort Tag ; 579: string Name ; 580: } ASSETS ; 581: 582: typedef struct { 583: EncodedU32 Offset ; 584: string Name ; 585: } OFFSETANDNAME ; 586: 587: typedef struct { 588: BitfieldEnablePadding ( ) ; 589: ubyte HasAddTerms : 1 ; 590: ubyte HasMultTerms : 1 ; 591: ubyte Nbits : 4 ; 592: BitfieldDisablePadding ( ) ; 593: if ( HasMultTerms ) { 594: short RedMultTerm : Nbits ; 595: short GreenMultTerm : Nbits ; 596: short BlueMultTerm : Nbits ; 597: } 598: if ( HasAddTerms ) { 599: short RedAddTerm : Nbits ; 600: short GreenAddTerm : Nbits ; 601: short BlueAddTerm : Nbits ; 602: } 603: BitfieldEnablePadding ( ) ; 604: } CXFORM ; 605: 606: typedef struct { 607: BitfieldEnablePadding ( ) ; 608: ubyte HasAddTerms : 1 ; 609: ubyte HasMultTerms : 1 ; 610: ubyte Nbits : 4 ; 611: BitfieldDisablePadding ( ) ; 612: if ( HasMultTerms ) { 613: short RedMultTerm : Nbits ; 614: short GreenMultTerm : Nbits ; 615: short BlueMultTerm : Nbits ; 616: short AlphaMultTerm : Nbits ; 617: } 618: if ( HasAddTerms ) { 619: short RedAddTerm : Nbits ; 620: short GreenAddTerm : Nbits ; 621: short BlueAddTerm : Nbits ; 622: short AlphaAddTerm : Nbits ; 623: } 624: BitfieldEnablePadding ( ) ; 625: } CXFORMWITHALPHA ; 626: 627: typedef struct { 628: ushort ClipEventKeyUp : 1 ; 629: ushort ClipEventKeyDown : 1 ; 630: ushort ClipEventMouseUp : 1 ; 631: ushort ClipEventMouseDown : 1 ; 632: ushort ClipEventMouseMove : 1 ; 633: ushort ClipEventUnload : 1 ; 634: ushort ClipEventEnterFrame : 1 ; 635: ushort ClipEventLoad : 1 ; 636: ushort ClipEventDragOver : 1 ; 637: ushort ClipEventRollOut : 1 ; 638: ushort ClipEventRollOver : 1 ; 639: ushort ClipEventReleaseOutside : 1 ; 640: ushort ClipEventRelease : 1 ; 641: ushort ClipEventPress : 1 ; 642: ushort ClipEventInitialize : 1 ; 643: ushort ClipEventData : 1 ; 644: if ( File . Header . Version >= 6 ) { 645: ushort Reserved : 5 ; 646: ushort ClipEventConstruct : 1 ; 647: ushort ClipEventKeyPress : 1 ; 648: ushort ClipEventDragout : 1 ; 649: ushort Reserved : 8 ; 650: } 651: } CLIPEVENTFLAGS ; 652: 653: typedef struct { 654: CLIPEVENTFLAGS EventFlags ; 655: uint ActionRecordSize ; 656: if ( ( File . Header . Version > 5 ) && EventFlags . ClipEventKeyPress ) { 657: ubyte KeyCode ; 658: } 659: do { 660: ACTIONRECORD Action ; 661: } while ( Action . ActionCode != 0x0 ) ; 662: } CLIPACTIONRECORD ; 663: 664: 665: typedef struct { 666: local uint clips ; 667: ushort Reserved ; 668: CLIPEVENTFLAGS AllEventFlags ; 669: do { 670: CLIPACTIONRECORD ClipActionRecord ; 671: } while ( ( SWFTagEnd - FTell ( ) ) > 9 ) ; 672: if ( File . Header . Version > 5 ) { 673: uint ClipActionEndFlag ; 674: } 675: else { 676: ushort ClipActionEndFlag ; 677: } 678: } CLIPACTIONS ; 679: 680: typedef struct { 681: float Matrix [ 20 ] ; 682: } COLORMATRIXFILTER ; 683: 684: typedef struct { 685: ubyte MatrixX ; 686: ubyte MatrixY ; 687: float Divisor ; 688: float Bias ; 689: float Matrix [ MatrixX * MatrixY ] ; 690: RGBA DefaultColor ; 691: ubyte Reserved : 6 ; 692: ubyte Clamp : 1 ; 693: ubyte PreserveAlpha : 1 ; 694: } CONVOLUTIONFILTER ; 695: 696: typedef struct { 697: FIXED BlurX ; 698: FIXED BlurY ; 699: ubyte Passes : 5 ; 700: ubyte Reserved : 3 ; 701: } BLURFILTER ; 702: 703: typedef struct { 704: RGBA DropShadowColor ; 705: FIXED BlurX ; 706: FIXED BlurY ; 707: FIXED Angle ; 708: FIXED Distance ; 709: FIXED8 Strength ; 710: ubyte InnerShadow : 1 ; 711: ubyte Knockout : 1 ; 712: ubyte CompositeSource : 1 ; 713: ubyte Passes : 5 ; 714: } DROPSHADOWFILTER ; 715: 716: typedef struct { 717: RGBA GlowColor ; 718: FIXED BlurX ; 719: FIXED BlurY ; 720: FIXED8 Strength ; 721: ubyte InnerShadow : 1 ; 722: ubyte Knockout : 1 ; 723: ubyte CompositeSource : 1 ; 724: ubyte Passes : 5 ; 725: } GLOWFILTER ; 726: 727: typedef struct { 728: RGBA ShadowColor ; 729: RGBA HighlightColor ; 730: FIXED BlurX ; 731: FIXED BlurY ; 732: FIXED Angle ; 733: FIXED Distance ; 734: FIXED8 Strength ; 735: ubyte InnerShadow : 1 ; 736: ubyte Knockout : 1 ; 737: ubyte CompositeSource : 1 ; 738: ubyte OnTop : 1 ; 739: ubyte Passes : 4 ; 740: } BEVELFILTER ; 741: 742: typedef struct { 743: ubyte Ratio ; 744: if ( ( CurrentTag == 2 ) 745: || ( CurrentTag == 22 ) ) { 746: RGB Color ; 747: } 748: else { 749: RGBA Color ; 750: } 751: } GRADRECORD ; 752: 753: typedef struct { 754: local short i ; 755: ubyte SpreadMode : 2 ; 756: ubyte InterpolationMode : 2 ; 757: ubyte NumGradients : 4 ; 758: for ( i = 0 ; i < NumGradients ; i ++ ) { 759: GRADRECORD GradientRecord ; 760: } 761: } GRADIENT ; 762: 763: typedef struct { 764: local short i ; 765: ubyte SpreadMode : 2 ; 766: ubyte InterpolationMode : 2 ; 767: ubyte NumGradients : 4 ; 768: for ( i = 0 ; i < NumGradients ; i ++ ) { 769: GRADRECORD GradientRecord ; 770: } 771: FIXED8 FocalPoint ; 772: } FOCALGRADIENT ; 773: 774: typedef struct { 775: ubyte NumColors ; 776: RGBA GradientColors [ NumColors ] ; 777: ubyte GradientRatio [ NumColors ] ; 778: FIXED BlurX ; 779: FIXED BlurY ; 780: FIXED Angle ; 781: FIXED Distance ; 782: FIXED8 Strength ; 783: ubyte InnerShadow : 1 ; 784: ubyte Knockout : 1 ; 785: ubyte CompositeSource : 1 ; 786: ubyte OnTop : 1 ; 787: ubyte Passes : 4 ; 788: } GRADIENTGLOWFILTER ; 789: 790: typedef struct { 791: ubyte NumColors ; 792: RGBA GradientColors [ NumColors ] ; 793: ubyte GradientRatio [ NumColors ] ; 794: FIXED BlurX ; 795: FIXED BlurY ; 796: FIXED Angle ; 797: FIXED Distance ; 798: FIXED8 Strength ; 799: ubyte InnerShadow : 1 ; 800: ubyte Knockout : 1 ; 801: ubyte CompositeSource : 1 ; 802: ubyte OnTop : 1 ; 803: ubyte Passes : 4 ; 804: } GRADIENTBEVELFILTER ; 805: 806: 807: 808: typedef struct { 809: ushort FilterId ; 810: switch ( FilterId ) { 811: case 0 : 812: DROPSHADOWFILTER DropShadowFilter ; 813: break ; 814: case 1 : 815: BLURFILTER BlurFilter ; 816: break ; 817: case 2 : 818: GLOWFILTER GlowFilter ; 819: break ; 820: case 3 : 821: BEVELFILTER BevelFilter ; 822: break ; 823: case 4 : 824: GRADIENTGLOWFILTER GradientGlowFilter ; 825: break ; 826: case 5 : 827: CONVOLUTIONFILTER ConvolutionFilter ; 828: break ; 829: case 6 : 830: COLORMATRIXFILTER ColorMatrixFilter ; 831: break ; 832: case 7 : 833: GRADIENTBEVELFILTER GradientBevelFilter ; 834: break ; 835: } 836: } FILTER ; 837: 838: typedef struct { 839: local ushort i ; 840: ubyte NumberOfFilters ; 841: for ( i = 0 ; i < NumberOfFilters ; i ++ ) { 842: FILTER Filter ; 843: } 844: } FILTERLIST ; 845: 846: typedef struct { 847: ubyte FillStyleType ; 848: switch ( FillStyleType ) { 849: case 0x0 : 850: if ( ( CurrentTag == 2 ) 851: || ( CurrentTag == 22 ) ) { 852: RGB Color ; 853: } 854: else { 855: RGBA Color ; 856: } 857: break ; 858: case 0x10 : 859: case 0x12 : 860: MATRIX GradientMatrix ; 861: GRADIENT Gradient ; 862: break ; 863: case 0x13 : 864: FOCALGRADIENT Gradient ; 865: break ; 866: case 0x40 : 867: case 0x41 : 868: case 0x42 : 869: case 0x43 : 870: ushort BitmapId ; 871: MATRIX BitmapMatrix ; 872: break ; 873: default : 874: break ; 875: } 876: } FILLSTYLE ; 877: 878: typedef struct { 879: local ushort i ; 880: ubyte FillStyleCount ; 881: if ( FillStyleCount == 0xFF ) { 882: UI16 FillStyleCountExtended ; 883: for ( i = 0 ; i < FillStyleCount ; i ++ ) { 884: FILLSTYLE FillStyle ; 885: } 886: } 887: else { 888: for ( i = 0 ; i < FillStyleCount ; i ++ ) { 889: FILLSTYLE FillStyle ; 890: } 891: } 892: } FILLSTYLEARRAY ; 893: 894: typedef struct { 895: ushort Width ; 896: if ( ( CurrentTag == 2 ) 897: || ( CurrentTag == 22 ) ) { 898: RGB Color ; 899: } 900: else { 901: RGBA Color ; 902: } 903: } LINESTYLE ; 904: 905: typedef struct { 906: ushort Width ; 907: ubyte StartCapStyle : 2 ; 908: ubyte JoinStyle : 2 ; 909: ubyte HasFillFlag : 1 ; 910: ubyte NoHScaleFlag : 1 ; 911: ubyte NoVScaleFlag : 1 ; 912: ubyte PixelHintingFlag : 1 ; 913: ubyte Reserved : 5 ; 914: ubyte NoClose : 1 ; 915: ubyte EndCapStyle : 2 ; 916: if ( JoinStyle == 2 ) { 917: ushort MiterLimitFactor ; 918: } 919: if ( HasFillFlag ) { 920: FILLSTYLE FillType ; 921: } 922: else { 923: RGBA Color ; 924: } 925: } LINESTYLE2 ; 926: 927: typedef struct { 928: local ushort i ; 929: BitfieldDisablePadding ( ) ; 930: ubyte LineStyleCount ; 931: if ( LineStyleCount == 0xFF ) { 932: UI16 LineStyleCountExtended ; 933: for ( i = 0 ; i < LineStyleCountExtended ; i ++ ) { 934: if ( ( CurrentTag == 2 ) 935: || ( CurrentTag == 22 ) 936: || ( CurrentTag == 32 ) ) { 937: LINESTYLE LineStyle ; 938: } 939: else if ( CurrentTag == 83 ) { 940: LINESTYLE2 LineStyle ; 941: } 942: } 943: } 944: else { 945: for ( i = 0 ; i < LineStyleCount ; i ++ ) { 946: if ( ( CurrentTag == 2 ) 947: || ( CurrentTag == 22 ) 948: || ( CurrentTag == 32 ) ) { 949: LINESTYLE LineStyle ; 950: } 951: else if ( CurrentTag == 83 ) { 952: LINESTYLE2 LineStyle ; 953: } 954: } 955: } 956: BitfieldEnablePadding ( ) ; 957: } LINESTYLEARRAY ; 958: 959: typedef struct { 960: BitfieldDisablePadding ( ) ; 961: ubyte TypeFlag : 1 ; 962: if ( TypeFlag ) { 963: ubyte StraightFlag : 1 ; 964: if ( StraightFlag ) { 965: ubyte NumBits : 4 ; 966: ubyte GeneralLineFlag : 1 ; 967: if ( GeneralLineFlag ) { 968: int DeltaX : NumBits + 2 ; 969: int DeltaY : NumBits + 2 ; 970: } 971: else { 972: ubyte VertLineFlag : 1 ; 973: if ( VertLineFlag ) { 974: int DeltaY : NumBits + 2 ; 975: } 976: else { 977: int DeltaX : NumBits + 2 ; 978: } 979: } 980: } 981: else { 982: ubyte NumBits : 4 ; 983: int ControlDeltaX : NumBits + 2 ; 984: int ControlDeltaY : NumBits + 2 ; 985: int AnchorDeltaX : NumBits + 2 ; 986: int AnchorDeltaY : NumBits + 2 ; 987: } 988: } 989: else { 990: ubyte StateNewStyles : 1 ; 991: ubyte StateLineStyle : 1 ; 992: ubyte StateFillStyle1 : 1 ; 993: ubyte StateFillStyle0 : 1 ; 994: ubyte StateMoveTo : 1 ; 995: if ( StateMoveTo ) { 996: ubyte MoveBits : 5 ; 997: int MoveDeltaX : MoveBits ; 998: int MoveDeltaY : MoveBits ; 999: } 1000: if ( StateFillStyle0 ) { 1001: int FillStyle0 : FillBits ; 1002: } 1003: if ( StateFillStyle1 ) { 1004: int FillStyle1 : FillBits ; 1005: } 1006: if ( StateLineStyle ) { 1007: int LineStyle : LineBits ; 1008: } 1009: if ( ( CurrentTag == 22 || CurrentTag == 32 ) && StateNewStyles ) { 1010: FILLSTYLEARRAY FillStyles ; 1011: LINESTYLEARRAY LineStyles ; 1012: ubyte NumFillBits : 4 ; 1013: ubyte NumLineBits : 4 ; 1014: FillBits = NumFillBits ; 1015: LineBits = NumLineBits ; 1016: } 1017: } 1018: 1019: 1020: 1021: 1022: 1023: 1024: 1025: 1026: 1027: 1028: 1029: 1030: } SHAPERECORD < read = GetShapeRecordType > ; 1031: 1032: string GetShapeRecordType ( SHAPERECORD & ShapeRecord ) 1033: { 1034: if ( ShapeRecord . TypeFlag ) { 1035: if ( ShapeRecord . StraightFlag ) { 1036: return "StraightEdgeRecord" ; 1037: } 1038: else { 1039: return "CurvedEdgeRecord" ; 1040: } 1041: } 1042: else if ( ShapeRecord . TypeFlag 1043: || ShapeRecord . StateNewStyles 1044: || ShapeRecord . StateLineStyle 1045: || ShapeRecord . StateFillStyle1 1046: || ShapeRecord . StateFillStyle0 1047: || ShapeRecord . StateMoveTo ) { 1048: return "StyleChangeRecord" ; 1049: } 1050: else { 1051: return "EndShapeRecord" ; 1052: } 1053: 1054: } 1055: 1056: typedef struct { 1057: BitfieldEnablePadding ( ) ; 1058: ubyte NumFillBits : 4 ; 1059: ubyte NumLineBits : 4 ; 1060: local ubyte FillBits = NumFillBits ; 1061: local ubyte LineBits = NumLineBits ; 1062: BitfieldDisablePadding ( ) ; 1063: do { 1064: SHAPERECORD ShapeRecord ; 1065: } while ( ShapeRecord . TypeFlag 1066: || ShapeRecord . StateNewStyles 1067: || ShapeRecord . StateLineStyle 1068: || ShapeRecord . StateFillStyle1 1069: || ShapeRecord . StateFillStyle0 1070: || ShapeRecord . StateMoveTo ) ; 1071: BitfieldEnablePadding ( ) ; 1072: } SHAPE ; 1073: 1074: typedef struct { 1075: BitfieldEnablePadding ( ) ; 1076: FILLSTYLEARRAY FillStyles ; 1077: LINESTYLEARRAY LineStyles ; 1078: ubyte NumFillBits : 4 ; 1079: ubyte NumLineBits : 4 ; 1080: local ubyte FillBits = NumFillBits ; 1081: local ubyte LineBits = NumLineBits ; 1082: BitfieldDisablePadding ( ) ; 1083: do { 1084: SHAPERECORD ShapeRecord ; 1085: } while ( ShapeRecord . TypeFlag 1086: || ShapeRecord . StateNewStyles 1087: || ShapeRecord . StateLineStyle 1088: || ShapeRecord . StateFillStyle1 1089: || ShapeRecord . StateFillStyle0 1090: || ShapeRecord . StateMoveTo ) ; 1091: BitfieldEnablePadding ( ) ; 1092: } SHAPEWITHSTYLE ; 1093: 1094: typedef struct { 1095: ubyte StartRatio ; 1096: RGBA StartColor ; 1097: ubyte EndRatio ; 1098: RGBA EndColor ; 1099: } MORPHGRADRECORD ; 1100: 1101: typedef struct { 1102: local ushort i ; 1103: ubyte NumGradients ; 1104: for ( i = 0 ; i < NumGradients ; i ++ ) { 1105: MORPHGRADRECORD GradientRecords ; 1106: } 1107: } MORPHGRADIENT ; 1108: 1109: typedef struct { 1110: ubyte FillStyleType ; 1111: switch ( FillStyleType ) { 1112: case 0x0 : 1113: RGBA StartColor ; 1114: RGBA EndColor ; 1115: break ; 1116: case 0x10 : 1117: case 0x12 : 1118: MATRIX StartGradientMatrix ; 1119: MATRIX EndGradientMatrix ; 1120: MORPHGRADIENT Gradient ; 1121: break ; 1122: case 0x40 : 1123: case 0x41 : 1124: case 0x42 : 1125: case 0x43 : 1126: MATRIX StartBitmapMatrix ; 1127: MATRIX EndBitmapMatrix ; 1128: break ; 1129: default : 1130: break ; 1131: } 1132: } MORPHFILLSTYLE ; 1133: 1134: typedef struct { 1135: ushort StartWidth ; 1136: ushort EndWidth ; 1137: ubyte StartCapStyle : 2 ; 1138: ubyte JoinStyle : 2 ; 1139: ubyte HasFillFlag : 1 ; 1140: ubyte NoHScaleFlag : 1 ; 1141: ubyte NoVScaleFlag : 1 ; 1142: ubyte PixelHintingFlag : 1 ; 1143: ubyte NoClose : 1 ; 1144: ubyte EndCapStyle : 2 ; 1145: if ( JoinStyle == 2 ) { 1146: ushort MiterLimitFactor ; 1147: } 1148: if ( HasFillFlag == 0 ) { 1149: RGBA StartColor ; 1150: RGBA EndColor ; 1151: } 1152: else { 1153: MORPHFILLSTYLE FillType ; 1154: } 1155: } MORPHLINESTYLE2 ; 1156: 1157: typedef struct { 1158: ushort StartWidth ; 1159: ushort EndWidth ; 1160: RGBA StartColor ; 1161: RGBA EndColor ; 1162: } MORPHLINESTYLE ; 1163: 1164: typedef struct { 1165: ubyte LineStyleCount ; 1166: if ( LineStyleCount == 0xFF ) { 1167: ushort LineStyleCountExtended ; 1168: for ( i = 0 ; i < LineStyleCountExtended ; i ++ ) { 1169: if ( CurrentTag == 46 ) { 1170: MORPHLINESTYLE LineStyle ; 1171: } 1172: else if ( CurrentTag == 84 ) { 1173: MORPHLINESTYLE2 LineStyle ; 1174: } 1175: } 1176: } 1177: else { 1178: for ( i = 0 ; i < LineStyleCount ; i ++ ) { 1179: if ( CurrentTag == 46 ) { 1180: MORPHLINESTYLE LineStyle ; 1181: } 1182: else if ( CurrentTag == 84 ) { 1183: MORPHLINESTYLE2 LineStyle ; 1184: } 1185: } 1186: } 1187: } MORPHLINESTYLES ; 1188: 1189: typedef struct { 1190: local ushort i ; 1191: ubyte FillStyleCount ; 1192: if ( FillStyleCount == 0xFF ) { 1193: for ( i = 0 ; i < FillStyleCountExtended ; i ++ ) { 1194: MORPHFILLSTYLE FillStyle ; 1195: } 1196: } 1197: else { 1198: for ( i = 0 ; i < FillStyleCount ; i ++ ) { 1199: MORPHFILLSTYLE FillStyle ; 1200: } 1201: } 1202: } MORPHFILLSTYLEARRAY ; 1203: 1204: typedef struct { 1205: ubyte Pix15Reserved : 1 ; 1206: ubyte Pix15Red : 5 ; 1207: ubyte Pix15Green : 5 ; 1208: ubyte Pix15Blue : 5 ; 1209: } PIX15 ; 1210: 1211: typedef struct { 1212: ubyte Pix24Reserved ; 1213: ubyte Pix24Red ; 1214: ubyte Pix24Green ; 1215: ubyte Pix24Blue ; 1216: } PIX24 ; 1217: 1218: typedef struct { 1219: RGB ColorTableRGB [ ( BitmapColorTableSize + 1 ) ] ; 1220: ubyte ColormapPixelData [ ( BitmapWidth * BitmapHeight ) ] ; 1221: } COLORMAPDATA ; 1222: 1223: typedef struct { 1224: if ( BitmapFormat == 4 ) { 1225: PIX15 BitmapPixelData [ ( BitmapWidth * BitmapHeight ) ] ; 1226: } 1227: else if ( BitmapFormat == 5 ) { 1228: PIX24 BitmapPixelData [ ( BitmapWidth * BitmapHeight ) ] ; 1229: } 1230: } BITMAPDATA ; 1231: 1232: typedef struct { 1233: RGBA ColorTableRGB [ ( BitmapColorTableSize + 1 ) ] ; 1234: ubyte ColormapPixelData [ ( 4 - ( BitmapWidth & 3 ) ) * BitmapHeight ] ; 1235: } ALPHACOLORMAPDATA ; 1236: 1237: typedef struct { 1238: ARGB BitmapPixelData [ ( BitmapWidth * BitmapHeight ) ] ; 1239: } ALPHABITMAPDATA ; 1240: 1241: typedef struct { 1242: ubyte ButtonReserved : 2 ; 1243: ubyte ButtonHasBlendMode : 1 ; 1244: ubyte ButtonHasFilterList : 1 ; 1245: ubyte ButtonStateHitTest : 1 ; 1246: ubyte ButtonStateDown : 1 ; 1247: ubyte ButtonStateOver : 1 ; 1248: ubyte ButtonStateUp : 1 ; 1249: 1250: if ( Character . ButtonReserved 1251: || Character . ButtonHasBlendMode 1252: || Character . ButtonHasFilterList 1253: || Character . ButtonStateHitTest 1254: || Character . ButtonStateDown 1255: || Character . ButtonStateOver 1256: || Character . ButtonStateUp ) { 1257: ushort CharacterID ; 1258: ushort PlaceDepth ; 1259: MATRIX PlaceMatrix ; 1260: if ( CurrentTag == 34 ) { 1261: CXFORMWITHALPHA ColorTransform ; 1262: if ( ButtonHasFilterList ) { 1263: FILTERLIST FilterList ; 1264: } 1265: if ( ButtonHasBlendMode ) { 1266: ubyte BlendMode ; 1267: } 1268: } 1269: } 1270: } BUTTONRECORD ; 1271: 1272: typedef struct { 1273: ushort CondActionSize ; 1274: ubyte CondIdleToOverDown : 1 ; 1275: ubyte CondOutDownToIdle : 1 ; 1276: ubyte CondOutDownToOverDown : 1 ; 1277: ubyte CondOverDownToOutDown : 1 ; 1278: ubyte CondOverDownToOverUp : 1 ; 1279: ubyte CondOverUpToOverDown : 1 ; 1280: ubyte CondOverUpToIdle : 1 ; 1281: ubyte CondIdleToOverUp : 1 ; 1282: ubyte CondKeyPress : 7 ; 1283: ubyte CondOverDownToIdle : 1 ; 1284: do { 1285: ACTIONRECORD Action ; 1286: } while ( Action . ActionCode != 0x0 ) ; 1287: } BUTTONCONDACTION ; 1288: 1289: typedef struct { 1290: uint Pos44 ; 1291: ushort LeftLevel ; 1292: ushort RightLevel ; 1293: } SOUNDENVELOPE ; 1294: 1295: typedef struct { 1296: ubyte Reserved : 2 ; 1297: ubyte SyncStop : 1 ; 1298: ubyte SyncNoMultiple : 1 ; 1299: ubyte HasEnvelope : 1 ; 1300: ubyte HasLoops : 1 ; 1301: ubyte HasOutPoint : 1 ; 1302: ubyte HasInPoint : 1 ; 1303: if ( HasInPoint ) { 1304: uint InPoint ; 1305: } 1306: if ( HasOutPoint ) { 1307: uint OutPoint ; 1308: } 1309: if ( HasLoops ) { 1310: ushort LoopCount ; 1311: } 1312: if ( HasEnvelope ) { 1313: ubyte EnvPoints ; 1314: SOUNDENVELOPE EnvelopeRecords [ EnvPoints ] ; 1315: } 1316: } SOUNDINFO ; 1317: 1318: typedef struct { 1319: if ( FontFlagsWideCodes ) { 1320: ushort FontKerningCode1 ; 1321: ushort FontKerningCode2 ; 1322: } 1323: else { 1324: ubyte FontKerningCode1 ; 1325: ubyte FontKerningCode2 ; 1326: } 1327: BigEndian ( ) ; 1328: short FontKerningAdjustment ; 1329: LittleEndian ( ) ; 1330: } KERNINGRECORD ; 1331: 1332: 1333: 1334: 1335: 1336: 1337: 1338: 1339: typedef struct { 1340: BitfieldEnablePadding ( ) ; 1341: ushort TagType : 10 ; 1342: ushort TagLength : 6 ; 1343: if ( TagLength == 0x3F ) { 1344: int Length ; 1345: } 1346: } RECORDHEADER ; 1347: 1348: typedef struct { 1349: local int i ; 1350: BitfieldLeftToRight ( ) ; 1351: 1352: RECORDHEADER Header ; 1353: CurrentTag = Header . TagType ; 1354: 1355: if ( Header . TagLength < 0x3F ) { 1356: SWFTagEnd = FTell ( ) + Header . TagLength ; 1357: } 1358: else { 1359: SWFTagEnd = FTell ( ) + Header . Length ; 1360: } 1361: 1362: switch ( Header . TagType ) { 1363: 1364: 1365: 1366: case 59 : 1367: ushort SpriteID ; 1368: case 12 : 1369: do { 1370: ACTIONRECORD ActionTag ; 1371: } while ( ActionTag . ActionCode != 0x0 ) ; 1372: break ; 1373: case 82 : 1374: ubyte ByteCode [ SWFTagEnd - FTell ( ) ] ; 1375: break ; 1376: 1377: 1378: 1379: 1380: 1381: case 4 : 1382: ushort CharacterId ; 1383: ushort Depth ; 1384: MATRIX Matrix ; 1385: if ( Header . TagLength == 0x3F ) { 1386: if ( Header . Length < ( sizeof ( Matrix ) + 4 ) ) { 1387: CXFORM ColorTransform ; 1388: } 1389: } 1390: else if ( Header . TagLength < ( sizeof ( Matrix ) + 4 ) ) { 1391: CXFORM ColorTransform ; 1392: } 1393: break ; 1394: case 26 : 1395: ubyte PlaceFlagHasClipActions : 1 ; 1396: ubyte PlaceFlagHasClipDepth : 1 ; 1397: ubyte PlaceFlagHasName : 1 ; 1398: ubyte PlaceFlagHasRatio : 1 ; 1399: ubyte PlaceFlagHasColorTransform : 1 ; 1400: ubyte PlaceFlagHasMatrix : 1 ; 1401: ubyte PlaceFlagHasCharacter : 1 ; 1402: ubyte PlaceFlagMove : 1 ; 1403: ushort Depth ; 1404: if ( PlaceFlagHasCharacter ) ushort CharacterId ; 1405: if ( PlaceFlagHasMatrix ) MATRIX Matrix ; 1406: if ( PlaceFlagHasColorTransform ) CXFORMWITHALPHA ColorTransform ; 1407: if ( PlaceFlagHasRatio ) ushort Ratio ; 1408: if ( PlaceFlagHasName ) string Name ; 1409: if ( PlaceFlagHasClipDepth ) ushort ClipDepth ; 1410: if ( PlaceFlagHasClipActions ) CLIPACTIONS ClipActions ; 1411: break ; 1412: case 70 : 1413: ubyte PlaceFlagHasClipActions : 1 ; 1414: ubyte PlaceFlagHasClipDepth : 1 ; 1415: ubyte PlaceFlagHasName : 1 ; 1416: ubyte PlaceFlagHasRatio : 1 ; 1417: ubyte PlaceFlagHasColorTransform : 1 ; 1418: ubyte PlaceFlagHasMatrix : 1 ; 1419: ubyte PlaceFlagHasCharacter : 1 ; 1420: ubyte PlaceFlagMove : 1 ; 1421: ubyte Reserved : 3 ; 1422: ubyte PlaceFlagHasImage : 1 ; 1423: ubyte PlaceFlagHasClassName : 1 ; 1424: ubyte PlaceFlagHasCacheAsBitmap : 1 ; 1425: ubyte PlaceFlagHasBlendMode : 1 ; 1426: ubyte PlaceFlagHasFilterList : 1 ; 1427: ushort Depth ; 1428: if ( PlaceFlagHasClassName 1429: || ( PlaceFlagHasImage && PlaceFlagHasCharacter ) ) { 1430: string ClassName ; 1431: } 1432: if ( PlaceFlagHasCharacter ) { 1433: ushort CharacterId ; 1434: } 1435: if ( PlaceFlagHasMatrix ) { 1436: MATRIX Matrix ; 1437: } 1438: if ( PlaceFlagHasColorTransform ) { 1439: CXFORMWITHALPHA ColorTransform ; 1440: } 1441: if ( PlaceFlagHasRatio ) { 1442: ushort Ratio ; 1443: } 1444: if ( PlaceFlagHasName ) { 1445: string Name ; 1446: } 1447: if ( PlaceFlagHasFilterList ) { 1448: FILTERLIST SurfaceFilterList ; 1449: } 1450: if ( PlaceFlagHasBlendMode ) { 1451: ubyte BlendMode ; 1452: } 1453: if ( PlaceFlagHasClipActions ) { 1454: CLIPACTIONS ClipActions ; 1455: } 1456: break ; 1457: case 5 : 1458: ushort CharacterId ; 1459: ushort Depth ; 1460: break ; 1461: case 28 : 1462: ushort Depth ; 1463: break ; 1464: case 1 : 1465: break ; 1466: 1467: 1468: 1469: 1470: 1471: case 9 : 1472: RGB BackgroundColor ; 1473: break ; 1474: case 43 : 1475: string Name ; 1476: if ( ( File . Header . Version >= 6 ) && ( SWFTagEnd > FTell ( ) ) ) { 1477: ubyte NamedAnchor ; 1478: } 1479: break ; 1480: case 24 : 1481: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 1482: ubyte Password [ SWFTagEnd - FTell ( ) ] ; 1483: } 1484: break ; 1485: case 0 : 1486: break ; 1487: case 56 : 1488: ushort Count ; 1489: for ( i = 0 ; i < Count ; i ++ ) { 1490: ASSETS Asset ; 1491: } 1492: break ; 1493: case 57 : 1494: string URL ; 1495: ushort Count ; 1496: for ( i = 0 ; i < Count ; i ++ ) { 1497: ASSETS Asset ; 1498: } 1499: break ; 1500: case 58 : 1501: string Password ; 1502: break ; 1503: case 64 : 1504: ushort Reserved ; 1505: string Password ; 1506: break ; 1507: case 65 : 1508: ushort MaxRecursionDepth ; 1509: ushort ScriptTimeoutSeconds ; 1510: break ; 1511: case 66 : 1512: ushort Depth ; 1513: ushort TabIndex ; 1514: break ; 1515: case 69 : 1516: uint Reserved : 3 ; 1517: uint HasMetadata : 1 ; 1518: uint ActionScript3 : 1 ; 1519: uint Reserved2 : 2 ; 1520: uint UseNetwork : 1 ; 1521: uint Reserved3 : 24 ; 1522: break ; 1523: case 71 : 1524: string URL ; 1525: ubyte Reserved ; 1526: ubyte Reserved2 ; 1527: ushort Count ; 1528: for ( i = 0 ; i < Count ; i ++ ) { 1529: ASSETS Asset ; 1530: } 1531: break ; 1532: case 76 : 1533: ushort NumSymbols ; 1534: for ( i = 0 ; i < NumSymbols ; i ++ ) { 1535: ASSETS Symbol ; 1536: } 1537: break ; 1538: case 77 : 1539: string Metadata ; 1540: break ; 1541: case 78 : 1542: ushort CharacterId ; 1543: RECT Splitter ; 1544: break ; 1545: case 86 : 1546: EncodedU32 SceneCount ; 1547: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 1548: ubyte SceneAndFrameData [ SWFTagEnd - FTell ( ) ] ; 1549: } 1550: break ; 1551: 1552: 1553: 1554: 1555: 1556: case 2 : 1557: ushort ShapeId ; 1558: RECT ShapeBounds ; 1559: SHAPEWITHSTYLE Shapes ; 1560: break ; 1561: case 22 : 1562: ushort ShapeId ; 1563: RECT ShapeBounds ; 1564: SHAPEWITHSTYLE Shapes ; 1565: break ; 1566: case 32 : 1567: ushort ShapeId ; 1568: RECT ShapeBounds ; 1569: SHAPEWITHSTYLE Shapes ; 1570: break ; 1571: case 83 : 1572: ushort ShapeId ; 1573: RECT ShapeBounds ; 1574: RECT EdgeBounds ; 1575: ubyte Reserved : 6 ; 1576: ubyte UsesNonScalingStrokes : 1 ; 1577: ubyte UsesScalingStrokes : 1 ; 1578: SHAPEWITHSTYLE Shapes ; 1579: break ; 1580: 1581: 1582: 1583: 1584: 1585: case 6 : 1586: ushort CharacterId ; 1587: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 1588: ubyte JPEGData [ SWFTagEnd - FTell ( ) ] ; 1589: } 1590: break ; 1591: case 8 : 1592: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 1593: ubyte JPEGData [ SWFTagEnd - FTell ( ) ] ; 1594: } 1595: break ; 1596: case 21 : 1597: ushort CharacterId ; 1598: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 1599: ubyte JPEGData [ SWFTagEnd - FTell ( ) ] ; 1600: } 1601: break ; 1602: case 35 : 1603: ushort CharacterID ; 1604: uint AlphaDataOffset ; 1605: if ( AlphaDataOffset ) { 1606: ubyte JPEGData [ AlphaDataOffset ] ; 1607: } 1608: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 1609: ubyte BitmapAlphaData [ SWFTagEnd - FTell ( ) ] ; 1610: } 1611: break ; 1612: case 20 : 1613: ushort CharacterID ; 1614: ubyte BitmapFormat ; 1615: ushort BitmapWidth ; 1616: ushort BitmapHeight ; 1617: if ( BitmapFormat == 3 ) { 1618: ubyte BitmapColorTableSize ; 1619: ubyte ZlibBitmapData [ SWFTagEnd - FTell ( ) ] ; 1620: } 1621: else if ( BitmapFormat == 4 || BitmapFormat == 5 ) { 1622: ubyte ZlibBitmapData [ SWFTagEnd - FTell ( ) ] ; 1623: } 1624: break ; 1625: case 36 : 1626: ushort CharacterID ; 1627: ubyte BitmapFormat ; 1628: ushort BitmapWidth ; 1629: ushort BitmapHeight ; 1630: if ( BitmapFormat == 3 ) { 1631: ubyte BitmapColorTableSize ; 1632: ubyte ZlibBitmapData [ SWFTagEnd - FTell ( ) ] ; 1633: } 1634: else if ( BitmapFormat == 4 || BitmapFormat == 5 ) { 1635: ubyte ZlibBitmapData [ SWFTagEnd - FTell ( ) ] ; 1636: } 1637: break ; 1638: 1639: 1640: 1641: 1642: 1643: case 46 : 1644: ushort CharacterId ; 1645: RECT StartBounds ; 1646: RECT EndBounds ; 1647: uint Offset ; 1648: MORPHFILLSTYLEARRAY MorphFillStyles ; 1649: MORPHLINESTYLES MorphLineStyles ; 1650: SHAPE StartEdges ; 1651: SHAPE EndEdges ; 1652: break ; 1653: case 46 : 1654: ushort CharacterId ; 1655: RECT StartBounds ; 1656: RECT EndBounds ; 1657: RECT StartEdgeBounds ; 1658: RECT EndEdgeBounds ; 1659: ubyte Reserved : 6 ; 1660: ubyte UsesNonScalingStrokes : 1 ; 1661: ubyte UsesScalingStrokes : 1 ; 1662: uint Offset ; 1663: MORPHFILLSTYLEARRAY MorphFillStyles ; 1664: MORPHLINESTYLES MorphLineStyles ; 1665: SHAPE StartEdges ; 1666: SHAPE EndEdges ; 1667: break ; 1668: 1669: 1670: 1671: 1672: 1673: case 10 : 1674: ushort FontID ; 1675: ubyte Data [ SWFTagEnd - FTell ( ) ] ; 1676: break ; 1677: case 13 : 1678: ushort FontID ; 1679: ubyte FontNameLen ; 1680: BitfieldDisablePadding ( ) ; 1681: ubyte FontName [ FontNameLen ] ; 1682: BitfieldEnablePadding ( ) ; 1683: ubyte FontFlagsReserved : 2 ; 1684: ubyte FontFlagsSmallText : 1 ; 1685: ubyte FontFlagsShiftJIS : 1 ; 1686: ubyte FontFlagsANSI : 1 ; 1687: ubyte FontFlagsBold : 1 ; 1688: ubyte FontFlagsWideCodes : 1 ; 1689: ubyte CodeTable [ SWFTagEnd - FTell ( ) ] ; 1690: break ; 1691: case 62 : 1692: ushort FontID ; 1693: ubyte FontNameLen ; 1694: BitfieldDisablePadding ( ) ; 1695: ubyte FontName [ FontNameLen ] ; 1696: BitfieldEnablePadding ( ) ; 1697: ubyte FontFlagsReserved : 2 ; 1698: ubyte FontFlagsSmallText : 1 ; 1699: ubyte FontFlagsShiftJIS : 1 ; 1700: ubyte FontFlagsANSI : 1 ; 1701: ubyte FontFlagsBold : 1 ; 1702: ubyte FontFlagsWideCodes : 1 ; 1703: LANGCODE LanguageCode ; 1704: ubyte CodeTable [ SWFTagEnd - FTell ( ) ] ; 1705: break ; 1706: case 48 : 1707: case 75 : 1708: ushort FontID ; 1709: ubyte FontFlagsHasLayout : 1 ; 1710: ubyte FontFlagsShiftJIS : 1 ; 1711: ubyte FontFlagsSmallText : 1 ; 1712: ubyte FontFlagsANSI : 1 ; 1713: ubyte FontFlagsWideOffsets : 1 ; 1714: ubyte FontFlagsWideCodes : 1 ; 1715: ubyte FontFlagsItalic : 1 ; 1716: ubyte FontFlagsBold : 1 ; 1717: LANGCODE LanguageCode ; 1718: ubyte FontNameLen ; 1719: ubyte FontName [ FontNameLen ] ; 1720: ushort NumGlyphs ; 1721: if ( FontFlagsWideOffsets ) { 1722: if ( NumGlyphs ) { 1723: uint OffsetTable [ NumGlyphs ] ; 1724: } 1725: uint CodeTableOffset ; 1726: } 1727: else { 1728: if ( NumGlyphs ) { 1729: ushort OffsetTable [ NumGlyphs ] ; 1730: } 1731: ushort CodeTableOffset ; 1732: } 1733: for ( i = 0 ; i < NumGlyphs ; i ++ ) { 1734: SHAPE GlyphShapeTable ; 1735: } 1736: if ( FontFlagsWideCodes ) { 1737: if ( NumGlyphs ) { 1738: ushort CodeTable [ NumGlyphs ] ; 1739: } 1740: } 1741: else { 1742: if ( NumGlyphs ) { 1743: ubyte CodeTable [ NumGlyphs ] ; 1744: } 1745: } 1746: if ( FontFlagsHasLayout ) { 1747: short FontAscent ; 1748: short FontDescent ; 1749: short FontLeading ; 1750: short FontAdvanceTable [ NumGlyphs ] ; 1751: for ( i = 0 ; i < NumGlyphs ; i ++ ) { 1752: RECT FontBoundsTable ; 1753: } 1754: ushort KerningCount ; 1755: for ( i = 0 ; i < KerningCount ; i ++ ) { 1756: KERNINGRECORD FontKerningTable ; 1757: } 1758: } 1759: break ; 1760: case 73 : 1761: ushort FontID ; 1762: ubyte CSMTableHint : 2 ; 1763: ubyte Reserved : 6 ; 1764: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 1765: ubyte ZoneTable [ SWFTagEnd - FTell ( ) ] ; 1766: } 1767: break ; 1768: case 88 : 1769: ushort FontID ; 1770: string FontName ; 1771: string FontCopyright ; 1772: break ; 1773: case 11 : 1774: case 33 : 1775: ushort CharacterID ; 1776: RECT TextBounds ; 1777: MATRIX TextMatrix ; 1778: ubyte GlyphBits ; 1779: ubyte AdvanceBits ; 1780: ubyte TextRecords [ SWFTagEnd - FTell ( ) ] ; 1781: break ; 1782: case 37 : 1783: ushort CharacterID ; 1784: RECT Bounds ; 1785: ubyte HasText : 1 ; 1786: ubyte WordWrap : 1 ; 1787: ubyte Multiline : 1 ; 1788: ubyte Password : 1 ; 1789: ubyte ReadOnly : 1 ; 1790: ubyte HasTextColor : 1 ; 1791: ubyte HasMaxLength : 1 ; 1792: ubyte HasFont : 1 ; 1793: ubyte HasFontClass : 1 ; 1794: ubyte AutoSize : 1 ; 1795: ubyte HasLayout : 1 ; 1796: ubyte NoSelect : 1 ; 1797: ubyte Border : 1 ; 1798: ubyte WasStatic : 1 ; 1799: ubyte HTML : 1 ; 1800: ubyte UseOutlines : 1 ; 1801: if ( HasFont ) { 1802: ushort FontID ; 1803: } 1804: if ( HasFontClass ) { 1805: string FontClass ; 1806: } 1807: if ( HasFont ) { 1808: ushort FontHeight ; 1809: } 1810: if ( HasTextColor ) { 1811: RGBA TextColor ; 1812: } 1813: if ( HasMaxLength ) { 1814: ushort MaxLength ; 1815: } 1816: if ( HasLayout ) { 1817: ubyte Align ; 1818: ushort LeftMargin ; 1819: ushort RightMargin ; 1820: ushort Indent ; 1821: ushort Leading ; 1822: } 1823: string VariableName ; 1824: if ( HasText ) { 1825: string InitialText ; 1826: } 1827: break ; 1828: case 74 : 1829: ushort TextID ; 1830: ubyte UseFlashType : 2 ; 1831: ubyte GridFit : 3 ; 1832: ubyte Reserved : 3 ; 1833: float Thickness ; 1834: float Sharpness ; 1835: ubyte Reserved2 ; 1836: break ; 1837: 1838: 1839: 1840: 1841: 1842: case 14 : 1843: ushort SoundId ; 1844: ubyte SoundFormat : 4 ; 1845: ubyte SoundRate : 2 ; 1846: ubyte SoundSize : 1 ; 1847: ubyte SoundType : 1 ; 1848: uint SoundSampleCount ; 1849: ubyte SoundData [ SWFTagEnd - FTell ( ) ] ; 1850: break ; 1851: case 15 : 1852: ushort SoundId ; 1853: SOUNDINFO SoundInfo ; 1854: break ; 1855: case 89 : 1856: string SoundClassName ; 1857: SOUNDINFO SoundInfo ; 1858: break ; 1859: case 18 : 1860: ubyte Reserved : 4 ; 1861: ubyte PlaybackSoundRate : 2 ; 1862: ubyte PlaybackSoundSize : 1 ; 1863: ubyte PlaybackSoundType : 1 ; 1864: ubyte StreamSoundCompression : 4 ; 1865: ubyte StreamSoundRate : 2 ; 1866: ubyte StreamSoundSize : 1 ; 1867: ubyte StreamSoundType : 1 ; 1868: ushort StreamSoundSampleCount ; 1869: if ( StreamSoundCompression == 2 ) { 1870: short LatencySeek ; 1871: } 1872: break ; 1873: case 45 : 1874: ubyte Reserved : 4 ; 1875: ubyte PlaybackSoundRate : 2 ; 1876: ubyte PlaybackSoundSize : 1 ; 1877: ubyte PlaybackSoundType : 1 ; 1878: ubyte StreamSoundCompression : 4 ; 1879: ubyte StreamSoundRate : 2 ; 1880: ubyte StreamSoundSize : 1 ; 1881: ubyte StreamSoundType : 1 ; 1882: ushort StreamSoundSampleCount ; 1883: if ( StreamSoundCompression == 2 ) { 1884: short LatencySeek ; 1885: } 1886: break ; 1887: case 19 : 1888: ubyte StreamSoundData [ SWFTagEnd - FTell ( ) ] ; 1889: break ; 1890: 1891: 1892: 1893: 1894: 1895: case 7 : 1896: ushort ButtonId ; 1897: do { 1898: BUTTONRECORD Character ; 1899: } while ( Character . ButtonReserved 1900: || Character . ButtonHasBlendMode 1901: || Character . ButtonHasFilterList 1902: || Character . ButtonStateHitTest 1903: || Character . ButtonStateDown 1904: || Character . ButtonStateOver 1905: || Character . ButtonStateUp ) ; 1906: do { 1907: ACTIONRECORD Action ; 1908: } while ( Action . ActionCode != 0x0 ) ; 1909: break ; 1910: case 34 : 1911: ushort ButtonId ; 1912: ubyte ReservedFlags : 7 ; 1913: ubyte TrackAsMenu : 1 ; 1914: local quad off_end = FTell ( ) ; 1915: ushort ActionOffset ; 1916: ubyte TODO [ SWFTagEnd - FTell ( ) ] ; 1917: break ; 1918: while ( FTell ( ) < ( off_end + ActionOffset ) ) { 1919: BUTTONRECORD Character ; 1920: } 1921: do { 1922: BUTTONCONDACTION Action ; 1923: } while ( ( SWFTagEnd - FTell ( ) ) > 1 ) ; 1924: break ; 1925: case 23 : 1926: ushort ButtonId ; 1927: CXFORM ButtonColorTransform ; 1928: break ; 1929: case 17 : 1930: ushort ButtonId ; 1931: ushort ButtonSoundChar0 ; 1932: if ( ButtonSoundChar0 ) { 1933: SOUNDINFO ButtonSoundInfo0 ; 1934: } 1935: ushort ButtonSoundChar1 ; 1936: if ( ButtonSoundChar1 ) { 1937: SOUNDINFO ButtonSoundInfo1 ; 1938: } 1939: ushort ButtonSoundChar2 ; 1940: if ( ButtonSoundChar2 ) { 1941: SOUNDINFO ButtonSoundInfo2 ; 1942: } 1943: ushort ButtonSoundChar3 ; 1944: if ( ButtonSoundChar3 ) { 1945: SOUNDINFO ButtonSoundInfo3 ; 1946: } 1947: break ; 1948: 1949: 1950: 1951: 1952: 1953: case 39 : 1954: ushort SpriteID ; 1955: ushort FrameCount ; 1956: ubyte Data [ SWFTagEnd - FTell ( ) ] ; 1957: break ; 1958: 1959: 1960: 1961: 1962: 1963: case 60 : 1964: ushort CharacterID ; 1965: ushort NumFrames ; 1966: ushort Width ; 1967: ushort Height ; 1968: ubyte VideoFlagsReserved : 4 ; 1969: ubyte VideoFlagsDeblocking : 3 ; 1970: ubyte VideoFlagsSmoothing : 1 ; 1971: ubyte CodecID ; 1972: break ; 1973: case 61 : 1974: ushort StreamID ; 1975: ushort FrameNum ; 1976: ubyte VideoData [ SWFTagEnd - FTell ( ) ] ; 1977: break ; 1978: 1979: 1980: 1981: 1982: 1983: case 87 : 1984: ushort Tag ; 1985: uint Reserved ; 1986: ubyte Data [ SWFTagEnd - FTell ( ) ] ; 1987: break ; 1988: 1989: 1990: 1991: 1992: 1993: case 41 : 1994: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 1995: ubyte Data [ SWFTagEnd - FTell ( ) ] ; 1996: } 1997: break ; 1998: case 63 : 1999: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 2000: ubyte Data [ SWFTagEnd - FTell ( ) ] ; 2001: } 2002: break ; 2003: case 253 : 2004: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 2005: ubyte Data [ SWFTagEnd - FTell ( ) ] ; 2006: } 2007: break ; 2008: default : 2009: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 2010: ubyte Data [ SWFTagEnd - FTell ( ) ] ; 2011: } 2012: break ; 2013: } 2014: 2015: if ( ( SWFTagEnd - FTell ( ) ) > 0 ) { 2016: ubyte Padding [ SWFTagEnd - FTell ( ) ] ; 2017: if ( Header . TagType != 83 ) { 2018: Printf ( "PADDING: Tag padded to 0x%LXh\n" , FTell ( ) ) ; 2019: } 2020: } 2021: else if ( ( SWFTagEnd - FTell ( ) ) < 0 ) { 2022: if ( Header . TagType != 48 ) { 2023: Printf ( "TAG OVERRUN: Expected next tag at 0x%LXh\n" , SWFTagEnd ) ; 2024: } 2025: } 2026: 2027: } SWFTAG < read = GetTagType > ; 2028: 2029: string GetTagType ( SWFTAG & Tag ) 2030: { 2031: string result ; 2032: ubyte TagType = Tag . Header . TagType ; 2033: 2034: switch ( TagType ) { 2035: 2036: 2037: 2038: case 59 : return "DoInitAction" ; 2039: case 12 : return "DoAction" ; 2040: case 82 : return "DoABC" ; 2041: 2042: 2043: 2044: 2045: case 4 : return "PlaceObject" ; 2046: case 26 : return "PlaceObject2" ; 2047: case 70 : return "PlaceObject3" ; 2048: case 5 : return "RemoveObject" ; 2049: case 28 : return "RemoveObject2" ; 2050: case 1 : return "ShowFrame" ; 2051: 2052: 2053: 2054: 2055: case 9 : return "SetBackgroundColor" ; 2056: case 43 : return "FrameLabel" ; 2057: case 24 : return "Protect" ; 2058: case 0 : return "End" ; 2059: case 56 : return "ExportAssets" ; 2060: case 57 : return "ImportAssets" ; 2061: case 58 : return "EnableDebugger" ; 2062: case 64 : return "EnableDebugger2" ; 2063: case 65 : return "ScriptLimits" ; 2064: case 66 : return "SetTabIndex" ; 2065: case 69 : return "FileAttributes" ; 2066: case 71 : return "ImportAsset2" ; 2067: case 76 : return "SymbolClass" ; 2068: case 77 : return "Metadata" ; 2069: case 78 : return "DefineScalingGrid" ; 2070: case 86 : return "DefineSceneAndFrameLabelData" ; 2071: 2072: 2073: 2074: 2075: case 2 : return "DefineShape" ; 2076: case 22 : return "DefineShape2" ; 2077: case 32 : return "DefineShape3" ; 2078: case 83 : return "DefineShape4" ; 2079: 2080: 2081: 2082: 2083: case 6 : return "DefineBits" ; 2084: case 8 : return "JPEGTables" ; 2085: case 21 : return "DefineBitsJPEG2" ; 2086: case 35 : return "DefineBitsJPEG3" ; 2087: case 20 : return "DefineBitsLossless" ; 2088: case 36 : return "DefineBitsLossless2" ; 2089: 2090: 2091: 2092: 2093: case 46 : return "DefineMorphShape" ; 2094: case 84 : return "DefineMorphShape2" ; 2095: 2096: 2097: 2098: 2099: case 10 : return "DefineFont" ; 2100: case 13 : return "DefineFontInfo" ; 2101: case 62 : return "DefineFontInfo2" ; 2102: case 48 : return "DefineFont2" ; 2103: case 75 : return "DefineFont3" ; 2104: case 73 : return "DefineFontAlignZones" ; 2105: case 88 : return "DefineFontName" ; 2106: case 11 : return "DefineText" ; 2107: case 33 : return "DefineText2" ; 2108: case 37 : return "DefineEditText" ; 2109: case 74 : return "CSMTextSettings" ; 2110: 2111: 2112: 2113: 2114: case 14 : return "DefineSound" ; 2115: case 15 : return "StartSound" ; 2116: case 89 : return "StartSound2" ; 2117: case 18 : return "SoundStreamHead" ; 2118: case 45 : return "SoundStreamHead2" ; 2119: case 19 : return "SoundStreamBlock" ; 2120: 2121: 2122: 2123: 2124: case 7 : return "DefineButton" ; 2125: case 34 : return "DefineButton2" ; 2126: case 23 : return "DefineButtonCxform" ; 2127: case 17 : return "DefineButtonSound" ; 2128: 2129: 2130: 2131: 2132: case 39 : return "DefineSprite" ; 2133: 2134: 2135: 2136: 2137: case 60 : return "DefineVideoSteam" ; 2138: case 61 : return "VideoFrame" ; 2139: 2140: 2141: 2142: 2143: case 87 : return "DefineBinaryData" ; 2144: 2145: 2146: 2147: 2148: case 41 : return "Serial Number" ; 2149: case 63 : return "MX4" ; 2150: case 253 : return "Amayeta Encrypt" ; 2151: 2152: default : return "\0" ; 2153: } 2154: return "\0" ; 2155: } 2156: 2157: 2158: 2159: 2160: 2161: 2162: 2163: 2164: 2165: 2166: BitfieldLeftToRight ( ) ; 2167: 2168: typedef struct { 2169: SetBackColor ( cLtGray ) ; 2170: uchar Signature [ 3 ] ; 2171: uchar Version ; 2172: 2173: if ( Signature [ 0 ] == 'F' && Signature [ 1 ] == 'W' && Signature [ 2 ] == 'S' ) 2174: { 2175: uint FileLength ; 2176: RECT Rect ; 2177: BigEndian ( ) ; 2178: ushort FrameRate ; 2179: LittleEndian ( ) ; 2180: ushort FrameCount ; 2181: } 2182: else if ( Signature [ 0 ] == 'C' && Signature [ 1 ] == 'W' && Signature [ 2 ] == 'S' ) 2183: { 2184: Printf ( "This is a SWF compressed file\n" ) ; 2185: isCompressed = 1 ; 2186: uint UncompressedSize ; 2187: byte ZlibData [ FileSize ( ) - FTell ( ) ] ; 2188: } 2189: } SWFHEADER ; 2190: 2191: typedef struct { 2192: SWFHEADER Header ; 2193: if ( 0 == isCompressed ) 2194: { 2195: do { 2196: SWFTAG Tag ; 2197: } while ( ! FEof ( ) ) ; 2198: } 2199: } SWF ; 2200: 2201: 2202: 2203: 2204: 2205: SWF File ; 2206: tok_eof