Multi Dimensional Arrays in Swordfish
Swordfish doesn't support arrays of more than one dimension directly, but it's very easy to achieve the same thing using structures. The syntax is perhaps a little more convoluted, but the net result is the same. You will also find it to be more flexible, as structures can hold different data types. However, lets keep it simple and look at how we can create a 10 x 10 matrix of byte values.
Structure TArray a(10) As Byte End Structure Dim Items(10) As TArray
The above code may look a little strange, but on closer examination it can be seen that Items() holds 10 structure elements, each with their own 10 byte array. To access an element, we simply use
Items(5).a(5) = 10
which is the same as writing something like
Items(5)(5) = 10
Here is a small code example which initialises a 10 x 10 matrix, then displays via the MCUs USART
// import modules... include "usart.bas" include "convert.bas" // declare a 10 x 10 byte array... Structure TArray a(10) As Byte End Structure Dim Items(10) As TArray // local variables... Dim i,j, Value As Byte // initialise the two dimensional array... for i = 0 to 9 for j = 0 to 9 Items(i).a(j) = i + j next next // display to the screen... setbaudrate(br115200) for i = 0 to 9 for j = 0 to 9 Value = Items(i).a(j) Write(DecToStr(Value,2)," ") next Write(13,10) next
That's all there is to it. Passing your array to a sub or function is really easy also. For example, given the subroutine declaration
sub MySub(byref pArray() as TArray) ... end sub
we can pass the array like this
MySub(Items)