150 uchar abyHeader[100] = { 0 };
158 psSHP->sHooks.Error(
"SHPWriteHeader failed : SHX file is closed");
169 i32 = psSHP->nFileSize/2;
177 i32 = psSHP->nShapeType;
181 dValue = psSHP->adBoundsMin[0];
182 ByteCopy( &dValue, abyHeader+36, 8 );
185 dValue = psSHP->adBoundsMin[1];
186 ByteCopy( &dValue, abyHeader+44, 8 );
189 dValue = psSHP->adBoundsMax[0];
190 ByteCopy( &dValue, abyHeader+52, 8 );
193 dValue = psSHP->adBoundsMax[1];
194 ByteCopy( &dValue, abyHeader+60, 8 );
197 dValue = psSHP->adBoundsMin[2];
198 ByteCopy( &dValue, abyHeader+68, 8 );
201 dValue = psSHP->adBoundsMax[2];
202 ByteCopy( &dValue, abyHeader+76, 8 );
205 dValue = psSHP->adBoundsMin[3];
206 ByteCopy( &dValue, abyHeader+84, 8 );
209 dValue = psSHP->adBoundsMax[3];
210 ByteCopy( &dValue, abyHeader+92, 8 );
216 if( psSHP->sHooks.FSeek( psSHP->fpSHP, 0, 0 ) != 0
217 || psSHP->sHooks.FWrite( abyHeader, 100, 1, psSHP->fpSHP ) != 1 )
219 char szErrorMsg[200];
221 snprintf( szErrorMsg,
sizeof(szErrorMsg),
222 "Failure writing .shp header: %s", strerror(errno) );
223 szErrorMsg[
sizeof(szErrorMsg)-1] =
'\0';
224 psSHP->sHooks.Error( szErrorMsg );
231 i32 = (psSHP->nRecords * 2 *
sizeof(
int32) + 100)/2;
235 if( psSHP->sHooks.FSeek( psSHP->fpSHX, 0, 0 ) != 0
236 || psSHP->sHooks.FWrite( abyHeader, 100, 1, psSHP->fpSHX ) != 1 )
238 char szErrorMsg[200];
240 snprintf( szErrorMsg,
sizeof(szErrorMsg),
241 "Failure writing .shx header: %s", strerror(errno) );
242 szErrorMsg[
sizeof(szErrorMsg)-1] =
'\0';
243 psSHP->sHooks.Error( szErrorMsg );
254 psSHP->sHooks.Error(
"Failure allocatin panSHX" );
258 for( i = 0; i < psSHP->nRecords; i++ )
260 panSHX[i*2 ] = psSHP->panRecOffset[i]/2;
261 panSHX[i*2+1] = psSHP->panRecSize[i]/2;
266 if(
STATIC_CAST(
int, psSHP->sHooks.FWrite( panSHX,
sizeof(
int32)*2, psSHP->nRecords, psSHP->fpSHX ))
269 char szErrorMsg[200];
271 snprintf( szErrorMsg,
sizeof(szErrorMsg),
272 "Failure writing .shx contents: %s", strerror(errno) );
273 szErrorMsg[
sizeof(szErrorMsg)-1] =
'\0';
274 psSHP->sHooks.Error( szErrorMsg );
282 psSHP->sHooks.FFlush( psSHP->fpSHP );
283 psSHP->sHooks.FFlush( psSHP->fpSHX );
static void SwapWord(int length, void *wordP)
#define STATIC_CAST(type, x)
#define ByteCopy(a, b, c)