### 12.1 define-g-boxed-cstruct

— Macro:

**define-g-boxed-cstruct**
(*define-g-boxed-cstruct* name g-type-name
&body slot*)
slot ::= (slot-name slot-type &key count initform inline)

`name`- A symbol naming the type being defined

`g-type-name`- A string specifying the GType name of this GBoxed. This may be nil if this type is not registered with GObject type system.

`slot-name`- A symbol naming the slot of a structure

`slot-type`- A foreign type of a slot

`count`- An integer. Corresponds to
`:count`

option of slot in CFFI `defcstruct`

. If `count`

is not NIL, then the slot is mapped to Lisp array.

`initform`- A form that is the initform of Lisp structure slot

`inline`- A boolean. If it is true, then the slot contains GBoxed structure whose name is
`slot-type`

.

Defines the “simple” GBoxed structure corresponding to C structure. The slot specification is analogous to CFFI `defstruct`

slot specification with the addition of `inline`

option. This also defines the `name`-cstruct CFFI structure definition with equivalent structure.

Example of usage:

(*define-g-boxed-cstruct* rectangle "GdkRectangle"
(left :int :initform 0)
(top :int :initform 0)
(width :int :initform 0)
(height :int :initform 0))
(*define-g-boxed-cstruct* point nil
(x :int :initform 0)
(y :int :initform 0))
(*define-g-boxed-cstruct* vector4 nil
(coords :double :count 4 :initform (vector 0d0 0d0 0d0 0d0)))
(*define-g-boxed-cstruct* segment nil
(a point :inline t :initform (make-point))
(b point :inline t :initform (make-point)))