#include "sp16.h"

fileset FSET;
unsigned short sw=0;
int bgcol;
char fmt[40]=DFORM;

/* Sp16sub1.c の中の関数 */
extern int fil_open(fileset *FSET,char *iname,char *oname);
extern int fil_close(fileset *FSET);
extern int keyin(char *msg);
extern int argchk(int argc,char *argv[],char *iname,char *oname);
extern int colchk(fileset *LFS,long ofst,palet *lpal);
extern int getspinfo(fileset *LFS,spinfo *lspi);
/* Sp16sub2.c の中の関数 */
extern int prnpalset(palet *lpal,char *msg);
extern int palmod(palet *lpal);
extern int sp16write(fileset *LFS,spinfo *lspi,palet *lpal,int lnum);
extern void helpmes(char *com);
extern int bgcolset(fileset *LFS,spinfo *lsp);

void main(argc,argv)
  int argc;
  char *argv[];
{
  int i,rtn;
  char iname[40],oname[40],*str;
  fileset FS;
  palet *ps,tps;
  spinfo spi;
  
  rtn=argchk(argc,argv,iname,oname);	if(rtn==NEM) exit(NOP);
  rtn=fil_open(&FS,iname,oname);		if(rtn==NEM) exit(NOP);
  while(getspinfo(&FS,&spi)!=NEM)
  {
    if(spi.x<1||spi.y<1) break;
    str=(char *)calloc(1,strlen(spi.name)+1);
    strcpy(str,spi.name);
    if(sw&NOESC)
      printf("\n%2u番目のスプライトは<%s> 大きさ(%2u,%2u)\n",
        (spi.num+1),spi.name,spi.x,spi.y);
    else
      printf("\n%2u番目のスプライトは<%s%s%s> 大きさ(%2u,%2u)\n",
        (spi.num+1),MIZU,spi.name,COFF,spi.x,spi.y);
    if(sw&CLSETP)
    {
      if(sw&CLSET)
      { if(spi.num==0) bgcolset(&FS,&spi); }
      else bgcolset(&FS,&spi);
    }
    tps.mxc=0;
    for(i=0;i<16;i++) *(tps.pal+i)=0;
    ps=(palet *)calloc((spi.x*spi.y),sizeof(palet));
    for(i=0;i<(spi.x*spi.y);i++)
    {
      (ps+i)->mxc=0;
      /* 色数チェック&セット(個別) */
      rtn=colchk(&FS,spi.ofst+i*512,ps+i);	if(rtn==NEM) exit(NOP);
      /* 色数チェック&セット(全体) */
      rtn=colchk(&FS,spi.ofst+i*512,&tps);	if(rtn==NEM) exit(NOP);
      /* パレット調整 */
      palmod(ps+i);
      prnpalset(ps+i," ");
      if((i%spi.x)==spi.x-1) printf("\n");
    }
    /* パレット調整 */
    palmod(&tps);
    prnpalset(&tps,"全体 ");  printf("\n");
    if(tps.mxc<17)
    {
      if(!(sw&NOESC)) printf(SIRO);
      printf("このスプライトは全体を16色データにすることができます。\n");
      if(sw&DEMOM) { rtn=NEM;  if(!(sw&NOESC)) printf(COFF); }
      else
      {
        printf("出力しますか？");
        rtn=keyin(" [y:まとめて出力 / n:出力しない / その他:個別に指定]");
        if(!(sw&NOESC)) printf(COFF);
      }
    } else rtn=NOP;
    if(rtn==IGEN)
    {
      rtn=sp16write(&FS,&spi,&tps,-1);      if(rtn==NEM) exit(NOP);
    }
    else if(rtn!=NEM&&(!(sw&AUTOZ))&&(!(sw&DEMOM)))
    {
      printf("\n");
      for(i=0;i<spi.x*spi.y;i++)
      {
        if((ps+i)->mxc<17)
        {
          printf("%u番目のパターンは16色スプライトとして扱えます。",i);
          rtn=keyin("出力しますか？ ");
          if(rtn==IGEN)
          {
            strcpy(spi.name,str);
            sp16write(&FS,&spi,ps+i,i);
            if(rtn==NEM) exit(NOP);
          }
        }
      }
    }
    free(ps);
    free(str);
  }
  fil_close(&FS);
}
