Luís Oliveira wrote:
I suppose defcenum shouldn't force the user to use keywords though?
Certainly not! Where would you get their value from if they are interned into the keyword package.
BTW, I think a SWITCH macro would be a useful companion to ENUM. It's CASE where you can put such things into the selector clauses. Instead of (case event-type (#.SDL-keyboard-event[-enum] (do-this)) ... ... or (cond ((if (eql event-type SDL-keyboard-event[-enum]) ... ((if ... or (cond ((if (enum-eq? event-type SDL-keyboard-event) ...) ...
BTW, I hate enums in Lisp and the explosion of constants etc. that they cause.
I'm not convinced DEFCONSTANT is appropriate. Maybe all is needed is a mapping from name to values (and vice-versa, the CLISP FFI has it), and nice useable forms like the above SWITCH to hide ugliness.
BTW, DEFCONSTANT won't help with types like (:array :character MAX_PATH) which once again, shows that it's not a good translation of C. It's just widespread. (:array :character #.MAX_PATH) is also ugly, but I've never thought about finding something better.
FWIW, remember to wrap such uses of defconstant into EVAL-when also compile.
Regards, Jörg Höhle