⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swf2txt.c

📁 GTK SWF Player. GNOME Applications and a mozilla plugin. Other things included is a library for read
💻 C
字号:
/* * Copyright (c) 2002, Bob Doan * *---------------------------------------------------------------------- * This file is part of tubesock - the GTK/GNOME swf player. * *  tubesock is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  tubesock is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with tubesock; if not, write to the Free Software *  Foundation, Inc.: *      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *---------------------------------------------------------------------- */#include <stdio.h>#include <stdlib.h>#include <swf.h>static void swf_print_rect(char *prefix, struct swf_type_rect *r) {	printf("%sSWF_TYPE_RECT: minX = %d minY = %d maxX = %d maxY = %d\n", prefix, r->min_x, r->min_y, r->max_x, r->max_y);}static void swf_print_matrix(char *prefix, struct swf_type_matrix *m){	if(m->hasScale) {		printf("%sMatrix Scale X= %d Y= %d\n", prefix, m->scaleX, m->scaleY);	}	if(m->hasRotate) {		printf("%sRotate Skew  0= %d 1= %d\n", prefix, m->rotateSkew0, m->rotateSkew1);	}	printf("%sTranslate X= %d Y= %d\n", prefix, m->translateX, m->translateY);} static void swf_print_cxform(char *prefix, struct swf_type_cxform *f ){  if(f->hasAddTerms){    printf("%sAdd Term red =%d, green =%d, blue =%d", prefix, f->redAddTerm, f->greenAddTerm, f->blueAddTerm);}  if(f->hasMultTerms){    printf("%sMultiply Term red =%d, green =%d, blue =%d", prefix, f->redMultTerm, f->greenMultTerm, f->redMultTerm);}}static void swf_print_rgb(char *prefix, struct swf_type_rgb *rgb) {	printf("%sRGB: red:%0x green:%02x blue:%02x\n", prefix, rgb->r,rgb->g,rgb->b);}static void swf_print_rgba(char *prefix, struct swf_type_rgba *rgba) {	printf("%sRGBA: red:%0x green:%02x blue:%02x alpha:%02x\n", prefix, rgba->r,rgba->g,rgba->b, rgba->a);}static void swf_print_shaperec_changes(char *prefix, struct swf_type_shape *shape, struct swf_element *e) {	if(e->type == SWF_TYPE_SHAPEREC_MOVETO) {		struct swf_type_shaperec_change_moveto *d = e->data;		shape->x = d->x;		shape->y = d->y;		printf("%sMoveTo: %d %d\n", prefix, shape->x, shape->y);	}	if(e->type == SWF_TYPE_SHAPEREC_FILL0) {		struct swf_type_shaperec_change_fill0 *d = e->data;		printf("%sFill0: %d\n", prefix, d->fillStyle0);		}	if(e->type == SWF_TYPE_SHAPEREC_FILL1) {		struct swf_type_shaperec_change_fill1 *d = e->data;		printf("%sFill1: %d\n", prefix, d->fillStyle1);		}	if(e->type == SWF_TYPE_SHAPEREC_LINE) {		struct swf_type_shaperec_change_line *d = e->data;		printf("%sLineStyle: %d\n", prefix, d->lineStyle);		}	if(e->type == SWF_TYPE_SHAPEREC_LINETO) {		struct swf_type_shaperec_change_lineto *d = e->data;		shape->x += d->x;		shape->y += d->y;		printf("%sLineTo: %d %d\n", prefix, shape->x, shape->y);		}		if(e->type == SWF_TYPE_SHAPEREC_VLINETO) {		struct swf_type_shaperec_change_vlineto *d = e->data;		shape->y += d->y;		printf("%sVLineTo: %d\n", prefix, shape->y);		}		if(e->type == SWF_TYPE_SHAPEREC_HLINETO) {		struct swf_type_shaperec_change_hlineto *d = e->data;		shape->x += d->x;		printf("%sHLineTo: %d\n", prefix, shape->x);		}		if(e->type == SWF_TYPE_SHAPEREC_CURVETO) {		struct swf_type_shaperec_change_curveto *d = e->data;		printf("%sCurveTo: %d %d %d %d\n", prefix, d->deltaX, d->deltaY, d->deltaX2, d->deltaY2);		}	}static void swf_print_shaperec(char *prefix, struct swf_type_shape *shape, struct swf_type_shaperec *sr) {	struct swf_element *c;	char buf[MAXSTRLEN];	sprintf(buf, "   %s", prefix);	printf("%sSHAPERECORD Type:%d\n", prefix, sr->type);	c = sr->changes;	while(c != NULL) {		swf_print_shaperec_changes(buf, shape, c);		c = c->next;	}}static void swf_print_shape(char *prefix, struct swf_type_shape *shape) {	struct swf_element *sr;	char buf[MAXSTRLEN];	sprintf(buf, "   %s", prefix);	printf("%sSHAPE numFillBits:%d, numLineBits:%d\n", prefix, shape->numFillBits, shape->numLineBits);	sr = shape->shaperecs;	while(sr != NULL) {		swf_print_shaperec(buf, shape, sr->data);		sr = sr->next;	}}static void swf_print_fillstylearray(char *prefix, struct swf_type_fillstylearray *fsa) {	printf("%sFILLSTYLEARRAY numRecs = %d\n", prefix, fsa->recs);	if(fsa->recs > 0)	 {		printf("TODO: Write code to print fillstyle info!!!");		/*short recs;		struct swf_element *fillstyle*/	}}static void swf_print_linestyle(char *prefix, struct swf_type_linestyle *ls) {	gint8 buf[MAXSTRLEN];	sprintf(buf, "   %s", prefix);	printf("%sLINESTYLE width=%d\n",prefix, SWF_TO_PIXEL(ls->width));	if(ls->rgba)		swf_print_rgba(buf, ls->color);	else		swf_print_rgb(buf, ls->color);}static void swf_print_linestylearray(char *prefix, struct swf_type_linestylearray *lsa) {	struct swf_element *e;	gint8 buf[MAXSTRLEN];	sprintf(buf, "   %s", prefix);	printf("%sLINESTYLEARRAY numRecs = %d\n", prefix, lsa->recs);	for(e = lsa->linestyle; e != NULL; e = e->next) {		swf_print_linestyle(buf, (struct swf_type_linestyle *)e->data);	}}static void swf_print_shapewithstyle(char *prefix, struct swf_type_shapewithstyle *sws) {	swf_print_fillstylearray(prefix, &sws->fsa);	swf_print_linestylearray(prefix, &sws->lsa);	swf_print_shape(prefix, &sws->shape);}static void swf_print_defineshape3(char *prefix, struct swf_type_defineshape3 *ds) {	printf("DEFINESHAPE3 shapeid=%d\n", ds->shapeid);	swf_print_rect(prefix, &ds->shapeBounds);	swf_print_shapewithstyle(prefix, &ds->info);}void swf_print_elements(struct swf_file *swf) {	struct swf_element *e;	e = swf->elements;	while(e != NULL) {	printf("-> ");	if(e->type == SWF_TYPE_PLACEOBJECT2){	  struct swf_type_placeobject2 *po = e->data;          printf("PLACEOBJECT2: flags:%d place flag move:%d depth:%d\n", po->flags, po->flags & SWF_TYPE_PLACEOBJECT2_HASMOVE, po->depth);	  if(po-> flags & SWF_TYPE_PLACEOBJECT2_HASCHARACTER){	    printf("   -> Has Character: %d\n", po->characterid);	  }	  if(po-> flags & SWF_TYPE_PLACEOBJECT2_HASMATRIX){	    swf_print_matrix("  ->", po->matrix);                              	  }	  if(po-> flags & SWF_TYPE_PLACEOBJECT2_HASCOLORTRANSFORM){ 	    swf_print_cxform("  ->", po->cxform);	  }	  if(po->flags & SWF_TYPE_PLACEOBJECT2_HASRATIO){	    printf("   -> Has Ratio: %d\n", po->ratio);	  }	  if(po->flags & SWF_TYPE_PLACEOBJECT2_HASNAME){	    printf("   -> Has Name: %s\n", po->name);	  }		}		if(e->type == SWF_TYPE_BGCOLOR) {			struct swf_type_bgcolor *bgcolor = e->data;			struct swf_type_rgb *rgb = &bgcolor->rgb;			printf("Set Background Color\n");			swf_print_rgb("   -> ", rgb);		}		if(e->type == SWF_TYPE_SOUNDSTREAMHEAD2) {			struct swf_type_soundstreamhead2 *ss  = e->data;			printf("SoundStreamHead2: mixFormat:%d compression:%d size=%d type=%d sampleCount=%d\n", ss->mixFormat, ss->compression, ss->size, ss->type, ss->sampleCount);		}				if(e->type == SWF_TYPE_SHOWFRAME) {			struct swf_type_frameheader *f = e->data;			printf("Show Frame %d\n", f->number);		}		if(e->type == SWF_TYPE_REMOVEOBJECT2) {			struct swf_type_removeobject2 *ro = e->data;			printf("Remove Object 2 %d\n", ro->depthOfChar);		}		if(e->type == SWF_TYPE_END) {			printf("END OF MOVIE\n");		}				if(e->type == SWF_TYPE_DEFINESHAPE3) {			struct swf_type_defineshape3 *ds = e->data;			swf_print_defineshape3("    -> ", ds);		}				if(e->type == SWF_TYPE_DEFINESHAPE) {			printf("I'm too lazy to implement defineshape right now (bob) THE PARSE CODE IS DONE HOWEVER!!..\n");		}		if(e->type == SWF_TYPE_DOACTION) {			printf("I'm too lazy to implement DOACTION right now (bob) THE PARSE CODE IS DONE HOWEVER!!..\n");		}		if(e->type == SWF_TYPE_DEFINETEXT) {			printf("I'm too lazy to implement SWF_TYPE_DEFINETEXT right now (bob) THE PARSE CODE IS DONE HOWEVER!!..\n");		}		if(e->type == SWF_TYPE_DEFINEFONT) {			struct swf_type_definefont *f = e->data;			struct swf_element *s;			printf("Define Font, Font Id = %d, Num Glyphs = %d\n", 	f->fontid, f->nglyphs);			s = f->shapes;			while(s != NULL) {				swf_print_shape("   -> ", s->data);				s = s->next;			}		}				if(e->type == SWF_TYPE_DEFINEFONTINFO) {			struct swf_type_definefontinfo *f = e->data;			struct swf_type_definefont *df = swf_element_seekDefineFont(swf, f->fontid);			gint32 i=0;			printf("Define Font Info id = %d name=%s crap=[%d %d %d %d %d]\n   -> ", f->fontid, f->fontname, f->fontFlagsUnicode, f->fontFlagsShiftJIS, f->fontFlagsANSI, f->fontFlagsItalic, f->fontFlagsBold);			for(i=0;i<df->nglyphs;i++) {				printf("[%d] %c ", f->codeTable[i], f->codeTable[i]);			}			printf("\n");		}				e = e->next;	}}void swf_print_header(struct swf_file *swf) {	printf("\nHeader Record:\n");	printf("\t%c%c%c\n", swf->header.s, swf->header.w, swf->header.f);	printf("\tVersion: %d File Length: %d\n", swf->header.version, swf->header.filelength);	printf("\tFrame Size %d %d %d %d\n", SWF_TO_PIXEL(swf->header.framesize.min_x), SWF_TO_PIXEL(swf->header.framesize.max_x), SWF_TO_PIXEL(swf->header.framesize.min_y), SWF_TO_PIXEL(swf->header.framesize.max_y));	printf("\tFrame Rate: %d Frame Count %d\n", swf->header.framerate, swf->header.framecount);	printf("\tProtected: %s\n", swf->canedit ? "No" : "Yes");}gint32 main(gint32 argc, gchar **argv) {	struct swf_file *swf;	if(argc != 2) {		printf("Syntax: %s filename\n", argv[0]);		return 1;	}	swf = swf_new(argv[1]);		if(swf == NULL) { 		printf("Couldn't allocate memory or open file... laterz\n");		return 1;	}	swf_read(swf);	swf_print_header(swf);	swf_print_elements(swf);	swf_free(swf);	printf("DONE\n");	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -