| TIP: Click on subject to list as thread! | ANSI |
| echo: | |
|---|---|
| to: | |
| from: | |
| date: | |
| subject: | FSM |
DECLARE SUB SerialInput (k$)
REM About: FSM (Finite State Machine) for decoding ansi where xy response
REM Author: The Stark Raving Mad Hat Renegade Programmer El (Bozo) Loco
REM Date: 2003, Juni 07
REM Language: MS Basic
REM Platform: Any
REM Version: Beta
REM Legal stuff: Freeware
REM Note: Port to C
REM Purpose: A perfect waste of time
DECLARE FUNCTION AnsiWhereXY% (x%, y%)
DIM SHARED MxRESPONSE$
MxRESPONSE$ = CHR$(27) + "[11;41R"
REM SIMPLE TEST
result = AnsiWhereXY(x%, y%)
PRINT "----------"
PRINT "Result="; result; ", X="; x%; ", Y"; y%
DEFINT A-Z
FUNCTION AnsiWhereXY% (x%, y%)
DIM value AS INTEGER
DIM state AS INTEGER
DIM timeout AS SINGLE
x% = 0
y% = 0
timeout = TIMER + .8
DO
CALL SerialInput(k$)
IF LEN(k$) THEN
value = ASC(k$)
ELSE
value = 0
END IF
SELECT CASE value
CASE 27
IF state = 0 THEN
state = 1
ELSEIF state THEN
EXIT DO
END IF
CASE 91
IF state = 1 THEN
state = 2
ELSEIF state THEN
EXIT DO
END IF
CASE 48 TO 57 'ASC("0") TO ASC("9")
IF state = 2 THEN
state = 3
y% = VAL(CHR$(value))
ELSEIF state = 3 THEN
'Note: no illegal overflow
IF y% < 1000 THEN y% = (y% * 10) + VAL(CHR$(value))
ELSEIF state = 4 THEN
state = 5
x% = VAL(CHR$(value))
ELSEIF state = 5 THEN
IF x% < 1000 THEN x% = (x% * 10) + VAL(CHR$(value))
ELSEIF state THEN
EXIT DO
END IF
CASE 59 'ASC(";"):
IF state = 3 THEN
state = 4
ELSEIF state THEN
EXIT DO
END IF
CASE 82 'ASC("R")
AnsiWhereXY% = (state = 5)
EXIT DO
CASE ELSE: IF value AND state THEN EXIT DO
END SELECT
LOOP UNTIL TIMER > timeout
END FUNCTION
SUB SerialInput (k$)
'simulated remote connection with transmission delay
STATIC n
n = n + 1
IF n <= LEN(MxRESPONSE$) THEN
k$ = MID$(MxRESPONSE$, n, 1)
t! = TIMER + .2
DO
LOOP UNTIL TIMER > t!
ELSE
k$ = ""
END IF
END SUB
--- Maximus/2 3.01
* Origin: TankBaren, +46-8-4467316 (2:201/209)SEEN-BY: 633/267 270 @PATH: 201/505 106/2000 633/267 |
|
| SOURCE: echomail via fidonet.ozzmosis.com | |
Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.