Will Donnelly wrote:
Recently (this morning) I began using Gambit Scheme, and so far it has been a wonderful language to work with. I like doing graphical stuff, so I'm trying to use Gambit's FFI to interface with the SDL libraries. I've gotten everything to work so far, compiling and linking with libSDL from within gsc properly, but now I have two questions.
One, is there any way to specify, in comments or some such, what compiler and linker flags a file should have in a call to compile-file? I'm using emacs as an editor, and the C-c C-k command is useless, since the file won't get linked to libSDL like it needs to.
Er, not too sure about that one...
Two, am I missing something when it comes to interfacing with C structs? The only references that I've found (http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Using_Gambit_with_Exte...) and (http://www.iro.umontreal.ca/~gambit/doc/gambit-c.html#SEC135) seem to contain horrendously complex code for something as simple as accessing a struct like
typedef struct SDL_Rect { Sint16 x, y; Uint16 w, h; } SDL_Rect;
from within Scheme. Does anyone with more experience than I have some pointers on how to do this?
I'd first like to point out to you that a really nice but incomplete binding to SDL has already been written by Ken Dickey and can be obtained on the gambit code dumping ground (http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Dumping_Grounds).
I don't know what is best to do when you need to deal with structs, as it is no very friendly to do so in gambit's ffi. What i usually to would be to have some c-lambda's that will get what I need to be done. Ex:
(define SDL_Rect:x (c-lambda ((pointer "SDL_Rect")) int16 "___result = ___arg1.x;"))
(define SDL_Rect:x-set! (c-lambda ((pointer "SDL_Rect") int16) void "___arg1.x = ___arg2;"))
etc...
This sure is a bit of a pain, and I know there are better ways to do this, but they are too much unfriendly for me to use them.
Hope it helped!
David