#ifndef INPUT_H

typedef struct DATA_INPUT {
   unsigned short usProc_id;       /* Generating Process ID Number (Table A) */
   unsigned short usGrid_id;       /* Grid Identification (Table B)          */
   unsigned short usParm_id;       /* GRIB parameter id */
   unsigned short usParm_sub_id;   /* GRIB parameter sub-id */
   unsigned short usLevel_id;      /* GRIB level id */
   int            nLvl_1;          /* 1st level value - scaled to an integer*/
   int            nLvl_2;          /* 2nd level value - scaled to an integer*/
   int            nYear;           /* year of data e.g. 1993 */
   int            nMonth;          /* month of year e.g. 8 */
   int            nDay;            /* day of month e.g. 31 */
   int            nHour;           /* hour of day e.g. 0 */
   int            nMinute;         /* minute of hour e.g. 0 */
   int            nSecond;         /* second of minute e.g. 0 */
   unsigned short usFcst_id;       /*  Forecast time unit id - Table 4 */
   unsigned short usFcst_per1;     /* forecast time 1 (tau) e.g. 0. */
   unsigned short usFcst_per2;     /* forecast time 2 (tau) e.g. 0. */
   unsigned short usTime_range_id; /* Time range indicator - Table 5 */
   unsigned short usTime_range_avg;/* Number in average */
   unsigned short usTime_range_mis;/* Number missing from average */
   int            nDec_sc_fctr;    /* Decimal scale factor */
   short          nBin_sc_fctr;    /* Binary scale factor */
} DATA_INPUT;

typedef struct GEOM_IN {        /* info from tables grid_reg_geom/as_reg_im */
    char   prjn_name[21];       /* projection name */
    char   stor_dsc[21];        /* (+x in +y)/(+x in -y)/(-y in +x)/etc */
    long   nx;                  /* count of columns */
    long   ny;                  /* count of rows */
    double lat;                 /* lat of origin in degrees */
    double lon;                 /* lon of origin in degrees */
    double orig_ix;             /* column # for origin, left column is 1 */
    double orig_iy;             /* row # for origin; top row is 1 */
    double x_int_dis;           /* distance interval between columns in km */
    double y_int_dis;           /* distance interval between rows in km */
    double parm_1;              /* geom parm 1, depends on projection
				 * Spherical:	j Direction Increment (Latitude)
				 * Lambert:*/	
    double parm_2;              /* geom parm 2, depends on projection */
    double parm_3;              /* geom parm 3, depends on projection */
/* Do NOT MODIFY parameters before this point */
/* Additional Parameters Required by GRIB */
    double first_lat;		/* latitude of grid point (1,1) */
    double first_lon;		/* longitude of grid point (1,1) */
    double last_lat;		/* latitude of grid point (nx,ny) */
    double last_lon;		/* longitude of grid point (nx,ny) */
    unsigned short scan;	/* Scan mode value from Table 8 */
    unsigned short usRes_flag;  /* Resolution and Component Flags (Table 7)    */
} GEOM_IN;

typedef struct USER_INPUT {         /* user's input from input.dat            */
/* PDS Section */
    unsigned char  chCase_id;   /* User defined case ID (1 digit alphanumeric)*/
    unsigned short usParm_tbl;  /* GRIB Table Version Number             */
    unsigned short usSub_tbl;   /* Local Table Version Number            */
    unsigned short usCenter_id; /* ID of Originating Center (Table 0)     */
    unsigned short usGds_bms_id;/* GDS and BMS Flag (Table 1)             */
    unsigned short usCenter_sub;/* Sub-Table Entry for originating Ctr (Tbl 0)*/
    unsigned short usTrack_num; /* Tracking ID for data set               */
    unsigned short usBDS_flag;  /* Binary Data Section Flag (Table 11)    */
    unsigned short usBit_pack_num; /* Number of bits into which data is packed*/
} USER_INPUT;
#define INPUT_H
#endif
