#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
// only do d*.fit  400*400
#define size  4096
#define nbyte size*size*4

char head[72][80],dummy[36*80];
char a[nbyte];
char f1[30];
FILE *fp;
main(ac,av)
int ac; char *av[];                        
{
  float f64,fsky;
  int   i,ipos,ih3=0;			
  int   ibit,n1,n2;
  if(ac<3)stop("\tUsage:  addsky d*.fit value  (for any size,60302)\0");

  sscanf(av[2],"%f",&fsky); //if(fsky<=0.)stop("\t sky value must >0\0");
  strcpy(f1,av[1]);
  fp=fopen(f1,"rb"); if(fp==0)stop("\tfile not find !\0");
  fread(head,80,72,fp);
  ipos=indexpos(head,"END     ",72);
  if(ipos==72){ fread(dummy,80,36,fp); ih3=1; }
  sscanf(&head[1][21],"%d",&i); ibit=2; if(i==-32)ibit=4;
  sscanf(&head[3][21],"%d",&n1); 	
  sscanf(&head[4][21],"%d",&n2); 
  ipos=indexpos(head,"BZERO    ",72);
  sscanf(&head[ipos][21],"%f",&f64);
  fread(a,ibit,n1*n2,fp);
  fclose(fp);
  if(ibit==4)addsky4(a,n1*n2,f64,fsky);
  if(ibit==2)addsky2(a,n1*n2,f64,fsky);
  sprintf(&head[ipos][21],"%9.2f",f64-fsky); head[ipos][30]=32;
  fp=fopen("addsky.tmp","wb");
  fwrite(head,80,72,fp);   if(ih3)fwrite(dummy,80,36,fp);
  fwrite(a,ibit,n1*n2,fp); fclose(fp);
  strcpy(dummy,"mv addsky.tmp "); strcat(dummy,f1);
  unlink(f1);
 system(dummy);
}

addsky2(a,n,f64,fsky)
short a[];
int n;
float f64,fsky;
{
  int i,k;
  swap2(a,2*n);
  for(i=0;i<n;i++){
    k=a[i];
    k+=fsky;
    a[i]=k;
  }
  swap2(a,2*n);
}

addsky4(a,n,f64,fsky)
float a[];
int n;
float f64,fsky;
{
  int i;
  swap4(a,4*n);
  for(i=0;i<n;i++){
    a[i]+=f64+fsky;
//    if(a[i]>65536.)a[i]-=65536.;
  }  
  swap4(a,4*n);
}
