Upload
This commit is contained in:
commit
43352ff262
1291 changed files with 220976 additions and 0 deletions
147
GRAB/LFCP.C
Normal file
147
GRAB/LFCP.C
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
/****************************************************/
|
||||
/***** FuturePicture loader (FCP) V1.0 ************/
|
||||
/****************************************************/
|
||||
|
||||
int loadfcp(char *fname)
|
||||
{
|
||||
int multiple=0;
|
||||
int pz;
|
||||
int format;
|
||||
int x,y,a,b,c,d;
|
||||
int cnt,cntm;
|
||||
int minx,miny,maxx,maxy,xo,yo,cols;
|
||||
int infocnt=0;
|
||||
int style;
|
||||
int z,zm=1;
|
||||
int plane4;
|
||||
long l;
|
||||
char far *filebuf;
|
||||
unsigned u;
|
||||
filebuf=halloc(32768L,1L);
|
||||
#ifndef AOLOAD
|
||||
printf("\nLoading and uncompressing picture (FCP): ");
|
||||
#endif
|
||||
if(filebuf==NULL)
|
||||
{
|
||||
printf("Out of memory.\n");
|
||||
return(1);
|
||||
}
|
||||
if(setback255) memset(pic2,255,64000);
|
||||
{
|
||||
/* header */
|
||||
f1=fopen(fname,"rb");
|
||||
if(f1==NULL) return(3);
|
||||
setvbuf(f1,filebuf,_IOFBF,32768);
|
||||
a=getc(f1);
|
||||
if(a!='F') return(2);
|
||||
a=getc(f1);
|
||||
if(a!='C') return(2);
|
||||
a=getc(f1);
|
||||
if(a!='P') return(2);
|
||||
a=getc(f1);
|
||||
if(a!=0x1a) return(2);
|
||||
a=getc(f1);
|
||||
if(a!=0x10) return(2);
|
||||
b=getc(f1);
|
||||
pics=getw(f1);
|
||||
fread(picpos,4,pics,f1);
|
||||
if(b&1)
|
||||
{
|
||||
fread(pal,256*3,1,f1);
|
||||
}
|
||||
if(pics>1)
|
||||
{
|
||||
multiple=1;
|
||||
#ifndef AOLOAD
|
||||
printf("\n\nFCP file contains multiple pictures.\n"
|
||||
"Press Space to view next with animation\n"
|
||||
" Enter to view next with flipping\n"
|
||||
" 'S' to select picture\n\n"
|
||||
"Press any key to start.");
|
||||
getch();
|
||||
reg.x.ax=0x13;
|
||||
int86(0x10,®,®);
|
||||
#endif
|
||||
viewpal(0);
|
||||
}
|
||||
/* pic */
|
||||
for(pz=0;pz<pics;pz++)
|
||||
{
|
||||
fseek(f1,(long)picpos[pz],SEEK_SET);
|
||||
a=getc(f1);
|
||||
if(a!=0x10) return(2);
|
||||
format=getc(f1); style=format&15;
|
||||
minx=getw(f1);
|
||||
miny=getw(f1);
|
||||
maxx=getw(f1);
|
||||
maxy=getw(f1);
|
||||
xo=-minx;
|
||||
yo=-miny;
|
||||
#ifdef AOLOAD
|
||||
bx1=by1=0;
|
||||
if(maxx-minx>bx2) bx2=maxx-minx;
|
||||
if(maxy-miny>by2) by2=maxy-miny;
|
||||
#endif
|
||||
if(format&16)
|
||||
{
|
||||
plane4=4;
|
||||
zm=4;
|
||||
}
|
||||
else plane4=1;
|
||||
for(z=0;z<zm;z++)
|
||||
{
|
||||
if(style==15)
|
||||
{ /* fastwing */
|
||||
while(!eschit())
|
||||
{
|
||||
infocnt++; infocnt&=63;
|
||||
if(infocnt==0 && pics==1 && !multiple) printf(".");
|
||||
y=getw(f1);
|
||||
if(y==0x8000) break;
|
||||
y+=yo;
|
||||
x=getw(f1)+xo;
|
||||
cntm=getw(f1);
|
||||
if(cntm<0)
|
||||
{
|
||||
a=(int)((char)cntm);
|
||||
cntm=1;
|
||||
d=0;
|
||||
}
|
||||
else d=1;
|
||||
for(cnt=0;cnt<cntm;cnt++)
|
||||
{
|
||||
if(d) a=getw(f1);
|
||||
else d=1;
|
||||
if(a<0)
|
||||
{
|
||||
b=getc(f1);
|
||||
a=-a;
|
||||
for(c=0;c<a;c++,x++) pic[x*plane4+z+y*320]=b;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(c=0;c<a;c++,x++) pic[x*plane4+z+y*320]=getc(f1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(pics!=1)
|
||||
{
|
||||
#ifndef AOLOAD
|
||||
viewpic(0);
|
||||
{
|
||||
a=getch();
|
||||
if(a==27 || a=='s' || a=='S') break;
|
||||
if(a==13 && pz!=pics-1) memset(pic,setback255?255:0,64000);
|
||||
}
|
||||
#else
|
||||
onepicdone();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
fclose(f1);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
Loading…
Reference in a new issue