[C2hs] question on structs with compound members
Duncan Coutts
duncan at coutts.uklinux.net
Wed Oct 22 15:51:15 EDT 2003
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?
Duncan
More information about the C2hs
mailing list