肝心の動作は読み取れていませんが、眺めて気になったところとして

重たい関数と思われる LENGTH()の使い方が良くない

FOR i = 0 TO IMGNUM
 str = IMGARR[i]
 str2 = "CHKIMG(<#DBL>" + str + ".bmp<#DBL>)"
 an = i
 dt = str2
 RESIZE(a, LENGTH(a)-1+1)  ※
 IF an<0 or an>LENGTH(a)-1  ※
  a[LENGTH(a)-1]=dt     ※
 ELSE
  FOR i2=LENGTH(a)-1 TO an step -1 ※この4つのLENGTH(a)は同じ値を返すはずですよね

例えば次のようにしておいて、できればFORループの外にだすか、RESIZEの前に置きましょう
 a_length = LENGTH(a)

 RESIZE(a, a_length -1 +1)  ※
 IF an<0 or an>a_length -1  ※
  a[a_length -1]=dt     ※
 ELSE
  FOR i2=a_length -1 TO an step -1 ※