1 #ifndef __LOCAL_PROTO_H__
2 #define __LOCAL_PROTO_H__
3 
4 #include <gdal.h>
5 #include <math.h>
6 /* is it safe to #include <float.h> ? */
7 
8 /* range limits */
9 /*
10   GDAL data type               minimum          maximum
11 
12   Byte                               0              255
13   UInt16                             0           65,535
14   Int16, CInt16                -32,768           32,767
15   UInt32                             0    4,294,967,295
16   Int32, CInt32         -2,147,483,648    2,147,483,647
17   Float32, CFloat32            -3.4E38           3.4E38
18   Float64, CFloat64          -1.79E308         1.79E308
19 */
20 
21 /* copied from limits.h, checked against gdal-1.6.0/gcore/gdalrasterband.cpp */
22 #define TYPE_BYTE_MIN		0
23 #define TYPE_BYTE_MAX		255
24 #define TYPE_INT16_MIN		(-32768)
25 #define TYPE_INT16_MAX		32767
26 #define TYPE_UINT16_MIN		0
27 #define TYPE_UINT16_MAX		65535
28 #define TYPE_UINT32_MIN		0
29 #define TYPE_UINT32_MAX		4294967295U
30 #define TYPE_INT32_MIN		(-TYPE_INT32_MAX - 1)
31 #define TYPE_INT32_MAX		2147483647
32 
33 /* new systems: FLT_MAX, DBL_MAX, old systems: MAXFLOAT, MAXDOUBLE, fallback: 3.4E38 and 1.79E308f */
34 #ifdef FLT_MAX
35 #define TYPE_FLOAT32_MIN	(-FLT_MAX)
36 #define TYPE_FLOAT32_MAX	FLT_MAX
37 #elif defined(MAX_FLOAT)
38 #define TYPE_FLOAT32_MIN	(-MAXFLOAT)
39 #define TYPE_FLOAT32_MAX	MAXFLOAT
40 #else
41 /* formula from float.h */
42 #define TYPE_FLOAT32_MIN	(float)(-((1 + (1 - pow(2, -23))) * pow(2, 127)))
43 #define TYPE_FLOAT32_MAX	(float)((1 + (1 - pow(2, -23))) * pow(2, 127))
44 #endif
45 
46 #ifdef DBL_MAX
47 #define TYPE_FLOAT64_MIN	(-DBL_MAX)
48 #define TYPE_FLOAT64_MAX	DBL_MAX
49 #elif defined(MAXDOUBLE)
50 #define TYPE_FLOAT64_MIN	(-MAXDOUBLE)
51 #define TYPE_FLOAT64_MAX	MAXDOUBLE
52 #else
53 /* formula from float.h */
54 #define TYPE_FLOAT64_MIN	(-((1 + (1 - pow(2, -52))) * pow(2, 1023)))
55 #define TYPE_FLOAT64_MAX	((1 + (1 - pow(2, -52))) * pow(2, 1023))
56 #endif
57 
58 #define GRASS_MAX_COLORS TYPE_UINT16_MAX    /* ok? */
59 
60 /* export_band.c */
61 int export_band(GDALDatasetH, int, const char *,
62 		const char *, struct Cell_head *, RASTER_MAP_TYPE,
63 		double, int, int, int);
64 int exact_checks(GDALDataType, const char *, const char *,
65                  struct Cell_head *, RASTER_MAP_TYPE, double,
66 		 const char *, int);
67 
68 /* attr.c */
69 int export_attr(GDALDatasetH, int, const char *,
70 		const char *, RASTER_MAP_TYPE);
71 
72 #endif /* __LOCAL_PROTO_H__ */
73