var mousex var mousey var mousekeyl var mousekeyr var mousekeym var mousec ( display coordinates flag ) create mousebuf 100 alloc var mousebe ( amount of buffer elements ) var mousepointer D> \listF\I01_MCARROW fsDloadnew mousepointer ! : mouseadd ( addr x1 x2 y1 y2 -- ) mousebe @ dup 1+ mousebe ! 14 * mousebuf + ( ... addr ) swap over ! 4 + swap over ! 4 + swap over ! 4 + swap over ! 4 + ! ; : mousedo ( -- ) mouse@ dup 0 bit@ if mousekeyl on else mousekeyl off then dup 1 bit@ if mousekeyr on else mousekeyr off then 2 bit@ if mousekeym on else mousekeym off then mousey @ + 0 swap 1DF bound mousey ! mousex @ + 0 swap 27F bound mousex ! mousepointer @ dynp screen dynp mousex @ mousey @ tvidput mousekeyl @ mousekeyr @ + mousekeym @ + if mousebe @ do i 14 * mousebuf + dup @ swap 4 + @ mousey @ rot bound? if i 14 * mousebuf + 8 + dup @ swap 4 + @ mousex @ rot bound? if i 14 * mousebuf + 10 + @ goto pop drop 0 push then then loop then mousec @ if emitscreen @ screen emitscreen ! at@ 0 0 at! mousex @ . tab. mousey @ . at! emitscreen ! then ;