I worked on the LISP->ActiveX scripting bridge. I discovered that CT:DEFCSTRUCT will accept the :UNION keyword (as documented on ACL page 1-3-9), but the keyword is apparently ignored. All members are allocated at different offsets.
An Allegro CG bug:
; The following form demonstrates a problem with the TRACK-BAR control. It ; creates a track-bar and attempts to set the direction to :DOWN. When the ; dialog is opened, the direction is reset to :UP. This is because the ; CG:DEVICE-OPEN method for a TRACE-BAR-PANE receives an option list ; which has the stream options in front of the widget options. The ; stream option :DIRECTION :IO is shadowing the widget option :DIRECTION :DOWN. (let ((item (cg:make-dialog-item :widget 'cg-util:track-bar :box (cg:make-box 78 58 124 233) :direction :down :orientation :vertical :range (list 0 100) :value 0 ))) (print (slot-value item 'pc::direction)) (cg:open-dialog (list item) 'cg:dialog cg:*screen* :pop-up-p nil) (print (slot-value item 'pc::direction)) (values) )