packages feed

repa-devil-0.1: Image/DevIL/Base.hsc

{-# LANGUAGE CPP                        #-}
{-# LANGUAGE ForeignFunctionInterface   #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

--------------------------------------------------------------------
-- |
-- Module    : Data/Array/Repa/IO/DevIL/Base.hsc
-- Copyright : (c) Don Stewart 2011, Luke Palmer 2010.
--
-- License   : BSD3
--
-- Maintainer: Don Stewart <dons00@gmail.com>
-- Stability : provisional
--
-- Raw FFI bindings to DevIL.
--
module Image.DevIL.Base (

        -- * Types
        ILImage ,
        ILError ,

        ILUInt,
        ILSizei,
        ILBoolean,
        ILEnum,
        ILInt,
        ILUByte,

        ImageName(..),

        -- * Functions
        ilInit,

        -- * Values
        il_type_unknown, il_bmp         , il_cut         , il_doom        , il_doom_flat   ,
        il_ico         , il_jpg         , il_jfif        , il_ilbm        , il_pcd         ,
        il_pcx         , il_pic         , il_png         , il_pnm         , il_sgi         ,
        il_tga         , il_tif         , il_chead       , il_raw         , il_mdl         ,
        il_wal         , il_lif         , il_mng         , il_jng         , il_gif         ,
        il_dds         , il_dcx         , il_psd         , il_exif        , il_psp         ,
        il_pix         , il_pxr         , il_xpm         , il_hdr         , il_icns        ,
        il_jp2         , il_exr         , il_wdp         , il_vtf         , il_wbmp        ,
        il_sun         , il_iff         , il_tpl         , il_fits        , il_dicom       ,
        il_iwi         , il_blp         , il_ftx         , il_rot         , il_texture     ,
        il_dpx         , il_utx         , il_mp3  

        , il_no_error               , il_invalid_enum           , il_out_of_memory          
        , il_format_not_supported   , il_internal_error         , il_invalid_value          
        , il_illegal_operation      , il_illegal_file_value     , il_invalid_file_header    
        , il_invalid_param          , il_could_not_open_file    , il_invalid_extension      
        , il_file_already_exists    , il_out_format_same        , il_stack_overflow         
        , il_stack_underflow        , il_invalid_conversion     , il_bad_dimensions         
        , il_file_read_error        , il_file_write_error       , il_lib_gif_error          
        , il_lib_jpeg_error         , il_lib_png_error          , il_lib_tiff_error         
        , il_lib_mng_error          , il_lib_jp2_error          , il_lib_exr_error          
        , il_unknown_error          

    ) where

import Foreign
import Foreign.Ptr
import Foreign.C.Types
import Foreign.C.String

#include "IL/il.h"

-- Documentation from: <http://openil.sourceforge.net/docs/DevIL%20Manual.pdf>
--
-- You must initialize DevIL, or it will most certainly crash.  You need to
-- initialize each library (il, ilu, and ilut) separately.  You do not need
-- to initialize libraries you are not using, but keep in mind that the
-- higher level libraries are dependent on the lower ones.  

-- Design: an /unforgeable/ token (ala the mersenne-random package):

------------------------------------------------------------------------
-- Bindings

-- Initialization 

-- | Initialize DevIL. Must be done prior to other calls.
ilInit :: IO ()
ilInit = c_ilInit

foreign import ccall "ilInit"
    c_ilInit        :: IO ()

foreign import ccall "ilOriginFunc"
    c_ilOriginFunc  :: ILenum -> IO ILboolean

foreign import ccall "ilEnable"
    c_ilEnableC     :: ILenum -> IO ILboolean


-- Names

type ILUInt    = #type ILuint
type ILSizei   = #type ILsizei
type ILBoolean = #type ILboolean
type ILEnum    = #type ILenum
type ILInt     = #type ILint
type ILUByte   = #type ILubyte

-- | Image names are DevIL’s way of keeping track of images it is currently containing.  
newtype ImageName = ImageName { fromImageName :: ILUInt }

------------------------------------------------------------------------
-- Enumeration types

-- | Image types
type ILImage = CInt

-- Image types
#{enum ILImage,
  , il_type_unknown = IL_TYPE_UNKNOWN 
  , il_bmp          = IL_BMP          
  , il_cut          = IL_CUT          
  , il_doom         = IL_DOOM         
  , il_doom_flat    = IL_DOOM_FLAT    
  , il_ico          = IL_ICO          
  , il_jpg          = IL_JPG          
  , il_jfif         = IL_JFIF         
  , il_ilbm         = IL_ILBM         
  , il_pcd          = IL_PCD          
  , il_pcx          = IL_PCX          
  , il_pic          = IL_PIC          
  , il_png          = IL_PNG          
  , il_pnm          = IL_PNM          
  , il_sgi          = IL_SGI          
  , il_tga          = IL_TGA          
  , il_tif          = IL_TIF          
  , il_chead        = IL_CHEAD        
  , il_raw          = IL_RAW          
  , il_mdl          = IL_MDL          
  , il_wal          = IL_WAL          
  , il_lif          = IL_LIF          
  , il_mng          = IL_MNG          
  , il_jng          = IL_JNG          
  , il_gif          = IL_GIF          
  , il_dds          = IL_DDS          
  , il_dcx          = IL_DCX          
  , il_psd          = IL_PSD          
  , il_exif         = IL_EXIF         
  , il_psp          = IL_PSP          
  , il_pix          = IL_PIX          
  , il_pxr          = IL_PXR          
  , il_xpm          = IL_XPM          
  , il_hdr          = IL_HDR          
  , il_icns         = IL_ICNS          
  , il_jp2          = IL_JP2           
  , il_exr          = IL_EXR           
  , il_wdp          = IL_WDP           
  , il_vtf          = IL_VTF           
  , il_wbmp         = IL_WBMP          
  , il_sun          = IL_SUN           
  , il_iff          = IL_IFF           
  , il_tpl          = IL_TPL           
  , il_fits         = IL_FITS          
  , il_dicom        = IL_DICOM     
  , il_iwi          = IL_IWI           
  , il_blp          = IL_BLP           
  , il_ftx          = IL_FTX           
  , il_rot          = IL_ROT           
  , il_texture      = IL_TEXTURE       
  , il_dpx          = IL_DPX           
  , il_utx          = IL_UTX           
  , il_mp3          = IL_MP3           
  , il_jasc_pal     = IL_JASC_PAL
    }

-- | Error Types
type ILError = CInt

#{enum ILError,
    , il_no_error               = IL_NO_ERROR             
    , il_invalid_enum           = IL_INVALID_ENUM         
    , il_out_of_memory          = IL_OUT_OF_MEMORY        
    , il_format_not_supported   = IL_FORMAT_NOT_SUPPORTED 
    , il_internal_error         = IL_INTERNAL_ERROR       
    , il_invalid_value          = IL_INVALID_VALUE        
    , il_illegal_operation      = IL_ILLEGAL_OPERATION    
    , il_illegal_file_value     = IL_ILLEGAL_FILE_VALUE   
    , il_invalid_file_header    = IL_INVALID_FILE_HEADER  
    , il_invalid_param          = IL_INVALID_PARAM        
    , il_could_not_open_file    = IL_COULD_NOT_OPEN_FILE  
    , il_invalid_extension      = IL_INVALID_EXTENSION    
    , il_file_already_exists    = IL_FILE_ALREADY_EXISTS  
    , il_out_format_same        = IL_OUT_FORMAT_SAME      
    , il_stack_overflow         = IL_STACK_OVERFLOW       
    , il_stack_underflow        = IL_STACK_UNDERFLOW      
    , il_invalid_conversion     = IL_INVALID_CONVERSION   
    , il_bad_dimensions         = IL_BAD_DIMENSIONS       
    , il_file_read_error        = IL_FILE_READ_ERROR      
    , il_file_write_error       = IL_FILE_WRITE_ERROR     
    , il_lib_gif_error          = IL_LIB_GIF_ERROR  
    , il_lib_jpeg_error         = IL_LIB_JPEG_ERROR 
    , il_lib_png_error          = IL_LIB_PNG_ERROR  
    , il_lib_tiff_error         = IL_LIB_TIFF_ERROR 
    , il_lib_mng_error          = IL_LIB_MNG_ERROR  
    , il_lib_jp2_error          = IL_LIB_JP2_ERROR  
    , il_lib_exr_error          = IL_LIB_EXR_ERROR  
    , il_unknown_error          = IL_UNKNOWN_ERROR  
    }