#include "sp16.h"

extern int bgcol;
extern unsigned short sw;
extern char fmt[];

extern void helpmes(char *com);

int fil_open(LFS,iname,oname)
  fileset *LFS;
  char *iname,*oname;	/* 拡張子なしのファイル名 */
{
  char *imn,*omn;

  imn=(char *)malloc(strlen(iname)+5);
  omn=(char *)malloc(strlen(oname)+5);
  strcpy(imn,iname);  strcat(imn,".SPB");
  if((LFS->FPIB=fopen(imn,"rb"))==NULL) return(NEM);
  strcpy(imn,iname);  strcat(imn,".SPI");
  if((LFS->FPIT=fopen(imn,"rt"))==NULL) return(NEM);
  if(!(sw&DEMOM))	/* 色数を調べるだけの時は出力ファイルは開かない */
  {
    strcpy(omn,oname);  strcat(omn,".SPB");
    if((LFS->FPOB=fopen(omn,"wb"))==NULL) return(NEM);
    strcpy(omn,oname);  strcat(omn,".PAL");
    if((LFS->FPOP=fopen(omn,"wb"))==NULL) return(NEM);
    strcpy(omn,oname);  strcat(omn,".SPI");
    if((LFS->FPOT=fopen(omn,"wt"))==NULL) return(NEM);
  }
  return(IGEN);
  free(imn);
  free(omn);
}

int fil_close(LFS)
  fileset *LFS;
{
  fclose(LFS->FPIB);
  fclose(LFS->FPIT);
  fclose(LFS->FPOB);
  fclose(LFS->FPOT);
  fclose(LFS->FPOP);
  return(IGEN);
}

int keyin(msg)
  char *msg;
{
  char c[12];
  
  printf("%s >",msg);
  if(sw&AUTOH)
  {
    printf("Yes!\n");
    return(IGEN);
  }
  fgets(c,12,stdin);
  if(strpbrk("Yy",c)!=NULL) return(IGEN);
  if(strpbrk("Nn",c)!=NULL) return(NEM);
  return(NOP);
}

int argchk(argc,argv,in,on)
  int argc;
  char *argv[],*in,*on;
{
  int i,j,ptr;
  char str[5],*cp;

  in[0]=on[0]=0;
  /* printf("argc=%d\n",argc); */
  if(argc<2)
  {
    helpmes(strrchr(argv[0],0x5c)+1);
    return(NOP);
  }
  if(argc>=2)
    for(i=1;i<argc;i++)
    {
      if(argv[i][0]=='/'||argv[i][0]=='-')
      {
        ptr=1;
        while(argv[i][ptr]!=0)
        {
          switch(argv[i][ptr])
          {
            case 'a':	/* 全体16色パターン出力 */
              sw|=AUTOZ;
            case 'A':	/* 16色パターン全出力 */
              sw|=AUTOH;  ptr++;
              /* printf("半自動スイッチON\n"); */
              break;
            case 'B':
            case 'b':
              sw|=BGCOL;  ptr++;  j=0;
              while(argv[i][ptr+j]!=0&&j<4)
              {
                str[j]=argv[i][ptr+j];  j++;
              }
              str[j]=0;  ptr+=j;
              sscanf(str,"%x",&bgcol);
              printf("背景色=0x%04x\n",bgcol);
              break;
            case 'c':
              sw|=CLSET;
            case 'C':
              sw|=CLSETP;  ptr++;
              if(argv[i][ptr]>='0'&&argv[i][ptr]<='3')
              { sw+=argv[i][ptr]-'0';  ptr++; }
              sw|=BGCOL;
              break;
            case 'D':
            case 'd':
              sw|=DEMOM;  ptr++;
              break;
            case 'F':
            case 'f':
              strcpy(fmt,argv[i]+ptr+1);
              ptr=(int)strlen(argv[i]);
              break;
            case 'H':
            case 'h':
            case '?':
              helpmes(strrchr(argv[0],0x5c));  return(NEM);
            case 'N':
            case 'n':
              sw|=NOESC;  ptr++;
              break;
            default:
              printf("[/%c]は無意味なスイッチです\n",argv[i][ptr++]);
          }
        }
      }
      else
      {
        if(in[0]==0)
        {
          strcpy(in,argv[i]);
          cp=strchr(in,'.');
          if(cp!=NULL) *cp=0;
          printf("入力ファイル名[%s]",in);
          if(cp!=NULL) printf("	拡張子は無視されます");
          printf("\n");
        }
        else
          if(on[0]==0)
          {
            strcpy(on,argv[i]);
            cp=strchr(on,'.');
            if(cp!=NULL) *cp=0;
            printf("出力ファイル名[%s]",on);
            if(cp!=NULL) printf("	拡張子は無視されます");
            printf("\n");
          }
          else printf("[%s]は無意味な指定です",argv[i]);
      }
    }
  if(in[0]==0)
  {
    printf("入力ファイル名が指定されていません %s,%s",in,on);
    return(NEM);
  }
  if(on[0]==0) sw|=DEMOM;
  return(IGEN);
}

int colchk(LFS,ofst,lpal)
  fileset *LFS;
  long ofst;
  palet *lpal;
{
  int j,k;
  unsigned short buf[256];
  
  fseek(LFS->FPIB,ofst,SEEK_SET);
  fread(buf,2,256,LFS->FPIB);
  if(lpal->mxc==0)			/* 最初から色を調べる時 */
  {
    lpal->mxc=1;
    if(sw&BGCOL)			/* 背景色が指定されている場合 */
      lpal->pal[0]=bgcol;	/* パレットに先ず背景色を設定 */
    else
      lpal->pal[0]=buf[0];	/* パレットに先ず始めの色を設定 */
  }
  for(k=0;k<256;k++)
    for(j=0;j<lpal->mxc;j++)
      if(buf[k]!=lpal->pal[j])	/* パレットにない色だったら */
        if(j==(lpal->mxc-1))	/* パレットの最後に来ていたら */
        {
          lpal->mxc++;
          if(lpal->mxc>16) return(NOP);	/* 16色以上だったら終わり */
          else lpal->pal[lpal->mxc-1]=buf[k];	/* 以下ならつけたす */
          break;
        }
        else continue;
      else break;				/* パレットにある色だったら､break */
  return(lpal->mxc);
}

int getspinfo(LFS,spi)
  fileset *LFS;
  spinfo *spi;
{
  static int sprnum=0;
  char buf[256];

  if(sprnum==0) rewind(LFS->FPIT);
  spi->ofst=sprnum*512;
  if(fgets(buf,256,LFS->FPIT)==NULL) return(NEM);
  sscanf(buf,fmt,&(spi->num),spi->name,&(spi->x),&(spi->y));
  sprnum+=(spi->x*spi->y);
  return(IGEN);
}
