AYAで、用語リストなどをページングするための簡単な関数を書いてみました。
大雑把な実装ですがよければどうぞ。

///////// 文 ページャ 汎用関数
///////// written by ukiya.
///////// 2007/08/04 version 1.0 新規作成
//*****************************************************************************
// OnShowPage
// ページャ用独自イベント
// ref.0 表示するリストの先頭のインデックス
// PAGER. で始まる変数に設定を入れて呼ぶ
// ページングされると再度OnShowPageを呼ぶ
//*****************************************************************************
OnShowPage{
_list =PAGER.List
_start=TOINT(reference0)
_end =_start+PAGER.ShowNum
_max =ARRAYSIZE(_list)
//リスト作成
_showlist=''
for _i=_start ; _i<_end ; _i++ {
if _i > _max - 1 {
break
}
_key=_list[_i][0,PAGER.Separator]
_val=_list[_i][1,PAGER.Separator]
_showlist+="%(PAGER.Marker)\q[%(_key),%(_val)]\n"
//SSP2.00.15以降なら以下のようにすればマーカーも押せる
//_showlist+="\__q[%(_val)]%(PAGER.Marker)%(_key)\__q\n"
}
//nowpageは0はじまり
//maxpageはページ個数でなくインデックス
_nowpage =TOINT(_start / PAGER.ShowNum)
_startpage=_nowpage-TOINT(PAGER.PageNum/2)
_maxpage =CEIL(_max/PAGER.ShowNum) - 1 //インデックスなので-1
_prevstr=''
_nextstr=''
//さらに前のページはあるか?
if _startpage < 0 {
_startpage=0
_prevstr='< '
}else{
_prevpage=_nowpage-PAGER.PageNum
if _prevpage < 0 {
_prevpage=0
}
_prevstart=_prevpage * PAGER.ShowNum
_prevstr="\f[bold,true]\q[<,OnShowPage,%(_prevstart)]\f[bold,false] "
}
//さらに後のページはあるか?
_endpage=_startpage+PAGER.PageNum-1 //インデックスなので-1
if _endpage >= _maxpage {
_endpage=_maxpage
_nextstr='> '
}else{
_nextpage=_nowpage+PAGER.PageNum
if _nextpage >= _maxpage {
_nextpage=_maxpage
}
_nextstart=_nextpage * PAGER.ShowNum
_nextstr="\f[bold,true]\q[>,OnShowPage,%(_nextstart)]\f[bold,false] "
}
//ページリスト作成
_pagelist=''
for _i=_startpage ; _i<=_endpage ; _i++ {
//インデックスなので <=
_pagestr=''
if _i < 10 {
_pagestr='0'+TOSTR(_i+1) //0はじまり->1はじまり
}else{
_pagestr=TOSTR(_i+1) //0はじまり->1はじまり
}
if _i == _nowpage {
_pagelist+=_pagestr+' '
}else{
_pagestart=_i*PAGER.ShowNum
_pagelist+="\f[bold,true]\q[%(_pagestr),OnShowPage,%(_pagestart)]\f[bold,false] "
}
}
//最終出力
"%(PAGER.ShowHeader)%(_showlist)%(PAGER.PageHeader)%(_prevstr)%(_pagelist)%(_nextstr)%(PAGER.Footer)"
}
//**** デバッグ用 *************************************************************
OnKeyPress{
CVSTR(reference0)
case reference0 {
when 'd' {
PAGER.List=( /
"リスト01|list1", /
"リスト02|list2", /
"リスト03|list3", /
"リスト04|list4", /
"リスト05|list5", /
"リスト06|list6", /
"リスト07|list7", /
"リスト08|list8", /
"リスト09|list9", /
"リスト10|lista", /
"リスト11|listb", /
"リスト12|listc", /
"リスト13|listd", /
"リスト14|liste", /
"リスト15|listf", /
"リスト16|listg", /
"リスト17|listh", /
"リスト18|listi", /
"リスト19|listj", /
"リスト20|listk", /
)
//PAGER.Listに表示したいリストを入れる。
PAGER.ShowHeader='\_q■タイトル■\n' //リストヘッダ
PAGER.PageHeader='■ページ■\n' //ページヘッダ
PAGER.Footer='\n\![*]\q[CLOSE,close]\_q' //フッタ
PAGER.Marker='\![*]' //項目マーカ
PAGER.Separator='|' //項目名と選択肢名の区切り
PAGER.ShowNum=5 //リスト表示数
PAGER.PageNum=3 //ページ表示数(奇数で)
reference0=0 //初期表示時のおまじない
OnShowPage //初期表示コール
}
}
}