📄 swftophp.c
字号:
printf("\t$s%i->setLine(0);\n", id); else { struct LineStyle *line = &(shape->lines.line[s->data.change.line-1]); printf("\t$s%i->setLine(%i, ", id, line->width); printRGBA(&(line->color)); printf(");\n"); } } break; case SHAPERECORD_LINE: printf("\t$s%i->drawLine(%i, %i);\n", id, s->data.line.x, s->data.line.y); break; case SHAPERECORD_CURVE: printf("\t$s%i->drawCurve(%i, %i, %i, %i);\n", id, s->data.curve.controlx, s->data.curve.controly, s->data.curve.anchorx, s->data.curve.anchory); break; default: error("Bad shape type: %i!\n", s->type); }}void printDefineShape(struct Shape *shape, int id, int isMorph){ int i; for(i=0; i<shape->fills.nFills; ++i) printFillStyle(&(shape->fills.fill[i]), id, i+1, isMorph); for(i=0; i<shape->shapes.nShapes; ++i) printShapeRec(shape, &(shape->shapes.shape[i]), id);}void printShape(FILE *f, int length, int shapeType){ struct Shape shape; int id, start = fileOffset; memset(&shape, 0, sizeof(struct Shape)); id = readUInt16(f); shape.shapeType = shapeType; readRect(f, &(shape.bounds)); /* bounds */ readFillStyleArray(f, &shape, 0); readLineStyleArray(f, &shape, 0); byteAlign(); shape.fillBits = readBits(f,4); shape.lineBits = readBits(f,4); while(fileOffset < length+start && readShapeRec(f, &shape)) ; /* go for end tag.. if(fileOffset == length+start && bufbits > 5) printShapeRec(f, &lineBits, &fillBits, 2); */ printf("\n\t/* -- Shape %i -- */\n", id); printf("\t$s%i = new SWFShape();\n", id); printDefineShape(&shape, id, 0);}void printMorphShape(FILE *f, int length){ int offset, start = fileOffset, here; struct Rect r; struct Shape shape1, shape2; int id = readUInt16(f); printf("\n\t/* -- Shape %i -- */\n", id); printf("\t$s%i = new SWFMorph();\n", id); readRect(f, &r); /* bounds 1 */ readRect(f, &r); /* bounds 2 */ offset = readUInt32(f); here = fileOffset+1; memset(&shape1, 0, sizeof(struct Shape)); memset(&shape2, 0, sizeof(struct Shape)); shape1.shapeType = shape2.shapeType = DEFINESHAPE3; readFillStyleArray(f, &shape1, 1); readLineStyleArray(f, &shape1, 1); byteAlign(); shape1.fillBits = shape2.fillBits = readBits(f,4); shape1.lineBits = shape2.lineBits = readBits(f,4); while(fileOffset < here+offset && readShapeRec(f, &shape1)) ; printf("\n\t$s0 = $s%i->getShape1();\n", id); printDefineShape(&shape1, 0, 0); byteAlign(); readUInt8(f); /* redundant fill/line bits */ while(fileOffset < start+length && readShapeRec(f, &shape2)) ; printf("\n\t$s0 = $s%i->getShape2();\n", id); printDefineShape(&shape1, 0, 1);}/* JPEG stream markers: */#define JPEG_MARKER 0xFF/* Start of Image, End of Image */#define JPEG_SOI 0xD8#define JPEG_EOI 0xD9#define JPEG_JFIF 0xE0/* encoding markers, quantization tables and Huffman tables */#define JPEG_QUANT 0xDB#define JPEG_HUFF 0xC4/* image markers, start of frame and start of scan */#define JPEG_SOF0 0xC0#define JPEG_SOF1 0xC1#define JPEG_SOF2 0xC2#define JPEG_SOS 0xDA/*void printJpegStream(FILE *f, int length){ int end = fileOffset+length; int c, l; while(fileOffset < end) { if(readUInt8(f) != JPEG_MARKER) { printf("%sJpeg marker not found!\n", indent()); break; } switch(c=readUInt8(f)) { case JPEG_SOI: printf("%sSOI\n", indent()); break; case JPEG_EOI: printf("%sEOI\n", indent()); break; case JPEG_JFIF: printf("%sJFIF\n", indent()); break; case JPEG_QUANT: printf("%sQuantization table\n", indent()); break; case JPEG_HUFF: printf("%sHuffman table\n", indent()); break; case JPEG_SOF0: printf("%sStart of frame 0\n", indent()); break; case JPEG_SOF1: printf("%sStart of frame 1\n", indent()); break; case JPEG_SOF2: printf("%sStart of frame 2\n", indent()); break; case JPEG_SOS: printf("%sStart of scan\n", indent()); break; default: printf("%sUnknown JPEG block: %02x\n", indent(), c); } if(c==JPEG_SOS) break; if(c != JPEG_SOI && c != JPEG_EOI) { l = (readUInt8(f)<<8) + readUInt8(f); skipBytes(f, l-2); } } skipBytes(f, end-fileOffset);}void printDefineBitsJpeg(FILE *f, int length){ printf("%sBitmap id: %i\n", indent(), readUInt16(f)); printJpegStream(f, length-2);}*/void printDefineBitsLossless(FILE *f){/* id = readUInt16(f); format = readUInt8(f); format = 3, 4, 5 -> 2^format bpp width = readUInt16(f); height = readUInt16(f); if(format == 3) colorTableSize = readUInt8(f)-1;*/}/*int printActionRecord(FILE *f){ int length = 0, type = readUInt8(f); if((type&0x80) == 0x80) length = readUInt16(f); switch(type) { case ACTION_ADD: printf("%sAdd\n", indent()); break; case ACTION_SUBTRACT: printf("%sSubtract\n", indent()); break; case ACTION_MULTIPLY: printf("%sMultiply\n", indent()); break; case ACTION_DIVIDE: printf("%sDivide\n", indent()); break; case ACTION_EQUAL: printf("%sEquals\n", indent()); break; case ACTION_LESSTHAN: printf("%sLess Than\n", indent()); break; case ACTION_LOGICALAND: printf("%sAnd\n", indent()); break; case ACTION_LOGICALOR: printf("%sOr\n", indent()); break; case ACTION_LOGICALNOT: printf("%sNot\n", indent()); break; case ACTION_STRINGEQ: printf("%sString eq\n", indent()); break; case ACTION_STRINGLENGTH: printf("%sString Length\n", indent()); break; case ACTION_SUBSTRING: printf("%sSubstring\n", indent()); break; case ACTION_INT: printf("%sInt\n", indent()); break; case ACTION_GETVARIABLE: printf("%sGet Variable\n", indent()); break; case ACTION_SETVARIABLE: printf("%sSet Variable\n", indent()); break; case ACTION_SETTARGETEXPRESSION: printf("%sSet Target Expression\n", indent()); break; case ACTION_STRINGCONCAT: printf("%sString Concat\n", indent()); break; case ACTION_GETPROPERTY: printf("%sGet Property\n", indent()); break; case ACTION_SETPROPERTY: printf("%sSet Property\n", indent()); break; case ACTION_DUPLICATECLIP: printf("%sDuplicate Clip\n", indent()); break; case ACTION_REMOVECLIP: printf("%sRemove Clip\n", indent()); break; case ACTION_TRACE: printf("%sTrace\n", indent()); break; case ACTION_STARTDRAGMOVIE: printf("%sStart Drag Movie\n", indent()); break; case ACTION_STOPDRAGMOVIE: printf("%sStop Drag Movie\n", indent()); break; case ACTION_STRINGCOMPARE: printf("%sString Compare\n", indent()); break; case ACTION_RANDOM: printf("%sRandom\n", indent()); break; case ACTION_MBLENGTH: printf("%sString MB Length\n", indent()); break; case ACTION_ORD: printf("%sOrd\n", indent()); break; case ACTION_CHR: printf("%sChr\n", indent()); break; case ACTION_GETTIMER: printf("%sGet Timer\n", indent()); break; case ACTION_MBSUBSTRING: printf("%sMB Substring\n", indent()); break; case ACTION_MBORD: printf("%sMB Ord\n", indent()); break; case ACTION_MBCHR: printf("%sMB Chr\n", indent()); break; case ACTION_NEXTFRAME: printf("%sNext Frame\n", indent()); break; case ACTION_PREVFRAME: printf("%sPrevious Frame\n", indent()); break; case ACTION_PLAY: printf("%sPlay\n", indent()); break; case ACTION_STOP: printf("%sStop\n", indent()); break; case ACTION_TOGGLEQUALITY: printf("%sToggle Quality\n", indent()); break; case ACTION_STOPSOUNDS: printf("%sStop Sounds\n", indent()); break;*/ /* ops with args */ /* case ACTION_PUSHDATA: { int type = readUInt8(f); if(type==0) printf("%sPush String: %s\n", indent(), readString(f)); else { readUInt16(f); printf("%sPush Property: %04x\n", indent(), readUInt16(f)); } break; } case ACTION_GOTOFRAME: printf("%sGoto Frame %i\n", indent(), readUInt16(f)); break; case ACTION_GETURL: { char *url = readString(f); printf("%sGet URL \"%s\" target \"%s\"\n", indent(), url, readString(f)); break; } case ACTION_WAITFORFRAMEEXPRESSION: printf("%sWait For Frame Expression, skip %i\n", indent(), readUInt8(f)); break; case ACTION_BRANCHALWAYS: printf("%sBranch Always %i\n", indent(), readSInt16(f)); break; case ACTION_GETURL2: switch(readUInt8(f)) { case 0: printf("%sGet URL2 (Don't send)\n", indent()); break; case 1: printf("%sGet URL2 (GET)\n", indent()); break; case 2: printf("%sGet URL2 (POST)\n", indent()); break; } break; case ACTION_BRANCHIFTRUE: printf("%sBranch If True %i\n", indent(), readSInt16(f)); break; case ACTION_CALLFRAME: printf("%sCall Frame\n", indent()); dumpBytes(f, length); break; case ACTION_GOTOEXPRESSION: printf("%sAdd\n", indent()); dumpBytes(f, length); break; case ACTION_WAITFORFRAME: { int frame = readUInt16(f); printf("%sWait for frame %i else skip %i\n", indent(), frame, readUInt8(f)); break; } case ACTION_SETTARGET: printf("%sSet Target %s\n", indent(), readString(f)); break; case ACTION_GOTOLABEL: printf("%sGoto Label %s\n", indent(), readString(f)); break; case ACTION_END: return 0; break; default: printf("%sUnknown Action: %02X\n", indent(), type); dumpBytes(f, length); } return 1;}*/int printButtonRecord(FILE *f, int recordType, int id){ int character, layer; int flags = readUInt8(f); struct Matrix m; int notFirst = 0; if(flags == 0) return 0; character = readUInt16(f); layer = readUInt16(f); printf("\t$s%i->addShape($s%i, ", id, character); readMatrix(f, &m); if(flags & 0x08) { printf("SWFBUTTON_HIT"); notFirst = 1; } if(flags & 0x04) { printf("%sSWFBUTTON_DOWN", (notFirst?" | ":"")); notFirst = 1; } if(flags & 0x02) { printf("%sSWFBUTTON_OVER", (notFirst?" | ":"")); notFirst = 1; } if(flags & 0x01) { printf("%sSWFBUTTON_UP", (notFirst?" | ":"")); notFirst = 1; } printf(");\n"); printf("\t/* button character transforms not implemented, sorry. */\n"); if(recordType == 2) { struct CXForm s; readCXForm(f, &s, true); printf("\t/* button cxforms not implemented, either.. */\n"); } return 1;}void printDefineButton(FILE *f, int length){ int offset = fileOffset; int id = readUInt16(f); printf("\n\t/* -- Shape %i -- */\n", id); printf("\t$s%i = new SWFButton();\n", id); while(printButtonRecord(f, 1, id)) ; printf("\t$a = new SWFAction(\"\n\n"); decompileAction(f, length-(fileOffset-offset), 0); printf("\t\");\n"); printf("\t$s%i->setAction($a);\n", id);}int printButton2ActionCondition(FILE *f, int end, int id){ int offset = readUInt16(f); int condition = readUInt16(f); int notFirst = 0; printf("\t$a = new SWFAction(\"\n\n"); if(offset == 0) decompileAction(f, end-fileOffset, 0); else decompileAction(f, offset-4, 0); printf("\t\");\n"); printf("\t$s%i->addAction($a, ", id); if(condition & 0xfe00) { printf("SWFBUTTON_KEYPRESS(%c)", (condition&0xfe00)>>9); notFirst = 1; } if(condition & 0x100 || condition & 0x10) { printf("%sSWFBUTTON_DRAGOUT", (notFirst?" | ":"")); notFirst = 1; } if(condition & 0x80 || condition & 0x20) { printf("%sSWFBUTTON_DRAGIN", (notFirst?" | ":"")); notFirst = 1; } if(condition & 0x40) { printf("%sSWFBUTTON_MOUSEUPOUTSIDE", (notFirst?" | ":"")); notFirst = 1; } if(condition & 0x08) { printf("%sSWFBUTTON_MOUSEUP", (notFirst?" | ":"")); notFirst = 1; } if(condition & 0x04) { printf("%sSWFBUTTON_MOUSEDOWN", (notFirst?" | ":"")); notFirst = 1; } if(condition & 0x02) { printf("%sSWFBUTTON_MOUSEOUT", (notFirst?" | ":"")); notFirst = 1; } if(condition & 0x01) { printf("%sSWFBUTTON_MOUSEOVER", (notFirst?" | ":"")); notFirst = 1; } printf(");\n"); return offset;}void printDefineButton2(FILE *f, int length){ int offset, end = fileOffset+length; int id = readUInt16(f); int flags = readUInt8(f); printf("\n\t/* -- Shape %i -- */\n", id); printf("\t$s%i = new SWFButton();\n", id);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -