#define max(a, b) Iif(a>b,a,b) enum datatype 'for this demonstration we'll allow these five data types BOOL STRNG BYYTE INTEG FLOAT end enum union value bool as boolean strng as string*32 byyte as byte integ as integer float as double end union type dicitem 'one part of the dictionary entry, either the key or the value datatype as datatype 'need to keep track of what kind of data it is value as value end type type dicentry 'a dic entry has two things, a key and a value key as dicitem value as dicitem end type sub add_dicentry( Dic() as dicentry, entry as dicentry ) redim preserve Dic(0 to max(ubound(Dic)+1,0)) Dic(ubound(Dic)) = entry return end sub redim as dicentry Dictionary(-1) 'initialise a dictionary with no entries as yet dim as dicentry thing1, thing2 'generate some test dictionary entries with thing1 with .key .datatype = STRNG .value.strng = "Cat" end with with .value .datatype = STRNG .value.strng = "Mittens" end with end with with thing2 with .key .datatype = integ .value.integ = 32767 end with with .value .datatype = float .value.float = 2.718281828 end with end with add_dicentry( Dictionary(), thing1 ) add_dicentry( Dictionary(), thing2 ) print Dictionary(0).value.value.strng print Dictionary(1).key.value.integ