コード例 #1
0
ファイル: swf.cpp プロジェクト: phylake/libswf
void swf::SWF::continueWith(buf_type *& buf) {
    _buffer = &buf;
    //(*_buffer) += 4;//want to do this but outBuf is cropped at the moment
    header.continueWith(buf);

    RecordHeader * rh;

    std::vector<AbstractTag *> vt;
    AbstractTag * t;
    
    /*
     * Tag value from reverse index
     */
    short tv;
    
    do {
        rh = new RecordHeader();
        rh->fromSWF(buf);

        tv = rh->type();
        switch (tv) {
            case 0:
                printf("%2i End\n", tv);
                buf += rh->length();
                break;
            case 1:
                //printf("%2i ShowFrame\n", tv);
                //buf += rh->length();

                t = new ShowFrame;
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 2:
                printf("%2i DefineShape\n", tv);
                buf += rh->length();
                break;
            case 4:
                printf("%2i PlaceObject\n", tv);
                buf += rh->length();
                break;
            case 5:
                printf("%2i RemoveObject\n", tv);
                buf += rh->length();
                break;
            case 6:
                printf("%2i DefineBits\n", tv);
                buf += rh->length();
                break;
            case 7:
                printf("%2i DefineButton\n", tv);
                buf += rh->length();
                break;
            case 8:
                printf("%2i JPEGTables\n", tv);
                buf += rh->length();
                break;
            case 9:
                //printf("%2i SetBackgroundColor\n", tv);
                //buf += rh->length();

                t = new SetBackgroundColor;
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 10:
                printf("%i DefineFont\n", tv);
                buf += rh->length();
                break;
            case 11:
                printf("%i DefineText\n", tv);
                buf += rh->length();
                break;
            case 12:
                printf("%i DoAction\n", tv);
                buf += rh->length();
                break;
            case 13:
                printf("%i DefineFontInfo\n", tv);
                buf += rh->length();
                break;
            case 14:
                printf("%i DefineSound\n", tv);
                buf += rh->length();
                break;
            case 15:
                printf("%i StartSound\n", tv);
                buf += rh->length();
                break;
            case 17:
                printf("%i DefineButtonSound\n", tv);
                buf += rh->length();
                break;
            case 18:
                printf("%i SoundbufHead\n", tv);
                buf += rh->length();
                break;
            case 19:
                printf("%i SoundbufBlock\n", tv);
                buf += rh->length();
                break;
            case 20:
                printf("%i DefineBitsLossless\n", tv);
                buf += rh->length();
                break;
            case 21:
                printf("%i DefineBitsJPEG2\n", tv);
                buf += rh->length();
                break;
            case 22:
                printf("%i DefineShape2\n", tv);
                buf += rh->length();
                break;
            case 23:
                printf("%i DefineButtonCxform\n", tv);
                buf += rh->length();
                break;
            case 24:
                printf("%i Protect\n", tv);
                buf += rh->length();
                break;
            case 26:
                //printf("%i PlaceObject2\n", tv);
                //buf += rh->length();

                t = new PlaceObject2(*header.versionPtr());
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 28:
                printf("%i RemoveObject2\n", tv);
                buf += rh->length();
                break;
            case 32:
                printf("%i DefineShape3\n", tv);
                buf += rh->length();
                break;
            case 33:
                printf("%i DefineText2\n", tv);
                buf += rh->length();
                break;
            case 34:
                printf("%i DefineButton2\n", tv);
                buf += rh->length();
                break;
            case 35:
                printf("%i DefineBitsJPEG3\n", tv);
                buf += rh->length();
                break;
            case 36:
                printf("%i DefineBitsLossless2\n", tv);
                buf += rh->length();
                break;
            case 37:
                printf("%i DefineEditText\n", tv);
                buf += rh->length();
                break;
            case 39:
                printf("%i DefineSprite\n", tv);
                buf += rh->length();
                break;
            case 43:
                printf("%i FrameLabel\n", tv);
                buf += rh->length();
                break;
            case 45:
                printf("%i SoundbufHead2\n", tv);
                buf += rh->length();
                break;
            case 46:
                printf("%i DefineMorphShape\n", tv);
                buf += rh->length();
                break;
            case 48:
                printf("%i DefineFont2\n", tv);
                buf += rh->length();
                break;
            case 56:
                //printf("%i ExportAssets\n", tv);
                //buf += rh->length();
                
                t = new ExportAssets;
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 57:
                //printf("%i ImportAssets\n", tv);
                //buf += rh->length();
                
                t = new ImportAssets;
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 58:
                printf("%i EnableDebugger\n", tv);
                buf += rh->length();
                break;
            case 59:
                printf("%i DoInitAction\n", tv);
                buf += rh->length();
                break;
            case 60:
                printf("%i DefineVideobuf\n", tv);
                buf += rh->length();
                break;
            case 61:
                printf("%i VideoFrame\n", tv);
                buf += rh->length();
                break;
            case 62:
                printf("%i DefineFontInfo2\n", tv);
                buf += rh->length();
                break;
            case 64:
                printf("%i EnableDebugger2\n", tv);
                buf += rh->length();
                break;
            case 65:
                printf("%i ScriptLimits\n", tv);
                buf += rh->length();
                break;
            case 66:
                printf("%i SetTabIndex\n", tv);
                buf += rh->length();
                break;
            case 69:
                //printf("%i FileAttributes\n", tv);
                //buf += rh->length();

                t = new FileAttributes;
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 70:
                //printf("%i PlaceObject3\n", tv);
                //buf += rh->length();

                t = new PlaceObject3(*header.versionPtr());
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 71:
                //printf("%i ImportAssets2\n", tv);
                //buf += rh->length();
                
                t = new ImportAssets2;
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 73:
                printf("%i DefineFontAlignZones\n", tv);
                buf += rh->length();
                break;
            case 74:
                printf("%i CSMTextSettings\n", tv);
                buf += rh->length();
                break;
            case 75:
                printf("%i DefineFont3\n", tv);
                buf += rh->length();
                break;
            case 76:
                //printf("%i SymbolClass\n", tv);
                //buf += rh->length();
                
                t = new SymbolClass;
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 77:
                printf("%i Metadata\n", tv);
                buf += rh->length();
                break;
            case 78:
                //printf("%i DefineScalingGrid\n", tv);
                //buf += rh->length();
                
                t = new DefineScalingGrid;
                t -> recordHeader = rh;
                t -> fromSWF(buf);
                break;
            case 82:
                printf("%i DoABC\n", tv);
                buf += rh->length();
                break;
            case 83:
                printf("%i DefineShape4\n", tv);
                buf += rh->length();
                break;
            case 84:
                printf("%i DefineMorphShape2\n", tv);
                buf += rh->length();
                break;
            case 86:
                printf("%i DefineSceneAndFrameLabelData\n", tv);
                buf += rh->length();
                break;
            case 87:
                printf("%i DefineBinaryData\n", tv);
                buf += rh->length();
                break;
            case 88:
                printf("%i DefineFontName\n", tv);
                buf += rh->length();
                break;
            case 89:
                printf("%i StartSound2\n", tv);
                buf += rh->length();
                break;
            case 90:
                printf("%i DefineBitsJPEG4\n", tv);
                buf += rh->length();
                break;
            case 91:
                printf("%i DefineFont4\n", tv);
                buf += rh->length();
                break;

            default:
                printf("\nEncountered unknown tag\n");
                buf += rh->length();
                break;
        }

        //t -> recordHeader = rh;
        //t -> fromSWF(buf);
        //t -> set_version(<#unsigned char *version#>)

        //vrh.push_back( *rh );
        vt.push_back( t );
    } while ( rh->type() != 0 );
}