[C2hs] question on structs with compound members

Manuel M T Chakravarty chak at cse.unsw.edu.au
Thu Oct 23 13:14:00 EDT 2003


Duncan Coutts <duncan at coutts.uklinux.net> wrote,

> All,
> 
> So I'm trying to wrap this structure:
> 
> struct GtkSourceTagStyle {
> 
> 	/* readonly */
> 	gboolean is_default;
> 
> 	guint mask;
> 	
> 	GdkColor foreground;
> 	GdkColor background;
> 	
> 	gboolean italic;
> 	gboolean bold;
> 	gboolean underline;
> 	gboolean strikethrough;
> 
> 	/* Reserved for future expansion */
> 	guint8 reserved[16];	
> };
> 
> My problem is with the GdkColor members foreground & background. They
> are themselves structures so c2hs cannot make {#get #} mappings for
> them. Of course Color has already been wrapped (in
> gtk2hs/gtk/general/Structs.hsc) and is a member of the Storable class so
> all we need is to get a pointer to the member to be able to apply
> peek/poke to it. This is not hard if we manually edit the .hs file
> produced from the .chs binding file:
> 
> instance Storable SourceTagStyle where
>   peek ptr = do
>     isDefault'  <- (\ptr -> do {peekByteOff ptr 0 ::IO CInt}) ptr
>     mask'       <- (\ptr -> do {peekByteOff ptr 4 ::IO CUInt}) ptr
>     foreground' <- (\ptr -> do {peekByteOff ptr 8 ::IO Color}) ptr    --manually edited
>     background' <- (\ptr -> do {peekByteOff ptr 8+12 ::IO Color}) ptr --manually edited
>     italic'     <- (\ptr -> do {peekByteOff ptr 32 ::IO CInt}) ptr
>     bold'       <- (\ptr -> do {peekByteOff ptr 36 ::IO CInt}) ptr
>     ...
> 
> So as you see we're very close, all we need is a way of automatically
> getting the structure offsets (which is what c2hs does for all the other
> members). What is the right way do to this?

To be honest, I don't quite get what the problem is.  Maybe
because I haven't seen the .chs file from which you compile
this.  Provided you have the right Storable instances, there
shouldn't be a problem {#get #}-ing complex structures.

Cheers,
Manuel


More information about the C2hs mailing list