#include <stdio.h>
#include "ssmisu.h"

FILE *fout;

#ifdef IBM
int openout(int *unit) {
#elif LINUX
int openout_(int *unit) {
#else
int openout_(int *unit) {
#endif
  char fname[12];
  sprintf(fname,"fort.%02d",*unit);
  fout = fopen(fname, "w");
  if (fout == (FILE *) NULL) {
    printf("Failed to open output unit %d\n",*unit);
    return 1;
  }
  return 0;
}

/* ssmisout */
#ifdef IBM
void ssmisout(double *hdr, double *ident, double *chan) {
#elif LINUX
void ssmisout_(double *hdr, double *ident, double *chan) {
#else
void ssmisout_(double *hdr, double *ident, double *chan) {
#endif

  ssmisupt x;
  int bad = 0;
  int k, j;

  x.year   = (short int)     hdr[1];
  x.month  = (unsigned char) hdr[2];
  x.day    = (unsigned char) hdr[3];
  x.hour   = (unsigned char) hdr[4];
  x.minute = (unsigned char) hdr[5];
  x.second = (unsigned char) hdr[6];
  x.satid = (short int) ident[0];
  
  x.clat = hdr[7];
  x.clon = hdr[8];
  if (x.clat > 90 || x.clon > 360 || x.clon < -360) bad += 1;

  k = 0;
  for (j = 0; j < 24; j++) {
    /* We're only extracting a few channels, hence looking for j */
    if (j == 7 || (j >= 11 && j <= 17) ) {
      x.obs[k].tmbr    = chan[j*4 + 1];
      /* VERBOSE printf("%2d %6.2f\n",j, x.obs[j].tmbr); */
      if (x.obs[k].tmbr > 350) bad += 1;
      k += 1;
    }
  }


  if (bad == 0) {
    fwrite(&x, sizeof(ssmisupt), 1, fout);
  }
  #ifdef VERBOSE2
    printf("%4d %2d %2d %2d %2d %2d %3d  ",x.year, x.month, x.day, x.hour, x.minute, x.second, x.satid);
    printf("%6.2f %7.2f  ",x.clat, x.clon);
    for (i = 0; i < k; i++) {
      printf("%6.2f ",x.obs[i].tmbr);
    }
    printf("\n");
  #endif

  return;
}