From: Hoehle, Joerg-C. <Joe...@t-...> - 2005-05-25 07:35:56
|
Hi, Bernard Urban wrote: >No, I think I will need to write a C function having the same >name as the one implementing the STOP statement, >which returns to Lisp (problem not investigated so far), >and link to it before dlopening libf2c. I see two solution paths: a) have C:STOP() set a variable, that you can query (def-c-var) upon return on your function. b) Have C:STOP() call a callback initially set via another C:hand-written() function. That callback would signal an error. (defun fortran-stopped () (error "Fortran")) (def-call-out hand-written (:arguments (callback (c-function (:arguments)(:return-type void))))) (defun initialize() (hand-written #'fortran-stopped)) See impnotes and tests/ffi.tst for further callback examples. BTW, what does cmucl say about the undefined STOP? a) is much more portable across Lisps. b) is likely to cause problems with C++ code (destructors and unwind-protect not being called...), but is good enough for C and presumably Fortran (I haven't heard of unwind-protect like construct in Fortran, but what do I know about it). Generally, raising exceptions across language barriers is hairy. Regards, Jorg Hohle. |