#include #include #include unsigned char far *vram=(char far *)0xa0000000; int blocksleft=999; int wid,hig,pics; long cnt[256]; char lookup[256]; char palette[768]; char ownpal[768]; int docoltable; int colorlookup; int oktoviewpal; int useownpal; int savefcp; FILE *out; main(int argc,char *argv[]) { int a; FILE *f1; out=fopen("fcp","wb"); if(out==NULL) return(0); f1=fopen(argv[1],"rb"); if(f1==NULL) return(0); _asm mov ax,19 _asm int 10h for(a=0;a<256;a++) lookup[a]=a; docoltable=1; oktoviewpal=0; useownpal=0; savefcp=0; rewind(f1); readflic(f1,0); { long ol,l; int a; ol=hig*(wid+8)+10+2; fprintf(out,"FCP\x1a"); putc(0x10,out); putc(0x01,out); putw(pics,out); for(a=0;a>16,out); } } donewpalette(256-32,31); for(a=0;a<768;a++) { putc(ownpal[a],out); } docoltable=0; oktoviewpal=1; useownpal=1; savefcp=1; rewind(f1); readflic(f1,0); _asm mov ax,3 _asm int 10h fclose(f1); } int brightcmp(unsigned char *s1,unsigned char *s2) { int v1,v2; v1=*s1+*(s1+1)+*(s1+2); v2=*s2+*(s2+1)+*(s2+2); if(v1v2) return(1); else return(0); } int donewpalette(int first,int num) { int cc,c,c2,a; int d,rr,gg,bb; long ba; int bi,bd; memset(ownpal,0,768); for(cc=0;ccba) { ba=cnt[c]; bi=c; } } cnt[bi]=0; memcpy(ownpal+cc*3,palette+bi*3,3); } /* sort by brightness/move */ qsort(ownpal,num,3,brightcmp); /* create lookup index */ for(cc=0;cc<256;cc++) { bi=0; bd=32767; rr=palette[cc*3+0]; gg=palette[cc*3+1]; bb=palette[cc*3+2]; if(rr==0 && gg==0 && bb==0) lookup[cc]=0; else { for(c=0;c>4)*3+320-48+((a&15)*3+200-48)*320; vram[u]=a; vram[u+1]=a; vram[u+2]=a; vram[320+u]=a; vram[320+u+1]=a; vram[320+u+2]=a; vram[640+u]=a; vram[640+u+1]=a; vram[640+u+2]=a; } } int doblock(FILE *f1,unsigned type) { if((type==0x000b || type==0x0004) && useownpal) { int a; outp(0x3c8,0); for(a=0;a<768;a++) outp(0x3c9,ownpal[a]); if(oktoviewpal) viewpal(); return(0); } if(type==0x000b) { int a,c,d; c=getc(f1)*256; /* count */ c+=getc(f1); c*=3; a=getc(f1)*256; /* first */ a+=getc(f1); outp(0x3c8,a); for(a=0;a>2)); if(oktoviewpal) viewpal(); } else if(type==0x000c) { int a,b,c,lc,cc,cm,lb,le,lad; long l; unsigned int u; lb=getw(f1); le=lb+getw(f1); for(lc=lb;lc