Declare Array inline
Posted: Fri Mar 06, 2020 5:31 am
As long as Fred refuses to implement instant Array initialization (also very useful for passing one-off arrays to functions (which this macro can not solve))...
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...
String literal (here named .sl) is a bit messy... anyone other options?

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