I am trying to port a minesweeper game from C to lisp, just to learn a little about lambda-gtk.
The buttons for the game are kept in a two dimensional array of these structures:
(defstruct minesweeper-button button-state widget bombs-nearby has-bomb row column)
I want to connect the button "clicked" signal to a handler like this:
(g:signal-connect button "clicked" mine-button-clicked (aref *mines* column row))
The problem is that at runtime I get an error complaining that the data I passed to the signal-handler, ie. the (aref *mines* column row) is not of type (OR NULL SYSTEM-AREA-POINTER (ALIEN (* T)))
I looked through the examples.lisp and downloaded cm-2.6.0 and looked at all the signal-connect calls, but found no examples of passing lisp data to the signal handler.
I looked through the sb-alien section in the sbcl manual, but it doens't seem that converting lisp to a C representation so it could be accessed by other lisp occurred to them.
I wanted to avoid having to create a C structure just to pass a couple of intergers to a signal.
I guess for this particular case I could multiply the column by the number of rows and then add the row to that and decode it in the callback, but that seems a little hackish. I wanted to eliminate most of the globals once I got the program to work. Can anyone suggest a better way of sending this data to the callback.
I can send the complete code if you would like. It is less than 600 lines without the xpm files.
thanks, Todd.
lambda-gtk-devel@common-lisp.net