SecondReality/PAM/ANIM.C
2017-09-24 01:45:36 +02:00

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);
}