[C2hs] question on structs with compound members

Duncan Coutts duncan at coutts.uklinux.net
Wed Oct 22 15:51:15 EDT 2003


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?


More information about the C2hs mailing list