**********************************************************************
* Name: STOX
* Stack: ( ob id --> )
* Desc: Store object to specified menu position
* Calls: ORD to reorder variables
* VARS to get variable names
* Keys: ON abort
* VAR first page
* NXT next page
* right next page
* left prev page
* up first page
* down last page
**********************************************************************
ASSEMBLE
CON(1) 8
RPL
xNAME STOX
::
CK2&Dispatch
idnt
::
GetMenu% %IP %2 %= ( varmenu? )
?SKIP :: % 2.01 InitMenu% ; ( * Make sure it is * )
KEYINBUFFER? ?SKIP ( * No help if user knows already * )
::
SysDisplay ( * Display stack in particular * )
BlankDA1
"Press menukey to store" DISPROW1
"Press arrows to move" DISPROW2
;
BEGIN ( * Loop until object stored * )
CODE ( * This sucks - change later * )
GOSBVL =SAVPTR
- GOSBVL =chk_attn
GOC stoxabort ATTN pressed
GOSBVL =POPKEY
GONC stoxkey Got some other key
GOSBVL =clrbusy
SHUTDN
GOSBVL =showbusy
GOTO -
stoxabort GOVLNG =GPPushFLoop
stoxkey R0=C
GOVLNG =Push#TLoop
ENDCODE
NOTcase :: RDROP ; ( --> ob id )
DUP SEVEN #< case ( * If menukey * )
:: ( * Then store object * )
RDROP
UNROT ?STO_HERE
MenuRow@ #+ #1-
DUP#1= caseDROP ( * Already right position * )
xVARS TWO ROT SUBCOMP xORD ( * Reorder to later position * )
ClrDAsOK
;
:: ( * Handle movement keys * )
TWELVE #=casedrop
:: MenuRow@ #6+ MenuRow! ;
EIGHTEEN #=casedrop
:: MenuRow@ #6+ MenuRow! ;
SIXTEEN #=casedrop
:: MenuRow@ #6- MenuRow! ;
TEN #=casedrop
:: ONE MenuRow! ;
ELEVEN #=casedrop
:: ONE MenuRow! ;
SEVENTEEN #=casedrop
:: # FFFFB MenuRow! ;
DROP DEADKEY
;
SetThisRow DispMenu.1 ( * New menu line by default * )
AGAIN
;
;
**********************************************************************