{-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE TypeSynonymInstances #-} module Gis.Shapefile.Internal where #include import C2HS import Foreign.Ptr import System.IO.Unsafe import Foreign.C import Control.Monad {#context lib="shapefile" #} shptNull = 0 shptPoint = 1 shptArc = 3 shptPolygon = 5 shptMultipoint = 8 shptPointZ = 1 shptArcZ = 3 shptPolygonZ = 5 shptMultipointZ = 8 shptPointM = 1 shptArcM = 3 shptPolygonM = 5 shptMultipointM = 8 shptMultiPatch = 35 newtype SHPHandle = SHPHandle (Ptr (SHPHandle)) {#pointer *SHPObject newtype #} getSHPType = {#get SHPObject->nSHPType #} getShapeId = {#get SHPObject->nShapeId #} getParts = {#get SHPObject->nParts #} getPartStart = {#get SHPObject->panPartStart #} getPartType = {#get SHPObject->panPartType #} getVertices = {#get SHPObject->nVertices #} getX= {#get SHPObject->padfX #} getY= {#get SHPObject->padfY #} getZ= {#get SHPObject->padfZ #} getM= {#get SHPObject->padfM #} getXMin= {#get SHPObject->dfXMin #} getYMin= {#get SHPObject->dfYMin #} getZMin= {#get SHPObject->dfZMin #} getMMin= {#get SHPObject->dfMMin #} getXMax= {#get SHPObject->dfXMax #} getYMax= {#get SHPObject->dfYMax #} getZMax= {#get SHPObject->dfZMax #} getMMax= {#get SHPObject->dfMMax #} setSHPType = {#set SHPObject->nSHPType #} setShapeId = {#set SHPObject->nShapeId #} setParts = {#set SHPObject->nParts #} setPartStart p v = newArray v >>= {#set SHPObject->panPartStart #} p setPartType p v = newArray v >>= {#set SHPObject->panPartType #} p setVertices p v = {#set SHPObject->nVertices #} setX p v = newArray v >>= {#set SHPObject->padfX #} p setY p v = newArray v >>= {#set SHPObject->padfY #} p setZ p v = newArray v >>= {#set SHPObject->padfZ #} p setM p v = newArray v >>= {#set SHPObject->padfM #} p setXMin = {#set SHPObject->dfXMin #} setYMin = {#set SHPObject->dfYMin #} setZMin = {#set SHPObject->dfZMin #} setMMin = {#set SHPObject->dfMMin #} setXMax = {#set SHPObject->dfXMax #} setYMax = {#set SHPObject->dfYMax #} setZMax = {#set SHPObject->dfZMax #} setMMax = {#set SHPObject->dfMMax #} toSHPHandle = SHPHandle . castPtr fromSHPHandle (SHPHandle x) = castPtr x {#fun SHPOpen as open { `String' , `String' } -> `SHPHandle' toSHPHandle #} {#fun SHPGetInfo as getInfo { fromSHPHandle `SHPHandle' , alloca- `Int' withIntConv , alloca- `Int' withIntConv , alloca- `Double' withFloatConv , alloca- `Double' withFloatConv } -> `()' #} {#fun SHPReadObject as readObject { fromSHPHandle `SHPHandle' , `Int' } -> `()' #} {#fun SHPClose as close { fromSHPHandle `SHPHandle' } -> `()' #} {#fun SHPCreate as create { `String' , `Int' } -> `SHPHandle'void* #} {#fun SHPCreateSimpleObject as createSimpleObject { `Int' , `Int' , withFloatConv* `[Double]' , withFloatConv* `[Double]' , withFloatConv* `[Double]' } -> `()' #} {#fun SHPCreateObject as createObject { `Int' , `Int' , `Int' , withIntConv* `[Int]' , withIntConv* `[Int]' , `Int' , withFloatConv* `[Double]' , withFloatConv* `[Double]' , withFloatConv* `[Double]' , withFloatConv* `[Double]' } -> `()' #} {#fun SHPComputeExtents as computeExtents { void* `SHPObject' } -> `()' #} {#fun SHPWriteObject as writeObject { void* `SHPHandle' , `Int' , void* `SHPObject' } -> `Int' #} {#fun SHPDestroyObject as destroyObject { void* `SHPObject' } -> `()' #} {#fun SHPRewindObject as rewindObject { void* `SHPHandle' , void* `SHPObject' } -> `Int' #}