]> SALOME platform Git repositories - modules/hydro.git/blob - src/HYDROData/shapelib/shapefil.h
Salome HOME
correction of compilation on Windows
[modules/hydro.git] / src / HYDROData / shapelib / shapefil.h
1 #ifndef SHAPEFILE_H_INCLUDED
2 #define SHAPEFILE_H_INCLUDED
3
4 /******************************************************************************
5  * $Id: shapefil.h,v 1.52 2011-12-11 22:26:46 fwarmerdam Exp $
6  *
7  * Project:  Shapelib
8  * Purpose:  Primary include file for Shapelib.
9  * Author:   Frank Warmerdam, warmerdam@pobox.com
10  *
11  ******************************************************************************
12  * Copyright (c) 1999, Frank Warmerdam
13  *
14  * This software is available under the following "MIT Style" license,
15  * or at the option of the licensee under the LGPL (see LICENSE.LGPL).  This
16  * option is discussed in more detail in shapelib.html.
17  *
18  * --
19  * 
20  * Permission is hereby granted, free of charge, to any person obtaining a
21  * copy of this software and associated documentation files (the "Software"),
22  * to deal in the Software without restriction, including without limitation
23  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
24  * and/or sell copies of the Software, and to permit persons to whom the
25  * Software is furnished to do so, subject to the following conditions:
26  *
27  * The above copyright notice and this permission notice shall be included
28  * in all copies or substantial portions of the Software.
29  *
30  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
31  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
33  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
34  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
35  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
36  * DEALINGS IN THE SOFTWARE.
37  ******************************************************************************
38  *
39  * $Log: shapefil.h,v $
40  * Revision 1.52  2011-12-11 22:26:46  fwarmerdam
41  * upgrade .qix access code to use SAHooks (gdal #3365)
42  *
43  * Revision 1.51  2011-07-24 05:59:25  fwarmerdam
44  * minimize use of CPLError in favor of SAHooks.Error()
45  *
46  * Revision 1.50  2011-05-13 17:35:17  fwarmerdam
47  * added DBFReorderFields() and DBFAlterFields() functions (from Even)
48  *
49  * Revision 1.49  2011-04-16 14:38:21  fwarmerdam
50  * avoid warnings with gcc on SHP_CVSID
51  *
52  * Revision 1.48  2010-08-27 23:42:52  fwarmerdam
53  * add SHPAPI_CALL attribute in code
54  *
55  * Revision 1.47  2010-01-28 11:34:34  fwarmerdam
56  * handle the shape file length limits more gracefully (#3236)
57  *
58  * Revision 1.46  2008-11-12 14:28:15  fwarmerdam
59  * DBFCreateField() now works on files with records
60  *
61  * Revision 1.45  2008/11/11 17:47:10  fwarmerdam
62  * added DBFDeleteField() function
63  *
64  * Revision 1.44  2008/01/16 20:05:19  bram
65  * Add file hooks that accept UTF-8 encoded filenames on some platforms.  Use SASetupUtf8Hooks
66  *  tosetup the hooks and check SHPAPI_UTF8_HOOKS for its availability.  Currently, this
67  *  is only available on the Windows platform that decodes the UTF-8 filenames to wide
68  *  character strings and feeds them to _wfopen and _wremove.
69  *
70  * Revision 1.43  2008/01/10 16:35:30  fwarmerdam
71  * avoid _ prefix on #defined symbols (bug 1840)
72  *
73  * Revision 1.42  2007/12/18 18:28:14  bram
74  * - create hook for client specific atof (bugzilla ticket 1615)
75  * - check for NULL handle before closing cpCPG file, and close after reading.
76  *
77  * Revision 1.41  2007/12/15 20:25:32  bram
78  * dbfopen.c now reads the Code Page information from the DBF file, and exports
79  * this information as a string through the DBFGetCodePage function.  This is 
80  * either the number from the LDID header field ("LDID/<number>") or as the 
81  * content of an accompanying .CPG file.  When creating a DBF file, the code can
82  * be set using DBFCreateEx.
83  *
84  * Revision 1.40  2007/12/06 07:00:25  fwarmerdam
85  * dbfopen now using SAHooks for fileio
86  *
87  * Revision 1.39  2007/12/04 20:37:56  fwarmerdam
88  * preliminary implementation of hooks api for io and errors
89  *
90  * Revision 1.38  2007/11/21 22:39:56  fwarmerdam
91  * close shx file in readonly mode (GDAL #1956)
92  *
93  * Revision 1.37  2007/10/27 03:31:14  fwarmerdam
94  * limit default depth of tree to 12 levels (gdal ticket #1594)
95  *
96  * Revision 1.36  2007/09/10 23:33:15  fwarmerdam
97  * Upstreamed support for visibility flag in SHPAPI_CALL for the needs
98  * of GDAL (gdal ticket #1810).
99  *
100  * Revision 1.35  2007/09/03 19:48:10  fwarmerdam
101  * move DBFReadAttribute() static dDoubleField into dbfinfo
102  *
103  * Revision 1.34  2006/06/17 15:33:32  fwarmerdam
104  * added pszWorkField - bug 1202 (rso)
105  *
106  * Revision 1.33  2006/02/15 01:14:30  fwarmerdam
107  * added DBFAddNativeFieldType
108  *
109  * Revision 1.32  2006/01/26 15:07:32  fwarmerdam
110  * add bMeasureIsUsed flag from Craig Bruce: Bug 1249
111  *
112  * Revision 1.31  2006/01/05 01:27:27  fwarmerdam
113  * added dbf deletion mark/fetch
114  *
115  * Revision 1.30  2005/01/03 22:30:13  fwarmerdam
116  * added support for saved quadtrees
117  *
118  * Revision 1.29  2004/09/26 20:09:35  fwarmerdam
119  * avoid rcsid warnings
120  *
121  * Revision 1.28  2003/12/29 06:02:18  fwarmerdam
122  * added cpl_error.h option
123  *
124  * Revision 1.27  2003/04/21 18:30:37  warmerda
125  * added header write/update public methods
126  *
127  * Revision 1.26  2002/09/29 00:00:08  warmerda
128  * added FTLogical and logical attribute read/write calls
129  *
130  * Revision 1.25  2002/05/07 13:46:30  warmerda
131  * added DBFWriteAttributeDirectly().
132  *
133  * Revision 1.24  2002/04/10 16:59:54  warmerda
134  * added SHPRewindObject
135  *
136  * Revision 1.23  2002/01/15 14:36:07  warmerda
137  * updated email address
138  *
139  * Revision 1.22  2002/01/15 14:32:00  warmerda
140  * try to improve SHPAPI_CALL docs
141  */
142
143 #include <stdio.h>
144
145 #ifdef USE_DBMALLOC
146 #include <dbmalloc.h>
147 #endif
148
149 #ifdef __cplusplus
150 extern "C" {
151 #endif
152
153 /************************************************************************/
154 /*                        Configuration options.                        */
155 /************************************************************************/
156
157 /* -------------------------------------------------------------------- */
158 /*      Should the DBFReadStringAttribute() strip leading and           */
159 /*      trailing white space?                                           */
160 /* -------------------------------------------------------------------- */
161 #define TRIM_DBF_WHITESPACE
162
163 /* -------------------------------------------------------------------- */
164 /*      Should we write measure values to the Multipatch object?        */
165 /*      Reportedly ArcView crashes if we do write it, so for now it     */
166 /*      is disabled.                                                    */
167 /* -------------------------------------------------------------------- */
168 #define DISABLE_MULTIPATCH_MEASURE
169     
170 /* -------------------------------------------------------------------- */
171 /*      SHPAPI_CALL                                                     */
172 /*                                                                      */
173 /*      The following two macros are present to allow forcing           */
174 /*      various calling conventions on the Shapelib API.                */
175 /*                                                                      */
176 /*      To force __stdcall conventions (needed to call Shapelib         */
177 /*      from Visual Basic and/or Dephi I believe) the makefile could    */
178 /*      be modified to define:                                          */
179 /*                                                                      */
180 /*        /DSHPAPI_CALL=__stdcall                                       */
181 /*                                                                      */
182 /*      If it is desired to force export of the Shapelib API without    */
183 /*      using the shapelib.def file, use the following definition.      */
184 /*                                                                      */
185 /*        /DSHAPELIB_DLLEXPORT                                          */
186 /*                                                                      */
187 /*      To get both at once it will be necessary to hack this           */
188 /*      include file to define:                                         */
189 /*                                                                      */
190 /*        #define SHPAPI_CALL __declspec(dllexport) __stdcall           */
191 /*        #define SHPAPI_CALL1 __declspec(dllexport) * __stdcall        */
192 /*                                                                      */
193 /*      The complexity of the situtation is partly caused by the        */
194 /*      peculiar requirement of Visual C++ that __stdcall appear        */
195 /*      after any "*"'s in the return value of a function while the     */
196 /*      __declspec(dllexport) must appear before them.                  */
197 /* -------------------------------------------------------------------- */
198
199 #ifdef WIN32
200   #define SHAPELIB_DLLEXPORT 1
201 #endif
202
203 #ifdef SHAPELIB_DLLEXPORT
204 #  define SHPAPI_CALL __declspec(dllexport)
205 #  define SHPAPI_CALL1(x)  __declspec(dllexport) x
206 #endif
207
208 #ifndef SHPAPI_CALL
209 #  if defined(USE_GCC_VISIBILITY_FLAG)
210 #    define SHPAPI_CALL     __attribute__ ((visibility("default")))
211 #    define SHPAPI_CALL1(x) __attribute__ ((visibility("default")))     x
212 #  else
213 #    define SHPAPI_CALL
214 #  endif
215 #endif
216
217 #ifndef SHPAPI_CALL1
218 #  define SHPAPI_CALL1(x)      x SHPAPI_CALL
219 #endif
220     
221 /* -------------------------------------------------------------------- */
222 /*      Macros for controlling CVSID and ensuring they don't appear     */
223 /*      as unreferenced variables resulting in lots of warnings.        */
224 /* -------------------------------------------------------------------- */
225 #ifndef DISABLE_CVSID
226 #  if defined(__GNUC__) && __GNUC__ >= 4
227 #    define SHP_CVSID(string)     static char cpl_cvsid[] __attribute__((used)) = string;
228 #  else
229 #    define SHP_CVSID(string)     static char cpl_cvsid[] = string; \
230 static char *cvsid_aw() { return( cvsid_aw() ? ((char *) NULL) : cpl_cvsid ); }
231 #  endif
232 #else
233 #  define SHP_CVSID(string)
234 #endif
235
236 /* -------------------------------------------------------------------- */
237 /*      On some platforms, additional file IO hooks are defined that    */
238 /*      UTF-8 encoded filenames Unicode filenames                       */
239 /* -------------------------------------------------------------------- */
240 #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
241 #       define SHPAPI_WINDOWS
242 #       define SHPAPI_UTF8_HOOKS
243 #endif
244
245 /* -------------------------------------------------------------------- */
246 /*      IO/Error hook functions.                                        */
247 /* -------------------------------------------------------------------- */
248 typedef int *SAFile;
249
250 #ifndef SAOffset
251 typedef unsigned long SAOffset;
252 #endif
253
254 typedef struct {
255     SAFile     (*FOpen) ( const char *filename, const char *access);
256     SAOffset   (*FRead) ( void *p, SAOffset size, SAOffset nmemb, SAFile file);
257     SAOffset   (*FWrite)( void *p, SAOffset size, SAOffset nmemb, SAFile file);
258     SAOffset   (*FSeek) ( SAFile file, SAOffset offset, int whence );
259     SAOffset   (*FTell) ( SAFile file );
260     int        (*FFlush)( SAFile file );
261     int        (*FClose)( SAFile file );
262     int        (*Remove) ( const char *filename );
263
264     void       (*Error) ( const char *message );
265     double     (*Atof)  ( const char *str );
266 } SAHooks;
267
268 void SHPAPI_CALL SASetupDefaultHooks( SAHooks *psHooks );
269 #ifdef SHPAPI_UTF8_HOOKS
270 void SHPAPI_CALL SASetupUtf8Hooks( SAHooks *psHooks );
271 #endif
272
273 /************************************************************************/
274 /*                             SHP Support.                             */
275 /************************************************************************/
276 typedef struct
277 {
278     SAHooks sHooks;
279
280     SAFile      fpSHP;
281     SAFile      fpSHX;
282
283     int         nShapeType;                             /* SHPT_* */
284     
285     unsigned int        nFileSize;                              /* SHP file */
286
287     int         nRecords;
288     int         nMaxRecords;
289     unsigned int                *panRecOffset;
290     unsigned int                *panRecSize;
291
292     double      adBoundsMin[4];
293     double      adBoundsMax[4];
294
295     int         bUpdated;
296
297     unsigned char *pabyRec;
298     int         nBufSize;
299 } SHPInfo;
300
301 typedef SHPInfo * SHPHandle;
302
303 /* -------------------------------------------------------------------- */
304 /*      Shape types (nSHPType)                                          */
305 /* -------------------------------------------------------------------- */
306 #define SHPT_NULL       0
307 #define SHPT_POINT      1
308 #define SHPT_ARC        3
309 #define SHPT_POLYGON    5
310 #define SHPT_MULTIPOINT 8
311 #define SHPT_POINTZ     11
312 #define SHPT_ARCZ       13
313 #define SHPT_POLYGONZ   15
314 #define SHPT_MULTIPOINTZ 18
315 #define SHPT_POINTM     21
316 #define SHPT_ARCM       23
317 #define SHPT_POLYGONM   25
318 #define SHPT_MULTIPOINTM 28
319 #define SHPT_MULTIPATCH 31
320
321
322 /* -------------------------------------------------------------------- */
323 /*      Part types - everything but SHPT_MULTIPATCH just uses           */
324 /*      SHPP_RING.                                                      */
325 /* -------------------------------------------------------------------- */
326
327 #define SHPP_TRISTRIP   0
328 #define SHPP_TRIFAN     1
329 #define SHPP_OUTERRING  2
330 #define SHPP_INNERRING  3
331 #define SHPP_FIRSTRING  4
332 #define SHPP_RING       5
333
334 /* -------------------------------------------------------------------- */
335 /*      SHPObject - represents on shape (without attributes) read       */
336 /*      from the .shp file.                                             */
337 /* -------------------------------------------------------------------- */
338 typedef struct
339 {
340     int         nSHPType;
341
342     int         nShapeId; /* -1 is unknown/unassigned */
343
344     int         nParts;
345     int         *panPartStart;
346     int         *panPartType;
347     
348     int         nVertices;
349     double      *padfX;
350     double      *padfY;
351     double      *padfZ;
352     double      *padfM;
353
354     double      dfXMin;
355     double      dfYMin;
356     double      dfZMin;
357     double      dfMMin;
358
359     double      dfXMax;
360     double      dfYMax;
361     double      dfZMax;
362     double      dfMMax;
363
364     int         bMeasureIsUsed;
365 } SHPObject;
366
367 /* -------------------------------------------------------------------- */
368 /*      SHP API Prototypes                                              */
369 /* -------------------------------------------------------------------- */
370
371 /* If pszAccess is read-only, the fpSHX field of the returned structure */
372 /* will be NULL as it is not necessary to keep the SHX file open */
373 SHPHandle SHPAPI_CALL
374       SHPOpen( const char * pszShapeFile, const char * pszAccess );
375 SHPHandle SHPAPI_CALL
376       SHPOpenLL( const char *pszShapeFile, const char *pszAccess, 
377                  SAHooks *psHooks );
378 SHPHandle SHPAPI_CALL
379       SHPCreate( const char * pszShapeFile, int nShapeType );
380 SHPHandle SHPAPI_CALL
381       SHPCreateLL( const char * pszShapeFile, int nShapeType,
382                    SAHooks *psHooks );
383 void SHPAPI_CALL
384       SHPGetInfo( SHPHandle hSHP, int * pnEntities, int * pnShapeType,
385                   double * padfMinBound, double * padfMaxBound );
386
387 SHPObject SHPAPI_CALL1(*)
388       SHPReadObject( SHPHandle hSHP, int iShape );
389 int SHPAPI_CALL
390       SHPWriteObject( SHPHandle hSHP, int iShape, SHPObject * psObject );
391
392 void SHPAPI_CALL
393       SHPDestroyObject( SHPObject * psObject );
394 void SHPAPI_CALL
395       SHPComputeExtents( SHPObject * psObject );
396 SHPObject SHPAPI_CALL1(*)
397       SHPCreateObject( int nSHPType, int nShapeId, int nParts, 
398                        const int * panPartStart, const int * panPartType,
399                        int nVertices, 
400                        const double * padfX, const double * padfY,
401                        const double * padfZ, const double * padfM );
402 SHPObject SHPAPI_CALL1(*)
403       SHPCreateSimpleObject( int nSHPType, int nVertices,
404                              const double * padfX, 
405                              const double * padfY, 
406                              const double * padfZ );
407
408 int SHPAPI_CALL
409       SHPRewindObject( SHPHandle hSHP, SHPObject * psObject );
410
411 void SHPAPI_CALL SHPClose( SHPHandle hSHP );
412 void SHPAPI_CALL SHPWriteHeader( SHPHandle hSHP );
413
414 const char SHPAPI_CALL1(*)
415       SHPTypeName( int nSHPType );
416 const char SHPAPI_CALL1(*)
417       SHPPartTypeName( int nPartType );
418
419 /* -------------------------------------------------------------------- */
420 /*      Shape quadtree indexing API.                                    */
421 /* -------------------------------------------------------------------- */
422
423 /* this can be two or four for binary or quad tree */
424 #define MAX_SUBNODE     4
425
426 /* upper limit of tree levels for automatic estimation */
427 #define MAX_DEFAULT_TREE_DEPTH 12
428
429 typedef struct shape_tree_node
430 {
431     /* region covered by this node */
432     double      adfBoundsMin[4];
433     double      adfBoundsMax[4];
434
435     /* list of shapes stored at this node.  The papsShapeObj pointers
436        or the whole list can be NULL */
437     int         nShapeCount;
438     int         *panShapeIds;
439     SHPObject   **papsShapeObj;
440
441     int         nSubNodes;
442     struct shape_tree_node *apsSubNode[MAX_SUBNODE];
443     
444 } SHPTreeNode;
445
446 typedef struct
447 {
448     SHPHandle   hSHP;
449     
450     int         nMaxDepth;
451     int         nDimension;
452     int         nTotalCount;
453     
454     SHPTreeNode *psRoot;
455 } SHPTree;
456
457 SHPTree SHPAPI_CALL1(*)
458       SHPCreateTree( SHPHandle hSHP, int nDimension, int nMaxDepth,
459                      double *padfBoundsMin, double *padfBoundsMax );
460 void    SHPAPI_CALL
461       SHPDestroyTree( SHPTree * hTree );
462
463 int     SHPAPI_CALL
464       SHPWriteTree( SHPTree *hTree, const char * pszFilename );
465
466 int     SHPAPI_CALL
467       SHPTreeAddShapeId( SHPTree * hTree, SHPObject * psObject );
468 int     SHPAPI_CALL
469       SHPTreeRemoveShapeId( SHPTree * hTree, int nShapeId );
470
471 void    SHPAPI_CALL
472       SHPTreeTrimExtraNodes( SHPTree * hTree );
473
474 int    SHPAPI_CALL1(*)
475       SHPTreeFindLikelyShapes( SHPTree * hTree,
476                                double * padfBoundsMin,
477                                double * padfBoundsMax,
478                                int * );
479 int     SHPAPI_CALL
480       SHPCheckBoundsOverlap( double *, double *, double *, double *, int );
481
482 int SHPAPI_CALL1(*) 
483 SHPSearchDiskTree( FILE *fp, 
484                    double *padfBoundsMin, double *padfBoundsMax,
485                    int *pnShapeCount );
486
487
488 typedef struct SHPDiskTreeInfo* SHPTreeDiskHandle;
489
490 SHPTreeDiskHandle SHPAPI_CALL
491     SHPOpenDiskTree( const char* pszQIXFilename,
492                      SAHooks *psHooks );
493
494 void SHPAPI_CALL
495     SHPCloseDiskTree( SHPTreeDiskHandle hDiskTree );
496
497 int SHPAPI_CALL1(*) 
498 SHPSearchDiskTreeEx( SHPTreeDiskHandle hDiskTree, 
499                    double *padfBoundsMin, double *padfBoundsMax,
500                    int *pnShapeCount );
501
502 int SHPAPI_CALL
503     SHPWriteTreeLL(SHPTree *hTree, const char *pszFilename, SAHooks *psHooks );
504
505 /************************************************************************/
506 /*                             DBF Support.                             */
507 /************************************************************************/
508 typedef struct
509 {
510     SAHooks sHooks;
511
512     SAFile      fp;
513
514     int         nRecords;
515
516     int         nRecordLength;
517     int         nHeaderLength;
518     int         nFields;
519     int         *panFieldOffset;
520     int         *panFieldSize;
521     int         *panFieldDecimals;
522     char        *pachFieldType;
523
524     char        *pszHeader;
525
526     int         nCurrentRecord;
527     int         bCurrentRecordModified;
528     char        *pszCurrentRecord;
529
530     int         nWorkFieldLength;
531     char        *pszWorkField;
532     
533     int         bNoHeader;
534     int         bUpdated;
535
536     double      dfDoubleField;
537
538     int         iLanguageDriver;
539     char        *pszCodePage;
540 } DBFInfo;
541
542 typedef DBFInfo * DBFHandle;
543
544 typedef enum {
545   FTString,
546   FTInteger,
547   FTDouble,
548   FTLogical,
549   FTInvalid
550 } DBFFieldType;
551
552 #define XBASE_FLDHDR_SZ       32
553
554
555 DBFHandle SHPAPI_CALL
556       DBFOpen( const char * pszDBFFile, const char * pszAccess );
557 DBFHandle SHPAPI_CALL
558       DBFOpenLL( const char * pszDBFFile, const char * pszAccess,
559                  SAHooks *psHooks );
560 DBFHandle SHPAPI_CALL
561       DBFCreate( const char * pszDBFFile );
562 DBFHandle SHPAPI_CALL
563       DBFCreateEx( const char * pszDBFFile, const char * pszCodePage );
564 DBFHandle SHPAPI_CALL
565       DBFCreateLL( const char * pszDBFFile, const char * pszCodePage, SAHooks *psHooks );
566
567 int     SHPAPI_CALL
568       DBFGetFieldCount( DBFHandle psDBF );
569 int     SHPAPI_CALL
570       DBFGetRecordCount( DBFHandle psDBF );
571 int     SHPAPI_CALL
572       DBFAddField( DBFHandle hDBF, const char * pszFieldName,
573                    DBFFieldType eType, int nWidth, int nDecimals );
574
575 int     SHPAPI_CALL
576       DBFAddNativeFieldType( DBFHandle hDBF, const char * pszFieldName,
577                              char chType, int nWidth, int nDecimals );
578
579 int     SHPAPI_CALL
580       DBFDeleteField( DBFHandle hDBF, int iField );
581
582 int SHPAPI_CALL
583       DBFReorderFields( DBFHandle psDBF, int* panMap );
584
585 int SHPAPI_CALL
586       DBFAlterFieldDefn( DBFHandle psDBF, int iField, const char * pszFieldName,
587                          char chType, int nWidth, int nDecimals );
588
589 DBFFieldType SHPAPI_CALL
590       DBFGetFieldInfo( DBFHandle psDBF, int iField, 
591                        char * pszFieldName, int * pnWidth, int * pnDecimals );
592
593 int SHPAPI_CALL
594       DBFGetFieldIndex(DBFHandle psDBF, const char *pszFieldName);
595
596 int     SHPAPI_CALL
597       DBFReadIntegerAttribute( DBFHandle hDBF, int iShape, int iField );
598 double  SHPAPI_CALL
599       DBFReadDoubleAttribute( DBFHandle hDBF, int iShape, int iField );
600 const char SHPAPI_CALL1(*)
601       DBFReadStringAttribute( DBFHandle hDBF, int iShape, int iField );
602 const char SHPAPI_CALL1(*)
603       DBFReadLogicalAttribute( DBFHandle hDBF, int iShape, int iField );
604 int     SHPAPI_CALL
605       DBFIsAttributeNULL( DBFHandle hDBF, int iShape, int iField );
606
607 int SHPAPI_CALL
608       DBFWriteIntegerAttribute( DBFHandle hDBF, int iShape, int iField, 
609                                 int nFieldValue );
610 int SHPAPI_CALL
611       DBFWriteDoubleAttribute( DBFHandle hDBF, int iShape, int iField,
612                                double dFieldValue );
613 int SHPAPI_CALL
614       DBFWriteStringAttribute( DBFHandle hDBF, int iShape, int iField,
615                                const char * pszFieldValue );
616 int SHPAPI_CALL
617      DBFWriteNULLAttribute( DBFHandle hDBF, int iShape, int iField );
618
619 int SHPAPI_CALL
620      DBFWriteLogicalAttribute( DBFHandle hDBF, int iShape, int iField,
621                                const char lFieldValue);
622 int SHPAPI_CALL
623      DBFWriteAttributeDirectly(DBFHandle psDBF, int hEntity, int iField,
624                                void * pValue );
625 const char SHPAPI_CALL1(*)
626       DBFReadTuple(DBFHandle psDBF, int hEntity );
627 int SHPAPI_CALL
628       DBFWriteTuple(DBFHandle psDBF, int hEntity, void * pRawTuple );
629
630 int SHPAPI_CALL DBFIsRecordDeleted( DBFHandle psDBF, int iShape );
631 int SHPAPI_CALL DBFMarkRecordDeleted( DBFHandle psDBF, int iShape, 
632                                       int bIsDeleted );
633
634 DBFHandle SHPAPI_CALL
635       DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename );
636  
637 void    SHPAPI_CALL
638       DBFClose( DBFHandle hDBF );
639 void    SHPAPI_CALL
640       DBFUpdateHeader( DBFHandle hDBF );
641 char    SHPAPI_CALL
642       DBFGetNativeFieldType( DBFHandle hDBF, int iField );
643
644 const char SHPAPI_CALL1(*)
645       DBFGetCodePage(DBFHandle psDBF );
646
647 #ifdef __cplusplus
648 }
649 #endif
650
651 #endif /* ndef SHAPEFILE_H_INCLUDED */