これが理解できれば難しくは無いと思う
dirlist fnames,dir_exe+"\\hsptv\\*.jpg",1
screen 1,2048,2048
width 800,600,0,0
boxf
font "MS ゴシック",24
notesel fnames
buffer 2
repeat notemax
noteget fname,cnt
picload dir_exe+"\\hsptv\\"+fname
gsx=ginfo_sx
gsy=ginfo_sy
//下の処理は用意できる画像サイズが大きいため縮小処理してるだけなので通常はm=1.0で良い
if gsx>256 or gsy>256 {//256超えるなら縮小処理
if gsx > gsy {
m=256.0/gsx //256になるように倍率計算
}else{
m=256.0/gsy
}
}else{
m=1.0 //256以下なら等倍
}
gsel 1
if (px+m*gsx)>ginfo_sx {px=0:py+sy_max:sy_max=0.0}//今回の画像を描画する範囲が残ってないから左に戻し下に移動
pos px,py
celput 2,0,m,m
rect_left_list(id_cnt)=px //画像左座標
rect_top_list(id_cnt)=py ///画像上座標
rect_right_list(id_cnt)=ginfo_cx //画像右座標 (celputはカレントポジションが描画画像分右に移動する)
rect_bottom_list(id_cnt)=py+m*gsy //画像下座標
px=ginfo_cx
if (m*gsy)>sy_max {sy_max=m*gsy} //横並びで一番縦サイズが大きいのを下に移動するときに使用(画像のサイズが一定なら必要無い)
color 255,255,255
pos rect_left_list(id_cnt),rect_top_list(id_cnt)
mes "ID="+id_cnt+" ["+fname+"]"
mes "PX="+rect_left_list(id_cnt)+" PY="+rect_top_list(id_cnt)
mes "SX="+(rect_right_list(id_cnt)-rect_left_list(id_cnt))+" SY="+(rect_bottom_list(id_cnt)-rect_top_list(id_cnt))
id_cnt++ //次のID
gsel 2
loop
gsel 0,1
font "MS ゴシック",24
await 0
repeat
color
boxf
id=cnt\id_cnt
pos 0,0
color 255 //デバッグ用データ表示
mes "ID="+id
mes "PX="+rect_left_list(id)+" PY="+rect_top_list(id)
mes "SX="+(rect_right_list(id)-rect_left_list(id))+" SY="+(rect_bottom_list(id)-rect_top_list(id))
gcopy 1,rect_left_list(id), rect_top_list(id), rect_right_list(id)-rect_left_list(id), rect_bottom_list(id)-rect_top_list(id)
await 1000
loop
座標はboxf形式じゃなくgcopy形式にしといた方が描画時に利用しやすいんじゃ?