shp 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +34 -0
- data/.travis.yml +4 -0
- data/Gemfile +3 -0
- data/LICENSE +28 -0
- data/README.md +30 -0
- data/Rakefile +23 -0
- data/ext/shp/base.hpp +113 -0
- data/ext/shp/dbf.cpp +381 -0
- data/ext/shp/dbf.hpp +44 -0
- data/ext/shp/extconf.rb +13 -0
- data/ext/shp/shape_object.cpp +58 -0
- data/ext/shp/shape_object.hpp +27 -0
- data/ext/shp/shapefile.cpp +299 -0
- data/ext/shp/shapefile.hpp +35 -0
- data/ext/shp/shapelib/.cvsignore +15 -0
- data/ext/shp/shapelib/ChangeLog +450 -0
- data/ext/shp/shapelib/HOWTO-RELEASE +16 -0
- data/ext/shp/shapelib/LICENSE.LGPL +483 -0
- data/ext/shp/shapelib/Makefile +113 -0
- data/ext/shp/shapelib/README +41 -0
- data/ext/shp/shapelib/README.tree +172 -0
- data/ext/shp/shapelib/contrib/.cvsignore +12 -0
- data/ext/shp/shapelib/contrib/Makefile +66 -0
- data/ext/shp/shapelib/contrib/ShapeFileII.pas +234 -0
- data/ext/shp/shapelib/contrib/Shape_PointInPoly.cpp +238 -0
- data/ext/shp/shapelib/contrib/Shape_PointInPoly_README.txt +59 -0
- data/ext/shp/shapelib/contrib/csv2shp.c +558 -0
- data/ext/shp/shapelib/contrib/dbfcat.c +166 -0
- data/ext/shp/shapelib/contrib/dbfinfo.c +106 -0
- data/ext/shp/shapelib/contrib/makefile.vc +34 -0
- data/ext/shp/shapelib/contrib/my_nan.h +46 -0
- data/ext/shp/shapelib/contrib/shpcat.c +100 -0
- data/ext/shp/shapelib/contrib/shpcentrd.c +159 -0
- data/ext/shp/shapelib/contrib/shpdata.c +129 -0
- data/ext/shp/shapelib/contrib/shpdxf.c +340 -0
- data/ext/shp/shapelib/contrib/shpfix.c +110 -0
- data/ext/shp/shapelib/contrib/shpgeo.c +1595 -0
- data/ext/shp/shapelib/contrib/shpgeo.h +154 -0
- data/ext/shp/shapelib/contrib/shpinfo.c +113 -0
- data/ext/shp/shapelib/contrib/shpproj.c +260 -0
- data/ext/shp/shapelib/contrib/shpsort.c +605 -0
- data/ext/shp/shapelib/contrib/shpsort.txt +44 -0
- data/ext/shp/shapelib/contrib/shpwkb.c +123 -0
- data/ext/shp/shapelib/contrib/tests/shpproj.sh +38 -0
- data/ext/shp/shapelib/dbfopen.c +2221 -0
- data/ext/shp/shapelib/makefile.vc +86 -0
- data/ext/shp/shapelib/makeshape.sh +21 -0
- data/ext/shp/shapelib/mkdist.sh +37 -0
- data/ext/shp/shapelib/mkinstalldirs +38 -0
- data/ext/shp/shapelib/mkrelease.sh +55 -0
- data/ext/shp/shapelib/safileio.c +286 -0
- data/ext/shp/shapelib/shapefil.h +647 -0
- data/ext/shp/shapelib/shapelib.def +46 -0
- data/ext/shp/shapelib/shpopen.c +2388 -0
- data/ext/shp/shapelib/shptree.c +1187 -0
- data/ext/shp/shapelib/shputils.c +1072 -0
- data/ext/shp/shapelib/stream1.out +1465 -0
- data/ext/shp/shapelib/stream1.sh +28 -0
- data/ext/shp/shapelib/stream2.out +530 -0
- data/ext/shp/shapelib/stream2.sh +11 -0
- data/ext/shp/shapelib/stream3.out +37 -0
- data/ext/shp/shapelib/web/.cvsignore +2 -0
- data/ext/shp/shapelib/web/codepage.html +403 -0
- data/ext/shp/shapelib/web/dbf_api.html +436 -0
- data/ext/shp/shapelib/web/index.html +235 -0
- data/ext/shp/shapelib/web/license.html +78 -0
- data/ext/shp/shapelib/web/manifest.html +87 -0
- data/ext/shp/shapelib/web/release.html +80 -0
- data/ext/shp/shapelib/web/shapelib-tools.html +352 -0
- data/ext/shp/shapelib/web/shp_api.html +376 -0
- data/ext/shp/shp.cpp +19 -0
- data/ext/shp/shp.hpp +47 -0
- data/lib/shp.rb +35 -0
- data/lib/shp/version.rb +3 -0
- data/shp.gemspec +23 -0
- data/spec/shp_spec.rb +127 -0
- metadata +176 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
|
2
|
+
#CFLAGS = /DSHPAPI_CALL=__stdcall
|
3
|
+
CFLAGS = /nologo /Ox /MD /DSHAPELIB_DLLEXPORT
|
4
|
+
|
5
|
+
IMPORT_LIB = shapelib_i.lib
|
6
|
+
STATIC_LIB = shapelib.lib
|
7
|
+
DLLNAME = shapelib.dll
|
8
|
+
LINK_LIB = $(IMPORT_LIB)
|
9
|
+
|
10
|
+
OBJ = shpopen.obj dbfopen.obj shptree.obj safileio.obj
|
11
|
+
|
12
|
+
all: $(STATIC_LIB) $(DLLNAME) \
|
13
|
+
shpcreate.exe shpadd.exe shpdump.exe shprewind.exe dbfcreate.exe \
|
14
|
+
dbfadd.exe dbfdump.exe shptest.exe shptreedump.exe
|
15
|
+
|
16
|
+
shpopen.obj: shpopen.c shapefil.h
|
17
|
+
$(CC) $(CFLAGS) -c shpopen.c
|
18
|
+
|
19
|
+
shptree.obj: shptree.c shapefil.h
|
20
|
+
$(CC) $(CFLAGS) -c shptree.c
|
21
|
+
|
22
|
+
dbfopen.obj: dbfopen.c shapefil.h
|
23
|
+
$(CC) $(CFLAGS) -c dbfopen.c
|
24
|
+
|
25
|
+
safileio.obj: safileio.c shapefil.h
|
26
|
+
$(CC) $(CFLAGS) -c safileio.c
|
27
|
+
|
28
|
+
shpcreate.exe: shpcreate.c $(LINK_LIB)
|
29
|
+
$(CC) $(CFLAGS) shpcreate.c $(LINK_LIB) $(LINKOPT)
|
30
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
31
|
+
|
32
|
+
shpadd.exe: shpadd.c $(LINK_LIB)
|
33
|
+
$(CC) $(CFLAGS) shpadd.c $(LINK_LIB) $(LINKOPT)
|
34
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
35
|
+
|
36
|
+
shpdump.exe: shpdump.c $(LINK_LIB)
|
37
|
+
$(CC) $(CFLAGS) shpdump.c $(LINK_LIB) $(LINKOPT)
|
38
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
39
|
+
|
40
|
+
shprewind.exe: shprewind.c $(LINK_LIB)
|
41
|
+
$(CC) $(CFLAGS) shprewind.c $(LINK_LIB) $(LINKOPT)
|
42
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
43
|
+
|
44
|
+
dbfcreate.exe: dbfcreate.c $(LINK_LIB)
|
45
|
+
$(CC) $(CFLAGS) dbfcreate.c $(LINK_LIB) $(LINKOPT)
|
46
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
47
|
+
|
48
|
+
dbfadd.exe: dbfadd.c $(LINK_LIB)
|
49
|
+
$(CC) $(CFLAGS) dbfadd.c $(LINK_LIB) $(LINKOPT)
|
50
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
51
|
+
|
52
|
+
dbfdump.exe: dbfdump.c $(LINK_LIB)
|
53
|
+
$(CC) $(CFLAGS) dbfdump.c $(LINK_LIB) $(LINKOPT)
|
54
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
55
|
+
|
56
|
+
shptest.exe: shptest.c $(LINK_LIB)
|
57
|
+
$(CC) $(CFLAGS) shptest.c $(LINK_LIB) $(LINKOPT)
|
58
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
59
|
+
|
60
|
+
shputils.exe: shputils.c $(LINK_LIB)
|
61
|
+
$(CC) $(CFLAGS) shputils.c $(LINK_LIB) $(LINKOPT)
|
62
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
63
|
+
|
64
|
+
shptreedump.exe: shptreedump.c $(LINK_LIB)
|
65
|
+
$(CC) $(CFLAGS) shptreedump.c $(LINK_LIB) $(LINKOPT)
|
66
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
67
|
+
|
68
|
+
shpdiff.exe: shpdiff.c $(LINK_LIB)
|
69
|
+
$(CC) $(CFLAGS) shpdiff.c $(LINK_LIB) $(LINKOPT)
|
70
|
+
if exist $@.manifest mt -manifest $@.manifest -outputresource:$@;1
|
71
|
+
|
72
|
+
clean:
|
73
|
+
-del *.obj
|
74
|
+
-del *.exe
|
75
|
+
-del *.lib
|
76
|
+
-del *.dll
|
77
|
+
-del *.manifest
|
78
|
+
|
79
|
+
$(STATIC_LIB): $(OBJ)
|
80
|
+
lib /nologo /out:$(STATIC_LIB) $(OBJ)
|
81
|
+
|
82
|
+
$(IMPORT_LIB): $(DLLNAME)
|
83
|
+
|
84
|
+
$(DLLNAME): $(OBJ)
|
85
|
+
link /nologo /dll /out:$(DLLNAME) /implib:$(IMPORT_LIB) $(OBJ)
|
86
|
+
if exist $(DLLNAME).manifest mt /nologo -manifest $(DLLNAME).manifest -outputresource:$(DLLNAME);2
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
#
|
4
|
+
# Use example programs to create a very simple dataset that
|
5
|
+
# should display in ARCView II.
|
6
|
+
#
|
7
|
+
|
8
|
+
./shpcreate test polygon
|
9
|
+
./dbfcreate test.dbf -s Description 30 -n TestInt 6 0 -n TestDouble 16 5
|
10
|
+
|
11
|
+
./shpadd test 0 0 100 0 100 100 0 100 0 0 + 20 20 20 30 30 30 20 20
|
12
|
+
./dbfadd test.dbf "Square with triangle missing" 1.5 2.5
|
13
|
+
|
14
|
+
./shpadd test 150 150 160 150 180 170 150 150
|
15
|
+
./dbfadd test.dbf "Smaller triangle" 100 1000.25
|
16
|
+
|
17
|
+
./shpadd test 150 150 160 150 180 170 150 150
|
18
|
+
./dbfadd test.dbf "" "" ""
|
19
|
+
|
20
|
+
./shpdump test.shp
|
21
|
+
./dbfdump test.dbf
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
if [ $# -lt 1 ] ; then
|
4
|
+
echo "Usage: mkdist.sh <version>"
|
5
|
+
echo " <version> - version number used in name of generated archive."
|
6
|
+
echo "Example: mkdist.sh 1.1.4"
|
7
|
+
exit
|
8
|
+
fi
|
9
|
+
|
10
|
+
VERSION=$1
|
11
|
+
|
12
|
+
rm -rf dist_wrk
|
13
|
+
mkdir dist_wrk
|
14
|
+
cd dist_wrk
|
15
|
+
|
16
|
+
REP=:pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot
|
17
|
+
if cvs -d $REP co shapelib ; then
|
18
|
+
echo checkout succeeds.
|
19
|
+
else
|
20
|
+
cvs -d $REP login
|
21
|
+
cvs -d $REP co shapelib
|
22
|
+
fi
|
23
|
+
|
24
|
+
if [ ! -d shapelib ] ; then
|
25
|
+
exit 1
|
26
|
+
fi
|
27
|
+
|
28
|
+
mv shapelib shapelib-$VERSION
|
29
|
+
|
30
|
+
find . -name CVS -type d -exec echo rm -rf {} \;
|
31
|
+
|
32
|
+
tar czvf ../shapelib-$VERSION.tar.gz shapelib-$VERSION
|
33
|
+
zip -r ../shapelib-$VERSION.zip shapelib-$VERSION
|
34
|
+
cd ..
|
35
|
+
rm -rf dist_wrk
|
36
|
+
|
37
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#! /bin/sh
|
2
|
+
# mkinstalldirs --- make directory hierarchy
|
3
|
+
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
4
|
+
# Created: 1993-05-16
|
5
|
+
# Public domain
|
6
|
+
|
7
|
+
errstatus=0
|
8
|
+
|
9
|
+
for file
|
10
|
+
do
|
11
|
+
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
12
|
+
shift
|
13
|
+
|
14
|
+
pathcomp=
|
15
|
+
for d
|
16
|
+
do
|
17
|
+
pathcomp="$pathcomp$d"
|
18
|
+
case "$pathcomp" in
|
19
|
+
-* ) pathcomp=./$pathcomp ;;
|
20
|
+
esac
|
21
|
+
|
22
|
+
if test ! -d "$pathcomp"; then
|
23
|
+
echo "mkdir $pathcomp"
|
24
|
+
|
25
|
+
mkdir "$pathcomp" || lasterr=$?
|
26
|
+
|
27
|
+
if test ! -d "$pathcomp"; then
|
28
|
+
errstatus=$lasterr
|
29
|
+
fi
|
30
|
+
fi
|
31
|
+
|
32
|
+
pathcomp="$pathcomp/"
|
33
|
+
done
|
34
|
+
done
|
35
|
+
|
36
|
+
exit $errstatus
|
37
|
+
|
38
|
+
# mkinstalldirs ends here
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#
|
3
|
+
# mkrelease.sh - prepares Shapelib source distribution package
|
4
|
+
#
|
5
|
+
if [ $# -lt 1 ] ; then
|
6
|
+
echo "Usage: mkrelease.sh <version>"
|
7
|
+
echo " <version> - version number used in name of generated archive."
|
8
|
+
echo
|
9
|
+
echo "Example: mkrelease 1.3.0beta1"
|
10
|
+
exit
|
11
|
+
fi
|
12
|
+
|
13
|
+
#
|
14
|
+
# Processing script input arguments
|
15
|
+
#
|
16
|
+
VERSION=$1
|
17
|
+
|
18
|
+
#
|
19
|
+
# Checkout Shapelib sources from the repository
|
20
|
+
#
|
21
|
+
echo "* Downloading Shapelib sources from CVS..."
|
22
|
+
rm -rf dist_wrk
|
23
|
+
mkdir dist_wrk
|
24
|
+
cd dist_wrk
|
25
|
+
|
26
|
+
cvs -d :pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot export -D now shapelib
|
27
|
+
|
28
|
+
if [ \! -d shapelib ] ; then
|
29
|
+
echo "checkout reported an error ..."
|
30
|
+
echo "perhaps you need to do:"
|
31
|
+
echo "cvs -d :pserver:cvsanon@cvs.maptools.org:/cvs/maptools/cvsroot login"
|
32
|
+
cd ..
|
33
|
+
rm -rf dist_wrk
|
34
|
+
exit
|
35
|
+
fi
|
36
|
+
|
37
|
+
#
|
38
|
+
# Make distribution packages
|
39
|
+
#
|
40
|
+
echo "* Making distribution packages..."
|
41
|
+
|
42
|
+
mv shapelib shapelib-${VERSION}
|
43
|
+
|
44
|
+
rm -f ../shapelib-${VERSION}.tar.gz ../shapelib-${VERSION}.zip
|
45
|
+
|
46
|
+
tar cf ../shapelib-${VERSION}.tar shapelib-${VERSION}
|
47
|
+
gzip -9 ../shapelib-${VERSION}.tar
|
48
|
+
zip -r ../shapelib-${VERSION}.zip shapelib-${VERSION}
|
49
|
+
|
50
|
+
echo "* Cleaning..."
|
51
|
+
cd ..
|
52
|
+
rm -rf dist_wrk
|
53
|
+
|
54
|
+
echo "*** The End ***"
|
55
|
+
|
@@ -0,0 +1,286 @@
|
|
1
|
+
/******************************************************************************
|
2
|
+
* $Id: safileio.c,v 1.4 2008-01-16 20:05:14 bram Exp $
|
3
|
+
*
|
4
|
+
* Project: Shapelib
|
5
|
+
* Purpose: Default implementation of file io based on stdio.
|
6
|
+
* Author: Frank Warmerdam, warmerdam@pobox.com
|
7
|
+
*
|
8
|
+
******************************************************************************
|
9
|
+
* Copyright (c) 2007, Frank Warmerdam
|
10
|
+
*
|
11
|
+
* This software is available under the following "MIT Style" license,
|
12
|
+
* or at the option of the licensee under the LGPL (see LICENSE.LGPL). This
|
13
|
+
* option is discussed in more detail in shapelib.html.
|
14
|
+
*
|
15
|
+
* --
|
16
|
+
*
|
17
|
+
* Permission is hereby granted, free of charge, to any person obtaining a
|
18
|
+
* copy of this software and associated documentation files (the "Software"),
|
19
|
+
* to deal in the Software without restriction, including without limitation
|
20
|
+
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
21
|
+
* and/or sell copies of the Software, and to permit persons to whom the
|
22
|
+
* Software is furnished to do so, subject to the following conditions:
|
23
|
+
*
|
24
|
+
* The above copyright notice and this permission notice shall be included
|
25
|
+
* in all copies or substantial portions of the Software.
|
26
|
+
*
|
27
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
28
|
+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
29
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
30
|
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
31
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
32
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
33
|
+
* DEALINGS IN THE SOFTWARE.
|
34
|
+
******************************************************************************
|
35
|
+
*
|
36
|
+
* $Log: safileio.c,v $
|
37
|
+
* Revision 1.4 2008-01-16 20:05:14 bram
|
38
|
+
* Add file hooks that accept UTF-8 encoded filenames on some platforms. Use SASetupUtf8Hooks
|
39
|
+
* tosetup the hooks and check SHPAPI_UTF8_HOOKS for its availability. Currently, this
|
40
|
+
* is only available on the Windows platform that decodes the UTF-8 filenames to wide
|
41
|
+
* character strings and feeds them to _wfopen and _wremove.
|
42
|
+
*
|
43
|
+
* Revision 1.3 2007/12/18 18:28:11 bram
|
44
|
+
* - create hook for client specific atof (bugzilla ticket 1615)
|
45
|
+
* - check for NULL handle before closing cpCPG file, and close after reading.
|
46
|
+
*
|
47
|
+
* Revision 1.2 2007/12/15 20:25:30 bram
|
48
|
+
* dbfopen.c now reads the Code Page information from the DBF file, and exports
|
49
|
+
* this information as a string through the DBFGetCodePage function. This is
|
50
|
+
* either the number from the LDID header field ("LDID/<number>") or as the
|
51
|
+
* content of an accompanying .CPG file. When creating a DBF file, the code can
|
52
|
+
* be set using DBFCreateEx.
|
53
|
+
*
|
54
|
+
* Revision 1.1 2007/12/06 06:56:41 fwarmerdam
|
55
|
+
* new
|
56
|
+
*
|
57
|
+
*/
|
58
|
+
|
59
|
+
#include "shapefil.h"
|
60
|
+
|
61
|
+
#include <math.h>
|
62
|
+
#include <limits.h>
|
63
|
+
#include <assert.h>
|
64
|
+
#include <stdlib.h>
|
65
|
+
#include <string.h>
|
66
|
+
#include <stdio.h>
|
67
|
+
|
68
|
+
SHP_CVSID("$Id: safileio.c,v 1.4 2008-01-16 20:05:14 bram Exp $");
|
69
|
+
|
70
|
+
#ifdef SHPAPI_UTF8_HOOKS
|
71
|
+
# ifdef SHPAPI_WINDOWS
|
72
|
+
# define WIN32_LEAN_AND_MEAN
|
73
|
+
# define NOMINMAX
|
74
|
+
# include <windows.h>
|
75
|
+
# pragma comment(lib, "kernel32.lib")
|
76
|
+
# endif
|
77
|
+
#endif
|
78
|
+
|
79
|
+
/************************************************************************/
|
80
|
+
/* SADFOpen() */
|
81
|
+
/************************************************************************/
|
82
|
+
|
83
|
+
SAFile SADFOpen( const char *pszFilename, const char *pszAccess )
|
84
|
+
|
85
|
+
{
|
86
|
+
return (SAFile) fopen( pszFilename, pszAccess );
|
87
|
+
}
|
88
|
+
|
89
|
+
/************************************************************************/
|
90
|
+
/* SADFRead() */
|
91
|
+
/************************************************************************/
|
92
|
+
|
93
|
+
SAOffset SADFRead( void *p, SAOffset size, SAOffset nmemb, SAFile file )
|
94
|
+
|
95
|
+
{
|
96
|
+
return (SAOffset) fread( p, (size_t) size, (size_t) nmemb,
|
97
|
+
(FILE *) file );
|
98
|
+
}
|
99
|
+
|
100
|
+
/************************************************************************/
|
101
|
+
/* SADFWrite() */
|
102
|
+
/************************************************************************/
|
103
|
+
|
104
|
+
SAOffset SADFWrite( void *p, SAOffset size, SAOffset nmemb, SAFile file )
|
105
|
+
|
106
|
+
{
|
107
|
+
return (SAOffset) fwrite( p, (size_t) size, (size_t) nmemb,
|
108
|
+
(FILE *) file );
|
109
|
+
}
|
110
|
+
|
111
|
+
/************************************************************************/
|
112
|
+
/* SADFSeek() */
|
113
|
+
/************************************************************************/
|
114
|
+
|
115
|
+
SAOffset SADFSeek( SAFile file, SAOffset offset, int whence )
|
116
|
+
|
117
|
+
{
|
118
|
+
return (SAOffset) fseek( (FILE *) file, (long) offset, whence );
|
119
|
+
}
|
120
|
+
|
121
|
+
/************************************************************************/
|
122
|
+
/* SADFTell() */
|
123
|
+
/************************************************************************/
|
124
|
+
|
125
|
+
SAOffset SADFTell( SAFile file )
|
126
|
+
|
127
|
+
{
|
128
|
+
return (SAOffset) ftell( (FILE *) file );
|
129
|
+
}
|
130
|
+
|
131
|
+
/************************************************************************/
|
132
|
+
/* SADFFlush() */
|
133
|
+
/************************************************************************/
|
134
|
+
|
135
|
+
int SADFFlush( SAFile file )
|
136
|
+
|
137
|
+
{
|
138
|
+
return fflush( (FILE *) file );
|
139
|
+
}
|
140
|
+
|
141
|
+
/************************************************************************/
|
142
|
+
/* SADFClose() */
|
143
|
+
/************************************************************************/
|
144
|
+
|
145
|
+
int SADFClose( SAFile file )
|
146
|
+
|
147
|
+
{
|
148
|
+
return fclose( (FILE *) file );
|
149
|
+
}
|
150
|
+
|
151
|
+
/************************************************************************/
|
152
|
+
/* SADFClose() */
|
153
|
+
/************************************************************************/
|
154
|
+
|
155
|
+
int SADRemove( const char *filename )
|
156
|
+
|
157
|
+
{
|
158
|
+
return remove( filename );
|
159
|
+
}
|
160
|
+
|
161
|
+
/************************************************************************/
|
162
|
+
/* SADError() */
|
163
|
+
/************************************************************************/
|
164
|
+
|
165
|
+
void SADError( const char *message )
|
166
|
+
|
167
|
+
{
|
168
|
+
fprintf( stderr, "%s\n", message );
|
169
|
+
}
|
170
|
+
|
171
|
+
/************************************************************************/
|
172
|
+
/* SASetupDefaultHooks() */
|
173
|
+
/************************************************************************/
|
174
|
+
|
175
|
+
void SASetupDefaultHooks( SAHooks *psHooks )
|
176
|
+
|
177
|
+
{
|
178
|
+
psHooks->FOpen = SADFOpen;
|
179
|
+
psHooks->FRead = SADFRead;
|
180
|
+
psHooks->FWrite = SADFWrite;
|
181
|
+
psHooks->FSeek = SADFSeek;
|
182
|
+
psHooks->FTell = SADFTell;
|
183
|
+
psHooks->FFlush = SADFFlush;
|
184
|
+
psHooks->FClose = SADFClose;
|
185
|
+
psHooks->Remove = SADRemove;
|
186
|
+
|
187
|
+
psHooks->Error = SADError;
|
188
|
+
psHooks->Atof = atof;
|
189
|
+
}
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
|
194
|
+
#ifdef SHPAPI_WINDOWS
|
195
|
+
|
196
|
+
/************************************************************************/
|
197
|
+
/* Utf8ToWideChar */
|
198
|
+
/************************************************************************/
|
199
|
+
|
200
|
+
const wchar_t* Utf8ToWideChar( const char *pszFilename )
|
201
|
+
{
|
202
|
+
int nMulti, nWide;
|
203
|
+
wchar_t *pwszFileName;
|
204
|
+
|
205
|
+
nMulti = strlen(pszFilename) + 1;
|
206
|
+
nWide = MultiByteToWideChar( CP_UTF8, 0, pszFilename, nMulti, 0, 0);
|
207
|
+
if( nWide == 0 )
|
208
|
+
{
|
209
|
+
return NULL;
|
210
|
+
}
|
211
|
+
pwszFileName = (wchar_t*) malloc(nWide * sizeof(wchar_t));
|
212
|
+
if ( pwszFileName == NULL )
|
213
|
+
{
|
214
|
+
return NULL;
|
215
|
+
}
|
216
|
+
if( MultiByteToWideChar( CP_UTF8, 0, pszFilename, nMulti, pwszFileName, nWide ) == 0 )
|
217
|
+
{
|
218
|
+
free( pwszFileName );
|
219
|
+
return NULL;
|
220
|
+
}
|
221
|
+
return pwszFileName;
|
222
|
+
}
|
223
|
+
|
224
|
+
/************************************************************************/
|
225
|
+
/* SAUtf8WFOpen */
|
226
|
+
/************************************************************************/
|
227
|
+
|
228
|
+
SAFile SAUtf8WFOpen( const char *pszFilename, const char *pszAccess )
|
229
|
+
{
|
230
|
+
SAFile file = NULL;
|
231
|
+
const wchar_t *pwszFileName, *pwszAccess;
|
232
|
+
pwszFileName = Utf8ToWideChar( pszFilename );
|
233
|
+
pwszAccess = Utf8ToWideChar( pszAccess );
|
234
|
+
if( pwszFileName != NULL && pwszFileName != NULL)
|
235
|
+
{
|
236
|
+
file = (SAFile) _wfopen( pwszFileName, pwszAccess );
|
237
|
+
}
|
238
|
+
free ((wchar_t*) pwszFileName);
|
239
|
+
free ((wchar_t*) pwszAccess);
|
240
|
+
return file;
|
241
|
+
}
|
242
|
+
|
243
|
+
/************************************************************************/
|
244
|
+
/* SAUtf8WRemove() */
|
245
|
+
/************************************************************************/
|
246
|
+
|
247
|
+
int SAUtf8WRemove( const char *pszFilename )
|
248
|
+
{
|
249
|
+
const wchar_t *pwszFileName = Utf8ToWideChar( pszFilename );
|
250
|
+
int rc = -1;
|
251
|
+
if( pwszFileName != NULL )
|
252
|
+
{
|
253
|
+
rc = _wremove( pwszFileName );
|
254
|
+
}
|
255
|
+
free ((wchar_t*) pwszFileName);
|
256
|
+
return rc;
|
257
|
+
}
|
258
|
+
|
259
|
+
#endif
|
260
|
+
|
261
|
+
#ifdef SHPAPI_UTF8_HOOKS
|
262
|
+
|
263
|
+
/************************************************************************/
|
264
|
+
/* SASetupUtf8Hooks() */
|
265
|
+
/************************************************************************/
|
266
|
+
|
267
|
+
void SASetupUtf8Hooks( SAHooks *psHooks )
|
268
|
+
{
|
269
|
+
#ifdef SHPAPI_WINDOWS
|
270
|
+
psHooks->FOpen = SAUtf8WFOpen;
|
271
|
+
psHooks->Remove = SAUtf8WRemove;
|
272
|
+
#else
|
273
|
+
# error "no implementations of UTF-8 hooks available for this platform"
|
274
|
+
#endif
|
275
|
+
psHooks->FRead = SADFRead;
|
276
|
+
psHooks->FWrite = SADFWrite;
|
277
|
+
psHooks->FSeek = SADFSeek;
|
278
|
+
psHooks->FTell = SADFTell;
|
279
|
+
psHooks->FFlush = SADFFlush;
|
280
|
+
psHooks->FClose = SADFClose;
|
281
|
+
|
282
|
+
psHooks->Error = SADError;
|
283
|
+
psHooks->Atof = atof;
|
284
|
+
}
|
285
|
+
|
286
|
+
#endif
|