60 lines
No EOL
1 KiB
C
60 lines
No EOL
1 KiB
C
#include <stdio.h>
|
|
#include <conio.h>
|
|
#include <dos.h>
|
|
#include <mem.h>
|
|
|
|
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);
|
|
} |