/* view flic */ #include #include #include #include int doframe(FILE *f1); int dochunk(FILE *f1); int doline1(unsigned u,FILE *f1); int doline2(unsigned u,FILE *f1); int saveframe(int frame); char far *vram=(char far *)0xa0000000L; char buf[64000]; char pal[768]; char savebuf[64000]; int lw; struct { long filesize; unsigned magic; /* 0xaf11 */ int frames; int width; int heigth; int RESERVED1; int flags; /*0*/ int speed; long next; /*0*/ long frit; /*0*/ char RESERVED2[102]; } header; struct { long size; unsigned magic; /* 0xf1fa */ int chunks; int RESERVED[4]; } frameheader; struct { long size; unsigned type; } chunkheader; main(int argc,char *argv[]) { FILE *f1; int f; f1=fopen(argv[1],"rb"); if(f1==NULL) return(0); fread(&header,sizeof(header),1,f1); lw=header.width; /**/ _asm mov ax,13h _asm int 10h saveframe(-1); for(f=0;f0) { while(b--) vram[u++]=(char)getc(f1); } else { a=getc(f1); while(b++) vram[u++]=(char)a; } } return(0); } int doline2(unsigned u,FILE *f1) { int a,b,c; c=getc(f1); while(c--) { b=(char)getc(f1); if(b<0) { while(b++) vram[u++]=(char)getc(f1); } else { a=getc(f1); while(b--) vram[u++]=(char)a; } } return(0); } int saveframe(int frame) { unsigned u,u0,ua; int a,b,c; static FILE *fo; switch(frame) { case -1 : /* open */ fo=fopen("anim.fca","wb"); break; case -2 : /* close */ putc(254,fo); fclose(fo); break; default : /* save */ if(frame==0) { outp(0x3c7,0); for(a=0;a<768;a++) pal[a]=(char)inp(0x3c9); memset(savebuf,0,64000U); fwrite(pal,1,768U,fo); } { int x1=160-32-3; int y1=100-32; int x2=160+32-3; int y2=100+32; int x,y; for(y=y1;y