listswf.c
来自「flash swf file player」· C语言 代码 · 共 1,999 行 · 第 1/3 页
C
1,999 行
break; case SWFACTION_SETVARIABLE: println("Set Variable"); break; case SWFACTION_SETTARGETEXPRESSION: println("Set Target Expression"); break; case SWFACTION_STRINGCONCAT: println("String Concat"); break; case SWFACTION_GETPROPERTY: println("Get Property"); break; case SWFACTION_SETPROPERTY: println("Set Property"); break; case SWFACTION_DUPLICATECLIP: println("Duplicate Clip"); break; case SWFACTION_REMOVECLIP: println("Remove Clip"); break; case SWFACTION_TRACE: println("Trace"); break; case SWFACTION_STARTDRAGMOVIE: println("Start Drag Movie"); break; case SWFACTION_STOPDRAGMOVIE: println("Stop Drag Movie"); break; case SWFACTION_STRINGCOMPARE: println("String Compare"); break; case SWFACTION_RANDOM: println("Random"); break; case SWFACTION_MBLENGTH: println("String MB Length"); break; case SWFACTION_ORD: println("Ord"); break; case SWFACTION_CHR: println("Chr"); break; case SWFACTION_GETTIMER: println("Get Timer"); break; case SWFACTION_MBSUBSTRING: println("MB Substring"); break; case SWFACTION_MBORD: println("MB Ord"); break; case SWFACTION_MBCHR: println("MB Chr"); break; case SWFACTION_NEXTFRAME: println("Next Frame"); break; case SWFACTION_PREVFRAME: println("Previous Frame"); break; case SWFACTION_PLAY: println("Play"); break; case SWFACTION_STOP: println("Stop"); break; case SWFACTION_TOGGLEQUALITY: println("Toggle Quality"); break; case SWFACTION_STOPSOUNDS: println("Stop Sounds"); break; /* ops with args */ case SWFACTION_PUSHDATA: { int type; int start = fileOffset; while(fileOffset < start+length) { switch(type = readUInt8(f)) { case 0: /* string */ println("Push String: %s", readString(f)); break; case 1: /* property */ readUInt16(f); /* always 0? */ println("Push Property: %04x", readUInt16(f)); break; case 2: /* null */ println("Push NULL"); break; case 3: /* ??? */ println("Push type 3- ??"); break; case 4: println("Push Register %i", readUInt8(f)); break; case 5: if(readUInt8(f)) println("Push true"); else println("Push false"); break; case 6: /* double */ println("Push %f", readDouble(f)); break; case 7: /* int */ println("Push %i", readSInt32(f)); break; case 8: /* dictionary */ println("Push \"%s\"", dictionary[readUInt8(f)]); break; default: println("unknown push type: %i", type); } } break; } case SWFACTION_GOTOFRAME: println("Goto Frame %i", readUInt16(f)); break; case SWFACTION_GETURL: { char *url = readString(f); println("Get URL \"%s\" target \"%s\"", url, readString(f)); break; } case SWFACTION_WAITFORFRAMEEXPRESSION: println("Wait For Frame Expression, skip %i\n", readUInt8(f)); break; case SWFACTION_BRANCHALWAYS: println("Branch Always %i", readSInt16(f)); break; case SWFACTION_GETURL2: { int flags = readUInt8(f); switch(flags) { case 0: println("Get URL2 (Don't send)"); break; case 1: println("Get URL2 (GET)"); break; case 2: println("Get URL2 (POST)"); break; default: println("GET URL2 (0x%x)", flags); } break; } case SWFACTION_BRANCHIFTRUE: println("Branch If True %i", readSInt16(f)); break; case SWFACTION_CALLFRAME: println("Call Frame"); dumpBytes(f, length); break; case SWFACTION_GOTOEXPRESSION: print("Goto Expression"); if(readUInt8(f) == 1) printf(" and Play\n"); else printf(" and Stop\n"); break; case SWFACTION_WAITFORFRAME: { int frame = readUInt16(f); println("Wait for frame %i else skip %i", frame, readUInt8(f)); break; } case SWFACTION_SETTARGET: println("Set Target %s", readString(f)); break; case SWFACTION_GOTOLABEL: println("Goto Label %s", readString(f)); break; case SWFACTION_END: return 0; break; /* f5 ops */ case SWFACTION_DELETE: println("Delete"); break; case SWFACTION_VAR: println("Var"); break; case SWFACTION_VAREQUALS: println("Var Assign"); break; case SWFACTION_CALLFUNCTION: println("Call Function"); break; case SWFACTION_RETURN: println("Return"); break; case SWFACTION_MODULO: println("Modulo"); break; case SWFACTION_NEW: println("New"); break; case SWFACTION_TYPEOF: println("Typeof"); break; case SWFACTION_NEWADD: println("New Add"); break; case SWFACTION_NEWLESSTHAN: println("New Less Than"); break; case SWFACTION_NEWEQUAL: println("New Equals"); break; case SWFACTION_DUP: println("Dup"); break; case SWFACTION_GETMEMBER: println("Get Member"); break; case SWFACTION_SETMEMBER: println("Set Member"); break; case SWFACTION_INCREMENT: println("Increment"); break; case SWFACTION_DECREMENT: println("Decrement"); break; case SWFACTION_CALLMETHOD: println("Call Method"); break; case SWFACTION_BITWISEAND: println("Bitwise And"); break; case SWFACTION_BITWISEOR: println("Bitwise Or"); break; case SWFACTION_BITWISEXOR: println("Bitwise Xor"); break; case SWFACTION_SHIFTLEFT: println("Shift Left"); break; case SWFACTION_SHIFTRIGHT: println("Shift Right"); break; case SWFACTION_SHIFTRIGHT2: println("Shift Right 2"); break; case SWFACTION_DECLARENAMES: { int i, n = readUInt16(f); print("Declare Dictionary:"); for(i=0; i<n; ++i) printf(" %s%c", dictionary[i]=readString(f), (i<n-1)?',':'\n'); break; } case SWFACTION_WITH: { println("With"); ++gIndent; printDoAction(f, readUInt16(f)); --gIndent; break; } case SWFACTION_DEFINEFUNCTION: { char *name = readString(f); int n = readUInt16(f); print("function %s(", name); if(n>0) { printf("%s", readString(f)); --n; } for(; n>0; --n) printf(", %s", readString(f)); putchar(')'); putchar('\n'); ++gIndent; printDoAction(f, readUInt16(f)); --gIndent; break; } case SWFACTION_ENUMERATE: println("Enumerate"); break; case SWFACTION_SETREGISTER: println("Set Register %i", readUInt8(f)); break; default: println("Unknown Action: %02X", type); dumpBytes(f, length); } return 1;}void printDoAction(FILE *f, int length){ int start = fileOffset, end = fileOffset+length; while(fileOffset<end) { printf("%i\t", fileOffset-start); if(!printActionRecord(f)) break; }}int printButtonRecord(FILE *f, int recordType){ int character, layer; int flags = readUInt8(f); if(flags == 0) return 0; if(flags & 0x08) println("Hit flag: "); if(flags & 0x04) println("Down flag: "); if(flags & 0x02) println("Over flag: "); if(flags & 0x01) println("Up flag: "); character = readUInt16(f); layer = readUInt16(f); println("character: %i, layer %i", character, layer); printMatrix(f); if(recordType == 2) printCXForm(f, true); /* XXX - should be true? */ return 1;}void printDefineButton(FILE *f, int length){ int offset = fileOffset; println("Button id: %i", readUInt16(f)); ++gIndent; while(printButtonRecord(f, 1)) ; decompileAction(f, length-(fileOffset-offset), 0); --gIndent;}int printButton2ActionCondition(FILE *f, int end){ int offset = readUInt16(f); int condition = readUInt16(f); println("offset = %i", offset); if(condition & 0xfe00) println("condition: keyPress(%c)", (condition&0xfe00)>>9); if(condition & 0x100) println("condition: overDownToIdle"); if(condition & 0x80) println("condition: idleToOverDown"); if(condition & 0x40) println("condition: outDownToIdle"); if(condition & 0x20) println("condition: outDownToOverDown"); if(condition & 0x10) println("condition: overDownToOutDown"); if(condition & 0x08) println("condition: overDownToOverUp"); if(condition & 0x04) println("condition: overUpToOverDown"); if(condition & 0x02) println("condition: overUpToIdle"); if(condition & 0x01) println("condition: idleToOverUp"); if(offset == 0) decompileAction(f, end-fileOffset, 0); else decompileAction(f, offset-4, 0); return offset;}void printDefineButton2(FILE *f, int length){ int flags, offset, end = fileOffset+length; println("Button id: %i", readUInt16(f)); flags = readUInt8(f); /* flags */ if(flags) println("tracked as menu item (whatever that means..)"); offset = readUInt16(f); /* offset */ println("offset = %i", offset); while(printButtonRecord(f, 2)) ; if(offset>0) while(printButton2ActionCondition(f, end)) ;}void printPlaceObject(FILE *f, int length){ int start = fileOffset; println("Character ID: %i", readUInt16(f)); println("Depth: %i", readUInt16(f)); println("Matrix:"); printMatrix(f); if(fileOffset < start+length) { print("CXform: "); printCXForm(f, false); putchar('\n'); }}#define PLACE_RESERVED (1<<7)#define PLACE_HASCLIP (1<<6)#define PLACE_HASNAME (1<<5)#define PLACE_HASRATIO (1<<4)#define PLACE_HASCXFORM (1<<3)#define PLACE_HASMATRIX (1<<2)#define PLACE_HASCHARACTER (1<<1)#define PLACE_HASMOVE (1<<0)void printPlaceObject2(FILE *f, int length){ int start = fileOffset; int flags = readUInt8(f); int l; println("Depth: %i", readUInt16(f)); if(flags & PLACE_HASMOVE) println("Has move flag"); if(flags & PLACE_HASCHARACTER) println("Character ID: %i", readUInt16(f)); if(flags & PLACE_HASMATRIX) { println("Matrix:"); printMatrix(f); } if(flags & PLACE_HASCXFORM) { print("CXForm: "); printCXForm(f, true); putchar('\n'); } if(flags & PLACE_HASRATIO) println("Ratio: %i", readUInt16(f)); if(flags & PLACE_HASNAME) println("Name: %s", readString(f)); if(flags & PLACE_HASCLIP) println("ClipDepth: %i", readUInt16(f)); if(flags & PLACE_RESERVED) { println("Mystery number: %04x", readUInt16(f)); flags = readUInt16(f); println("Clip flags: %04x", flags); while((flags = readUInt16(f)) != 0) { println("Flags: %04x", flags); l = readUInt32(f); decompileAction(f, l, 0); } } dumpBytes(f, length-(fileOffset-start));}void printRemoveObject(FILE *f){ println("ID: %i", readUInt16(f)); println("Depth: %i", readUInt16(f));}void printRemoveObject2(FILE *f){ println("Depth: %i", readUInt16(f));}void printSetBackgroundColor(FILE *f){ print("Color: "); printRGB(f); putchar('\n');}void printFrameLabel(FILE *f){ println("Label: %s\n", readString(f));}void printDefineFont(FILE *f, int length){ int here, off0, off, i, nShapes, fillBits=1, lineBits=1; int *offset; println("FontID: %i", readUInt16(f)); off0 = readUInt16(f); nShapes = off0/2; println("Number of shapes: %i", nShapes); offset = (int *)malloc(nShapes*sizeof(int)); ++gIndent; println("Offset0: 0"); for(i=1; i<nShapes; ++i) { off = readUInt16(f); offset[i-1] = off-off0; println("Offset%i: %i", i, offset[i-1]); } offset[nShapes-1] = length-2-(nShapes*2); here = fileOffset; for(i=0; i<nShapes; ++i) { putchar('\n'); byteAlign(); println("Shape %i:", i); fillBits = readBits(f, 4); lineBits = readBits(f, 4); ++gIndent; while(fileOffset < here+offset[i]) printShapeRec(f, &fillBits, &lineBits, 2); --gIndent; } --gIndent;}#define FONTINFO2_HASLAYOUT (1<<7)#define FONTINFO2_SHIFTJIS (1<<6)#define FONTINFO2_UNICODE (1<<5)#define FONTINFO2_ANSI (1<<4)#define FONTINFO2_WIDEOFFSETS (1<<3)#define FONTINFO2_WIDECODES (1<<2)#define FONTINFO2_ITALIC (1<<1)#define FONTINFO2_BOLD (1<<0)void printDefineFont2(FILE *f, int length){ int flags, nGlyphs, namelen, off, i, fillBits, lineBits; int here = fileOffset; int *offset; println("fontID: %i", readUInt16(f)); flags = readUInt8(f); readUInt8(f); /* "reserved" */ namelen = readUInt8(f); print("Font Name: "); for(; namelen>0; --namelen) putchar((unsigned char)readUInt8(f)); putchar('\n'); nGlyphs = readUInt16(f); println("number of glyphs: %i\n", nGlyphs); offset = (unsigned int *)malloc(nGlyphs*sizeof(int)); /* offset table */ here = fileOffset; for(i=0; i<=nGlyphs; ++i) { if(flags & FONTINFO2_WIDEOFFSETS) offset[i] = readUInt32(f)-4*nGlyphs-2; else offset[i] = readUInt16(f)-2*nGlyphs-2; println("Offset%i: %i", i, offset[i]); } here = fileOffset; /* shape table */ for(i=0; i<nGlyphs; ++i) { byteAlign(); println("Glyph %i:", i); fillBits = readBits(f, 4); lineBits = readBits(f, 4); byteAlign(); while(printShapeRec(f, &fillBits, &lineBits, 2)) ; putchar('\n'); } /* code table */ for(i=0; i<nGlyphs; ++i) { if(flags & FONTINFO2_WIDECODES) println("glyph code %i: %i", i, readUInt16(f)); else println("glyph code %i: %i", i, readUInt8(f)); } if(flags & FONTINFO2_HASLAYOUT) { int kernCount, code1, code2; println("ascender height: %i", readSInt16(f)); println("descender height: %i", readSInt16(f)); println("leading height: %i", readSInt16(f)); for(i=0; i<nGlyphs; ++i) printf("\tadvance %i: %i\n", i, readSInt16(f)); for(i=0; i<nGlyphs; ++i) { print("bounds %i: ", i); printRect(f); putchar('\n'); } kernCount = readUInt16(f); for(i=0; i<kernCount; ++i) { code1 = (flags & FONTINFO2_WIDECODES) ? readUInt16(f) : readUInt8(f); code2 = (flags & FONTINFO2_WIDECODES) ? readUInt16(f) : readUInt8(f); println("(%i,%i): adjustment = %i", code1, code2, readSInt16(f)); } }}#define FONTINFO_RESERVED (1<<6 | 1<<7)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?