int f_set_prob(ARG5) { int pdt, val, scale; double value; unsigned char *p; if (mode < 0) return 0; pdt = code_table_4_0(sec); switch(pdt) { case 0: case 1: case 2: case 4: case 6: f_set_pdt(call_ARG1(inv_out, NULL, "+5")); break; case 8: case 10: case 11: case 12: case 13: case 14: case 15: f_set_pdt(call_ARG1(inv_out, NULL, "+9")); break; } p = code_table_4_9_location(sec); p[-2] = (unsigned char) atoi(arg1); p[-1] = (unsigned char) atoi(arg2); p[0] = (unsigned char) atoi(arg3); // encode lower limit value = atof(arg4); best_scaled_value(value, &scale,&val); p[1] = scale & 255; uint_char(val, p+2); // encode upper limit value = atof(arg5); best_scaled_value(value, &scale,&val); p[6] = scale & 255; uint_char(val, p+7); return 0; }
/* * HEADER:100:tosubmsg:output:1:convert GRIB message to submessage and write to file X */ int f_tosubmsg(ARG1) { struct submsg *save; if (mode == -1) { *local = save = (struct submsg *) malloc( sizeof(struct submsg)); if (save == NULL) fatal_error("memory allocation tosubmsg",""); init_tosubmsg(call_ARG1(inv_out,local,arg1), save); } else if (mode >= 0) { save = (struct submsg *) *local; write_tosubmsg(call_ARG1(inv_out,local,arg1), save); } else if (mode == -2) { save = (struct submsg *) *local; cleanup_tosubmsg(call_ARG1(inv_out,local,arg1), save); } return 0; }
/* * HEADER:100:tosubmsg:output:1:convert GRIB message to submessage and write to file X */ int f_tosubmsg(ARG1) { struct submsg *save; if (flush_mode) fatal_error("Tosubmsg: requires random access I/O, incompatible with -flush" ,""); if (mode == -1) { *local = save = (struct submsg *) malloc( sizeof(struct submsg)); if (save == NULL) fatal_error("memory allocation tosubmsg",""); init_tosubmsg(call_ARG1(inv_out,local,arg1), save); } else if (mode >= 0) { save = (struct submsg *) *local; write_tosubmsg(call_ARG1(inv_out,local,arg1), save); } else if (mode == -2) { save = (struct submsg *) *local; cleanup_tosubmsg(call_ARG1(inv_out,local,arg1), save); } return 0; }
int f_set_percentile(ARG1) { int i,pdt, percent; unsigned char *p; if (mode < 0) return 0; pdt = code_table_4_0(sec); percent = atoi(arg1); if (percent < 0) percent = 0; if (percent > 100 ) percent = 100; switch(pdt) { case 0: case 1: case 2: case 4: case 5: f_set_pdt(call_ARG1(inv_out, NULL, "+6")); break; case 8: case 9: case 11: case 12: case 13: case 14: case 15: f_set_pdt(call_ARG1(inv_out, NULL, "+10")); break; } p = percentile_value_location(sec); if (p != NULL) *p = (unsigned char) percent; return 0; }