(include "sci.sh")
(use "Main")
(use "User")
(use "Obj")
(script 933)



(class PseudoMouse of Code
    (properties
        cursorInc 2
        minInc 2
        maxInc 20
        prevDir 0
        joyInc 5
    )

    (method (doit)
        (var temp0, temp1)
        = temp0 (send global24:x)
        = temp1 (send global24:y)
        (switch (prevDir)
            (case 1
                = temp1 (- temp1 cursorInc)
            )
            (case 2
                = temp0 (+ temp0 cursorInc)
                = temp1 (- temp1 cursorInc)
            )
            (case 3
                = temp0 (+ temp0 cursorInc)
            )
            (case 4
                = temp0 (+ temp0 cursorInc)
                = temp1 (+ temp1 cursorInc)
            )
            (case 5
                = temp1 (+ temp1 cursorInc)
            )
            (case 6
                = temp0 (- temp0 cursorInc)
                = temp1 (+ temp1 cursorInc)
            )
            (case 7
                = temp0 (- temp0 cursorInc)
            )
            (case 8
                = temp0 (- temp0 cursorInc)
                = temp1 (- temp1 cursorInc)
            )
        )
        (send global1:setCursor(global19 1 temp0 temp1))
    )


    (method (handleEvent pEvent)
        (if ((User:canInput()) and (& (send pEvent:type) $0040))
            = prevDir 
                (if (not gIconBar or (<> (send ((send gIconBar:curIcon)):message) 0))
(                    = prevDir (send pEvent:message)
)                )(else
                    return 
                )
            = cursorInc 
                (if (& (send pEvent:type) $0004)
                    (if (& (send pEvent:modifiers) $0003)
                        minInc
                    )(else
                        maxInc
                    )
                )(else
                    joyInc
                )
            (if (& (send pEvent:type) $0004)
                (if (prevDir)
                    (self:doit())
                )(else
                    (send pEvent:claimed(0))
                    return 
                )
            )(else
                (if (prevDir)
                    (self:start())
                )(else
                    (self:stop())
                )
            )
            (send pEvent:claimed(1))
            return 
        )
    )


    (method (start thePrevDir)
        (if (paramTotal)
            = prevDir thePrevDir
        )
        (send global98:add(self))
    )


    (method (stop)
        = prevDir 0
        (send global98:delete(self))
    )

)
