Structures

Structures are used to keep complex data in one place. Classical use cases are records.

To use structures, load the file lib/forth200x/structure.frt into the controller. It has no further dependencies.

\ simple test example for forth200x structures
\ define a new data structure named list.

begin-structure list
  field: l.p  \ previous
  field: l.n  \ next
  field: l.d  \ data
end-structure

\ create an instance of the datastructure list
\ named listroot

list buffer: listroot

\ access an element from the instance
$55aa listroot l.d !

\ place a structure at a special place
begin-structure atmega-port
  cfield: PIN
  cfield: DDR
  cfield: PORT
end-structure

\ Atmegas have 3 addresses per port, use
\ the lowest one here
$39 constant PORT-A

\ set all pins to output
$ff PORT-A DDR c!

The example shows a few aspects that should be known:

  • field names are global entries in the dictionary, one should choose good names for them. Names like a are a no-go. One possibility is the schema structure-name->fieldname
  • structures keep definitions in flash, the data goes to RAM.

The package works with amforth version 4.0 and newer.