15 #define fdebufr fdebufr_
16 #define prtusage prtusage_
19 void fdebufr(
char *,
char *, f77int *,
char *,
char *,
char *,
char *,
char *,
20 size_t,
size_t,
size_t,
size_t,
size_t,
size_t,
size_t );
24 #define MXFLEN_TBLFIL (MXFLEN+50)
41 printf(
"\nUSAGE:\n" );
42 printf(
" %s [-v] [-h] [-b] [-c] [-m] [-o outfile] [-t tabledir] [-f tablefil] [-p prmstg] bufrfile\n\n", prgnam );
43 printf(
"\nWHERE:\n" );
44 printf(
" -v prints program version information and exits\n\n" );
45 printf(
" -h prints program help and usage information and exits\n\n" );
46 printf(
" -b specifies the \"basic\" option, meaning that only the\n" );
47 printf(
" information in Sections 0-3 will be decoded from each\n" );
48 printf(
" BUFR message in the bufrfile, and no attempt will be\n" );
49 printf(
" made to decode the data in Section 4\n\n" );
50 printf(
" -c specifies that code and flag table meanings should not\n" );
51 printf(
" be read from master BUFR tables and included in the output;\n" );
52 printf(
" otherwise this feature is enabled by default\n\n" );
53 printf(
" -m specifies that master BUFR tables will be used to\n" );
54 printf(
" decode the data messages in the file, regardless of\n" );
55 printf(
" whether it contains any embedded DX BUFR table messages.\n" );
56 printf(
" This option can be used to view the actual contents of\n" );
57 printf(
" DX BUFR table messages, which otherwise would not be\n" );
58 printf(
" printed in the output listing.\n\n" );
59 printf(
" outfile [path/]name of file to contain verbose output listing.\n" );
60 printf(
" The default is \"bufrfilename.debufr.out\" in the current\n" );
61 printf(
" working directory, where bufrfilename is the basename of\n" );
62 printf(
" the bufrfile (i.e. bufrfile with any preceding [path/]\n" );
63 printf(
" removed).\n\n" );
64 printf(
" tabledir [path/]name of directory containing tables to be used\n" );
65 printf(
" for decoding. This directory contains the DX BUFR tables\n" );
66 printf(
" file to be used (if one was specified via the -f option),\n" );
67 printf(
" or it may contain all of the master BUFR tables when these\n" );
68 printf(
" are being used to decode a file. If unspecified, the\n" );
69 printf(
" default directory location is\n" );
70 printf(
" \"/gpfs/dell2/emc/obsproc/noscrub/Jeff.Ator/NCEPLIBS-bufr-GitHub/build3/install/tables\"\n\n" );
71 printf(
" tablefil file within tabledir containing DX BUFR tables to be used\n" );
72 printf(
" for decoding.\n\n" );
73 printf(
" prmstg string of comma-separated PARAMETER=VALUE pairs, up to a\n" );
74 printf(
" maximum of 20. For each pair, the dynamic allocation\n" );
75 printf(
" PARAMETER will be set to VALUE within the underlying\n" );
76 printf(
" BUFRLIB software, overriding the default value that would\n" );
77 printf(
" otherwise be used. A complete list of parameters that can\n" );
78 printf(
" be dynamically sized is included within the documentation\n" );
79 printf(
" for BUFRLIB function isetprm.\n\n" );
80 printf(
" bufrfile [path/]name of BUFR file to be decoded\n\n" );
174 int main(
int argc,
char *argv[ ] ) {
182 char tbldir[MXFLEN] =
183 "/gpfs/dell2/emc/obsproc/noscrub/Jeff.Ator/NCEPLIBS-bufr-GitHub/build3/install/tables";
184 char outfile[MXFLEN];
187 char tblfil[MXFLEN_TBLFIL];
188 char prmstg[300] =
"NULLPSTG";
200 while ( ( ch = getopt ( argc, argv,
"vhbcmo:t:f:p:" ) ) != EOF ) {
203 bvers ( bvstr,
sizeof(bvstr) );
205 for ( ii = 0; ii <
sizeof(bvstr); ii++ ) {
206 if ( ( bvstr[ii] !=
'.' ) && ( !isdigit(bvstr[ii]) ) ) {
211 printf(
"This is debufr v3.1.1, built with BUFRLIB v%s\n",
215 printf(
"\nPROGRAM %s\n", argv[0] );
216 printf(
"\nABSTRACT: This program decodes a BUFR file and generates a verbose\n" );
217 printf(
" listing of the contents. If a DX BUFR tables file is specified\n" );
218 printf(
" (using the -f option) or if the specified BUFR file contains an\n" );
219 printf(
" embedded DX BUFR tables message as the first message in the file,\n" );
220 printf(
" then this DX BUFR tables information is used to decode the data\n" );
221 printf(
" messages in the file. Otherwise, or whenever the -m option is\n" );
222 printf(
" specified, master BUFR tables are read and used to decode the\n" );
223 printf(
" data messages in the file.\n" );
237 strcpy ( outfile, optarg );
240 strcpy ( tbldir, optarg );
243 strcpy ( wkstr, optarg );
246 strcpy ( prmstg, optarg );
255 if ( (optind+1) != argc ) {
256 printf(
"\nERROR: You must specify an input BUFR file to be decoded!\n" );
264 cobfl( argv[optind], &io );
269 if ( strlen( wkstr ) > 0 ) {
270 sprintf( tblfil,
"%s%c%s", tbldir,
'/', wkstr );
273 strcpy( tblfil,
"NULLFILE" );
281 if ( strlen( outfile ) == 0 ) {
282 strcpy( wkstr2, argv[optind] );
283 strcpy( outfile, basename( wkstr2 ) );
284 strcat( outfile,
".debufr.out" );
290 strcpy( wkstr2, outfile );
291 strcpy( wkstr, dirname( wkstr2 ) );
292 if ( access( wkstr, W_OK ) != 0 ) {
293 printf(
"\nERROR: Cannot write output file to directory %s\n",
294 ( strcmp( wkstr,
"." ) == 0 ? getcwd( wkstr2, MXFLEN ) : wkstr ) );
302 lentd = (f77int) strlen(tbldir);
303 fdebufr( outfile, tbldir, &lentd, tblfil, prmstg, &basic, &forcemt, &cfms,
304 strlen(outfile), strlen(tbldir), strlen(tblfil), strlen(prmstg), 1, 1, 1 );
Define signatures to enable a number of BUFRLIB subprograms to be called directly from C application ...
void ccbfl(void)
This subroutine closes all system files that were opened via previous calls to subroutine cobfl()...
subroutine fdebufr(ofile, tbldir, lentd, tblfil, prmstg, basic, forcemt, cfms)
This subroutine reads, decodes, and generates a verbose output listing of the contents of every BUFR ...
subroutine bvers(CVERSTR)
This subroutine returns a character string containing the version number of the BUFRLIB software...
Define signatures and declare variables for reading or writing BUFR messages via a C language interfa...
void prtusage(char *)
This function prints program usage information to standard output.
void cobfl(char *bfl, char *io)
This subroutine opens a new file for reading or writing BUFR messages via a C language interface...
int main(int argc, char *argv[])
This program splits a single file containing one or more BUFR messages into one or more BUFR files ea...