/*
SIS0SORTCODE takes its input from stdin. It expects to be pipe connected to an
ls ft*S0*.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 "sis0sortcode.h"

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[6];
    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,"SIS0SORTCODE:E3:Unable to open %s\n",new_filename);
       fprintf(stderr,"SIS0SORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
/* NEVENTS */
    status=0;
    *nevents=0;
    ftgkyj_(&unit,"NEVENTS     ",nevents,comment,&status,8,10);
    if (status != 0) {
       fprintf(stderr,
	    "SIS0SORTCODE:E3:NEVENTS not found in EVENTS %s\n",new_filename);
       fprintf(stderr,"SIS0SORTCODE:E3:FITSIO status = %d\n",status);
       fflush(stderr);
       exit(3);
       }
    sprintf(eventstr,"%010d",*nevents);
    strncpy(sortcode.events,eventstr,10);
/* extract modals */
/* AEPOWRS0 */
    status=0;
    ftgkyj_(&unit,"S0_AEPOW    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%1d",keyint);
    strncpy(&sortcode.AEPOWRS0,intstr,1);
/* AEANLGS0 */
    status=0;
    ftgkyj_(&unit,"S0_AEANL    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%01d",keyint);
    strncpy(&sortcode.AEANLGS0,intstr,1);
/* DESTATS0 */
    status=0;
    ftgkyj_(&unit,"S0_DESTA    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%01d",keyint);
    strncpy(&sortcode.DESTATS0,intstr,1);
/* BIASHVS0 */
    status=0;
    ftgkyj_(&unit,"S0BIASHV    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.BIASHVS0,intstr,4);
/* ARENAS0 */
    status=0;
    ftgkyj_(&unit,"S0_ARENA    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%01d",keyint);
    strncpy(&sortcode.ARENAS0,intstr,1);
/* LVENAS0 */
    status=0;
    ftgkyj_(&unit,"S0_LVENA    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%01d",keyint);
    strncpy(&sortcode.LVENAS0,intstr,1);
/* LVDU0S0 */
    status=0;
    ftgkyj_(&unit,"S0_LVDU0    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.LVDU0S0,intstr,4);
/* LVDU1S0 */
    status=0;
    ftgkyj_(&unit,"S0_LVDU1    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.LVDU1S0,intstr,4);
/* LVDU2S0 */
    status=0;
    ftgkyj_(&unit,"S0_LVDU2    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.LVDU2S0,intstr,4);
/* LVDU3S0 */
    status=0;
    ftgkyj_(&unit,"S0_LVDU3    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.LVDU3S0,intstr,4);
/* LVDL0S0 */
    status=0;
    ftgkyj_(&unit,"S0_LVDL0    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.LVDL0S0,intstr,4);
/* LVDL1S0 */
    status=0;
    ftgkyj_(&unit,"S0_LVDL1    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.LVDL1S0,intstr,4);
/* LVDL2S0 */
    status=0;
    ftgkyj_(&unit,"S0_LVDL2    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.LVDL2S0,intstr,4);
/* LVDL3S0 */
    status=0;
    ftgkyj_(&unit,"S0_LVDL3    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.LVDL3S0,intstr,4);
/* ARIO0S0 */
    status=0;
    ftgkyj_(&unit,"S0_ARIO0    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%01d",keyint);
    strncpy(&sortcode.ARIO0S0,intstr,1);
/* ARIO1S0 */
    status=0;
    ftgkyj_(&unit,"S0_ARIO1    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%01d",keyint);
    strncpy(&sortcode.ARIO1S0,intstr,1);
/* ARIO2S0 */
    status=0;
    ftgkyj_(&unit,"S0_ARIO2    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%01d",keyint);
    strncpy(&sortcode.ARIO2S0,intstr,1);
/* ARIO3S0 */
    status=0;
    ftgkyj_(&unit,"S0_ARIO3    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%01d",keyint);
    strncpy(&sortcode.ARIO3S0,intstr,1);
/* STAH0S0 */
    status=0;
    ftgkyj_(&unit,"S0_STAH0    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.STAH0S0,intstr,4);
/* STAH1S0 */
    status=0;
    ftgkyj_(&unit,"S0_STAH1    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.STAH1S0,intstr,4);
/* STAH2S0 */
    status=0;
    ftgkyj_(&unit,"S0_STAH2    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.STAH2S0,intstr,4);
/* STAH3S0 */
    status=0;
    ftgkyj_(&unit,"S0_STAH3    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.STAH3S0,intstr,4);
/* ENDH0S0 */
    status=0;
    ftgkyj_(&unit,"S0_ENDH0    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.ENDH0S0,intstr,4);
/* ENDH1S0 */
    status=0;
    ftgkyj_(&unit,"S0_ENDH1    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.ENDH1S0,intstr,4);
/* ENDH2S0 */
    status=0;
    ftgkyj_(&unit,"S0_ENDH2    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.ENDH2S0,intstr,4);
/* ENDH3S0 */
    status=0;
    ftgkyj_(&unit,"S0_ENDH3    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.ENDH3S0,intstr,4);
/* BIASOFF0 */
    status=0;
    ftgkyj_(&unit,"S0BIASOF    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.BIASOFF0,intstr,4);
/* CCDPOWS0 */
    status=0;
    ftgkys_(&unit,"S0CCDPOW    ",keystring,comment,&status,8,100,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       strcpy(keystring,"                       ");
       }
    strncpy(sortcode.CCDPOWS0,keystring,4);
/* CCDMODE0 */
    status=0;
    ftgkyj_(&unit,"S0CCDMOD    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%01d",keyint);
    strncpy(&sortcode.CCDMODE0,intstr,1);
/* CCDLIST0 */
    status=0;
    ftgkys_(&unit,"S0CCDLST    ",keystring,comment,&status,8,100,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       strcpy(keystring,"                       ");
       }
    strncpy(sortcode.CCDLIST0,keystring,7);
/* STAV0S0 */
    status=0;
    ftgkyj_(&unit,"S0_STAV0    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.STAV0S0,intstr,4);
/* STAV1S0 */
    status=0;
    ftgkyj_(&unit,"S0_STAV1    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.STAV1S0,intstr,4);
/* STAV2S0 */
    status=0;
    ftgkyj_(&unit,"S0_STAV2    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.STAV2S0,intstr,4);
/* STAV3S0 */
    status=0;
    ftgkyj_(&unit,"S0_STAV3    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.STAV3S0,intstr,4);
/* ENDV0S0 */
    status=0;
    ftgkyj_(&unit,"S0_ENDV0    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.ENDV0S0,intstr,4);
/* ENDV1S0 */
    status=0;
    ftgkyj_(&unit,"S0_ENDV1    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.ENDV1S0,intstr,4);
/* ENDV2S0 */
    status=0;
    ftgkyj_(&unit,"S0_ENDV2    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.ENDV2S0,intstr,4);
/* ENDV3S0 */
    status=0;
    ftgkyj_(&unit,"S0_ENDV3    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.ENDV3S0,intstr,4);
/* GRADLVS0 */
    status=0;
    ftgkys_(&unit,"S0_GRADE    ",keystring,comment,&status,8,100,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       strcpy(keystring,"                       ");
       }
    strncpy(sortcode.GRADLVS0,keystring,8);
/* EVNTH0S0 */
    status=0;
    ftgkyj_(&unit,"S0_EVTR0    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.EVNTH0S0,intstr,4);
/* EVNTH1S0 */
    status=0;
    ftgkyj_(&unit,"S0_EVTR1    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.EVNTH1S0,intstr,4);
/* EVNTH2S0 */
    status=0;
    ftgkyj_(&unit,"S0_EVTR2    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.EVNTH2S0,intstr,4);
/* EVNTH3S0 */
    status=0;
    ftgkyj_(&unit,"S0_EVTR3    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.EVNTH3S0,intstr,4);
/* SPLTH0S0 */
    status=0;
    ftgkyj_(&unit,"S0_SPTR0    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.SPLTH0S0,intstr,3);
/* SPLTH1S0 */
    status=0;
    ftgkyj_(&unit,"S0_SPTR1    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.SPLTH1S0,intstr,3);
/* SPLTH2S0 */
    status=0;
    ftgkyj_(&unit,"S0_SPTR2    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.SPLTH2S0,intstr,3);
/* SPLTH3S0 */
    status=0;
    ftgkyj_(&unit,"S0_SPTR3    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%03d",keyint);
    strncpy(sortcode.SPLTH3S0,intstr,3);
/* STCLKS0 */
    status=0;
    ftgkyj_(&unit,"S0STCLK    ",&keyint,comment,&status,8,10);
/*
    if (status == 202) {
       fprintf(stderr,
	    "SIS0SORTCODE:E1:Modal parameter missing in %s\n", new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       fflush(stderr);
       *nevents= -1;
       return;
       }
*/
    if (status != 0) {
       keyint=0;
       }
    sprintf(intstr,"%04d",keyint);
    strncpy(sortcode.STCLKS0,intstr,4);
/* done with modals */
    status=0;
    ftclos_(&unit,&status);
    if (status != 0) {
       fprintf(stderr,"SIS0SORTCODE:E3:ERROR closing  %s\n",new_filename);
       fprintf(stderr,
 "SIS0SORTCODE:E1:%s dropped from merge (%d photons)\n",new_filename,*nevents);
       exit(3);
       }

}

main () {

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

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

    sortcode.blank=' ';

    while (gets(filename)!=NULL) {
	if (strstr(filename,".fits")==NULL) {
	   fprintf(stderr,"SIS0SORTCODE:E0:No .fits found in file name %s\n"
		   ,filename);
	   fprintf(stderr,"SIS0SORTCODE: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,"01",2)==0) {
               sortcode.fits_type='0';
              }
           else if (strncmp(sortcode.mode_code,"02",2)==0) {
               sortcode.fits_type='0';
              }
           else if (strncmp(sortcode.mode_code,"03",2)==0) {
               sortcode.fits_type='0';
              }
           else if (strncmp(sortcode.mode_code,"04",2)==0) {
               sortcode.fits_type='2';
              }
           else if (strncmp(sortcode.mode_code,"05",2)==0) {
               sortcode.fits_type='2';
              }
           else if (strncmp(sortcode.mode_code,"06",2)==0) {
               sortcode.fits_type='2';
              }
           else if (strncmp(sortcode.mode_code,"07",2)==0) {
               sortcode.fits_type='2';
              }
           else if (strncmp(sortcode.mode_code,"12",2)==0) {
               sortcode.fits_type='0';
              }
           else if (strncmp(sortcode.mode_code,"15",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,"SIS0SORTCODE:E3:Invalid mode code in %s\n",
		       filename);
               fflush(stderr);
               exit(3);
               }
           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.instrument);
          }
       else if (nevents == 0) {
          fprintf(stderr,
          "SIS0SORTCODE:E1:%s dropped from merge with 0 photons\n",filename);
       fflush(stderr);
          }
/* while loop end */
       }
    fprintf (stderr,"SIS0SORTCODE:LO:End program\n");
    fflush(stderr);
    }
