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)
)