ausbaufähig.
Erstellt werden pro Array eine Struktur und ein Pointer mit der Struktur.
Die Struktur heißt in "Makro-Sprache" arr_#name#_struc und der Pointer
heißt *arr_#name, wobei als name der Name des Array einzusetzen ist.
Fehlerüberprüfungen sind keine eingebaut. Es gibt nur das Makro IsArray,
das den Pointer zur Array-Struktur zurückgibt.
Code: Alles auswählen
;Struktur: arr_#name#_struc
;Variablen: *arr_#name.arr_#name#_struc
Macro NewArray(name, first, last, Struct)
Structure arr_#name#_struc
_first.l
_last.l
element.Struct[last - first + 1]
EndStructure
Global *arr_#name.arr_#name#_struc
*arr_#name = AllocateMemory((last - first + 1) * SizeOf(arr_#name#_struc))
*arr_#name\_first = first
*arr_#name\_last = last
EndMacro
Macro IsArray(name)
*arr_#name
EndMacro
Macro Array(name, index)
*arr_#name\element[index - *arr_#name\_first]
EndMacro
Macro LBound(name)
*arr_#name\_first
EndMacro
Macro UBound(name)
*arr_#name\_last
EndMacro
Macro DelArray(name)
FreeMemory(*arr_#name)
EndMacro
;Array erstellen;
;1. Parameter: Name des Arrays
;2. Parameter: Niedrigster Index
;3. Paremeter: Höchster Index
;4. Parameter: Struktur der Elemente
NewArray(hallo, 50, 150, Point)
;Überprüfen, ob Array erstellt wurde
If IsArray(hallo)
Debug "Array erstellt"
EndIf
;Array füllen
For a = 50 To 150
Array(hallo, a)\x = a * 10
Array(hallo, a)\y = 150 - a
Next
Debug "Anfang: " + Str(LBound(hallo))
Debug "Ende: " + Str(UBound(hallo))
;Array ausgeben
For a = 50 To 150
Debug Str(Array(hallo, a)\x) + " - " + Str(Array(hallo, a)\y)
Next
;Array wieder löschen (angelegte Variablen bleiben erhalten!)
DelArray(hallo)