char packbuf[16384]; int packbufpnt,packbufcnt; #define stosw(xx) { packbuf[packbufpnt++]=xx&255; packbuf[packbufpnt++]=xx>>8; } #define stosb(xx) packbuf[packbufpnt++]=xx int savepack(FILE *f1) { int a,b,c; if(f1!=NULL) { b=packbuf[2]; a=packbuf[3]; if((a==0 && b<128) || (a==-1 && b>-128)) c=1; else c=0; packbuf[0]=packbufcnt&255; packbuf[1]=packbufcnt>>8; if(packbufcnt==1 && c==1) { packbuf[3]=128; fwrite(packbuf+2,1,packbufpnt-2,f1); } else fwrite(packbuf,1,packbufpnt,f1); } packbufpnt=2; packbufcnt=0; } int savefcpdata(FILE *f1,int x1,int y1,int x2,int y2) { /* single */ int style; int tx1=x1,ty1=y1,tx2=x2,ty2=y2; int xl=x2-x1+1,yl=y2-y1+1; int xo,yo; int x,y,z,zm=1; int a,b,c,d,w,wc; unsigned u; long tell4,telltbl; long pic1pos; unsigned planepos[4]; savepack(NULL); pic1pos=ftell(f1); planepos[0]=planepos[1]=planepos[2]=planepos[3]=0x1234; putc(0x10,f1); /* pic ver */ switch(fcpstyle) { case 15 : a=15; /* fastwing */ break; } style=a; if(fcp4plane) a|=16; if(fcptransp) a|=32; if(fcpsavepal) a|=64; putc(a,f1); if(fcporigo && fcpstyle==15) { xo=xl/2; yo=yl/2; } else xo=yo=0; putw(xo,f1); /* minx */ putw(yo,f1); /* miny */ putw(xl-xo-1,f1); /* maxx */ putw(yl-yo-1,f1); /* maxy */ if(fcp4plane) { memcpy(pic2,pic,64000); x1=x1/4; x2=(x2+3)/4; xl=x2-x1+1; a|=16; tell4=ftell(f1); zm=4; } else xo+=x1; yo+=y1; for(z=0;z(tx2-tx1+1)) b--; for(y=y1;y<=y2;y++) for(a=0,x=tx1+z;a4) { if(wc>0) { int a; packbufcnt++; stosw(wc); for(a=0;a0) { int a; packbufcnt++; stosw(wc); for(a=0;a