With FreeBasic, you can DIM an array based on the TYPE of another variable:
Dim MyInt As integer
Dim MySingle As Single
Dim MyDouble As Double
Dim MyIntArray(9) As TYPEOF(MyInt)
Dim MySingleArray(9) As TYPEOF(MySingle)
Dim MyDoubleArray(9) As TYPEOF(MyDouble)
For n as integer=0 To 9
MyIntArray(n)=n
MySingleArray(n)=n
MyDoubleArray(n)=n
Next
print "Integer=", MyIntArray(1)
print "Single=", MySingleArray(2)
print "Double=", MyDoubleArray(3)
sleep
So I thought, "if FB can do that, Masm can do the same":
include \masm32\MasmBasic\MasmBasic.inc
include DimAsType.inc
SetGlobals rc:RECT, words:SWORD, MyR4:REAL4, MyR8:REAL8
Init
Dim r4x() As TYPE(MyR4)
Dim r8x() As TYPE(MyR8)
Dim wordsarray() As TYPE(words)
Dim rectangles() As TYPE(rc)
For_ ecx=0 To 9
Rand(-100.0, 100.0, r4x(ecx))
Rand(-1000.0, 1000.0, r8x(ecx))
Rand(-32768, 32767, wordsarray(ecx))
Rand(0, 1366, rectangles(ecx, right))
Next
Print cfm$("R4\tR8\tSWORDs\tRECTs")
For_ ecx=0 To 9
Print Str$("\n%4f", r4x(ecx))
Print Str$("\t%4f", r8x(ecx))
Print Str$("\t%i", wordsarray(ecx))
Print Str$("\t%i", rectangles(ecx, right))
Next
Inkey
EndOfCode
Works like a charm:
R4 R8 SWORDs RECTs
-9.638 -726.6 10214 301
-95.35 125.0 5038 343
17.84 376.0 9119 1148
... etc ...
One more from the series "absolutely useless features" 8)