/*
** Do not change these include commands.
** All necessary header files are included in "geminc.h".
** All macros and constants are in "gemprm.h" and "bridge.h".
*/
#include "geminc.h"
#include "gemprm.h"
#include "bridge.h"

#include "decod_ut.h" /* contains prototype for ut_prvs */

main ( argc, argv )
	int	argc;
	char	*argv[];

/************************************************************************
 * DCDRBU								*
 *									*
 * This program decodes drifting buoy reports into BUFR output.         *
 *									*
 *  Command line:							*
 *  dcdrbu [options] [bufrtb]                                           *
 *                                                                      *
 *  bufrtab       = BUFR table                                          *
 **									*
 * Log:									*
 * R. Hollern/NCEP	12/99	Created new DCDRBU decoder from DCMSFC  *
 * J. Ator/NCEP		05/01	Remove call to uerror			*
 * J. Ator/NCEP         01/05   Increased ndfhr1 from 120 to 240        *
 * C. Caruso Magee/NCEP 03/06   Added new args to calling sequence of   *
 *                              dc_gopt                                 *
 * S. Guan/NCEP         01/09   Add circflg to dc_gopt call sequence    *
 * M. Weiss/NCEP        01/19   Modified for Dell migration             *
 * M. Weiss/IMSG        09/21   WCOSS2 install: #include "decod_ut.h"   *
 *                               and void db_dcod have been added.      *
 ***********************************************************************/

{

/*
**	Change the values of these default variables for the
**	specific decoder.
**
**	These variables are the number of expected command line
**	parameters; the program name; the packing and station tables;
**	values for the the number of additional stations and the
**	number of times; and the number of hours, prior to the
**	"current" time, to decode.
*/

#define NUMEXP 1

	int	nexp    = NUMEXP;
	char	*prgnam = "DCDRBU";

/*
**	Define the standard decoder parameters.
*/
	char	parms[NUMEXP][DCMXLN], curtim[DCMXLN];
	int	num, iret, ier;

	char	stntbl[DCMXLN], stntb2[DCMXLN];
	char	prmfil[DCMXLN];

	int	iadstn;
	int	maxtim;
	int	nhours;
	int	txtflg;
	int	iwndht;
        int     circflg;

	char	*defprm = " ";
	char	*defstn = " ";
	char	*dfstn2 = " ";
	int	idfadd  = 0;
	int	idfmax  = 0;
	int	ndfhr1  = 240;
	int	ndfhr2  = 240;
	int	idfwdh  = 0;

/*      Define the additional decoder parameters.
*/
        const char *dvstr = DVSTR;  /* DVSTR is a compile-time macro */
	char	bufrtb[DCMXLN];

/*---------------------------------------------------------------------*/

/*
**	Initialize the output logs, set the time out and 
**	parse the command line parameters.
*/
	dc_init ( prgnam, argc, argv, nexp, parms, &num, &iret );

/*
**	Check for an initialization error.
**	On an error, exit gracefully.
*/
	if  ( iret < 0 )  {
	    dc_exit ( &iret );
	}

/*
**	For all optional command line parameters, set default    
**      values for the corresponding decoder parameters.
*/
        dc_gopt ( defprm, defstn, dfstn2, idfadd, idfmax, ndfhr1,
                  ndfhr2, idfwdh, prmfil, stntbl, stntb2, &iadstn,
                  &maxtim, curtim, &nhours, &txtflg, &circflg,
                  &iwndht, &iret );
                                                                                
/*
**
**	Set default value for additional decoder parameter
*/
	strcpy ( bufrtb, "bufrtab.001" );

/*
**      Now, for each additional decoder parameter, if a value was
**      defined on the command line, then use that value instead of
**      the default value.
*/
        if ( num > 0 ) {
           strcpy ( bufrtb, parms[0] );
        }

/*
**	Call the decoding routine.
**
**	Change this function call, and the define command,
**	for the specific decoder.
*/

#ifdef UNDERSCORE
#define db_dcod db_dcod_
#endif

	void db_dcod ( char *, char *, int *, int *,
			size_t, size_t );

        ut_prvs ( dvstr, strlen(dvstr) );
	db_dcod ( curtim, bufrtb, 
		  &nhours, &iret, strlen(curtim), 
		  strlen(bufrtb) );
/*
**	Send a shut down message to the logs and close the log files.
*/
	dc_exit ( &iret );

}