📄 fromswf.c
字号:
if(verbose) printf("w %d => %d\n", w1, w2); } else { if(verbose) printf("w %d\n", w1); } getbits((BITS) tp, 2); join_style = getbits((BITS) tp, 2); has_fill = getbits((BITS) tp, 1); getbits((BITS) tp, 11); if (join_style == 2) { readint2((BITS) tp); } else { if (has_fill) { if (is_morph) morphfillstyle(tp); else fillstyle(tp, 4); } else { rgba((BITS) tp); if (is_morph) rgba((BITS) tp); } }}static void defineshape(TAG tp, int lev){ unsigned short id; id = change_id(tp); if(verbose) printf("shape %d\n", id); alignbits(tp); rect((BITS) tp); if(lev == 4) { alignbits(tp); rect((BITS) tp); alignbits(tp); tp->readc(tp); } fillandlinestyles(tp, lev); shape(tp, lev);}static void shape(TAG tp, int lev){ int nfillbits, nlinebits; alignbits(tp); nfillbits = getbits((BITS) tp, 4); nlinebits = getbits((BITS) tp, 4); shaperecord(tp, nfillbits, nlinebits,lev);}static void definemorphshape(TAG tp, int lev){ unsigned short id, fcnt, lcnt; unsigned long loff; unsigned char *endp; int n; id = change_id(tp); if(verbose) printf("morph %d\n", id); rect((BITS) tp); alignbits(tp); rect((BITS) tp); if (lev == 2) { rect((BITS) tp); rect((BITS) tp); tp->readc(tp); } loff = readint4((BITS) tp); endp = tp->datptr + loff; fcnt = tp->readc(tp); if(fcnt == 0xff) fcnt = readint2((BITS) tp); if(verbose) printf ("%d fill styles\n", fcnt); for(n = 0 ; n < fcnt ; n++) { alignbits(tp); morphfillstyle(tp); } lcnt = tp->readc(tp); if(lcnt == 0xff) lcnt = readint2((BITS) tp); if(verbose) printf ("%d line styles\n", lcnt); for(n = 0 ; n < lcnt ; n++) { alignbits(tp); if (lev == 2) morphlinestyle2(tp); else morphlinestyle(tp); }/* for(n = 0 ; tp->datptr < endp ; n++) { alignbits(tp); shaperecord(tp, bits_req(fcnt), bits_req(lcnt), 3); } for( ; n > 0 ; --n) { alignbits(tp); shaperecord(tp, bits_req(fcnt), bits_req(lcnt), 3); }*/ shape(tp, 3);}static void definetext(TAG tp, int lev){ unsigned short textid; int nglyphbits, nadvancebits; int n, nglyphs, chcode, dx; int hasfont, hascolor, hasyoffset, hasxoffset; unsigned short font=0, height; signed short xoffs, yoffs; textid = change_id(tp); if(verbose) printf("text %d\n", textid); rect((BITS) tp); alignbits(tp); matrix((BITS) tp); nglyphbits = tp->readc(tp); nadvancebits = tp->readc(tp); alignbits(tp); while(1) { if(!getbits((BITS) tp, 1)) { nglyphs = getbits((BITS) tp, 7); if(!nglyphs) break; if(verbose) printf("%d chars:\n", nglyphs); for(n = 0 ; n < nglyphs ; n++) { chcode = getbits((BITS) tp, nglyphbits); dx = getsbits((BITS) tp, nadvancebits); if(verbose) printf("code %d dx %d\n", chcode, dx); } } else { getbits((BITS) tp, 3); hasfont = getbits((BITS) tp, 1); hascolor = getbits((BITS) tp, 1); hasyoffset = getbits((BITS) tp, 1); hasxoffset = getbits((BITS) tp, 1); if(hasfont) font = change_id(tp); if(hascolor) { if(lev == 2) rgba((BITS) tp); else rgb((BITS) tp); } if(hasxoffset) { xoffs = readint2((BITS) tp); if(verbose) printf("dx %d\n", xoffs); } if(hasyoffset) { yoffs = readint2((BITS) tp); if(verbose) printf("dy %d\n", yoffs); } if(hasfont) { height = readint2((BITS) tp); if(verbose) printf("font %d size %d\n", font, height); } } alignbits(tp); }}static void placeobject(TAG tp, int lv){ int hasname, hasratio, hascxform, hasmatrix, haschar, hasmove, hasactions, hasmask; short depth, charid; int hasfilters, hasbitmapcaching, hasblendmode; if (lv == 3) { getbits((BITS)tp, 5); hasbitmapcaching = getbits((BITS)tp, 1); hasblendmode = getbits((BITS)tp, 1); hasfilters = getbits((BITS)tp, 1); } hasactions = getbits((BITS)tp, 1); hasmask = getbits((BITS)tp, 1); hasname = getbits((BITS)tp, 1); hasratio = getbits((BITS)tp, 1); hascxform = getbits((BITS)tp, 1); hasmatrix = getbits((BITS)tp, 1); haschar = getbits((BITS)tp, 1); hasmove = getbits((BITS)tp, 1); depth = readint2((BITS) tp); if(haschar) { charid = change_id(tp); if(verbose) printf("char %d depth %d\n", charid, depth); }}static void definebutton(TAG tp){ short butid, charid, layer; unsigned char bstate; butid = change_id(tp); if(verbose) printf("char %d:\n", butid); while((bstate = tp->readc(tp))) { if(bstate & 8) if(verbose) printf("hit test "); if(bstate & 4) if(verbose) printf("down "); if(bstate & 2) if(verbose) printf("over "); if(bstate & 1) if(verbose) printf("up"); if(verbose) printf("\n"); charid = change_id(tp); layer = readint2((BITS) tp); if(verbose) printf("char %d layer %d\n", charid, layer); alignbits(tp); matrix((BITS) tp); }}static void cxform(TAG tp, int alpha){ int hasadd, hasmult, nbits; int ra, ga, ba, aa, rm, gm, bm, am=0; hasadd = getbits((BITS) tp, 1); hasmult = getbits((BITS) tp, 1); nbits = getbits((BITS) tp, 4); if(verbose) printf("cxform "); if(hasmult) { rm = getsbits((BITS) tp, nbits); gm = getsbits((BITS) tp, nbits); bm = getsbits((BITS) tp, nbits); if(alpha) am = getsbits((BITS) tp, nbits); if(verbose) printf("mul %d %d %d ", rm, gm, bm); if(verbose) if(alpha) printf("%d ", am); } if(hasadd) { ra = getsbits((BITS) tp, nbits); ga = getsbits((BITS) tp, nbits); ba = getsbits((BITS) tp, nbits); if(alpha) aa = getsbits((BITS) tp, nbits); if(verbose) printf("add %d %d %d", ra, ga, ba); if(verbose) if(alpha) printf(" %d", am); } if(verbose) printf("\n");}static void definebutton2(TAG tp){ short id, charid, offs, layer; unsigned char ch, bstate; id = change_id(tp); ch = tp->readc(tp); offs = readint2((BITS) tp); if(verbose) printf("id %d %s action offset %d\n", id, ch ? "menu" : "button", offs); while((bstate = tp->readc(tp))) { if(bstate & 8) if(verbose) printf("hit test "); if(bstate & 4) if(verbose) printf("down "); if(bstate & 2) if(verbose) printf("over "); if(bstate & 1) if(verbose) printf("up"); if(verbose) printf("\n"); charid = change_id(tp); layer = readint2((BITS) tp); if(verbose) printf("char %d layer %d\n", charid, layer); alignbits(tp); matrix((BITS) tp); alignbits(tp); cxform(tp, 1); }}static void definetextfield(TAG tp){ short textid, fontid=0; int haslength, noedit, password, multiline, wordwrap, drawbox, noselect, html, usefont; int hascolor, haslayout, hastext, hasfont; textid = change_id(tp); if(verbose) printf("textfield %d\n", textid); rect((BITS) tp); alignbits(tp); hastext = getbits((BITS) tp, 1); wordwrap = getbits((BITS) tp, 1); multiline = getbits((BITS) tp, 1); password = getbits((BITS) tp, 1); noedit = getbits((BITS) tp, 1); hascolor = getbits((BITS) tp, 1); haslength = getbits((BITS) tp, 1); hasfont = getbits((BITS) tp, 1); getbits((BITS) tp, 2); haslayout = getbits((BITS) tp, 1); noselect = getbits((BITS) tp, 1); drawbox = getbits((BITS) tp, 1); getbits((BITS) tp, 1); html = getbits((BITS) tp, 1); usefont = getbits((BITS) tp, 1); if(hasfont) fontid = change_id(tp); if(verbose) { if ( fontid ) printf("font %d ", fontid); if(noedit) printf("noedit "); if(password) printf("password "); if(multiline) printf("multiline "); if(wordwrap) printf("wordwrap "); if(drawbox) printf("drawbox "); if(noselect) printf("noselect "); if(html) printf("html "); if(usefont) printf("usefont "); if(hascolor) rgba((BITS) tp); putchar('\n'); }}static void exportassets(TAG tp){ short n, nobj, id; char ch; nobj = readint2((BITS) tp); for(n = 0 ; n < nobj ; n++) { id = change_id(tp); if(verbose) printf("%d ", id); while((ch = tp->readc(tp))) if(verbose) putchar(ch); if(verbose) putchar((n < nobj-1) ? ' ' : '\n'); }}static void soundinfo(TAG tp){ char flags, hasenvelope, hasloops, hasoutpoint, hasinpoint, npoints; signed short loops, lev0, lev1; int soundpoint, n; flags = getbits((BITS) tp, 4); hasenvelope = getbits((BITS) tp, 1); hasloops = getbits((BITS) tp, 1); hasoutpoint = getbits((BITS) tp, 1); hasinpoint = getbits((BITS) tp, 1); if(flags & 1) if(verbose) printf("no multiple "); if(flags & 2) if(verbose) printf("stop"); if(flags & 3) if(verbose) putchar('\n'); if(hasinpoint) { soundpoint = readint4((BITS) tp); if(verbose) printf("inpoint %d\n", soundpoint); } if(hasoutpoint) { soundpoint = readint4((BITS) tp); if(verbose) printf("outpoint %d\n", soundpoint); } if(hasloops) { loops = readint2((BITS) tp); if(verbose) printf("%d loops\n", loops); } if(hasenvelope) { npoints = tp->readc(tp); for(n = 0 ; n < npoints ; n++) { soundpoint = readint4((BITS) tp); lev0 = readint2((BITS) tp); lev1 = readint2((BITS) tp); if(verbose) printf("%d: %d %d\n", soundpoint, lev0, lev1); } }}static void definebuttonsound(TAG tp){ int id, n, snds[4]; id = change_id(tp); if(verbose) printf("id %d\n", id); for(n = 0 ; n < 4 ; n++) { snds[n] = change_id(tp); if(verbose) printf("sound %d:\n", snds[n]); alignbits(tp); if(snds[n]) soundinfo(tp); }}extern int SWF_gNumCharacters;/* * load and create a SWF File as MovieClip */SWFPrebuiltClipnewSWFPrebuiltClip_fromInput(SWFInput input){ SWFPrebuiltClip clip; SWFOutput display, defines, out; SWFPrebuilt deps; TAG tp; struct swfile *swf; int type = 0, todisplay; swf = openswf(input); if ( ! swf ) return NULL; clip = newSWFPrebuiltClip(); clip->frames = swf->frames; display = clip->display; deps = newSWFPrebuilt(); SWFCharacter_addDependency((SWFCharacter)clip, (SWFCharacter)deps); defines = deps->defines; idoffset = SWF_gNumCharacters; maxid = SWF_gNumCharacters; // read the swf file here tp = readtag_file(swf); if(tp->type != SWF_SETBACKGROUNDCOLOR) swfseek(swf, -(tp->hdrlen + tp->size)); if(tp->alloced) free(tp->datbuf); free(tp); do { tp = readtag_file(swf); type = tp->type; if(drop_tag(tp)) { if(tp->alloced) free(tp->datbuf); free(tp); continue; } todisplay = handle_tag(tp); out = todisplay ? display : defines; SWFOutput_writeBuffer(out, tp->hdr, tp->hdrlen); if(tp->size) SWFOutput_writeBuffer(out, tp->datbuf, tp->size); if(tp->alloced) free(tp->datbuf); free(tp); } while(type); if(swf->compressed) destroySWFInput(swf->input); SWF_gNumCharacters = maxid + 1; CHARACTERID(clip) = SWF_gNumCharacters++; return clip;}/* * load SWF file which can be used as a MovieClip */SWFPrebuiltClipnewSWFPrebuiltClip_fromFile(const char *filename){ FILE *fp; SWFPrebuiltClip clip; SWFInput input; if(!(fp = fopen(filename, "rb"))) return NULL; input = newSWFInput_file(fp); clip = newSWFPrebuiltClip_fromInput(input); destroySWFInput(input); fclose(fp); return clip;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -