here's one way to get it a similar effect for 1-dimensional arrays for up to 16 values.
Variable parameters would be welcome too for macro's. MacroParamCount? MacroParam(x)? More logic. Because, well.. that's what macro's are for. Automating repetitive stuff...
Code: Select all
EnableExplicit
Macro MacroQuote
"
EndMacro
Macro Array(name, type, i1=, i2=, i3=, i4=, i5=, i6=, i7=, i8=, i9=, i10=, i11=, i12=, i13=, i14=, i15=, i16=)
CompilerIf MacroQuote#i16#MacroQuote <> ""
#ArraySize#name = 15
CompilerElseIf MacroQuote#i15#MacroQuote <> ""
#ArraySize#name = 14
CompilerElseIf MacroQuote#i14#MacroQuote <> ""
#ArraySize#name = 13
CompilerElseIf MacroQuote#i13#MacroQuote <> ""
#ArraySize#name = 12
CompilerElseIf MacroQuote#i12#MacroQuote <> ""
#ArraySize#name = 11
CompilerElseIf MacroQuote#i11#MacroQuote <> ""
#ArraySize#name = 10
CompilerElseIf MacroQuote#i10#MacroQuote <> ""
#ArraySize#name = 9
CompilerElseIf MacroQuote#i9#MacroQuote <> ""
#ArraySize#name = 8
CompilerElseIf MacroQuote#i8#MacroQuote <> ""
#ArraySize#name = 7
CompilerElseIf MacroQuote#i7#MacroQuote <> ""
#ArraySize#name = 6
CompilerElseIf MacroQuote#i6#MacroQuote <> ""
#ArraySize#name = 5
CompilerElseIf MacroQuote#i5#MacroQuote <> ""
#ArraySize#name = 4
CompilerElseIf MacroQuote#i4#MacroQuote <> ""
#ArraySize#name = 3
CompilerElseIf MacroQuote#i3#MacroQuote <> ""
#ArraySize#name = 2
CompilerElseIf MacroQuote#i2#MacroQuote <> ""
#ArraySize#name = 1
CompilerElseIf MacroQuote#i1#MacroQuote <> ""
#ArraySize#name = 0
CompilerElse
#ArraySize#name = 0
CompilerEndIf
CompilerIf MacroQuote#type#MacroQuote = ".sl"
Dim name.s(#ArraySize#name)
CompilerIf MacroQuote#i16#MacroQuote <> "": name(15) = MacroQuote#i16#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i15#MacroQuote <> "": name(14) = MacroQuote#i15#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i14#MacroQuote <> "": name(13) = MacroQuote#i14#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i13#MacroQuote <> "": name(12) = MacroQuote#i13#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i12#MacroQuote <> "": name(11) = MacroQuote#i12#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i11#MacroQuote <> "": name(10) = MacroQuote#i11#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i10#MacroQuote <> "": name(9) = MacroQuote#i10#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i9#MacroQuote <> "": name(8) = MacroQuote#i9#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i8#MacroQuote <> "": name(7) = MacroQuote#i8#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i7#MacroQuote <> "": name(6) = MacroQuote#i7#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i6#MacroQuote <> "": name(5) = MacroQuote#i6#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i5#MacroQuote <> "": name(4) = MacroQuote#i5#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i4#MacroQuote <> "": name(3) = MacroQuote#i4#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i3#MacroQuote <> "": name(2) = MacroQuote#i3#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i2#MacroQuote <> "": name(1) = MacroQuote#i2#MacroQuote#: CompilerEndIf
CompilerIf MacroQuote#i1#MacroQuote <> "": name(0) = MacroQuote#i1#MacroQuote#: CompilerEndIf
CompilerElse
Dim name#type(#ArraySize#name)
CompilerIf MacroQuote#i16#MacroQuote <> "": name(15) = i16: CompilerEndIf
CompilerIf MacroQuote#i15#MacroQuote <> "": name(14) = i15: CompilerEndIf
CompilerIf MacroQuote#i14#MacroQuote <> "": name(13) = i14: CompilerEndIf
CompilerIf MacroQuote#i13#MacroQuote <> "": name(12) = i13: CompilerEndIf
CompilerIf MacroQuote#i12#MacroQuote <> "": name(11) = i12: CompilerEndIf
CompilerIf MacroQuote#i11#MacroQuote <> "": name(10) = i11: CompilerEndIf
CompilerIf MacroQuote#i10#MacroQuote <> "": name(9) = i10: CompilerEndIf
CompilerIf MacroQuote#i9#MacroQuote <> "": name(8) = i9: CompilerEndIf
CompilerIf MacroQuote#i8#MacroQuote <> "": name(7) = i8: CompilerEndIf
CompilerIf MacroQuote#i7#MacroQuote <> "": name(6) = i7: CompilerEndIf
CompilerIf MacroQuote#i6#MacroQuote <> "": name(5) = i6: CompilerEndIf
CompilerIf MacroQuote#i5#MacroQuote <> "": name(4) = i5: CompilerEndIf
CompilerIf MacroQuote#i4#MacroQuote <> "": name(3) = i4: CompilerEndIf
CompilerIf MacroQuote#i3#MacroQuote <> "": name(2) = i3: CompilerEndIf
CompilerIf MacroQuote#i2#MacroQuote <> "": name(1) = i2: CompilerEndIf
CompilerIf MacroQuote#i1#MacroQuote <> "": name(0) = i1: CompilerEndIf
CompilerEndIf
EndMacro
Array(test1, .i, 1, 2, 3, 4) ;Same result as writing manually all array composition stuff
Array(test2, .sl, a, b, c, d)
Define i
For i = 0 To ArraySize(test1())
Debug test1(i)
Next
For i = 0 To ArraySize(test2())
Debug test2(i)
Next