#include #include #include #include char pal[768]; char far mpage1[65535]; char far mpage2[65535]; FILE *out; main() { FILE *data; asm mov ax, 13h asm int 10h data=fopen("pal.pal","rb"); fread(pal,1,768,data); tw_setpalette(pal); fclose(data); data=fopen("out.u","rb"); out=fopen("out.ani","wb"); while(!kbhit() && !feof(data)) { memcpy(MK_FP(0x0a000,0),mpage1,64000); memcpy(mpage1,mpage2,64000); fread(mpage2,1,64000,data); if(feof(data)) break; packframe(); } } packframe() { unsigned int cnt=0; int a=0,b=0,ch=0; char *p1=mpage2,*p2=MK_FP(0x0a000,0); while((ftell(out)&15)!=0) fputc(0,out); while(cnt<64000) { if(*p1!=*p2) { for(a=1;*p1==*(p1+a) && *(p1+a)!=*(p2+a) && a<120 && cnt+a<64000;a++); fputc(a,out); fputc(*p1,out); p1+=a; p2+=a; cnt+=a; } else { for(a=1;*(p1+a)==*(p2+a) && a<120 && cnt+a<64000;a++); fputc(-a,out); p1+=a; p2+=a; cnt+=a; } } fputc(0,out); }