This can really be improved a lot, I hate how it uses multiple strings especially. Here is one I created just now for the TI-84+ CE:

```
DelVar K~1->A
{2,3,2,4->L1
Repeat sum(K={45,105
If A=~1 or sum(K={24,26
Then
If A=~1:0->A
ClrHome
Output(1,1," PG1 PG2 PG3 PG4
Output(1,5A+1,"[
Output(1,5A+5,"]
2->B
If A=0
Then
Output(2,2,"1:THINGIE1
Output(3,2,"2:THINGIE2
End
If A=1
Then
Output(2,2,"1:THIS1
Output(3,2,"2:THIS2
Output(4,2,"3:THIS3
End
If A=2
Then
Output(2,2,"1:PROGAA
Output(3,2,"2:PROGBB
End
If A=3
Then
Output(2,2,"1:HELLOWORLD
Output(3,2,"2:BOXMOVE
Output(4,2,"3:GUESSER
Output(5,2,"4:BASICNOTECE
End
End
Output(B,1,">
Repeat Ans
getKey
End
Ans->K
A+(A<3)(Ans=26)-(A>0)(Ans=24->A
If sum(K={25,34
Then
Output(B,1," "
B-(K=25)(B>2)+(K=34)(B<1+L1(A+1->B
End
End
ClrHome
If K=105
Disp "PG"+toString(A+1)+" OPTION "+toString(B-1
```

Here you can scroll down and up through menu options, and you can scroll left and right to see different pages/menus. Whatever option you pick is uniquely signified by variable A (the page number) and variable B (the option on the page).

The list L1 holds the values for how many options are on each page, this is so you can't scroll further down if there are no more options.

Everything here is very customizable, the only quirk about my code is that if you change the page names at the top, they have to all be the same length and fit on the screen. With this, you must also change the "5A+1" in the Output( commands. So if your page names were " 0 1 2 3 " the calculation would be "3A+1", " P0 P1 P2 P3 " would be "4A+1" and so on.

Check this preview: