I had a similar problem once, my old program was originally coded using static arrays (coded in delphi 3 i think), there was several places where my array is accesed looping from 1 to numelements; then my users requested me to remove the limit and allow them to define the length at room time; so i changed the structure definition to dinamic array but instead of looking every place where the arrays is accesed in the loop i just define the array as setlength(rooms, numelements+1) so all my old for k:=1 to numelements loops still compatibles; just element 0 remain unused, but that is not big deal.

Since then almost all my code always uses dinamic arrays, and i am acustomed to write my loops as for k:=0 to numelements-1, but somtimes i am missing the flexibility i have to copy static arrays just using somthin like rooms2:=rooms;