Numeric_entry.txt
Warning: if you clip this code into your program, look out for possible html code slipping in.
REM General purpose keypad and LCD operator interface REM SBC2000-074/-062 REM 8/20/98 ss GLOBAL done AS BIT GLOBAL sign AS BIT REM Keypad is mapped "calculator" style (as opposed to "telephone" style) REM Decimal point, enter, minus and backspace are supported in numeric entry REM Up arrow, down arrow and enter are supported in incr/decr mode REM keypad is mapped such that cable exits from lower left corner REM key functions key codes REM +-------------------------+ +---------------------+ REM | 7 8 9 MINUS | | 12 8 4 0 | REM | 4 5 6 UP | | 13 9 5 1 | REM | 1 2 3 DOWN | | 14 10 6 2 | REM | 0 DP BKSP ENTER | | 15 11 7 3 | REM +-------------------------+ +---------------------+ REM ||||| ||||| REM ||||| ||||| REM |||||<-cable |||||<-cable REM 8 ||||| 1 8 ||||| 1 REM Get_integer fills an integer variable from numeric keys. +/-32767 maximum FUNCTION get_integer(pos AS INTEGER) AS INTEGER LOCAL key AS INTEGER done = 0 sign = 0 pos = pos-2 LCD_COMMAND(0x80+pos-3) PRINT " " DO IF get_integer IF ABS(get_integer)>0 AND ABS(get_integer)<10 LCD_COMMAND(0x80+pos) ENDIF IF ABS(get_integer)>9 AND ABS(get_integer)<100 LCD_COMMAND(0x80+pos-1) ENDIF IF ABS(get_integer)>99 AND ABS(get_integer)<1000 LCD_COMMAND(0x80+pos-2) ENDIF IF ABS(get_integer)>999 AND ABS(get_integer)<10000 LCD_COMMAND(0x80+pos-3) ENDIF IF ABS(get_integer)>9999 LCD_COMMAND(0x80+pos-4) ENDIF ELSE LCD_COMMAND(0x80+pos) ENDIF PRINT " ",get_integer DO key=KEYPAD(0) LOOP UNTIL key<>-1 SELECT key CASE 15 REM key "0" get_integer = get_integer*10 CASE 14 REM key "1" get_integer = get_integer*10+1-2*sign CASE 10 get_integer = get_integer*10+2+4*sign CASE 6 get_integer = get_integer*10+3+6*sign CASE 13 get_integer = get_integer*10+4+8*sign CASE 9 get_integer = get_integer*10+5+10*sign CASE 5 get_integer = get_integer*10+6+12*sign CASE 12 get_integer = get_integer*10+7+14*sign CASE 8 get_integer = get_integer*10+8+16*sign CASE 4 get_integer = get_integer*10+9+18*sign CASE 7 REM backspace key get_integer = get_integer / 10 CASE 3 REM enter key done = -1 CASE 0 REM negative sign get_integer = -get_integer sign= NOT sign CASE ELSE REM unmapped keys ENDSELECT DO REM LOOP UNTIL KEYPAD(0) <> key LOOP UNTIL done END GLOBAL xxx AS INTEGER REM Main routine DO xxx = get_integer(10) LCD_COMMAND(0x80+64) PRINT XXX," " LOOP UNTIL 0