Re: [Haskell-cafe] ANN: bindings-DSL 1.0.4 (Category: FFI)

2010-01-28 Thread Lars Viklund
On Sat, Jan 23, 2010 at 01:02:07AM -0200, Maurí­cio CA wrote:
 bindings-DSL is a mature and well documented preprocessor domain
 specific language you can use to generate bindings to a C API.
 It's based on functionality provided by hsc2hs. These are links to
 Hackage page and documentation:

   http://hackage.haskell.org/package/bindings-DSL
   http://bitbucket.org/mauricio/bindings-dsl

Much thanks for this lovely package.

I'm currently using it to write a low-level Direct3D9 binding and thus
far it's very friendly.

The only thing I've missed for now is a #ccall equivalence for stdcall
functions, I hacked one up myself and called it #stdcall, but it would
be nice to have in the package proper if possible.

Keep up the good work,
-- 
Lars Viklund | z...@acc.umu.se
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] ANN: bindings-DSL 1.0.4 (Category: FFI)

2010-01-22 Thread Maurí­cio CA

Hi,

bindings-DSL is a mature and well documented preprocessor domain
specific language you can use to generate bindings to a C API.
It's based on functionality provided by hsc2hs. These are links to
Hackage page and documentation:

  http://hackage.haskell.org/package/bindings-DSL
  http://bitbucket.org/mauricio/bindings-dsl

New in this version:

  * Support for C unions.
  * Use of inttypes.h macros for wider portability.

An example on the use of unions follow. Suppose you have:

  union example {
int k;
char c[4];
  };

Then, using bindings-DSL, you'll write:

  #starttype union example
  #union_field k , CInt
  #union_array_field c , CChar
  #stoptype

Here is a ghci session showing the resulting code:

 let value = C'example 1 []

 u'example'k value (2^10)

C'example {c'example'k = 1024, c'example'c = [0,4,0,0]}

  u'example'c value [1,0,0,0]

C'example {c'example'k = 1, c'example'c = [1,0,0,0]}

 u'example'c value [0,0,0,1]

C'example {c'example'k = 16777216, c'example'c = [0,0,0,1]}

Peeking an uninitialized memory address:

 v - alloca $ \p - peek p :: IO C'example
 v

C'example {c'example'k = 81842189, c'example'c = [13,-48,-32,4]}



Hope it's useful to you. Best,
Maurício

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe