If you want to use structures (or records as they are called in Pascal) you will find there is no native support for that in 4tH. Relax, there is no such support in Forth either, except for some proprietary code. That doesn't mean you can't do it. In order to get you on your way we'll present some examples here.
The easiest way is to allocate a structure in the Character Segment. You can make use of the fact that subsequently defined strings will form one single contiguous chunk of memory. The first thing we'll do is define the length of the fields (or strings).
\ length of fields 32 constant #Name 64 constant #Address 32 constant #City 12 constant #Age
Of course, you don't have to, but it will make it a lot easier to maintain your program. Then we define the fields:
\ define fields #Name string Person.Name #Address string Person.Address #City string Person.City #Age string Person.Age
This might be a familiar example to you. We'll store information on a single person in this structure. Now we got the fields, the length of the fields, but still no way to manipulate the complete structure. In order to do that we'll define some more variables:
\ define record Person.Name Constant Person #Name #Address #City #Age + + + Value #Person
This will create a pointer which points to the first field, which is also the start of the structure. Then we define a value which hold the length of all fields added together. Now we create some utilities to manipulate the structure and its fields:
\ helper utilities : into copy drop ; ( s a -- )
So we can write routines like this:
: EraseRecord Person #Person blank \ erase buffer ;
Which wipes a structure (fills it with blanks) or initializes the fields:
: InitRecord \ initialize fields " Hans Bezemer" Person.Name into " Turfmarkt 97" Person.Address into " Den Haag" Person.City into " 36" Person.Age into ;
Of course, you can also use 'ACCEPT' to enter the contents of the fields. Fields act like ordinary strings. Note that numbers are stored as strings as well. This is not too much of a problem since 'NUMBER' can convert them back to numbers anyway.
This is a very simple use of structures. If you want to have multiple occurences of the same structure, that can be done as well. But it is a little more complicated to implement. We leave that to you to figure out.