A structure is a block of memory containing information. The block address is a handle to the structure.
The information is interpreted by reference to a prototype, which specifies the position and type of a particular item of data in the block. Prototypes must be defined before structures can be created.
The first word of a structure is a handle to the prototype to be used to interpret it. The types of data Basalt deals with are defined on the prototype variables page.
Basalt uses the character '\', backslash, to access structure values.
A combinaton of a structure and prototype variable specifies a particular item of data for reading or writing:
value=\structure.variable
\structure.variable=value
Most variables are straightforward transfers of data from the block, or from an indirection to a string in another block, created and changed as necessary.
A variable can be an array. This allows an index into a sequence of the same type of variable in the block. String arrays are indirected.
A variable can be another structure, which is created with it. Then a item of data is specified by the parent and child structures with the variable in the child prototype:
\parent.child.variable
Structures can be nested recursively:
\ancestor.parent.child.variable
A variable can be an array of structures, too.
External, read-only, information can be linked to a structure as an indirected string, array or already created structure. This allows different structures to share information without duplicating it.
If a block of memory is already structured, eg: an icon block, an appropriate prototype can be defined, the block prefixed with the protype handle, and then items of data specified as above. A block of memory can be referenced by more than one prototype.
See this example.

A structure handle is a pointer. Therefore, copying or passing a structure as a parameter copies the reference, cf arrays. There is no simple method to copy the data in a structure, and it is not recommended. Do not make structures local to a routine, or else be sure to delete them before the routine ends. Do not re-use a structure handle unless the earlier structure has been deleted.
A prototype handle is a pointer to a linked list, which cannot be deleted. Do not re-use a prototype handle.