#include <stdio.h>
#include <string.h>
FILE *fp,*fp1;
short h[27];
char  plate[256][4];
int cols,rows;
unsigned char a[30000],f1[30],f2[30],head[36][80],c;
main(int ac, char **av)
{
  int i,j,k,it=0,ir=0,m;
  if(ac<2){ printf("\n\t**** fit(8) --> change bmp(256) ****\n");
            printf("\n\tUsage: fit2bmp in[.fit] [1,2,3,4] [!]\n");
            printf("\n\t 1:  1-->1  no trun");
            printf("\n\t 2:  1-->2 means round X_AXIS turn 180 degree");
            printf("\n\t 3:  1-->3 means round Y_AXIS turn 180 degree");
            printf("\n\t 4:  1-->4 means round  (0,0) turn 180 degree");
            printf("\n\t !:  white_black reverse\n\n");
            exit(0); }
  strcpy(f1,av[1]);  if(ac>2)sscanf(av[2],"%d",&it);
  if(it!=2 && it!=3 && it!=4)it=1;
  if(ac>3)ir=1;
  for(i=0;i<strlen(f1);i++)if(f1[i]=='.')f1[i]=0;
  sprintf(f2,"%s.fit",f1);
  fp=fopen(f2,"rb"); if(fp==0){printf("%s not found!\n",f2); exit(0); }
  fread(head,36,80,fp);
  sscanf(&head[1][20],"%d",&k);
  if(k!=8){ fclose(fp); printf("%s not a 8_bit fit!\n",f2); exit(0); }
  sscanf(&head[3][20],"%d",&cols);  sscanf(&head[4][20],"%d",&rows);
  for(i=1;i<27;i++)h[i]=0;
  h[9]=cols; h[11]=rows; k=(cols+3)/4*4;
  h[0]=0x4d42;
  j=k*rows+1078;  h[1]=j&0xffff;  h[2]=j>>16;
  h[5]=0x436;     h[7]=0x28;
  h[13]=1;        h[14]=8;
  j=k*rows;       h[17]=j&0xffff; h[18]=j>>16;
  h[19]=h[21]=30000;  h[23]=h[25]=0x100;
  for(j=0;j<256;j++){ for(i=0;i<3;i++)plate[j][i]=j; plate[j][i]=0; }
  sprintf(f2,"%s.bmp",f1);
  fp1=fopen(f2,"wb");  fwrite(h,2,27,fp1);  fwrite(plate,256,4,fp1);
  m=rows*cols+2880;
  for(j=5;j<36;j++)
    if(head[j][0]=='E' && head[j][1]=='N' && head[j][2]=='D')break;
  if(j==36){ m+=2880; fread(head,36,80,fp); }
  for(j=0;j<rows;j++){
    m-=k; if(it%2==0)fseek(fp,m,0);  fread(a,1,cols,fp);
    if(ir)for(i=0;i<cols;i++)a[i]=255-a[i];
    if(it>2)for(i=0;i<cols/2;i++){ c=a[i]; a[i]=a[cols-1-i]; a[cols-1-i]=c; }
    fwrite(a,1,k,fp1);
  }
  fclose(fp); fclose(fp1);
  printf("%s ok!\n",f2);
}

