#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "fitsio.h"

#define LINEPIX 1280
#define LINEPIY 960

void printerror( int status);

int main(int argc,char *argv[])
{
  fitsfile *fp;
  int i,j,status,nfound,anynull,bitpix=-32;
  long fpixel, nelements,naxis=2;
  long naxes[2]={LINEPIX, LINEPIY},nbuffer;
  float nullval; 
  static float buffer[LINEPIX];

  FILE *fpr;
  unsigned char p[2];
  static double z[LINEPIX][LINEPIX];

  if(argc!=3){
    printf("Usage: %s input output \n",argv[0]);
    exit(1);
    }

  fprintf(stderr,"Read %s ... ",argv[1]);
  if((fpr = fopen(argv[1],"rb")) == NULL){
    printf("Cannot open %s\n",argv[1]);
    exit(0);
  }
  for(i=0;i<LINEPIY;i++){
    for(j=0;j<LINEPIX;j++){
      if(fread(p,1,2,fpr));
      z[i][j]=(double)p[1]*256+p[0];
      //fprintf(stderr,"%d %d %lf",p[0],p[1],z[i][j]);getchar();
    }
  }
  fclose(fpr);
  fprintf(stderr,"OK\n");

  remove(argv[2]);
  fprintf(stderr,"Write %s ... ",argv[2]);
  status=0;
  if (fits_create_file(&fp, argv[2], &status))
    printerror(status);
  if (fits_create_img(fp, bitpix, naxis, naxes, &status))
    printerror(status);
  fpixel=1;
  fprintf(stderr,"%ld x %ld format ",LINEPIX,LINEPIY);
  nelements=LINEPIX;
  for(i=0;i<LINEPIY;i++){
    for(j=0;j<LINEPIX;j++) buffer[j]=z[i][j];
    if(fits_write_img(fp, TFLOAT, fpixel, nelements, buffer, &status))
      printerror(status);
    fpixel+=LINEPIX;
  }
  if (fits_close_file(fp, &status))
    printerror(status);
  fprintf(stderr,"OK\n");
}

void printerror( int status)
{
    /*****************************************************/
    /* Print out cfitsio error messages and exit program */
    /*****************************************************/

    char status_str[FLEN_STATUS], errmsg[FLEN_ERRMSG];
  
    if (status)
      fprintf(stderr, "\n*** Error occurred during program execution ***\n");

    fits_get_errstatus(status, status_str);   /* get the error description */
    fprintf(stderr, "\nstatus = %d: %s\n", status, status_str);

    /* get first message; null if stack is empty */
    if ( fits_read_errmsg(errmsg) ) 
    {
         fprintf(stderr, "\nError message stack:\n");
         fprintf(stderr, " %s\n", errmsg);

         while ( fits_read_errmsg(errmsg) )  /* get remaining messages */
             fprintf(stderr, " %s\n", errmsg);
    }

    exit( status );       /* terminate the program, returning error status */
}
