+#define ET_HASTEXT 32768
+#define ET_WORDWRAP 16384
+#define ET_MULTILINE 8192
+#define ET_PASSWORD 4096
+#define ET_READONLY 2048
+#define ET_HASTEXTCOLOR 1024
+#define ET_HASMAXLENGTH 512
+#define ET_HASFONT 256
+#define ET_X3 128
+#define ET_X2 64
+#define ET_HASLAYOUT 32
+#define ET_NOSELECT 16
+#define ET_BORDER 8
+#define ET_X1 4
+#define ET_X0 2
+#define ET_USEOUTLINES 1
+
+SWF swf;
+int fontnum = 0;
+SWFFONT**fonts;
+
+void textcallback(int*glyphs, int nr, int fontid)
+{
+ int font=-1,t;
+ printf(" <%2d glyphs in font %2d> ",nr, fontid);
+ for(t=0;t<fontnum;t++)
+ {
+ if(fonts[t]->id == fontid) {
+ font = t;
+ break;
+ }
+ }
+ if(font<0) {
+ printf("\n");
+ return; // todo: should we report this? (may only be that it's a definefont without fontinfo)
+ }
+
+ for(t=0;t<nr;t++)
+ {
+ unsigned char a;
+ if(glyphs[t] >= fonts[font]->numchars)
+ continue;
+ a = fonts[font]->glyph2ascii[glyphs[t]];
+ if(a>=32)
+ printf("%c", a);
+ else
+ printf("\\x%x", (int)a);
+ }
+ printf("\n");
+}
+
+void handleText(TAG*tag)
+{
+ printf("\n");
+ swf_FontExtract_DefineTextCallback(-1,0,tag,4, textcallback);
+}
+
+void handleEditText(TAG*tag)
+{
+ U16 id ;
+ U16 flags;
+ int t;
+ id = swf_GetU16(tag);
+ swf_GetRect(tag,0);
+ //swf_ResetReadBits(tag);
+ if (tag->readBit)
+ { tag->pos++;
+ tag->readBit = 0;
+ }
+ flags = swf_GetBits(tag,16);
+ if(flags & ET_HASFONT) {
+ swf_GetU16(tag); //font
+ swf_GetU16(tag); //fontheight
+ }
+ if(flags & ET_HASTEXTCOLOR) {
+ swf_GetU8(tag); //rgba
+ swf_GetU8(tag);
+ swf_GetU8(tag);
+ swf_GetU8(tag);
+ }
+ if(flags & ET_HASMAXLENGTH) {
+ swf_GetU16(tag); //maxlength
+ }
+ if(flags & ET_HASLAYOUT) {
+ swf_GetU8(tag); //align
+ swf_GetU16(tag); //left margin
+ swf_GetU16(tag); //right margin
+ swf_GetU16(tag); //indent
+ swf_GetU16(tag); //leading
+ }
+ printf(" variable \"%s\"", &tag->data[tag->pos]);
+
+ if(flags & (ET_X1 | ET_X2 | ET_X3 | ET_X0))
+ {
+ printf(" undefined flags: %d%d%d%d",
+ (flags&ET_X0?1:0),
+ (flags&ET_X1?1:0),
+ (flags&ET_X2?1:0),
+ (flags&ET_X3?1:0));
+ }
+
+ while(tag->data[tag->pos++]);
+ if(flags & ET_HASTEXT)
+ // printf(" text \"%s\"\n", &tag->data[tag->pos])
+ ;
+}
+
+void fontcallback1(U16 id,U8 * name)
+{ fontnum++;
+}
+
+void fontcallback2(U16 id,U8 * name)
+{ swf_FontExtract(&swf,id,&fonts[fontnum]);
+ fontnum++;
+}
+