PolledInput charQueue

Archives Forums/BlitzMax Bug Reports/PolledInput charQueue

Silver_Knee(Posted 2010) [#1]
You are using an char array (charQueue) with a fix length of 256 bytes. This array is never cleared. What would happen if somebody enters more than 256 chars without using FlushKeys: GetChar wouldn't work.

I would recommend:

Global charGet,charPut,charQueue[256]

->
Global charQueue[0]


&&

    Case EVENT_KEYCHAR
        If charPut-charGet<256
            charQueue[charPut & 255]=ev.data
            charPut:+1
        EndIf

->
    Case EVENT_KEYCHAR
        charQueue=charQueue[..Len(charQueue)]
        charQueue[Len(charQueue)-1]=ev.data


&&

Function GetChar()
	If autoPoll PollSystem
	If charGet=charPut Return 0
	Local n=charQueue[charGet & 255]
	charGet:+1
	Return n
End Function

->
Function GetChar()
    If autoPoll PollSystem
    if Len(charQueue)=0 Return 0
    Local n=charQueue[0]
    charQueue=charQueue[1..]
    Return n
End Function


&&

Function FlushKeys()
    PollSystem
    charGet=0
    charPut=0
    For Local i=0 Until 256
        keyStates[i]=0
        keyHits[i]=0
    Next
End Function

->
Function FlushKeys()
    PollSystem'btw here no "If autoPoll"?
    charQueue=New Int[0]
    For Local i=0 Until 256
        keyStates[i]=0
        keyHits[i]=0
    Next
End Function


Or did I misunderstand something?

Greez

Last edited 2010