( KEYPAD ROUTINES )
HEX

B00A CONSTANT KEYPAD

( true if a keypad key is pressed
: KP-?TERMINAL ( -- flag )   B000 C@ 1 AND ;

( wait for keypad key to be released
: KP-RELEASE ( -- )   BEGIN KP-?TERMINAL 0= UNTIL ;

( wait for a keypad key
: KP-KEY ( -- button )
  BEGIN KP-?TERMINAL UNTIL  KEYPAD C@  2/ 2/ 2/ ;

CREATE ASCIIFY  ( a table for keypad translation)
   31 C, 34 C, 37 C, 45 C,      (   1    4    7  Edit )
   32 C, 35 C, 38 C, 30 C,      (   2    5    8    0  )
   33 C, 36 C, 39 C, 0D C,      (   3    6    9  entr )
   50 C, 55 C, 44 C, 54 C,      ( Prog Up   Down Trav )
   4D C, 48 C, 08 C, 53 C,      ( Mode Home Bksp Stop )

( return the ascii version of the keys, wait for key release
: PADKEY ( -- char )
   KP-KEY ASCIIFY + C@  KP-RELEASE ;


( NUMBER INPUT VIA KEYPAD AND DISPLAY

( true if char is not a digit
: NOTDIGIT? ( char -- char flag )
   DUP 30 <  OVER 39 > OR ;

( wait for a single digit. reject any non-digit and continue waiting
( return the value of the digit 0--9
: 1DIGIT ( -- n )
   BEGIN PADKEY NOTDIGIT? WHILE DROP REPEAT DUP DSP-EMIT  30 - ;

( wait for n digits, return the accumulated value
: DIGITS ( n -- n )
   0 SWAP 0 DO 0A * 1DIGIT + LOOP ;

( user input of a number
: GET-NUMBER ( -- n )
   DSP-CLEAR (  0 DSP-AT)  DSP" INPUT? " 5 DIGITS ;

