Metropoli BBS
VIEWER: stox.s MODE: TEXT (ASCII)
**********************************************************************
* 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
  ;
;

**********************************************************************


[ RETURN TO DIRECTORY ]