/*
GISSOTCODE takes its input from stdin. It expects to be pipe connected to an
ls ft*G2*.fits as part of the building of the FMERGE runs.

This version uses ALL modal params to split on.

Input: stdin (pipe or file containing "ls *.fits" output
Output: stdout (sort string and file name)
       stderr (processing shell job log file)

*/

#include <stdio.h>
#include <string.h>

#include "gissortcode.h"

modify_mpc_mode_code( filename, naxis1_value)
    char *filename;
    char *naxis1_value; /* should point to 3 byte char string */
{
    int status=0;
    int readonly=0;
    int block=2880;
    int unit=10;
    int ext_number=1;
    int ext_found=0;
    int naxis1=0;
    char comment[11];
    char new_filename[80];
    char *ptr;
    char *ptr2;

    strcpy(new_filename,filename);

    /* open the FITS file */
    status=0;
    readonly=0;
    block=0;
    unit=10;
    ftopen_(&unit,new_filename,&readonly,&block,&status,strlen(new_filename));
    if (status != 0) {
       fprintf(stderr,"GISSORTCODE:E3:Unable to open %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    status=0;
    ext_number=2;
    ftmahd_(&unit,&ext_number,&ext_found,&status);
    if (status != 0) {
       fprintf(stderr,
               "GISSORTCODE:E3:Unable to move to EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    status=0;
    ftgkyj_(&unit,"NAXIS1  ",&naxis1,comment,&status,8,10);
    if (status != 0) {
       fprintf(stderr,
          "GISSORTCODE:E3:NAXIS1 not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    status=0;
    ftclos_(&unit,&status);
    if (status != 0) {
       fprintf(stderr,"GISSORTCODE:E3:ERROR closing  %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }

    sprintf(naxis1_value,"%03d",naxis1);

}
extract_modal_param( filename,nevents)
    char *filename;
    int *nevents;
{
    int status=0;
    int readonly=0;
    int block=2880;
    int unit=10;
    int ext_number=1;
    int ext_found=0;
    char keystring[100];
    int keyint;
    char intstr[4];
    char eventstr[11];
    char comment[11];
    char new_filename[80];
    char *ptr;
    char *ptr2;

    strcpy(new_filename,filename);

    /* open the FITS file */
    status=0;
    readonly=0;
    block=0;
    unit=10;
    ftopen_(&unit,new_filename,&readonly,&block,&status,strlen(new_filename));
    if (status != 0) {
       fprintf(stderr,"GISSORTCODE:E3:Unable to open %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
/* NEVENTS */
    status=0;
    ftgkyj_(&unit,"NEVENTS     ",nevents,comment,&status,8,10);
    if (status != 0) {
       fprintf(stderr,
              "GISSORTCODE:E3:NEVENTS not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(eventstr,"%010d",*nevents);
    strncpy(sortcode.events,eventstr,10);
/* extract modals */
/* PHA_BINS */
    status=0;
    keyint=0;
    ftgkyj_(&unit,"PHA_BINS     ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if ((status != 0)&&(*nevents>0)) {
       fprintf(stderr,
             "GISSORTCODE:E3:PHA_BINS not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(eventstr,"%04d",keyint);
    strncpy(sortcode.phabins,eventstr,10);
/* RISEBINS */
    status=0;
    keyint=0;
    ftgkyj_(&unit,"RISEBINS     ",&keyint,comment,&status,8,10);
    if (status == 202) {
/*
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
*/
       keyint=0;
       }
    else if ((status != 0)&&(*nevents>0)) {
       fprintf(stderr,
              "GISSORTCODE:E3:RISEBINS not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(eventstr,"%04d",keyint);
    strncpy(sortcode.risebins,eventstr,10);
/* TIMEBINS */
    status=0;
    keyint=0;
    ftgkyj_(&unit,"TIMEBINS     ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if ((status != 0)&&(*nevents>0)) {
       fprintf(stderr,
          "GISSORTCODE:E3:TIMEBINS not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(eventstr,"%04d",keyint);
    strncpy(sortcode.timebins,eventstr,10);
/* SP_BINS */
    status=0;
    keyint=0;
    ftgkyj_(&unit,"SP_BINS     ",&keyint,comment,&status,8,10);
    if (status == 202) {
/*
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
*/
       keyint=0;
       }
    else if ((status != 0)&&(*nevents>0)) {
       fprintf(stderr,
            "GISSORTCODE:E3:SP_BINS not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(eventstr,"%04d",keyint);
    strncpy(sortcode.spbins,eventstr,10);
/* RAWXBINS */
    status=0;
    keyint=0;
    ftgkyj_(&unit,"RAWXBINS     ",&keyint,comment,&status,8,10);
    if (status == 202) {
/*
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
*/
       keyint=0;
       }
    else if ((status != 0)&&(*nevents>0)) {
       fprintf(stderr,
              "GISSORTCODE:E3:RAWXBINS not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(eventstr,"%04d",keyint);
    strncpy(sortcode.rawxbins,eventstr,10);
/* RAWYBINS */
    status=0;
    keyint=0;
    ftgkyj_(&unit,"RAWYBINS     ",&keyint,comment,&status,8,10);
    if (status == 202) {
/*
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
*/
       keyint=0;
       }
    else if ((status != 0)&&(*nevents>0)) {
       fprintf(stderr,
             "GISSORTCODE:E3:RAWYBINS not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(eventstr,"%04d",keyint);
    strncpy(sortcode.rawybins,eventstr,10);
/* POWER */
    status=0;
    ftgkys_(&unit,"POWER    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
               "GISSORTCODE:E3:POWER not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.power='0';
       }
    else {
       sortcode.power='1';
       }
/* BYPASS */
    status=0;
    ftgkys_(&unit,"BYPASS    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
              "GISSORTCODE:E3:BYPASS not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
   /*    exit(3); */
       strcpy(keystring,"ON");
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.bypass='0';
       }
    else {
       sortcode.bypass='1';
       }
/* A_POWER */
    status=0;
    ftgkys_(&unit,"A_POWER    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:A_POWER not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
      /* exit(3); */
      strcpy(keystring,"ON");
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.a_power='0';
       }
    else {
       sortcode.a_power='1';
       }
/* HVH_POW */
    status=0;
    ftgkys_(&unit,"HVH_POW    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:HVH_POW not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.hvh_pow='0';
       }
    else {
       sortcode.hvh_pow='1';
       }
/* HVL_POW */
    status=0;
    ftgkys_(&unit,"HVL_POW    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:HVL_POW not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.hvl_pow='0';
       }
    else {
       sortcode.hvl_pow='1';
       }
/* HV_RED */
    status=0;
    ftgkys_(&unit,"HV_RED    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:HV_RED not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
     /*  exit(3);*/
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.hv_red='0';
       }
    else {
       sortcode.hv_red='1';
       }
/* HVH_LVL */
    status=0;
    ftgkyj_(&unit,"HVH_LVL     ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:HVH_LVL not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.hvh_lvl=intstr[2];
/* HVL_LVL */
    status=0;
    ftgkyj_(&unit,"HVL_LVL     ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:HVL_LVL not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.hvl_lvl=intstr[2];
/* GAIN */
    status=0;
    ftgkyj_(&unit,"GAIN     ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
           "GISSORTCODE:E3:GAIN not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.gain[0]=intstr[1];
    sortcode.gain[1]=intstr[2];
/* LE_DS */
    status=0;
    ftgkyj_(&unit,"LE_DS     ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else  if (status != 0) {
       fprintf(stderr,
           "GISSORTCODE:E3:LE_DS not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.le_ds=intstr[2];
/* CPU2 */
    status=0;
    ftgkys_(&unit,"CPU2    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:CPU2 not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
    /*   exit(3); */
       }
    if (strncmp(keystring,"RUN",3)==0) {
       sortcode.cpu2='R';
       }
    else {
       sortcode.cpu2='S';
       }
/* CPU3 */
    status=0;
    ftgkys_(&unit,"CPU3    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
           "GISSORTCODE:E3:CPU3 not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
   /*    exit(3); */
       }
    if (strncmp(keystring,"RUN",3)==0) {
       sortcode.cpu3='R';
       }
    else {
       sortcode.cpu3='S';
       }
/* CPU_SEL */
    status=0;
    ftgkys_(&unit,"CPU_SEL    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
           "GISSORTCODE:E3:CPU_SEL not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
   /*    exit(3); */
       }
    if (strncmp(keystring,"CPU2",4)==0) {
       sortcode.cpu_sel='2';
       }
    else {
       sortcode.cpu_sel='3';
       }
/* CPU_DSCN */
    status=0;
    ftgkys_(&unit,"CPU_DSCN    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:CPU_DSCN not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
   /*    exit(3); */
       }
    sortcode.cpu_dscn=keystring[0];
/* RBM_POW */
    status=0;
    ftgkys_(&unit,"RBM_POW    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
           "GISSORTCODE:E3:RBM_POW not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
   /*    exit(3); */
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.rbm_pow='0';
       }
    else {
       sortcode.rbm_pow='1';
       }
/* RBM_MFLG */
    status=0;
    ftgkys_(&unit,"RBM_MFLG    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:RBM_MFLG not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
    /*   exit(3); */
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.rbm_mflg='0';
       }
    else {
       sortcode.rbm_mflg='1';
       }
/* RBM_AUTO */
    status=0;
    ftgkys_(&unit,"RBM_AUTO    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:RBM_AUTO not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.rbm_auto='0';
       }
    else {
       sortcode.rbm_auto='1';
       }
/* RBM_FLVL */
    status=0;
    ftgkyj_(&unit,"RBM_FLVL     ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:RBM_FLVL not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.rbm_flvl=intstr[2];
/* RBM_LDL */
    status=0;
    ftgkyj_(&unit,"RBM_LDL     ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:RBM_LDL not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.rbm_ldl=intstr[2];
/* RT_LD */
    status=0;
    ftgkyj_(&unit,"RT_LD      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
           "GISSORTCODE:E3:RT_LD not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.rt_ld,intstr,3);
/* RT_UD */
    status=0;
    ftgkyj_(&unit,"RT_UD      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:RT_UD not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.rt_ud,intstr,3);
/* RT_B_CD */
    status=0;
    ftgkyj_(&unit,"RT_B_CD     ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:RT_B_CD not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.rt_b_cd=intstr[2];
/* ANO_SEL */
    status=0;
    ftgkys_(&unit,"ANO_SEL    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:ANO_SEL not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.ano_use='0';
       }
    else {
       sortcode.ano_use='1';
       }
/* ANO_TUNE */
    status=0;
    ftgkys_(&unit,"ANO_TUNE    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:ANO_TUNE not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.ano_tune='0';
       }
    else {
       sortcode.ano_tune='1';
       }
/* POS_DET */
    status=0;
    ftgkys_(&unit,"POS_DET    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:POS_DET not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sortcode.pos_det=keystring[0];
/* R_DSCR */
    status=0;
    ftgkys_(&unit,"R_DSCR    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:R_DSCR not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.r_dscr='0';
       }
    else {
       sortcode.r_dscr='1';
       }
/* S_DSCR */
    status=0;
    ftgkys_(&unit,"S_DSCR    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:S_DSCR not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.s_dscr='0';
       }
    else {
       sortcode.s_dscr='1';
       }
/* PH_TUNE */
    status=0;
    ftgkys_(&unit,"PH_TUNE    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:PH_TUNE not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.ph_tune='0';
       }
    else {
       sortcode.ph_tune='1';
       }
/* MASK_1 */
    status=0;
    ftgkys_(&unit,"MASK_1    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:MASK_1 not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.mask_1='0';
       }
    else {
       sortcode.mask_1='1';
       }
/* M1_LOGIC */
    status=0;
    ftgkys_(&unit,"M1_LOGIC    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:M1_LOGIC not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    if (strncmp(keystring,"ON",2)==0) {
       sortcode.m1_logic='0';
       }
    else {
       sortcode.m1_logic='1';
       }
/* MASK_2 */
    status=0;
    ftgkys_(&unit,"MASK_2    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:MASK_2 not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sortcode.mask_2=keystring[0];
/* M2_RGN */
    status=0;
    ftgkys_(&unit,"M2_RGN    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
              "GISSORTCODE:E3:M2_RGN not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sortcode.m2_rgn=keystring[0];
/* PH_EVENT */
    status=0;
    ftgkys_(&unit,"PH_EVENT    ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:PH_EVENT not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    strncpy(sortcode.ph_event,keystring,8);
/* CETR_X_P */
    status=0;
    ftgkyj_(&unit,"CETR_X_P    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
             "GISSORTCODE:E3:CETR_X_P not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.cetr_x_p,intstr,3);
/* CETR_Y_P */
    status=0;
    ftgkyj_(&unit,"CETR_Y_P      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:CETR_Y_P not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.cetr_y_p,intstr,3);
/* CETR_X_F */
    status=0;
    ftgkyj_(&unit,"CETR_X_F      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:CETR_X_F not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.cetr_x_f,intstr,3);
/* CETR_Y_F */
    status=0;
    ftgkyj_(&unit,"CETR_Y_F      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:CETR_Y_F not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.cetr_y_f,intstr,3);
/* R_DSCR_P */
    status=0;
    ftgkyj_(&unit,"R_DSCR_P      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:R_DSCR_P not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.r_dscr_p,intstr,3);
/* R_DSCR_F */
    status=0;
    ftgkyj_(&unit,"R_DSCR_F    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	  "GISSORTCODE:E3:R_DSCR_F not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.r_dscr_f,intstr,3);
/* SP_A_L_P */
    status=0;
    ftgkyj_(&unit,"SP_A_L_P    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:SP_A_L_P not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_a_l_p,intstr,3);
/* SP_A_U_P */
    status=0;
    ftgkyj_(&unit,"SP_A_U_P    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:SP_A_U_P not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_a_u_p,intstr,3);
/* SP_B_P */
    status=0;
    ftgkyj_(&unit,"SP_B_P    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:SP_B_P not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_b_p,intstr,3);
/* SP_C_P */
    status=0;
    ftgkyj_(&unit,"SP_C_P    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:SP_C_P not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_c_p,intstr,3);
/* SP_A_L_F */
    status=0;
    ftgkyj_(&unit,"SP_A_L_F    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:SP_A_L_F not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_a_l_f,intstr,3);
/* SP_A_U_F */
    status=0;
    ftgkyj_(&unit,"SP_A_U_F    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:SP_A_U_F not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_a_u_f,intstr,3);
/* SP_B_F */
    status=0;
    ftgkyj_(&unit,"SP_B_F    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:SP_B_F not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_b_f,intstr,3);
/* SP_C_F */
    status=0;
    ftgkyj_(&unit,"SP_C_F    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:SP_C_F not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_c_f,intstr,3);
/* M2_XL */
    status=0;
    ftgkyj_(&unit,"M2_XL      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:M2_XL not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.m2_xl,intstr,3);
/* M2_XU */
    status=0;
    ftgkyj_(&unit,"M2_XU      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:M2_XU not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.m2_xu,intstr,3);
/* M2_YL */
    status=0;
    ftgkyj_(&unit,"M2_YL      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:M2_YL not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.m2_yl,intstr,3);
/* M2_YU */
    status=0;
    ftgkyj_(&unit,"M2_YU      ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
            "GISSORTCODE:E3:M2_YU not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.m2_yu,intstr,3);
/* L1_S_DWN */
    status=0;
    ftgkyj_(&unit,"L1_S_DWN   ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:L1_S_DWN not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.l1_s_dwn=intstr[2];
/* LD_S_DWN */
    status=0;
    ftgkyj_(&unit,"LD_S_DWN   ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:LD_S_DWN not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.ld_s_dwn=intstr[2];
/* M2_S_DWN */
    status=0;
    ftgkyj_(&unit,"M2_S_DWN   ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:M2_S_DWN not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.m2_s_dwn=intstr[2];
/* X_S_DWN */
    status=0;
    ftgkyj_(&unit,"X_S_DWN   ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:X_S_DWN not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.x_s_dwn=intstr[2];
/* 1D_S_DWN */
    status=0;
    ftgkyj_(&unit,"1D_S_DWN   ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:1D_S_DWN not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    sortcode.d1_s_dwn=intstr[2];
/* C2_PGVER */
    status=0;
    ftgkyj_(&unit,"C2_PGVER    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:C2_PGVER not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.c2_pgver,intstr,3);
/* C3_PGVER */
    status=0;
    ftgkyj_(&unit,"C3_PGVER    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:C3_PGVER not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.c3_pgver,intstr,3);
/* X_AN_USE */
    status=0;
    ftgkys_(&unit,"X_AN_USE  ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:X_AN_USE not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    strncpy(sortcode.x_an_use,keystring,16);
/* Y_AN_USE */
    status=0;
    ftgkys_(&unit,"Y_AN_USE  ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:Y_AN_USE not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    strncpy(sortcode.y_an_use,keystring,16);
/* SP_PH_P */
    status=0;
    ftgkyj_(&unit,"SP_PH_P    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:SP_PH_P not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_ph_p,intstr,3);
/* SP_PH_F */
    status=0;
    ftgkyj_(&unit,"SP_PH_F    ",&keyint,comment,&status,8,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	     "GISSORTCODE:E3:SP_PH_F not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.sp_ph_f,intstr,3);
/* MASK1_X */
    status=0;
    ftgkys_(&unit,"MASK1_X  ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:MASK1_X not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    strncpy(sortcode.mask1_x,keystring,16);
/* MASK1_Y */
    status=0;
    ftgkys_(&unit,"MASK1_Y  ",keystring,comment,&status,8,100,10);
    if (status == 202) {
       fprintf(stderr,
           "GISSORTCODE:E1:Modal parameter missing in %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,
 "GISSORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents=  -1;
       return;
       }
    else if (status != 0) {
       fprintf(stderr,
	    "GISSORTCODE:E3:MASK1_Y not found in EVENTS %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       /*exit(3);*/
       }
    strncpy(sortcode.mask1_y,keystring,16);
/* done with modals */
    status=0;
    ftclos_(&unit,&status);
    if (status != 0) {
       fprintf(stderr,"GISSORTCODE:E3:ERROR closing  %s\n",new_filename);
       fflush(stderr);
       fprintf(stderr,"GISSORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }

}

main () {

    char filename[80];
    char *dot;
    int housekeeping=0;
    int nevents=0;

    fprintf (stderr,"GISSORTCODE:LO:Start program\n");
    fflush(stderr);

    sortcode.blank=' ';

    while (gets(filename)!=NULL) {
	if (strstr(filename,".fits")==NULL) {
	   fprintf(stderr,"GISSORTCODE:E0:No .fits found in file name %s\n"
		   ,filename);
           fflush(stderr);
	   fprintf(stderr,"GISSORTCODE:E0:File skipped as invalid\n");
           fflush(stderr);
	   continue;
	   }
	dot = strrchr(filename,'.');
/* Now figure out what kind of file name we are dealing with */
/* Extract everything we need BEFORE we use common code for modal params*/
        if (strncasecmp((dot-2),"99",2)==0) {
           /* non-obs mode events file */
	   sortcode.instrument= *(dot-6); /* Instrument */
           sortcode.fits_type='0'; /* default to events */
	   sortcode.mode_code[0]='9'; /* mode code is non-obs */
	   sortcode.mode_code[1]='9'; /* mode code is non-obs */
	   sortcode.bit_rate='0'; /* bit-rate code is meaningless */
           strncpy(sortcode.file_time,&filename[2],16); /* ISAS file time */
           sortcode.frfread_seq[0]= *(dot-5);  /* frfread seq # (part 1) */
           sortcode.frfread_seq[1]= *(dot-4);  /* frfread seq # (part 2) */
           sortcode.frfread_seq[2]= *(dot-3);  /* frfread seq # (part 2) */
           }
        else { /* original normal cases */
	   dot = dot - 8; /* .fits file name */
	   sortcode.instrument= *(dot+1); /* instrument code */
           sortcode.mode_code[0]= *(dot+5); /* mode code (part 1) */
	   sortcode.mode_code[1]= *(dot+6); /* mode code (part 2) */
           sortcode.bit_rate= *(dot+7); /* bit rate */
           if (strncmp(sortcode.mode_code,"70",2)==0) {
               sortcode.fits_type='0';
              }
           else if (strncmp(sortcode.mode_code,"71",2)==0) {
               sortcode.fits_type='0';
              }
           else if (strncmp(sortcode.mode_code,"72",2)==0) {
               sortcode.fits_type='0';
              }
           else if (strncmp(sortcode.mode_code,"73",2)==0) {
               sortcode.fits_type='2';
              }
           else if (strncmp(sortcode.mode_code,"99",2)==0) {
               sortcode.fits_type='0';
              }
           else if (strncmp(sortcode.mode_code,"00",2)==0) {
               sortcode.fits_type='0'; /* until frfread stops these */
              }
           else {
               fprintf(stderr,"GISSORTCODE:E3:Invalid mode code in %s\n",
		       filename);
               fflush(stderr);
               exit(3);
               }
/* special mode 71 override */
	   strncpy(sortcode.naxis1,"000",3);
           if (strncmp(sortcode.mode_code,"71",2)==0) {
	      modify_mpc_mode_code(filename,sortcode.naxis1);
              }
           strncpy(sortcode.file_time,&filename[2],16); /* ISAS file time */
	   sortcode.frfread_seq[0]= *(dot+2);  /* frfread seq # (part 1) */
	   sortcode.frfread_seq[1]= *(dot+3);  /* frfread seq # (part 2) */
	   sortcode.frfread_seq[2]= *(dot+4);  /* frfread seq # (part 2) */
	   }
/* move the filename to the sortcode */
       strcpy(sortcode.sort_filename,filename);
/* extract the modal params */
       extract_modal_param(filename,&nevents);
/* write whole thing to stdout */
       if (nevents > 0) {
          printf("%s\n",&sortcode);
          }
       else if (nevents == 0) {
          fprintf(stderr,
          "GISSORTCODE:E1:%s dropped from merge with 0 photons\n",filename);
          fflush(stderr);
          }
/* while loop end */
       }
    fprintf (stderr,"GISSORTCODE:LO:End program\n");
    fflush(stderr);
    }
