In the chapter, we will examine user defined data and predefined structures.
It's possible to define your own structures. A structure is a collection of variables like for example a point that consist of an x and a y coordinate:
// Define a point structure
.struct Point {x,y}
// Create a point with x=1 and y=2 and print it
.var p1 = Point(1,2)
.print ”p1.x=” + p1.x
.print ”p1.y=” + p1.y
// Create a point with the default contructor and modify its arguments
.var p2 = Point()
.eval p2.x =3
.eval p2.y =4
You define a structure with the .struct directive. The above structure has the name ‘Point’ and consists of the variables x and y. To create an instance of the structure, you use its name as a function. You can either supply no arguments or give the init values of all the variables. You use the values generated by structures as any other variables, ex:
lda #0
ldy #p1.y
sta charset+(p1.x>>3)*height,y
You can get access to informations about the struct and access the fields in a more generic way by using the struct’s functions:
.struct Person{firstName,lastName}
.var p1 = Person(“Peter”,”Schmeichel”)
.print p1.getStructName() // Prints ‘Person’
.print p1.getNoOfFields() // Prints ‘2’
.print p1.getFieldNames().get(0) // Prints ‘firstName’
.eval p1.set(0,”Kasper”) // Sets firstName to Kasper
.print p1.get(“lastName”) // Prints “Schmeichel”
// Copy values from one struct to another
.var p2 = Person()
.for (var i=0; i<p1.getNoOfFields(); i++)
.eval p2.set(i,p1.get(i))
// Print the content of a struct:
// firstName = Casper
// lastName = Schmeichel
.for (var i=0; i<p1.getNoOfFields(); i++) {
.print p1.getFieldNames().get(i) + “ = “ + p1.get(i)
}
Here is a list of the functions defined on struct values:
Table 6.1. Struct Value Functions
| Functions | Description |
|---|---|
| getStructName() | Returns the name of the structure. |
| getNoOfFields() | Returns the number of defined fields. |
| getFieldNames() | Returns a list containing the field names. |
| get(index) | Returns the field value of the field given by an integer index (0 is the first defined filed). |
| get(name) | Returns the value of the field given by a field name string. |
| set(index,value) | Sets the value of a field given by an integer index.. |
| set(name,value) | Sets the value of a field given by a name. |




