Skip to content

Commit

Permalink
fix initit calls
Browse files Browse the repository at this point in the history
  • Loading branch information
webisu committed Feb 23, 2025
1 parent 1eccefb commit 3329e78
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 50 deletions.
14 changes: 7 additions & 7 deletions wgrib2/Match_inv.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,19 @@ int f_match_inv_add(ARG3) {
/* add args to table and intialize fn() */
if (functions[j].nargs == 0 && functions[j].type == inv) {
// initialize fn(..)
match_extra_fn[match_extra_fn_n](call_ARG0(inv_out, &(match_extra_fn_local[match_extra_fn_n])));
match_extra_fn[match_extra_fn_n](init_ARG0(inv_out, &(match_extra_fn_local[match_extra_fn_n])));
}
else if (functions[j].nargs == 1 && functions[j].type == inv) {
// initialize fn(..)
match_extra_fn[match_extra_fn_n](call_ARG1(inv_out, &(match_extra_fn_local[match_extra_fn_n]),arg1));
match_extra_fn[match_extra_fn_n](init_ARG1(inv_out, &(match_extra_fn_local[match_extra_fn_n]),arg1));
i = strlen(arg1) + 1;
if ((match_extra_fn_arg1[match_extra_fn_n] = (char *) malloc(i)) == NULL)
fatal_error("match_inv_add: memory allocation","");
strncpy(match_extra_fn_arg1[match_extra_fn_n], arg1, i);
}
else if (functions[j].nargs == 2 && functions[j].type == inv) {
// initialize fn(..)
match_extra_fn[match_extra_fn_n](call_ARG2(inv_out, &(match_extra_fn_local[match_extra_fn_n]),arg1,arg2));
match_extra_fn[match_extra_fn_n](init_ARG2(inv_out, &(match_extra_fn_local[match_extra_fn_n]),arg1,arg2));
i = strlen(arg1) + 1;
if ((match_extra_fn_arg1[match_extra_fn_n] = (char *) malloc(i)) == NULL)
fatal_error("match_inv_add: memory allocation","");
Expand All @@ -79,11 +79,11 @@ int f_match_inv_add(ARG3) {
else if (mode == -2) { /* finalize all the functions */
for (j = 0; j < match_extra_fn_n; j++) {
if (match_extra_fn_nargs[j] == 0)
match_extra_fn[j](call_ARG0(inv_out, &(match_extra_fn_local[j])));
match_extra_fn[j](fin_ARG0(inv_out, &(match_extra_fn_local[j])));
else if (match_extra_fn_nargs[j] == 1)
match_extra_fn[j](call_ARG1(inv_out, &(match_extra_fn_local[j]), match_extra_fn_arg1[j] ));
match_extra_fn[j](fin_ARG1(inv_out, &(match_extra_fn_local[j]), match_extra_fn_arg1[j] ));
else if (match_extra_fn_nargs[j] == 2)
match_extra_fn[j](call_ARG2(inv_out, &(match_extra_fn_local[j]), match_extra_fn_arg1[j],
match_extra_fn[j](fin_ARG2(inv_out, &(match_extra_fn_local[j]), match_extra_fn_arg1[j],
match_extra_fn_arg2[j] ));
}
for (j = 0; j < match_extra_fn_n; j++) {
Expand Down Expand Up @@ -137,7 +137,7 @@ int f_match_inv(ARG0) {
* HEADER:100:Match_inv:inv:0:same as -match_inv except d=YYYYMMDDHH <-> D=YYYYMMDDHHmmss
*/
int f_Match_inv(ARG0) {
if (mode < 0) {
if (mode < 0) {
warn_nonzero_min_sec = 0;
return 0;
}
Expand Down
2 changes: 0 additions & 2 deletions wgrib2/Set_metadata.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ int f_set_metadata(ARG1) {
else if (mode >= 0) {
save = *local;
if (fgets_file(line, STRING_SIZE+1, save) == NULL) return 1;
// i = set_metadata_string(CALL_ARG0, line);
i = set_metadata_string(call_ARG1(inv_out,local,line));
if (i) fatal_error("set_metadata: processing %s", line);
}
Expand All @@ -58,7 +57,6 @@ int f_set_metadata(ARG1) {
int f_set_metadata_str(ARG1) {
int i;
if (mode < 0) return 0;
// i = set_metadata_string(CALL_ARG0, arg1);
i = set_metadata_string(call_ARG1(inv_out,local,arg1));
if (i != 0) fatal_error("set_metadata_str: %s", arg1);
return 0;
Expand Down
8 changes: 8 additions & 0 deletions wgrib2/Time_processing.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,21 @@
* HEADER:000:ave:output:2:average X=time step Y=output v2
*/
int f_ave(ARG2) {
if (mode == -1)
return f_time_processing(init_ARG4(inv_out,local,"0","1",arg1,arg2));
if (mode == -2)
return f_time_processing(fin_ARG4(inv_out,local,"0","1",arg1,arg2));
return f_time_processing(call_ARG4(inv_out,local,"0","1",arg1,arg2));
}

/*
* HEADER:000:fcst_ave:output:2:average X=time step Y=output v2
*/
int f_fcst_ave(ARG2) {
if (mode == -1)
return f_time_processing(init_ARG4(inv_out,local,"0","2",arg1,arg2));
if (mode == -1)
return f_time_processing(call_ARG4(inv_out,local,"0","2",arg1,arg2));
return f_time_processing(call_ARG4(inv_out,local,"0","2",arg1,arg2));
}

Expand Down
73 changes: 32 additions & 41 deletions wgrib2/wgrib2.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ int wgrib2(int argc, const char **argv) {
long int last_pos;

int file_arg, i, j, num_submsgs;
int n_arg, old_mode;
int n_arg;
unsigned int k, ndata;
static int err_4_3_count = 0;
float *data;
Expand Down Expand Up @@ -266,56 +266,48 @@ int wgrib2(int argc, const char **argv) {

/* initialize options, mode = -1 */

#ifdef DEBUG
fprintf(stderr,"going to init options, narglist %d\n",narglist);
#endif

/* initialize options, execute with mode = -1 */

#ifdef DEBUG
fprintf(stderr,"going to init options, narglist %d\n",narglist);
#endif
old_mode = 0;
for (j = 0; j < narglist; j++) {
new_inv_out(); /* inv_out[0] = 0; */
n_arg = functions[arglist[j].fn].nargs;
err = 0;
#ifdef DEBUG
fprintf(stderr,"going to init option %s\n", functions[arglist[j].fn].name);
fprintf(stderr,"going to init option %s %d\n", functions[arglist[j].fn].name, n_arg);
#endif
mode = -1;
// if (n_arg == 0) err = functions[arglist[j].fn].fn(-1,NULL,NULL,0, inv_out,local+j);
if (n_arg == 0) err = functions[arglist[j].fn].fn(call_ARG0(inv_out,local+j));
else if (n_arg == 1) err = functions[arglist[j].fn].fn(call_ARG1(inv_out,local+j,
new_argv[arglist[j].i_argc]));
else if (n_arg == 2) err = functions[arglist[j].fn].fn(call_ARG2(inv_out,local+j,
new_argv[arglist[j].i_argc],new_argv[arglist[j].i_argc+1]));
else if (n_arg == 3) err = functions[arglist[j].fn].fn(call_ARG3(inv_out,local+j,
new_argv[arglist[j].i_argc],new_argv[arglist[j].i_argc+1],new_argv[arglist[j].i_argc+2]));
else if (n_arg == 4) err = functions[arglist[j].fn].fn(call_ARG4(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2],new_argv[arglist[j].i_argc+3]));
else if (n_arg == 5) err = functions[arglist[j].fn].fn(call_ARG5(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],new_argv[arglist[j].i_argc+2],
new_argv[arglist[j].i_argc+3], new_argv[arglist[j].i_argc+4]));
else if (n_arg == 6) err = functions[arglist[j].fn].fn(call_ARG6(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
if (n_arg == 0) err = functions[arglist[j].fn].fn(init_ARG0(inv_out,local+j));
else if (n_arg == 1) err = functions[arglist[j].fn].fn(init_ARG1(inv_out,local+j,
new_argv[arglist[j].i_argc ]));
else if (n_arg == 2) err = functions[arglist[j].fn].fn(init_ARG2(inv_out,local+j,
new_argv[arglist[j].i_argc ], new_argv[arglist[j].i_argc+1]));
else if (n_arg == 3) err = functions[arglist[j].fn].fn(init_ARG3(inv_out,local+j,
new_argv[arglist[j].i_argc ], new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2]));
else if (n_arg == 4) err = functions[arglist[j].fn].fn(init_ARG4(inv_out,local+j,
new_argv[arglist[j].i_argc ], new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2] ,new_argv[arglist[j].i_argc+3]));
else if (n_arg == 5) err = functions[arglist[j].fn].fn(init_ARG5(inv_out,local+j,
new_argv[arglist[j].i_argc ], new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2], new_argv[arglist[j].i_argc+3],
new_argv[arglist[j].i_argc+4]));
else if (n_arg == 6) err = functions[arglist[j].fn].fn(init_ARG6(inv_out,local+j,
new_argv[arglist[j].i_argc ], new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2], new_argv[arglist[j].i_argc+3],
new_argv[arglist[j].i_argc+4], new_argv[arglist[j].i_argc+5]));
else if (n_arg == 7) err = functions[arglist[j].fn].fn(call_ARG7(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
else if (n_arg == 7) err = functions[arglist[j].fn].fn(init_ARG7(inv_out,local+j,
new_argv[arglist[j].i_argc ], new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2], new_argv[arglist[j].i_argc+3],
new_argv[arglist[j].i_argc+4], new_argv[arglist[j].i_argc+5],
new_argv[arglist[j].i_argc+6]));
else if (n_arg == 8) err = functions[arglist[j].fn].fn(call_ARG8(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
else if (n_arg == 8) err = functions[arglist[j].fn].fn(init_ARG8(inv_out,local+j,
new_argv[arglist[j].i_argc ], new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2], new_argv[arglist[j].i_argc+3],
new_argv[arglist[j].i_argc+4], new_argv[arglist[j].i_argc+5],
new_argv[arglist[j].i_argc+6], new_argv[arglist[j].i_argc+7]));

// option could change mode, save it for future use
if (mode != -1) old_mode = mode;

if(inv_out[0] != 0) {
fwrite_file(inv_out, 1, strnlen(inv_out,INV_BUFFER), &inv_file);
}
Expand All @@ -326,7 +318,6 @@ int wgrib2(int argc, const char **argv) {
}
}
fflush_file(&inv_file);
mode = old_mode;

/* error and EOF handlers have been initialized */
#ifdef DEBUG
Expand Down Expand Up @@ -907,39 +898,39 @@ int wgrib2(int argc, const char **argv) {
n_arg = functions[arglist[j].fn].nargs;
new_inv_out(); // inv_out[0] = 0;

if (n_arg == 0) err |= functions[arglist[j].fn].fn(call_ARG0(inv_out,local+j));
if (n_arg == 0) err |= functions[arglist[j].fn].fn(fin_ARG0(inv_out,local+j));

else if (n_arg == 1) err |= functions[arglist[j].fn].fn(call_ARG1(inv_out,local+j,
else if (n_arg == 1) err |= functions[arglist[j].fn].fn(fin_ARG1(inv_out,local+j,
new_argv[arglist[j].i_argc ]));

else if (n_arg == 2) err |= functions[arglist[j].fn].fn(call_ARG2(inv_out,local+j,
else if (n_arg == 2) err |= functions[arglist[j].fn].fn(fin_ARG2(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1]));

else if (n_arg == 3) err |= functions[arglist[j].fn].fn(call_ARG3(inv_out,local+j,
else if (n_arg == 3) err |= functions[arglist[j].fn].fn(fin_ARG3(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2]));

else if (n_arg == 4) err |= functions[arglist[j].fn].fn(call_ARG4(inv_out,local+j,
else if (n_arg == 4) err |= functions[arglist[j].fn].fn(fin_ARG4(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2], new_argv[arglist[j].i_argc+3]));

else if (n_arg == 5) err |= functions[arglist[j].fn].fn(call_ARG5(inv_out,local+j,
else if (n_arg == 5) err |= functions[arglist[j].fn].fn(fin_ARG5(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2], new_argv[arglist[j].i_argc+3],
new_argv[arglist[j].i_argc+4]));

else if (n_arg == 6) err |= functions[arglist[j].fn].fn(call_ARG6(inv_out,local+j,
else if (n_arg == 6) err |= functions[arglist[j].fn].fn(fin_ARG6(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2], new_argv[arglist[j].i_argc+3],
new_argv[arglist[j].i_argc+4], new_argv[arglist[j].i_argc+5]));

else if (n_arg == 7) err |= functions[arglist[j].fn].fn(call_ARG7(inv_out,local+j,
else if (n_arg == 7) err |= functions[arglist[j].fn].fn(fin_ARG7(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2], new_argv[arglist[j].i_argc+3],
new_argv[arglist[j].i_argc+4], new_argv[arglist[j].i_argc+5],
new_argv[arglist[j].i_argc+6]));

else if (n_arg == 8) err |= functions[arglist[j].fn].fn(call_ARG8(inv_out,local+j,
else if (n_arg == 8) err |= functions[arglist[j].fn].fn(fin_ARG8(inv_out,local+j,
new_argv[arglist[j].i_argc ],new_argv[arglist[j].i_argc+1],
new_argv[arglist[j].i_argc+2], new_argv[arglist[j].i_argc+3],
new_argv[arglist[j].i_argc+4], new_argv[arglist[j].i_argc+5],
Expand Down
19 changes: 19 additions & 0 deletions wgrib2/wgrib2.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,25 @@ struct ARGLIST {int fn; int i_argc;};
#define call_ARG7(inv_out,local,arg1,arg2,arg3,arg4,arg5,arg6,arg7) mode, sec, data, ndata, inv_out, local, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NULL
#define call_ARG8(inv_out,local,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) mode, sec, data, ndata, inv_out, local, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8

#define init_ARG0(inv_out,local) -1, NULL, NULL, 0, inv_out, local, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
#define init_ARG1(inv_out,local,arg1) -1, NULL, NULL, 0, inv_out, local, arg1, NULL, NULL, NULL, NULL, NULL, NULL, NULL
#define init_ARG2(inv_out,local,arg1,arg2) -1, NULL, NULL, 0, inv_out, local, arg1, arg2, NULL, NULL, NULL, NULL, NULL, NULL
#define init_ARG3(inv_out,local,arg1,arg2,arg3) -1, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, NULL, NULL, NULL, NULL, NULL
#define init_ARG4(inv_out,local,arg1,arg2,arg3,arg4) -1, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, NULL, NULL, NULL, NULL
#define init_ARG5(inv_out,local,arg1,arg2,arg3,arg4,arg5) -1, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, arg5, NULL, NULL, NULL
#define init_ARG6(inv_out,local,arg1,arg2,arg3,arg4,arg5,arg6) -1, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, arg5, arg6, NULL, NULL
#define init_ARG7(inv_out,local,arg1,arg2,arg3,arg4,arg5,arg6,arg7) -1, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NULL
#define init_ARG8(inv_out,local,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) -1, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8

#define fin_ARG0(inv_out,local) -2, NULL, NULL, 0, inv_out, local, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
#define fin_ARG1(inv_out,local,arg1) -2, NULL, NULL, 0, inv_out, local, arg1, NULL, NULL, NULL, NULL, NULL, NULL, NULL
#define fin_ARG2(inv_out,local,arg1,arg2) -2, NULL, NULL, 0, inv_out, local, arg1, arg2, NULL, NULL, NULL, NULL, NULL, NULL
#define fin_ARG3(inv_out,local,arg1,arg2,arg3) -2, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, NULL, NULL, NULL, NULL, NULL
#define fin_ARG4(inv_out,local,arg1,arg2,arg3,arg4) -2, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, NULL, NULL, NULL, NULL
#define fin_ARG5(inv_out,local,arg1,arg2,arg3,arg4,arg5) -2, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, arg5, NULL, NULL, NULL
#define fin_ARG6(inv_out,local,arg1,arg2,arg3,arg4,arg5,arg6) -2, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, arg5, arg6, NULL, NULL
#define fin_ARG7(inv_out,local,arg1,arg2,arg3,arg4,arg5,arg6,arg7) -2, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NULL
#define fin_ARG8(inv_out,local,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) -2, NULL, NULL, 0, inv_out, local, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8

/* delayed errors */
#define DELAYED_NONERROR_END 1
Expand Down

0 comments on commit 3329e78

Please sign in to comment.