| 
    
 |   |  
 
  | 
   HOME > Monitoring_and_Data > Oceanic and Atmospheric Data > Reanalysis: Atmospheric Data > 
wgrib2 
   | 
  
 |   |  
 
  
wgrib2: a sample function
Introduction
Wgrib2 is "function" driven.  Options on the command line corresponds to a function call.
When wgrib2 is started, each option-function is initialized by calling it with mode=-1.
For each grib record processed, the option-function is called with mode=verbosity index (verbosity ≥ 0).
After all grib records have been processed, the option-functions are told to clean up by calling
them with mode=-2.
Here is a sample function.
 
 
 
#include <stdio.h> 
#include "grb2.h" 
#include "wgrib2.h" 
#include "fnlist.h" 
 
extern int decode; 
extern int need_output_file; 
 
/* 
 * HEADER:100:min:inv:0:print minimum value 
 * the above line is needed by each command line option 
 * HEADER:sort-order:type-of-function:number-of-arguments:description 
 */ 
 
int f_min(int mode, unsigned char **sec, float *data, int ndata, char *inv_out, void **local) { 
  
    double mn; 
  
    int ok, i; 
 
  
    if (mode == -1) decode = 1; // decode=1 so wgrib2 will unpack grib data 
  
    else { 
    
        mn = ok = 0; 
    
        for (i = 0; i < ndata; i++) { 
      
            if (!UNDEFINED_VAL(data[i])) { 
        
                if (ok) mn = mn < data[i] ? mn : data[i]; 
        
                else { ok = 1; mn = data[i]; } 
      
            } 
    
        } 
    
        if (ok) sprintf(inv_out, "min=%lg",mn); 
    
        else sprintf(inv_out, "min=undefined"); 
  
    } 
  
    return 0; 
} 
The arguments to f_min() are the standard for options that do not require an argument
  mode = -1: initialization  -2: cleanup  O+: processing verbosity index
  sec = sections of the grib (sub) message
  *data = decoded grid point values
  ndata = number of grid points
  *inv_out = string that written to the inventory
  **local = unique pointer, used for "static" variables.
 
 
  | 
   
   | 
  
   |   
 |