#include <stdio.h>
FILE *fp,*fp1,*fp2,*fp3;
char a[60],b[60],c[80],f[12],g[4];
char head[72][80];
main(int ac,char **av)
{
  if(ac<2){
  printf("\n\t\t ******** 1key_sky (max 348 fits)*********\n");
  printf("\n\t  raw_data---> p*_?.fit (pipline1)\n");
  printf("\n\t Usage: 1key_sky !          110118\n");
  printf("\n\t after 0key:  produced bias_?.fit (minus overscan already)");
  printf("\n\t each_fits substract self_overscan 1st, then minus bias_?.fit\n\n");
  printf(" 1. automatic processing pipeline1 job, not answer any question.\n"); 
  printf(" 2. create a new directory, empty.\n");
  printf(" 3. copy raw_fits_files  (which you want using) to this directory\n");
  printf("                        (not use FLAT raw_files, neednot copy to)\n");
  printf(" 4. in this directory, type command: 1key_sky !\n");
  printf(" 5. check rawfile_name, 1st must be 'd', if not, auto change it\n");
  printf("    if in middle of filename appear char_dot, change to slash _\n");
  printf(" 6. auto do d4,e4b,f4,p4....( of course, d4,e4b,f4,p4 in command_path)\n");
  printf(" 7. p*_?.fit is results\n");
  printf("    f*_?.fit is SUPER_SKY_FALT\n");
  printf("    others are middle_processing file, you can have a look & delete\n\n\n");
  exit(0);
  }
// 5. check rawfile_name, 1st must be 'd', if not, auto change it  
  job5();
// 6. auto do d4,e4b,f4,p4....
  job_d4(); 
  job_e4b(); 
  job_f4_sky(); 
  job_p4(); 
  printf("\n\t****** OK ! ********\n");
} 

job_p4()
{
  int i,j,k;
  for(i=1;i<=4;i++){         // ??
    g[0]=i+48; f[6]=i+48;
    fp=fopen(g,"r");
l10:
    fgets(a,60,fp); if(feof(fp))goto l20;
    a[strlen(a)-1]=0;
    sprintf(c,"p4 %s %s",f,a);
    system(c); 
    goto l10;
l20:
    fclose(fp);
  }
}

job_f4_sky()
{
  int i,j,k,l;
  a[5]=0; a[0]='f';
  sprintf(b,"%s_?.dat",a); sprintf(f,"%s_?.fit",a);
  strcpy(g,"?.p");
  for(i=1;i<=4;i++){                // ??
    g[0]=b[6]=f[6]=i+48;
    strcpy(c,"ls e*_?.fit >1.1");
    for(j=0;j<strlen(c);j++)if(c[j]=='?')c[j]=i+48;
    system(c);
    fp=fopen("1.1","r");
    fp1=fopen(b,"w");
    fp3=fopen(g,"w");
l10:
    fgets(a,60,fp); if(feof(fp))goto l20;
    k=strlen(a)-1; a[k]=0;
    fp2=fopen(a,"rb"); fread(head,70,80,fp2); fclose(fp2);
    k=indexpos(head,"OBJECT  ",72);
    l=0;
    for(j=11;j<27;j++)if((head[k][j]&0x5f)=='F'){
      if((head[k][j+1]&0x5f)=='L' && (head[k][j+2]&0x5f)=='A')l=1; }
    if(l==0)for(j=11;j<27;j++)if((head[k][j]&0x5f)=='B'){
      if((head[k][j+1]&0x5f)=='I' && (head[k][j+2]&0x5f)=='A')l=2; }
    if(l==0)for(j=11;j<27;j++)if((head[k][j]&0x5f)=='F'){
      if((head[k][j+1]&0x5f)=='O' && (head[k][j+2]&0x5f)=='C')l=3; }
    if(l==0)for(j=11;j<27;j++)if((head[k][j]&0x5f)=='Z'){
      if((head[k][j+1]&0x5f)=='E' && (head[k][j+2]&0x5f)=='R')l=4; }
    if(l==0){fputs(a,fp1); fputc(10,fp1);}                // sup_flat file
    if(l==0 || l==1){fputs(a,fp3); fputc(10,fp3);}        // will do p4
    goto l10;
l20:
    fclose(fp); fclose(fp1); fclose(fp3);
  }
  for(i=1;i<=4;i++){       // ??
    b[6]=f[6]=i+48;
    fp=fopen(f,"rb"); if(fp){ fclose(fp); continue; }
    sprintf(c,"f4 %s %s\n",b,f);
    system(c);
  }
}

job_e4b()
{
  int k;
  system("ls d*.fit >1.1");
  fp=fopen("1.1","r");
l10:
  fgets(a,60,fp); if(feof(fp))goto l20;
  k=strlen(a)-1; a[k]=0;
  sprintf(c,"e4b %s bias_%c.fit",a,a[k-5]);
  printf("%s\n",c);
  system(c); 
  goto l10;
l20:
  fclose(fp);
}

job_d4()
{
  system("ls *.fits >1.1");
  fp=fopen("1.1","r");
l10:
  fgets(a,60,fp); if(feof(fp))goto l20;
  a[strlen(a)-1]=0;
  sprintf(c,"d4 %s",a);
  system(c); 
  goto l10;
l20:
  fclose(fp);
}

job5()
{
  int i,j,k;
// check bias_?.fit existed
  for(i=1;i<=4;i++){
    sprintf(a,"bias_%d.fit\0",i);
    fp=fopen(a,"rb"); if(fp==0){ printf("%s not found!\n",a); exit(0); }
    fclose(fp);
  }
  system("ls *.fits >1.1");
  fp=fopen("1.1","r");
l10:
  fgets(a,60,fp); if(feof(fp))goto l20;
  k=0; j=strlen(a)-1; a[j]=0; strcpy(b,a);
  if(a[0]!='d'){ k=1; b[0]='d'; }
  for(i=0;i<j-5;i++)if(b[i]=='.'){ k=1; b[i]='_'; }
  if(k){
    sprintf(c,"mv %s %s",a,b);
    system(c); printf("%s\n",c);
  }
  goto l10;
l20:
  fclose(fp);
}
