/* @(#) File name: firesdf_read.c Release: 1.1 Date: 7/28/94, 14:00:07 */ /******************************************************************************** * * * FILE: read_sdf * * VERSION: 1.00 July 28, 1994 * * VERSION: 1.01 August 03, 1994 * * VERSION: 1.02 August 26, 1994 * * VERSION: 1.03 September 18, 1994 * * VERSION: 1.04 September 26, 1995 * * VERSION: 1.05 April 10, 1997 * * * * AUTHOR: Paula Detweiler, Langley DAAC * * EXTERNAL ROUTINES AUTHOR: Meng-chun Lin, Langley DAAC * * * * PURPOSE/DESCRIPTION: * * The purpose of this program is to produce a general read program * * for users to access FIRE data set files which are written in the * * Standard Data Format (SDF). Because every file which was written * * in this format did not follow this format exactly how it was stated * * in the Standard Data Format User's Guide, these exceptions had to * * be included in this read program. Our goal here at the Langley * * DAAC was to be able to have one read program for this format for * * easy access for the users as well as to us. Because many users * * may change the names of the data set files when transferring the * * data to their machine, we have figured out a way to identify the * * different experiments by two unique lines in these files. These * * two lines appear in the first to lines of the header file. The * * first line identifies the experiment dates, and the second line * * states the data producer(s)'s name. * * If you have any questions, please contact the Langley DAAC. * * * * 08/03/94 Inserted more print statements. Modified comments for Dennis * * Hlavka's experiments. He completed reviewing the data and passed on* * some information about the data files. Code did not have to be * * modified, only data comments had to be added. * * 08/26/94 Inserted more print statements. Modified comments for Paul * * Cielielski's data set where GMT dates were incorrect. The data * * files could not be corrected because they are binary files. * * Therefore, only comments could be made to inform the user. * * Comments were also added concerning the NICHOLLS/C130 data sets. * * The data producer is aware that parameters #320 and #323 should be * * flagged as bad data. Please ignore these data parameters! The * * data producer is also aware that there will be some other parameters* * with some values out of range. There are only a few. The read * * program will inform the user which parameters and in which record * * the out of range values appear. Please do not use these flagged * * values as well. * * 09/18/94 Corrected spelling mistakes. * * 09/26/95 Changed mail stop address. * * 04/10/97 Changed area code and data set names * * * * INVOCATION: * * This program can run in interactive mode, batch/interactive mode, * * and batch mode. * * Interactive mode: * * read_sdf * * Batch/Interactive mode: * * read_sdf header_file vtoc_file data_file * * or * * read_sdf header_file vtoc_file data_file 0 * * Batch mode: * * read_sdf header_file vtoc_file data_file num_par par#1 par#2 ... par#n * * * * WHERE: * * >>For the interactive mode, you would follow everything in the INPUT * * section states. * * * * >>For the batch/interactive mode, you would execute the program and * * include the file names (to save some typing) and interactively * * select the parameters when they are listed on the screen. It is * * optional to include the zero which means to the program that you * * are still running the selection of parameters in interactive mode. * * * * >>For the batch mode, you must include the following information. * * * * is the actual header file as identified in the Standard Data Format.* * This file contains the information which identifies the parameters, * * min/max values, as well as scientific information written by the * * data producer and what machine the data was produced on. * * Please include the full path as well as the filename. * * * * is the actual vtoc file as identified in the Standard Data Format. * * This file contains the ascii header information for each data file. * * Please include the full path as well as the filename. * * * * is the actual data file as identified in the Standard Data Format. * * This file contains the ascii header information about the data * * which is written in binary form. Please include the full path as * * well as the filename. * * * * is the number of parameters you wish to output to the screen. The * * program will only read that many integers following this value. * * * * are the parameter number representation of which values you wish to * * output to the screen. * * * * INPUT: There are three input files that the program needs to produce any * * output for the user. * * * * is the actual header file as identified in the Standard Data Format.* * This file contains the information which identifies the parameters, * * min/max values, as well as scientific information written by the * * data producer and what machine the data was produced on. * * Please include the full path as well as the filename. * * * * is the actual vtoc file as identified in the Standard Data Format. * * This file contains the ascii header information for each data file. * * Please include the full path as well as the filename. * * * * is the actual data file as identified in the Standard Data Format. * * This file contains the ascii header information about the data * * which is written in binary form. Please include the full path as * * well as the filename. * * * * Once the header file has been read in, a list of the variables will * * be printed onto the screen for the user to select which parameter * * he would like to print out to the screen. The user at this time * * can select as many variables as he chooses. * * * * * OUTPUT: All results will be written to the screen. The user may redirect * * his output to a file or modify the read program to look for another * * parameter which contains the full path and name of the output file * * to be created. * * * * INTERNAL ROUTINES: * * * * EXTERNAL ROUTINES: * * * * NOTES: * * There are 13 experiments that this program can read. To help the * * user, I have included the lines of which identifies these * * experiments in a unique manner. The arrows, ->, designate those * * lines which are read from the header file. * * * * FIRE CIRRUS I Experiment: * * 1) P0119 (tapename is for DAAC purposes) * * ci1_sabre_861013_1102 * * ->FIRE.CIIFO.CSU .000001.0.19861013.19861102 * * ->Paul F. Hein * * 2) P3067 (tapename is for DAAC purposes) * * ci1_er2_861013_1102 * * ->FIRE.CIIFO.ARC .000001.0.19861013.19861102 * * ->FRANCISCO P. J. VALERO * * 3) P2699 (tapename is for DAAC purposes) * * ci1_raob_861013_1102 * * ->FIRE.CIIFO.GSFC.000001.0.19861013.19861103 * * ->Dr. David O'C. Starr * * 4) P9963 (tapename is for DAAC purposes) * * ci1_tovs_861014_1102 * * ->FIRE.CIIFO.UWIS.000001.0.19861102.19861102 * * ->DON WYLIE * * 5) P9991 (tapename is for DAAC purposes) * * ci1_spin_861013_1102 * * ->FIRE.CIIFO.GSFC.000001.0.19861013.19861102 * * ->DENNIS HLAVKA/JIM SPINHIRNE * * * * FIRE Marine Stratocumulus Experiment: * * 6) P1160 (tapename is for DAAC purposes) * * ->FIRE.MSIFO.CSU .000001.0.19870707.19870714 * * ->Paul F. Hein * * 7) P2769 (tapename is for DAAC purposes) * * ->FIRE.MSIFO.CSU .000001.0.19870630.19870719 * * ->PAUL E. CIESIELSKI * * 8) P9958 (tapename is for DAAC purposes) * * ->FIRE.MSIFO.PSUS.000002.0.19870701.19870719 * * ->MR. WILLIAM J. SYRETT * * 9) P9966 (tapename is for DAAC purposes) * * ->FIRE.CIIFO.GSFC.000001.0.19870708.19870718 * * ->DENNIS HLAVKA/JIM SPINHIRNE * * 10) P9996 (tapename is for DAAC purposes) * * ->FIRE.MSIFO.CSU .000001.1.19870630.19870719 * * ->Paul F. Hein * * 11) P9933 (tapename is for DAAC purposes) * * ->FIRE.MSIFO.UKMO.000002.0.19870707.19870713 * * ->DR S NICHOLLS * * 12) P9934 (tapename is for DAAC purposes) * * ->FIRE.MSIFO.UKMO.000002.0.19870714.19870718 * * ->DR S NICHOLLS * * 13) P9979 - Test File (tapename is for DAAC purposes) * * ->FIRE.MSIFO.UKMO.000001.0.19850729.19850729 * * ->DR S NICHOLLS * * * ********************************************************************************/ #ifdef sccs static char sccsid[] = "File: firesdf_read.c Release: 1.1 Date: 7/28/94, 14:00:07" #endif /* Identify System include files */ #include #include #include #include /* Constant MAXPATHLEN is defined here. */ #include #include #include /* Local C include file */ #include "fire_sdf.h" /* Define variables */ #define HEAD_STR 160 /* Expected ASCII header length in data file */ #define MAX_LABELS 400 /* Maximum number of labels in data files */ /* Global variables */ extern char *optarg; /* Set by GETOPT for options expecting arguments */ extern int optind; /* Set by GETOPT - index of next ARGV to be processed */ /* Define external functions */ extern int get_fire_id(); extern void interrupt_cat(); extern int str_trim(); extern double pow(); main (argc, argv) int argc; char *argv[]; { /* Beginning of main function */ void Ask_user(); /* Function which ask users for filenames and opens files */ void Check_min_max(); /* Function which checks min/max values */ int Check_name(); /* Function which checks parameter name to what user chose */ int Count_bytes(); /* Function which counts extra bytes in ascii header record */ void Data_id_1(); /* Function which lists findings from DAAC */ void Data_id_2(); /* Function which lists findings from DAAC */ void Data_id_3(); /* Function which lists findings from DAAC */ void Data_id_4(); /* Function which lists findings from DAAC */ void Data_id_5(); /* Function which lists findings from DAAC */ void Data_id_6(); /* Function which lists findings from DAAC */ void Data_id_7(); /* Function which lists findings from DAAC */ void Data_id_8(); /* Function which lists findings from DAAC */ void Data_id_9(); /* Function which lists findings from DAAC */ void Data_id_10(); /* Function which lists findings from DAAC */ void Data_id_11(); /* Function which lists findings from DAAC */ void Data_id_12(); /* Function which lists findings from DAAC */ void Data_id_13(); /* Function which lists findings from DAAC */ void Data_id_default();/* Function which states there are no data files in DAAC */ void No_data_file(); /* Function which prints error message */ void No_data_rec(); /* Function which prints error message */ void No_head_file(); /* Function which prints error message */ void No_vtoc_file(); /* Function which prints error message */ void Open_files(); /* Function which opens all input files */ void Print_banner(); /* Function which prints version # and date of this program */ void Print_head(); /* Function which prints header information from data file */ void Print_rec(); /* Function which prints record information */ char choice[4], data_file[MAXPATHLEN+1], /* Input data file name */ header_file[MAXPATHLEN+1], /* Input header file name */ rname[9], /* Stores record name */ select_name[MAX_LABELS][9],/* Stores labels of parameters selected by the user */ temp_name[MAXPATHLEN+1], /* Temp variable */ tryit[MAXPATHLEN+1], /* Stores double number in character form */ vtoc_file[MAXPATHLEN+1]; /* Input VTOC file name */ ddr_var *vp; /* Pointer to each variable in record */ double real_val; /* Value converted to real number */ float labelmax[MAX_LABELS], /* Stores max value for each variable in record */ labelmin[MAX_LABELS], /* Stores min value for each variable in record */ max, /* Max value */ min, /* Min value */ test_val; /* Value converted from double to float */ header *aux, /* Number of auxillary files - should be 0 */ *obs, /* Number of parameters in record */ *p; /* HEADER Data type defined in local include file */ int countmax[MAX_LABELS], /* Array that stores count of values */ /* that exceed max value */ countmin[MAX_LABELS], /* Array that stores count of values */ /* that exceed min value */ data_id, /* Value to identify FIRE experiment */ extra, /* Remainder of ascii characters to read in */ found=0, /* Found record name flag */ ii,i, /* Loop counter */ j, /* Loop counter */ k, /* Loop counter */ len, /* Counter */ log_rec_siz, /* Equivalent to p->lrsiz (logical record size) */ naux, /* Identifies SRB data - should always be 0 */ nrec, /* Number of records in header file */ select[MAX_LABELS], /* Array which stores the variables */ /* user would like to print */ select_count, /* Counter for number of parameters */ /* user would like to print */ swap_flag, /* Flag for bytes to be swapped or not */ value; /* Integer representation of data variable */ unsigned char buf[HEAD_STR], /* String to store 160 ascii characters */ buffer[4]; /* Array to store each byte wordsize max = 4 */ vtoc_data vtoc; /* Contains information from VTOC file */ FILE *dptr, /* Pointer for the data file */ *hptr, /* Pointer for the header file */ *vptr; /* Pointer for the vtoc file */ int q; int r; float result; /*******************************************/ /* */ /* MAIN PROGRAM */ /* */ /*******************************************/ /* Initialize arrays */ select_count = 0; for (i=0; i 5){ /* Batch Mode */ strcpy(header_file,argv[1]); strcpy(vtoc_file,argv[2]); strcpy(data_file,argv[3]); select_count = atoi(argv[4]); for ( i = 1; i <= select_count; i++) { select[i-1] = atoi(argv[4+i]) - 1; } } (void) Open_files(header_file,&hptr,vtoc_file,&vptr,data_file,&dptr); for (i=0; i 0) i++; } printf("\n\nThe number of VTOC entries (number of data files) is %d.\n", i); fclose(vptr); /* Close VTOC file */ /* Data_id_8 does not have an ascii header record in each */ /* data record file, therefore, this statement has to be ignored. */ if (data_id != 8) { fread((char *) &buf[0],sizeof(unsigned char),HEAD_STR,dptr); (void) Print_head (buf,rname); /* prints header information */ } /* Because the ascii header record is missing from these experiments, there */ /* is no way that this program can continue running without this information.*/ /* Therefore, the program assigns the variable to the correct record name. */ /* This only occurs in two files at the present time. */ if (data_id == 8) strcpy(rname,"PSUWINDS"); /* The following lines of code look for a matching record name obtained */ /* from the header file. If there is a match, then the program can */ /* continue. Otherwise, an error message is printed onto the screen and */ /* exits the program. */ j = 1; if (nrec != 0) { p = obs; while ( (found != 1) && (j <= nrec) ) { if (strncmp(rname,p->rec_name, 8) != 0) { p++; j++; } else found = 1; } } else { (void) No_data_rec(); } log_rec_siz = p->lrsiz; extra = Count_bytes(log_rec_siz); /* Identify extra bytes in header record */ /* This case statement performs more operations specific to the data id. */ /* This is where many adjustments had to be made pertaining to the layout*/ /* of each data experiment. */ switch (data_id) { case 1: /* FIRE I - ci1_sabr_861013_1102 - P0119 */ (void) Data_id_1(); /* Real data starts at byte # 1344 */ fread((char *) &buf[0],sizeof(unsigned char),extra,dptr); fread((char *) &buf[0],sizeof(unsigned char),HEAD_STR,dptr); fread((char *) &buf[0],sizeof(unsigned char),extra,dptr); break; case 2: /* FIRE I - ci1_er2_861013_1102 - P3067/P9999 */ (void) Data_id_2(); break; case 3: /* FIRE I - ci1_raob_861013_1102 - P2699 */ (void) Data_id_3(); extra = 64; fread((char *) &buf[0],sizeof(unsigned char),extra,dptr); break; case 4: /* FIRE I - ci1_tovs_861014_1102 - P9963 */ (void) Data_id_4(); for (i=2;i<=30;i++) fread((char *) &buf[0],sizeof(unsigned char),HEAD_STR,dptr); break; case 5: /* FIRE I - ci1_spin_861013_1102 - P9991 */ (void) Data_id_5(); break; case 6: /* FIRE M.S. - P1160 */ (void) Data_id_6(); extra = 120; fread((char *) &buf[0],sizeof(unsigned char),extra,dptr); break; case 7: /* FIRE M.S. - P2769 */ (void) Data_id_7(); if ((strncmp("CEILOM",rname,6)) == 0) extra = 20; else if ((strncmp("CLASS10",rname,7)) == 0) extra = 48; else extra = 0; fread((char *) &buf[0],sizeof(unsigned char),extra,dptr); break; case 8: /* FIRE M.S. - P9958 */ (void) Data_id_8(); break; case 9: /* FIRE M.S. - P9966 */ (void) Data_id_9(); break; case 10: /* FIRE M.S. - P9996 */ (void) Data_id_10(); fread((char *) &buf[0],sizeof(unsigned char),extra,dptr); break; case 11: /* FIRE M.S. - P9933 */ (void) Data_id_11(); for (i=2;i<=8;i++) fread((char *) &buf[0],sizeof(unsigned char),HEAD_STR,dptr); fread((char *) &buf[0],sizeof(unsigned char),124,dptr); break; case 12: /* FIRE M.S. - P9934 */ (void) Data_id_12(); for (i=2;i<=8;i++) fread((char *) &buf[0],sizeof(unsigned char),HEAD_STR,dptr); fread((char *) &buf[0],sizeof(unsigned char),124,dptr); break; case 13: /* FIRE M.S. - P9979 */ (void) Data_id_13(); for (i=2;i<=8;i++) fread((char *) &buf[0],sizeof(unsigned char),HEAD_STR,dptr); fread((char *) &buf[0],sizeof(unsigned char),128,dptr); break; default: (void) Data_id_default(); break; } /* This part only performs when running the interactive mode of the program. */ if (select_count == 0) { printf("*************************************************************\n"); printf("* This is a list of the parameters within this data file. *\n"); printf("* Enter the number preceding the parameter name you wish *\n"); printf("* to output. Enter 0 for continuing to the next screen. *\n"); printf("*************************************************************\n\n"); printf(" Number Parameter\n"); printf(" ------ ---------\n"); vp = p->vd_ptr; /* Assign new pointer */ j = 0; strcpy(choice,"-1"); while (j < p->nvars) { for (k = 0; (jnvars) && (k < 15) ; k++) { printf(" %3d %s\n",j+1,vp->mnemonic); vp++; j++; } while ((atoi(choice)) != 0) { printf("\nPlease enter selection: "); scanf("%s",choice); if ((atoi(choice)) != 0) { select[select_count] = atoi(choice) - 1; select_count++; } printf("\n"); } strcpy(choice,"-1"); } } vp = p->vd_ptr; /* Assign new pointer */ i = 0; while(invars){ for (j=0;jmnemonic); } vp++; i++; } vp = p->vd_ptr; /* Assign new pointer */ j = 0; while (j++ < p->nvars) /* Loop through to assign min/max values */ { labelmin[j] = vp->min; labelmax[j] = vp->max; vp++; } printf("You have selected %d parameters to be printed to the screen.\n",select_count); printf("These are: \n"); for ( i = 0; i < select_count; i++) printf(" %s\n",select_name[i]); vp = p->vd_ptr; k = 1; while ((feof(dptr)) == 0) /* reads in data till end of file */ { j = 1; while (j <= p->nvars) { fread((char * ) &buffer[0], sizeof(unsigned char), vp->size,dptr); if (feof(dptr) != 0) { printf("This is a summary of all of the parameters findings.\n"); printf("REC NAME MIN MIN# MAX MAX#\n"); for(extra=1; extra <= p->nvars; extra++,vp++) printf("%d ... %s ... %.3f %d ...... %.3f %d\n",extra,vp->mnemonic, labelmin[extra],countmin[extra],labelmax[extra],countmax[extra]); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("~ The end of file has been reached with ~\n"); printf("~ %d records read in. ~\n",k-1); printf("~ This is a normal termination. ~\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\n"); /* release dynamic allocated space from memory */ free ((char *)obs); fclose (dptr); /* close input file */ exit ( 0 ); /* exit code successfully */ } if (swap_flag) /* if data written by vax swap bytes */ { switch (vp->size) { case 1: /* word size is 1 bytes */ buffer[1] = '0'; buffer[2] = '0'; buffer[3] = '0'; break; case 2: /* word size is 2 bytes */ buffer[2] = '0'; buffer[3] = '0'; break; case 3: /* word size is 3 bytes */ buffer[3] = '0'; break; default: /* word size is 4 bytes */ break; } (void) byte_swap(buffer,4,1); /* all word size = 4 bytes */ } /* Converting the 4 bytes of data to one integer */ value = buffer[0] * 256 *256 * 256; value = (buffer[1] * 256 * 256) + value; value = (buffer[2] * 256) + value; value = value + buffer[3]; if ( (value == INT_MAX) && (vp->size == 4)) { /* 2147483647 */ /* This is the section which prints out the selected data. It */ /* will print out all of the choices in each record. */ for (ii=0;iisize == 4)) { /* 4294967295 */ /* This is the section which prints out the selected data. It */ /* will print out all of the choices in each record. */ for (ii=0;iib != 0) /* double integer */ { real_val = pow(2.0,(((double)vp->N) - ((double)vp->b))); real_val = ((double)value * real_val) + (vp->A * 1.0); } else /* int times 1.0 */ real_val = (double)value; /* This step had to be included so that the TAL value */ /* will fall in the min/max range. The data producer */ /* has asked the DAAC to do this as well as pass this */ /* information onto the user. */ if ((data_id == 7) && (strncmp(vp->mnemonic,"TAL",3) == 0)) real_val = real_val - 100000.0; min = vp->min; /* get min value for parameter */ max = vp->max; /* get max value for parameter */ strcpy(rname,vp->mnemonic); /* This is the section which prints out the selected data. It */ /* will print out all of the choices in each record. */ for (ii=0;iinvars == 7) fread((char * ) &buffer[0], sizeof(unsigned char), 4, dptr); else if (p->nvars == 2) fread((char *) &buffer[0], sizeof(unsigned char), 24, dptr); } else if (data_id == 5) fread((char *) &buffer[0], sizeof(unsigned char), 4, dptr); else if (data_id == 9) fread((char *) &buffer[0], sizeof(unsigned char), 4, dptr); vp = p->vd_ptr; /* move pointer back to beginning parameter */ k++; /* increment event counter */ } } /* End of main function */ /************************************************************************** * * * FILE: Ask_user * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * Prompts user for files needed for this program. * * * * INVOCATION: * * (void) Ask_user(header_file,vtoc_file,data_file); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ void Ask_user(header_file,vtoc_file,data_file) char *header_file; char *vtoc_file; char *data_file; { char temp_name[MAXPATHLEN+1]; /* Temp variable */ printf("This read program expects three files: header file, vtoc file,\n"); printf("and data file.\n\n"); printf("Please enter the full path and file name for the Header file:\n"); scanf("%s",temp_name); strcpy(header_file,temp_name); printf("\n"); printf("Please enter the full path and file name for the VTOC file:\n"); scanf("%s",temp_name); strcpy(vtoc_file,temp_name); printf("\n"); printf("Please enter the full path and file name for the data file:\n"); scanf("%s",temp_name); strcpy(data_file,temp_name); printf("\n"); } /* End of function, Ask_user */ /************************************************************************** * * * FILE: Check_min_max * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routines verifies that the data values fall in the range * * of the minimum and maximum values assigned to each parameter * * from the header file. If a value is out of range, this * * value is written out to the report file as well as the record * * number, the min and max values. * * * * INVOCATION: * * (void) Check_min_max(real_val,min,max,rname,k); * * WHERE * * * * is the variable which contains the full path of the data * * * * is the variable which contains the assigned minimum value * * for that particular data value/ parameter. * * * * is the variable which contains the assigned maximum value * * for that particular data value/ parameter. * * * * is the parameter's name for current real_val. * * * * is the counter for the current event/record. * * * * array which stores the minimum value for all parameters * * met or assigned by program. * * * * array which stores the maximum value for all parameters * * met or assigned by program. * * * * is the position integer on where in the array this function * * is going to store the new counts. * * * * array which stores the number of data values which fall * * below the assigned minimum value. * * * * array which stores the number of data values which exceed * * the assigned maximum value. * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * * NOTES: None. * * * ***************************************************************************/ void Check_min_max(real_val, min, max,rname,k,labelmin,labelmax,j,countmin,countmax,value) double real_val; float min, max; char *rname; int k; float labelmin[MAX_LABELS],labelmax[MAX_LABELS]; int j,countmin[MAX_LABELS],countmax[MAX_LABELS],value; { if ((float)real_val < min) { countmin[j]++; if ((float)real_val < labelmin[j]) labelmin[j] = (float)real_val; printf("ERROR - Label : %s\n",rname); printf(" Current Value : %8.3f\n",real_val); printf(" Current Integer: %i\n",value); printf(" Defined Min : %8.1f\n",min); printf(" Event Number : %d\n\n\n",k); } else if (real_val > max) { countmax[j]++; if ((float)real_val > labelmax[j]) labelmax[j] = (float)real_val; printf("ERROR - Label : %s\n",rname); printf(" Current Value : %8.3f\n",real_val); printf(" Current Integer: %i\n",value); printf(" Defined Max : %8.1f\n",max); printf(" Event Number : %d\n\n\n",k); } } /* End of function, Check_min_max */ /************************************************************************** * * * FILE: Count_bytes * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * Prints an error message stating that the specified data file * * does not exist and exits the program. * * * * INVOCATION: * * return_value = Count_bytes(log_rec_siz); * * WHERE: * * log_rec_siz - The logical record size defined in the header * * file. * * return_value - Returns the number of bytes greater than or * * less than that of the standard record size of * * 160 bytes. * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ int Count_bytes(log_rec_siz) int log_rec_siz; { int extra; if (log_rec_siz > HEAD_STR) { extra = log_rec_siz - HEAD_STR; } else if (log_rec_siz < HEAD_STR) { extra = HEAD_STR % log_rec_siz; extra = log_rec_siz - extra; } return(extra); } /* End of function, Count_bytes */ /************************************************************************** * * * FILE: No_data_file * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * Prints an error message stating that the specified data file * * does not exist and exits the program. * * * * INVOCATION: * * (void) No_data_file(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ void No_data_file() /* Function which prints error message */ { printf("*******************************************\n"); printf("* ERROR - Unable to open the data file. *\n"); printf("* Check to see if the file exists *\n"); printf("* in the path or name specified. *\n"); printf("* Program has terminated. *\n"); printf("*******************************************\n"); exit ( -1 ); } /* End of function, No_data_file */ /************************************************************************** * * * FILE: No_data_rec * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * Prints an error message stating that in the specified data * * file, the specified record does not exist in the data file. * * * * INVOCATION: * * (void) No_data_rec(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ void No_data_rec() /* Function which prints error message */ { printf("********************************************\n"); printf("* NOTE to the USER! *\n"); printf("* There were no data records listed in the *\n"); printf("* header file. Please review your data. *\n"); printf("* Program has terminated. *\n"); printf("********************************************\n"); exit( -1 ); } /* End of function, No_data_rec */ /************************************************************************** * * * FILE: No_head_file * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * Prints an error message stating that the specified header file * * does not exist and exits the program. * * * * INVOCATION: * * (void) No_head_file(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ void No_head_file() /* Function which prints error message */ { printf("*******************************************\n"); printf("* ERROR - Unable to open the header file. *\n"); printf("* Check to see if the file exists *\n"); printf("* in the path or name specified. *\n"); printf("* Program has terminated. *\n"); printf("*******************************************\n"); exit ( -1 ); } /* End of function, No_head_file */ /************************************************************************** * * * FILE: No_vtoc_file * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * Prints an error message stating that the specified VTOC file * * does not exist and exits the program. * * * * INVOCATION: * * (void) No_vtoc_file(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ void No_vtoc_file() /* Function which prints error message */ { printf("*******************************************\n"); printf("* ERROR - Unable to open the VTOC file. *\n"); printf("* Check to see if the file exists *\n"); printf("* in the path or name specified. *\n"); printf("* Program has terminated. *\n"); printf("*******************************************\n"); exit ( -1 ); } /* End of function, No_vtoc_file */ /************************************************************************** * * * FILE: Print_banner * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * Prints the banner for this read program which includes the * * version number as well as the date. * * * * INVOCATION: * * (void) Print_banner(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ void Print_banner () { printf("\n\n"); printf("*****************************************************************\n"); printf("* *\n"); printf("* FIRE Standard Data Format (SDF) *\n"); printf("* Read Program *\n"); printf("* *\n"); printf("* Version 1.01 August 03, 1994 *\n"); printf("* *\n"); printf("* *\n"); printf("* NOTE: All experiments that this sample read program works *\n"); printf("* with contain a fill value of 2147483647. This program *\n"); printf("* ignores this value. *\n"); printf("* *\n"); printf("* If you ever have any questions concerning the sample read *\n"); printf("* program or the data itself, please contact: *\n"); printf("* The Langely DAAC User and Data Services Office *\n"); printf("* NASA Langley Research Center *\n"); printf("* Mail Stop 157D *\n"); printf("* Hampton, VA 23681-001 USA *\n"); printf("* Telephone: (757) 864-8656 *\n"); printf("* *\n"); printf("*****************************************************************\n"); printf("\n"); } /* End of function, Print_banner */ /************************************************************************** * * * FILE: Print_head * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * Prints all of the ascii header information after being read * * in from the data file. According to SDF definition, the first * * 160 characters of the ascii string are being validated in this * * routine. * * * * INVOCATION: * * (void) Print_rec (buf, rname); * * WHERE * * * * is the string which contains the first 160 ascii string * * which was read in from the DDR file. * * * * is the variable which contains the current record name. * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ void Print_head (buf, rname) unsigned char *buf; char *rname; { int byear,bmonth,eyear,emonth,vtoc_bgmt,vtoc_egmt,vtoc_fnum; float north_lat,south_lat,west_lon,east_lon; unsigned char fseq[5],dseq[7],nlat[7],slat[7],wlon[8],elon[8]; int beggmt, endgmt; sscanf((char *)buf,"%4s %6s ",fseq,dseq); strncpy(rname,(char *)&(buf[12]),8); rname[8] = '\0'; printf("%8s\n",rname); sscanf((char *)&(buf[21]),"%4d%2d%8d %4d%2d%8d %6s %6s %7s %7s", &byear,&bmonth,&beggmt,&eyear,&emonth,&endgmt,nlat,slat,wlon,elon); printf("%4s %6s %8s %4d%2d%8d %4d%2d%8d %6s %6s %7s %7s\n", fseq,dseq,rname,byear,bmonth,beggmt,eyear,emonth,endgmt,nlat,slat,wlon,elon); /* Convert characters to integers or float */ vtoc_fnum = atoi((char *)&(fseq[0])); north_lat = atof((char *)&(nlat[0])); south_lat = atof((char *)&(slat[0])); west_lon = atof((char *)&(wlon[0])); east_lon = atof((char *)&(elon[0])); /* Error Checking begins in the Header information of data file. */ if (vtoc_fnum < 1) { printf ("\n"); printf ("******************************************\n"); printf ("* ERROR - The VTOC file number cannot be *\n"); printf ("* be less than one. *\n"); printf ("* Program continuing to process. *\n"); printf ("******************************************\n\n\n"); } if (eyear < byear) { printf ("\n"); printf ("******************************************\n"); printf ("* ERROR - The ending data year cannot be *\n"); printf ("* less than the beginning data *\n"); printf ("* year. *\n"); printf ("* Program continuing to process. *\n"); printf ("******************************************\n\n\n"); } else if (eyear == byear) { if (emonth < bmonth) { printf ("\n"); printf ("*******************************************\n"); printf ("* ERROR - The ending data month cannot be *\n"); printf ("* less than the beginning data * *\n"); printf ("* month. *\n"); printf ("* Program continuing to process. *\n"); printf ("*******************************************\n\n\n"); } else if (emonth == bmonth) if (endgmt < beggmt) { printf ("\n"); printf ("*******************************************\n"); printf ("* ERROR - The ending gmt month cannot be *\n"); printf ("* less than the beginning data * *\n"); printf ("* gmt. *\n"); printf ("* Program continuing to process. *\n"); printf ("*******************************************\n\n\n"); } else if (emonth > bmonth) ; } if ( (north_lat > 90.0) || (north_lat < -90.0) ) { printf ("\n"); printf ("************************************************\n"); printf ("* ERROR - The northern latitude value does not *\n"); printf ("* fall between the latitude range of *\n"); printf ("* -90.0 degrees to +90.0 degrees in the*\n"); printf ("* header information of the data file. *\n"); printf ("* Program continuing to process. *\n"); printf ("************************************************\n\n\n"); } if ( (south_lat > 90.0) || (south_lat < -90.0) ) { printf ("\n"); printf ("************************************************\n"); printf ("* ERROR - The southern latitude value does not *\n"); printf ("* fall between the latitude range of *\n"); printf ("* -90.0 degrees to +90.0 degrees in the*\n"); printf ("* header information of the data file. *\n"); printf ("* Program continuing to process. *\n"); printf ("************************************************\n\n\n"); } if (south_lat > north_lat) { printf ("\n"); printf ("*************************************************\n"); printf ("* ERROR - The southern latitude value cannot be *\n"); printf ("* be greater than the northern latitude *\n"); printf ("* value in the header information of *\n"); printf ("* the data file. *\n"); printf ("* Program continuing to process. *\n"); printf ("*************************************************\n\n\n"); } if ( (west_lon > 180.0) || (west_lon < -180.0) ) { printf ("\n"); printf ("************************************************\n"); printf ("* ERROR - The western longitude value does not *\n"); printf ("* fall between the longitude range of *\n"); printf ("* -180.0 degrees to +180.0 degrees in *\n"); printf ("* the header information of the data *\n"); printf ("* file. *\n"); printf ("* Program continuing to process. *\n"); printf ("************************************************\n\n\n"); } if ( (east_lon > 180.0) || (east_lon < -180.0) ) { printf ("\n"); printf ("************************************************\n"); printf ("* ERROR - The eastern longitude value does not *\n"); printf ("* fall between the longitude range of *\n"); printf ("* -180.0 degrees to +180.0 degrees in *\n"); printf ("* the header information of the data *\n"); printf ("* file. *\n"); printf ("* Program continuing to process. *\n"); printf ("************************************************\n\n\n"); } if (west_lon > east_lon) { printf ("\n"); printf ("*************************************************\n"); printf ("* ERROR - The western longitude value cannot be *\n"); printf ("* greater than the eastern longitude *\n"); printf ("* value in the header information of *\n"); printf ("* the data file. *\n"); printf ("* Program continuing to process. *\n"); printf ("*************************************************\n\n\n"); } } /* End of function, Print_head */ /************************************************************************** * * * FILE: Print_rec * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * Prints all of the record information after being read in * * from the header file by using the routine fsdf_header. * * * * INVOCATION: * * (void) Print_rec (obs, nrec); * * WHERE * * * * is a pointer to the header information which was read in * * from the routine fsdf_header. * * * * is an integer which contains the value of how many records * * were in the header file. * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ void Print_rec (obs, nrec) header *obs; int nrec; { int i, j; header *p; ddr_var *vp; printf("\n\n"); printf("**********************************************************\n"); printf("* The following is a list of what records are defined in *\n"); printf("* the header file and the parameters within each record. *\n"); printf("**********************************************************\n"); for (i=0, p = obs; i < nrec; i++, p++) { printf("\n\n"); printf ("RECORD: (%s) has a total of %d variables.\n", p->rec_name, p->nvars); printf("\n\n"); for (j= 0, vp = p->vd_ptr; j < p->nvars; j++, vp++) { printf ("%s (%i), format = %s", vp->mnemonic, vp->size, vp->disp_form); printf (" scaling constants N = %d, A = %d, b = %d\n", vp->N, vp->A, vp->b); if (vp->b == 0) printf (vp->disp_form, (int) vp->min); else { if (strchr (vp->disp_form, 'X') != NULL) printf (vp->disp_form, (int)vp->min); else printf (vp->disp_form, vp->min); } printf ("\t"); if (vp->b == 0) printf (vp->disp_form, (int) vp->max); else { if (strchr (vp->disp_form, 'X') != NULL) printf (vp->disp_form, (int)vp->max); else printf (vp->disp_form, vp->max); } printf ("\n"); } } } /* End of function, Print_rec */ /************************************************************************** * * * FILE: Open_files * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine opens the files the user has passed into the * * program. * * * * INVOCATION: * * (void) Open_user(header_file,vtoc_file,data_file); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * ***************************************************************************/ void Open_files(header_file,hptr,vtoc_file,vptr,data_file,dptr) char *header_file; FILE **hptr; char *vtoc_file; FILE **vptr; char *data_file; FILE **dptr; { if ((*hptr = fopen (header_file, "r")) == NULL) { (void) No_head_file(); } if ((*vptr = fopen (vtoc_file, "r")) == NULL) { (void) No_vtoc_file(); } if ((*dptr = fopen (data_file, "r")) == NULL) { (void) No_data_file(); } } /* End of function, Open_files */ /************************************************************************** * * * FILE: Data_id_1 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_1(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_1() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_1 : FIRE.CIIFO.CSU .000001.0.19861013.19861102\n"); printf(" Paul F. Hein\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_CI1_CSU_SABRE. (P0119)\n"); printf("\n"); printf(" These data are from the FIRE CIRRUS I experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" After testing this data set, we have found that the southern and northern\n"); printf(" latitude values are written in reverse order. This information is written\n"); printf(" in the VTOC file as well as in each of the data record files. The data\n"); printf(" producer recommends that the user is aware of this finding.\n"); printf("\n"); printf(" The fill value number that we have been working with is the maximum 4-byte\n"); printf(" word size of 2147483647.\n"); printf("\n"); printf(" There are two full records of (176*2) ascii header information in each data\n"); printf(" record file.\n"); printf("\n"); printf(" There were no problems with values being out of the min/max range.\n\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_1 */ /************************************************************************** * * * FILE: Data_id_2 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_2(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_2() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_2 : FIRE.CIIFO.ARC .000001.0.19861013.19861102\n"); printf(" FRANCISCO P. J. VALERO\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_CI1_ER2_RAD. (P3067)\n"); printf("\n"); printf(" These data are from the FIRE CIRRUS I experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" In the header file, the record name is the same for both records that are\n"); printf(" defined. Both records are declared of having 32 bytes. The first record\n"); printf(" declared only uses 28 bytes and the other four bytes are padded with zeroes.\n"); printf(" As for the second record, only 8 bytes are defined and the last twenty bytes\n"); printf(" are padded with zeroes. The first record that is listed in the header file\n"); printf(" starts with .004 and following that file is the second record in file .005.\n"); printf(" This continues throughout all of the data files. The DAAC recommends that\n"); printf(" when you are testing/using this data, please break up the header file so\n"); printf(" that there is only one record listed (since same record name). Just make\n"); printf(" sure that all files with the even ending number (in the original file name)\n"); printf(" uses the first record and all files with the odd ending file number (in the\n"); printf(" original file name) uses the second record.\n"); printf("\n"); printf(" There are no discrepancies with the data being out of the min/max range.\n"); printf("\n"); printf(" The ascii header record in each data record file was set to 160 bytes.\n"); printf(" A few GMT dates have blanks instead of zeroes within them.\n"); printf("\n"); printf(" Phillip Hammer (415)604-3383 has taken over this project for P. Valero.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_2 */ /************************************************************************** * * * FILE: Data_id_3 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_3(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_3() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_3 : FIRE.CIIFO.GSFC.000001.0.19861013.19861103\n"); printf(" Dr. David O'C. Starr\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_CI1_RAWINSONDES. (P2699)\n"); printf("\n"); printf(" These data are from the FIRE CIRRUS I experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" File .001 has been modified to reflect the different record names that the\n"); printf(" file has. The same parameters exist for each record. Only the record names\n"); printf(" have changed. The reason why the DAAC had done this is because the external\n"); printf(" read header file is designed to read a specific record name followed by the\n"); printf(" parameters defined within each record. This file did not possess this\n"); printf(" information.\n"); printf("\n"); printf(" The fill value number that we have been working with is the maximum 4-byte\n"); printf(" word size of 2147483647.\n"); printf("\n"); printf(" Problems only occurred with the last parameter, WIND SPEEDSHEAR, in each\n"); printf(" data record file. It occurs in over half of the records in each data file.\n"); printf(" The data producer stated that once this value is converted to a real number,\n"); printf(" you must then divide the number by 2097152.0. This new number must then \n"); printf(" have 400.0 subtracted from it to get a valid number between the min/max\n"); printf(" range.\n"); printf("\n"); printf(" There are two full records of (112*2) ascii header information in each\n"); printf(" data file.\n"); printf("\n"); printf(" The GMT dates have blanks instead of zeroes.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_3 */ /************************************************************************** * * * FILE: Data_id_4 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_4(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_4() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_4 : FIRE.CIIFO.UWIS.000001.0.19861102.19861102\n"); printf(" DON WYLIE\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_CI1_TOVS. (P9963)\n"); printf("\n"); printf(" These data are from the FIRE CIRRUS I experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" In the original header file, the record name was left out. The data producer\n"); printf(" said to insert the name in the file. This has already been corrected.\n"); printf("\n"); printf(" In the original header file, contained a term, Instrument Description, where\n"); printf(" the letter P in Description was left out. This has been corrected.\n"); printf("\n"); printf(" In the original header file, the parameter TIME had a minimum value of 1.\n"); printf(" This has been changed to 0.\n"); printf("\n"); printf(" In the original header file, the parameter HHMM had a minimum value of 1.\n"); printf(" This has been changed to a 0. The maximum value was also changed to 240000.\n"); printf(" By changing the maximum value to include the seconds as does the data itself,\n"); printf(" the parameter name has been changed to HHMMSS.\n"); printf("\n"); printf(" The GMT dates have blanks instead of zeroes.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_4 */ /************************************************************************** * * * FILE: Data_id_5 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_5(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_5() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_5 : FIRE.CIIFO.GSFC.000001.0.19861013.19861102\n"); printf(" DENNIS HLAVKA/JIM SPINHIRNE\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_CI1_ER2_LIDAR. (P9991)\n"); printf("\n"); printf(" These data are from the FIRE CIRRUS I experiment.\n"); printf("\n"); printf(" A list of adjustments had to made in this read program in order\n"); printf(" to run this generic FIRE Standard Data Format (SDF) code.\n"); printf("\n"); printf(" In the header file, the number of bytes in each record is 80. The last\n"); printf(" four bytes are padded with zeroes.\n"); printf("\n"); printf(" Undetected data has been flagged with a -9.9.\n"); printf("\n"); printf(" The GMT dates have blanks instead of zeroes.\n"); printf("\n"); printf(" There is an integer value that appears at the end of the file. The data \n"); printf(" producer is not sure why there are a few records of this same integer \n"); printf(" appearing in every data file. The data producer has asked that we ignore\n"); printf(" this value. All data looks wonderful once this value was ignored.\n"); printf(" This integer value is 538976288.\n"); printf(" This sample read program has been written to ignore these values!\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_5 */ /************************************************************************** * * * FILE: Data_id_6 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_6(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_6() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_6 : FIRE.MSIFO.CSU .000001.0.19870707.19870714\n"); printf(" Paul F. Hein\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_MS_CSU_TBALLOON. (P1160)\n"); printf("\n"); printf(" These data aer from the FIRE Marine Stratocumulus experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" In the header file, the minimum values for these parameters have been\n"); printf(" changed from a 1 to a 0: HOUR & SECOND.\n"); printf("\n"); printf(" The parameter name HOUR was left out of the header file as well as\n"); printf(" changing the minimum value from a 1 to a 0.\n"); printf("\n"); printf(" In the header file, the parameters, ROLL and PITCH, minimum and maximum\n"); printf(" values were changed from -180 to 180 to 0 to 360.\n"); printf("\n"); printf(" There are some other values that do exceed the minimum and maximum ranges.\n"); printf(" The data producer is aware of these values. If you have any questions\n"); printf(" concerning these out of range values, please contact the data producer.\n"); printf("\n"); printf(" All of the data files as well as the VTOC file contains the year of 1989.\n"); printf(" It should be 1987.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_6 */ /************************************************************************** * * * FILE: Data_id_7 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_7(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_7() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_7 : FIRE.MSIFO.CSU .000001.0.19870630.19870719\n"); printf(" PAUL E. CIESIELSKI\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_MS_CEILOM_CLASS. (P2769)\n"); printf("\n"); printf(" These data are from the FIRE Marine Stratocumulus experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" In the header file, the minimum values for these parameters have been\n"); printf(" changed from a 1 to a 0: FNUM, RNUM, TSEQ, and DSEQ. This was done in\n"); printf(" all of the records defined in this file.\n"); printf("\n"); printf(" In the VTOC file, the second ceilom data file has an incorrect GMT end\n"); printf(" date of 19870707240000 when it should be 19870702240000. The DAAC could not\n"); printf(" change this date because it would affect the current binary data record file.\n"); printf("\n"); printf(" In the VTOC file, the 13th data file had a beginning month date within\n"); printf(" the GMT date for 01 (January) instead of 07 (July). This is also set this\n"); printf(" way in this data record file as well. The DAAC could not change this date\n"); printf(" because it would affect the current binary data record file. The same\n"); printf(" applies for the begin day where it set for the 31st and should be the 13th.\n"); printf("\n"); printf(" There is a parameter defined as TAL. All of the values exceed the max range\n"); printf(" defined. The data producer explains to get the correct value, subtract\n"); printf(" 100000.0 from the retrieved value.\n"); printf("\n"); printf(" The GMT dates have blanks instead of zeroes.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_7 */ /************************************************************************** * * * FILE: Data_id_8 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_8(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_8() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_8 : FIRE.MSIFO.PSUS.000002.0.19870701.19870719\n"); printf(" MR. WILLIAM J. SYRETT\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_MS_NOAAWNDS. (P9958)\n"); printf("\n"); printf(" These data are from the FIRE Marine Stratocumulus experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" There are no ascii header records within each data record file. Please\n"); printf(" use the VTOC file when you need lat/lon and data date information.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_8 */ /************************************************************************** * * * FILE: Data_id_9 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_9(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_9() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_9 : FIRE.CIIFO.GSFC.000001.0.19870708.19870718\n"); printf(" DENNIS HLAVKA/JIM SPINHIRNE\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_MS_ER2_LIDAR. (P9966)\n"); printf("\n"); printf(" These data are from the FIRE Marine Stratocumulus experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" The header file states that there are 80 bytes in each record. The last\n"); printf(" four bytes in each record are padded with zeroes.\n"); printf("\n"); printf(" Undetected data has been flagged with a -9.9.\n"); printf("\n"); printf(" The ascii header record does contain 160 bytes but the spacing is not the\n"); printf(" same as what has been defined in the SDF User's Guide.\n"); printf("\n"); printf(" The GMT dates contain blanks instead of zeroes.\n"); printf("\n"); printf(" There is an integer value that appears at the end of the file. The data \n"); printf(" producer is not sure why there are a few records of this same integer \n"); printf(" appearing in every data file. The data producer has asked that we ignore\n"); printf(" this value. All data looks wonderful once this value was ignored.\n"); printf(" This integer value is 538976288.\n"); printf(" This sample read program has been written to ignore these values!\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_9 */ /************************************************************************** * * * FILE: Data_id_10 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_10(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_10() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_10 : FIRE.MSIFO.CSU .000001.1.19870630.19870719\n"); printf(" Paul F. Hein\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_MS_CSU_RADSURF. (P9996)\n"); printf("\n"); printf(" These data are from the FIRE Marine Stratocumulus experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" In the header file, the minimum value has been changed from 1 to 0.\n"); printf("\n"); printf(" In the header file, the maximum value has been changed from 1100 to 1200\n"); printf(" for the parameter called Total SW Down.\n"); printf(" \n"); printf(" Throughout the data experiment, there are just a couple of values that\n"); printf(" exceed the maximum value. The data producer is aware of these findings.\n"); printf("\n"); printf(" The GMT dates contain blanks instead of zeroes.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_10 */ /************************************************************************** * * * FILE: Data_id_11 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_11(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_11() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_11 : FIRE.MSIFO.UKMO.000002.0.19870707.19870713\n"); printf(" DR S NICHOLLS\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_MS_UKMO_C130 part A. (P9933)\n"); printf("\n"); printf(" These data are from the FIRE Marine Stratocumulus experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" The data started in the 1404 byte in the data files.\n"); printf("\n"); printf(" In the header files, the data set sequence record number maximum values \n"); printf(" has been changed from 99999 to 999999.\n"); printf("\n"); printf(" In the 320th and 323rd parameters pertaining to the pyrgeometer data\n"); printf(" parameters have been flagged as bad data by the data producer. Please\n"); printf(" ignore these values. All values are out of the min/max ranges!\n"); printf("\n"); printf(" There are some parameters scattered throughout the entire data set that\n"); printf(" are out of the min/max range. This read program will inform you in which\n"); printf(" record the out of range values appear. Please do not use these flagged\n"); printf(" values as well.\n"); printf("\n"); printf(" The GMT dates contain blanks instead of zeroes.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_11 */ /************************************************************************** * * * FILE: Data_id_12 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_12(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_12() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_12 : FIRE.MSIFO.UKMO.000002.0.19870714.19870718\n"); printf(" DR S NICHOLLS\n"); printf("\n"); printf(" The Langley DAAC refers to this data as FIRE_MS_UKMO_C130 part B. (P9934)\n"); printf("\n"); printf(" These data are from the FIRE Marine Stratocumulus experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" The data started in the 1404 byte in the data files.\n"); printf("\n"); printf(" In the header files, the data set sequence record number maximum values \n"); printf(" has been changed from 99999 to 999999.\n"); printf("\n"); printf(" In the 320th and 323rd parameters pertaining to the pyrgeometer data\n"); printf(" parameters have been flagged as bad data by the data producer. Please\n"); printf(" ignore these values. All values are out of the min/max ranges!\n"); printf("\n"); printf(" There are some parameters scattered throughout the entire data set that\n"); printf(" are out of the min/max range. This read program will inform you in which\n"); printf(" record the out of range values appear. Please do not use these flagged\n"); printf(" values as well.\n"); printf("\n"); printf(" The GMT dates contain blanks instead of zeroes.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_12 */ /************************************************************************** * * * FILE: Data_id_13 * * * * AUTHOR: Paula Detweiler * * * * PURPOSE/DESCRIPTION: * * This routine prints out to the screen specific information * * that the Langley DAAC has found out about each data file. * * The data producer is aware of these findings as well. * * * * INVOCATION: * * (void) Data_id_13(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_13() { printf("\n\n\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n"); printf(" NOTE TO THE USER\n\n"); printf("\n"); printf("Data_id_13 : FIRE.MSIFO.UKMO.000001.0.19850729.19850729\n"); printf(" DR S NICHOLLS\n"); printf("\n"); printf(" These data are from the FIRE Marine Stratocumulus experiment.\n"); printf("\n"); printf(" These are a list of adjustments we had to make in this read program in\n"); printf(" order to run this generic Standard Data Format (SDF) code.\n"); printf("\n"); printf(" The data file itself starts at the address of 1408.\n"); printf("\n"); printf(" There are many record breaks in the data file which throws off the reading\n"); printf(" of the data file. Because of this finding, the result is that there are\n"); printf(" many data values out of the min/max range.\n"); printf("\n"); printf(" The GMT dates contain blanks instead of zeroes.\n"); printf("\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("NOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTENOTE\n"); printf("\n\n\n"); } /* End of function, Data_id_13 */ /************************************************************************** * * * FILE: Data_id_default * * * * AUTHOR: Paula Detweiler, Langley DAAC * * * * PURPOSE/DESCRIPTION: * * This routine warns the user that the data file names entered * * are not recognized by the read program and for the user to * * check his input. This program will terminate. * * * * INVOCATION: * * (void) Data_id_default(); * * * * INTERNAL ROUTINES: * * None. * * * * EXTERNAL ROUTINES: * * None. * * * **************************************************************************/ void Data_id_default() { printf("*******************************************************\n"); printf("* ERROR - This sample read program does not recognize *\n"); printf("* the data files you entered. Please review *\n"); printf("* your input. *\n"); printf("* Program has terminated. *\n"); printf("*******************************************************\n"); printf("\n\n\n"); exit ( -1 ); } /* End of function, Data_id_default */