15#define fdebufr fdebufr_
16#define prtusage prtusage_
19void 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(
" \"/home/jeffa/build/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" );
174int main(
int argc,
char *argv[ ] ) {
182 char tbldir[MXFLEN] =
183 "/home/jeffa/build/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 ...
subroutine bvers(CVERSTR)
This subroutine returns a character string containing the version number of the BUFRLIB software.
void ccbfl(void)
This subroutine closes all system files that were opened via previous calls to subroutine cobfl().
void cobfl(char *bfl, char *io)
This subroutine opens a new file for reading or writing BUFR messages via a C language interface.
Define signatures and declare variables for reading or writing BUFR messages via a C language interfa...
int main(int argc, char *argv[])
This program decodes a BUFR file and generates a verbose listing of the contents.
void prtusage(char *)
This function prints program usage information to standard output.
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 ...