Here's the custom menu program I use, modded to do what you wanted:
Inputs:
A, number of pages
Str1, Str2… StrA // one Str for each part of the menu
EX: A=3
Str1=" [MAIN] 2 3 ITEM 1 ITEM 2
Str2=" MAIN [2] 3 ITEM 1 ITEM 2
Str3=" MAIN 2 [3] ITEM 1 ITEM 2
Outputs:
B, the page they're on
X, the # choice they made
Destroyed:
Ans, C, D, Y, Homescreen
CODE:
:1→B // will always start out on page 1
:Lbl 1
:If B=1
:Str1
:If B=2
:Str2
:If B=3
:Str3 // you get the picture. All the way to Str0 based on A
......
:If B=A
:StrA
:ClrHome
:Output(1,1,Ans
:length(Ans)/16
:If fPart(Ans
:1+iPart(Ans
:Ans→D
:2→X
:Ans→Y
:Repeat C=21 or Ans // 21 being [2nd], how the user picks their choice. And Ans being if they switched the page.
:Output(X,2," " //space
:Output(Y,2,">
:Repeat Ans
:getKey→C
:Y→X
:Y-(A=25)+(A=34→Y
:2(Y>D)+D(Y≤1)+Y(Y≤D and Y>1→Y // scrolling! I was thinking of optimizing that with remainder( but I never did it.
:If C=21
:X-1→X //setup X to the choice #.
:max(1,min(A,B+(C=26)-(C=24→B
:max(C={24,26 // if C=24 or 26, it will be 1. Otherwise, it will be 0, and it will loop over
:End
:If C=21
:Return
:Goto 1 // If the page changed
So that's a modified version of my MENU program. Note that the Strings need to be set up so that when you do Output(1,1,String none of the 1st 3 columns are occupied (except the 1st row, the title). And the title - 1st 16 characters of the Strings needs to be relatively the same for each one, except for something to signify which page it's on. I just typed this up, never actually tried it, but it should work.
Ask me if you have questions or it doesn't work.