#ifndef gridtemplates_H
#define gridtemplates_H
#include "grib2.h"

//   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2001-10-26
//
// ABSTRACT: This Fortran Module contains info on all the available
//   GRIB2 Grid Definition Templates used in Section 3 (GDS).
//   The information describing each template is stored in the
//   gridtemplate structure defined below.
//
//   Each Template has three parts: The number of entries in the template
//   (mapgridlen);  A map of the template (mapgrid), which contains the
//   number of octets in which to pack each of the template values; and
//   a logical value (needext) that indicates whether the Template needs
//   to be extended.  In some cases the number of entries in a template
//   can vary depending upon values specified in the "static" part of
//   the template.  ( See Template 3.120 as an example )
//
//   NOTE:  Array mapgrid contains the number of octets in which the
//   corresponding template values will be stored.  A negative value in
//   mapgrid is used to indicate that the corresponding template entry can
//   contain negative values.  This information is used later when packing
//   (or unpacking) the template data values.  Negative data values in GRIB
//   are stored with the left most bit set to one, and a negative number
//   of octets value in mapgrid[] indicates that this possibility should
//   be considered.  The number of octets used to store the data value
//   in this case would be the absolute value of the negative value in
//   mapgrid[].
//  
// PROGRAM HISTORY LOG:
//
// 2001-10-26  Gilbert
// 2007-08-16  Vuong     -  Added GDT 3.204  Curvilinear Orthogonal Grid
// 2008-07-08  Vuong     -  Added GDT 3.32768 Rot Lat/Lon E-grid (Arakawa)
// 2010-05-11  Vuong     -  Added GDT 3.32769 Rotate Lat/Lon Non-E Staggered grid (Arakawa)
// 2013-08-06  Vuong     -  Added GDT 3.4,3.5,3.12,3.101,3.140
//
////////////////////////////////////////////////////////////////////

      #define MAXGRIDTEMP 31              // maximum number of templates
      #define MAXGRIDMAPLEN 200           // maximum template map length

      struct gridtemplate
      {
          g2int template_num;
          g2int mapgridlen;
          g2int needext;
          g2int mapgrid[MAXGRIDMAPLEN];
      };

const struct gridtemplate *get_templatesgrid(void);
g2int getgridindex(g2int number);

#endif  /*  gridtemplates_H  */
