1 /**
2 * Copyright 1981-2016 ECMWF.
3 *
4 * This software is licensed under the terms of the Apache Licence
5 * Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6 *
7 * In applying this licence, ECMWF does not waive the privileges and immunities
8 * granted to it by virtue of its status as an intergovernmental organisation
9 * nor does it submit to any jurisdiction.
10 */
11 #ifndef PBG_ROUTINES_H
12 #define PBG_ROUTINES_H
13 
14 #include <stdio.h>
15 #include <sys/types.h>
16 
17 #ifdef FOPEN64
18 extern FILE *fopen64(const char *,const char *);
19 #define OFF_T off64_t
20 extern OFF_T ftello64(FILE *);
21 #else
22 #define OFF_T off_t
23 #endif
24 
25 #define _fcd char *
26 #define fortint int
27 #define integer int
28 #define bool int
29 
30 #define MAX_NUMBER_OF_GRIBS 100
31 
32 typedef struct gribfile {
33 
34   FILE *  fp;
35   _fcd    fname;
36   char readwriteflag;
37   integer max;
38   integer count;
39   OFF_T * offset;
40   integer * length;
41   integer * parameter;
42   integer * level;
43   integer * date;
44   integer * time;
45   integer * timestep;
46   integer * localDefinitionNumber;
47   integer * type;
48   integer * stream;
49   integer * repres;
50   integer * levtype;
51   integer * number;
52   integer * vdate;
53   integer * vtime;
54   integer * tcNumber;
55   integer * tcTotal;
56   integer * clusterMethod;
57   integer * tcStep;
58   integer * clusterStepEnd;
59   integer * tcNorth;
60   integer * tcWest;
61   integer * tcSouth;
62   integer * tcEast;
63   integer * clusterOpFcNumber;
64   integer * clusterControlFcNumber;
65   integer * tcNumOfFcs;
66   integer * probScale;
67   integer * probIndicator;
68   integer * probLower;
69   integer * probUpper;
70   integer * ni;
71   integer * nj;
72   integer * nlat;
73   integer * nlon;
74   integer * slat;
75   integer * slon;
76   integer * di;
77   integer * dj;
78   integer * splat;
79   integer * splon;
80   integer * quasi;
81   integer * directionNumber;
82   integer * frequencyNumber;
83   integer * optimisationTime;
84   integer * leadTime;
85   integer * sensitiveAreaDomain;
86   integer * sensitiveAreaMethod;
87   integer * verifyingMonth;
88   integer * averagingPeriod;
89   integer * forecastMonth;
90   integer * referenceDate;
91   integer * climateDateFrom;
92   integer * climateDateTo;
93   integer * thresholdUnitsScale;
94   integer * thresholdIndicator;
95   integer * lowerThreshold;
96   integer * upperThreshold;
97 
98   struct gribfile *next;
99 
100 }gribfile;
101 
102 typedef struct collection {
103 
104   integer (* exists)(_fcd , fortint);
105   integer (* addRead)(_fcd , fortint);
106   integer (* addWrite)(_fcd , fortint);
107   void (* removeFile)(_fcd , fortint);
108 
109   integer count;
110   integer max;
111   struct gribfile * files;
112 
113 }collection;
114 
115 
116 /*
117 // Prototypes
118 */
119 
120 #ifdef __cplusplus
121 extern "C" {
122 #endif
123 
124 fortint pbgtotl(_fcd filename, fortint filename_len);
125 fortint pbgtotl_(_fcd filename, fortint filename_len);
126 fortint pbgleng(_fcd filename, fortint * n, fortint filename_len);
127 fortint pbgleng_(_fcd filename, fortint * n, fortint filename_len);
128 fortint pbgoffs(_fcd filename, fortint * n, fortint filename_len);
129 fortint pbgoffs_(_fcd filename, fortint * n, fortint filename_len);
130 fortint pbgparm(_fcd filename, fortint * n, fortint filename_len);
131 fortint pbgparm_(_fcd filename, fortint * n, fortint filename_len);
132 fortint pbglevl(_fcd filename, fortint * n, fortint filename_len);
133 fortint pbglevl_(_fcd filename, fortint * n, fortint filename_len);
134 fortint pbgdate(_fcd filename, fortint * n, fortint filename_len);
135 fortint pbgdate_(_fcd filename, fortint * n, fortint filename_len);
136 fortint pbgtime(_fcd filename, fortint * n, fortint filename_len);
137 fortint pbgtime_(_fcd filename, fortint * n, fortint filename_len);
138 fortint pbgstep(_fcd filename, fortint * n, fortint filename_len);
139 fortint pbgstep_(_fcd filename, fortint * n, fortint filename_len);
140 fortint pbgtype(_fcd filename, fortint * n, fortint filename_len);
141 fortint pbgtype_(_fcd filename, fortint * n, fortint filename_len);
142 fortint pbgstrm(_fcd filename, fortint * n, fortint filename_len);
143 fortint pbgstrm_(_fcd filename, fortint * n, fortint filename_len);
144 fortint pbgrepr(_fcd filename, fortint * n, fortint filename_len);
145 fortint pbgrepr_(_fcd filename, fortint * n, fortint filename_len);
146 fortint pbglevt(_fcd filename, fortint * n, fortint filename_len);
147 fortint pbglevt_(_fcd filename, fortint * n, fortint filename_len);
148 fortint pbgfind(_fcd filename,
149                 fortint * param, fortint * level, fortint * date,
150                 fortint * time,  fortint * step,  fortint * n,
151                 fortint filename_len);
152 fortint pbgfind_(_fcd filename,
153                 fortint * param, fortint * level, fortint * date,
154                 fortint * time,  fortint * step,  fortint * n,
155                 fortint filename_len);
156 fortint pbgafind(_fcd filename, fortint * list, fortint * n,
157                 fortint filename_len);
158 fortint pbgafind_(_fcd filename, fortint * list, fortint * n,
159                 fortint filename_len);
160 fortint pbgbfind(_fcd filename, fortint * list, fortint * n,
161                 fortint filename_len);
162 fortint pbgbfind_(_fcd filename, fortint * list, fortint * n,
163                 fortint filename_len);
164 fortint pbgvfind(_fcd filename,
165                 fortint * param, fortint * level, fortint * vdate,
166                 fortint * vtime, fortint * status, fortint * n,
167                 fortint filename_len);
168 fortint pbgvfind_(_fcd filename,
169                 fortint * param, fortint * level, fortint * vdate,
170                 fortint * vtime, fortint * status, fortint * n,
171                 fortint filename_len);
172 fortint pbgxfind_(fortint * grib1, _fcd filename, fortint filename_len);
173 fortint pbgxfind(fortint * grib1, _fcd filename, fortint filename_len);
174 
175 fortint pbgget(_fcd filename, fortint * buffer, fortint * bufflen,
176                fortint * n, fortint filename_len);
177 fortint pbgget_(_fcd filename, fortint * buffer, fortint * bufflen,
178                fortint * n, fortint filename_len);
179 
180 fortint pbgput(_fcd filename, fortint * buffer, fortint * bufflen,
181                fortint filename_len);
182 fortint pbgput_(_fcd filename, fortint * buffer, fortint * bufflen,
183                fortint filename_len);
184 
185 void pbgclos(_fcd filename, fortint filename_len);
186 void pbgclos_(_fcd filename, fortint filename_len);
187 
188 #ifdef __cplusplus
189 }
190 #endif
191 
192 #endif /* end of  PBG_ROUTINES_H */
193