Flapp tag chunk

今日は、tag の chunk 分解まで。
ダウンロードしながらプレイするのを意識しながら。

        parse: function(ibit, dict, movieClip) {
            if (ibit.len() < 20) { // 20 is minumum size for swf header, maybe.
                return ;
            }
            if (this.header === null) {
                this.header = FlappSWFHeader.load(ibit);
                this.flapp.header = this.header;
                console.debug(this.header);
            }
            while (ibit.a(), ibit.hasNext(2)) {
                var headPos = ibit.getBytePos();
                var tag_and_length = ibit.ui16(); // tag and length
                var code = tag_and_length >>> 6;
                var length = tag_and_length & 0x3f;
                if (length === 0x3f) {
                    if (ibit.hasNext(4) === false) {
                        ibit.setPos(headPos);
                        break;
                    }
                    length = ibit.ui32();
                }
                if (ibit.hasNext(length) === false) {
                    ibit.setPos(headPos);
                    break;
                }
                var content = ibit.sub(length);
                console.log("swf tag code:"+code+" length:"+length);
            }
        }

結果

さて、tag をバラし始めよう。