Arrays+of+structures+(LBB)

//by Richard Russell, December 2014//

One of the language extensions provided by [|LB Booster] is native **arrays of structures**. These can be useful for structured data storage within a program, or when calling a Windows API function (for example [|Polygon]) which requires an array of structures as one of its parameters.

The syntax for declaring an array of structures is very similar to that for declaring a single structure; the only difference is the addition of the dimension(s) in parentheses: code format="lb" STRUCT sname(dims), member1 AS type, member2 AS type... code Arrays of structures may have any number of dimensions, limited only by available memory. As with ordinary numeric and string arrays the index value runs from 0 to the specified maximum dimension.

Accessing an individual member, in order to change or read its value, again uses a syntax very similar to that used for a single (scalar) structure: code format="lb" sname(index).member.struct = newvalue PRINT sname(index).member.struct code

To pass the entire array of structures as a parameter to an API function use the following syntax: code format="lb" sname AS struct code Note the use of a pair of parentheses with nothing in between.

Here are a couple of examples of the use of arrays of structures. Firstly an adaptation of the program by Dennis McKinney at the [|Lliberty BASIC Programmer's Encyclopedia]: code format="lb" 'define array of 100 structures struct test(99),_ a as char[20],_ b as long,_ c as char[20]

'for example purposes, fill the whole array of structures for i = 0 to 99 'put some data into the struct test(i).a.struct = "Carol - " + str$( i)      test(i).b.struct = i       test(i).c.struct = "Andy - " + str$( i)     next i

'for example, read all of the structures for i = 0 to 99 A$ = test(i).a.struct B = test(i).b.struct C$ = test(i).c.struct print A$ + " " + str$(B) + " " + C$    next i

'To retrieve the third element from the 50th structure: C$ = test(49).c.struct print C$

'To change the value of the third element of the 50th structure: test(49).c.struct = "Changed" 'change one or more values

'just for example C$ = test(49).c.struct print C$

[quit] end code

Secondly, an example of passing an array of structures to an API function: code format="lb" nomainwin open "Structure array" for graphics as #w #w "trapclose [quit]" hw = hwnd(#w) calldll #user32, "GetDC", hw as ulong, hdc as ulong

npoints = 3 struct points(npoints-1), x as long, y as long for i = 0 to npoints-1 points(i).x.struct = 120 + 120 * cos(2*i) points(i).y.struct = 150 + 120 * sin(2*i) next calldll #gdi32, "Polygon", hdc as ulong, _ points as struct, npoints as long, r as long wait

[quit] close #w end code