diff options
Diffstat (limited to 'engines/cge/mouse.cpp')
-rw-r--r-- | engines/cge/mouse.cpp | 300 |
1 files changed, 131 insertions, 169 deletions
diff --git a/engines/cge/mouse.cpp b/engines/cge/mouse.cpp index dff2a0ff8b..d97a7eca7f 100644 --- a/engines/cge/mouse.cpp +++ b/engines/cge/mouse.cpp @@ -25,215 +25,177 @@ * Copyright (c) 1994-1995 Janus B. Wisniewski and L.K. Avalon */ -#include "cge/mouse.h" -#include "cge/text.h" -#include <dos.h> +#include "cge/mouse.h" +#include "cge/text.h" +#include <dos.h> namespace CGE { - EVENT Evt[EVT_MAX]; +EVENT Evt[EVT_MAX]; - uint16 EvtHead = 0, EvtTail = 0; -//-------------------------------------------------------------------------- +uint16 EvtHead = 0, EvtTail = 0; -MOUSE_FUN * MOUSE::OldMouseFun = NULL; -uint16 MOUSE::OldMouseMask = 0; +MOUSE_FUN *MOUSE::OldMouseFun = NULL; +uint16 MOUSE::OldMouseMask = 0; +MOUSE::MOUSE(BITMAP **shpl) : SPRITE(shpl), Busy(NULL), Hold(NULL), hx(0) { + static SEQ ms[] = { + { 0, 0, 0, 0, 1 }, + { 1, 1, 0, 0, 1 } + }; -//-------------------------------------------------------------------------- + SetSeq(ms); + /* TODO Mouse handling + // Mouse reset + _AX = 0x0000; // soft & hard reset (0x0021 soft reset does not work) + __int__(0x33); + Exist = (_AX != 0); + Buttons = _BX; - - - -MOUSE::MOUSE (BITMAP ** shpl) - : SPRITE(shpl), Busy(NULL), Hold(NULL), hx(0) -{ - static SEQ ms[] = { { 0,0,0,0,1 }, { 1,1,0,0,1 } }; - SetSeq(ms); - - /* TODO Mouse handling - // Mouse reset - _AX = 0x0000; // soft & hard reset (0x0021 soft reset does not work) - __int__(0x33); - Exist = (_AX != 0); - Buttons = _BX; - - Goto(SCR_WID/2, SCR_HIG/2); - Z = 127; - Step(1); - */ + Goto(SCR_WID/2, SCR_HIG/2); + Z = 127; + Step(1); + */ + warning("STUB: MOUSE::MOUSE"); } - - -MOUSE::~MOUSE (void) -{ - Off(); +MOUSE::~MOUSE(void) { + Off(); } - - - //void MOUSE::SetFun (void) //{ //} - - - -void MOUSE::On (void) -{ - // TODO Mouse -/* - if (SeqPtr && Exist) - { - _CX = X + X; // horizontal position - _DX = Y; // vertical position - _AX = 0x0004; // Set Mouse Position - __int__(0x33); - // set new mouse fun - _ES = FP_SEG(NewMouseFun); - _DX = FP_OFF(NewMouseFun); - _CX = 0x001F; // 11111b = all events - _AX = 0x0014; // Swap User-Interrupt Vector - __int__(0x33); - // save old mouse fun - OldMouseMask = _CX; - OldMouseFun = (MOUSE_FUN *) MK_FP(_ES, _DX); - - // set X bounds - _DX = (SCR_WID - W) * 2; // right limit - _CX = 0; // left limit - _AX = 0x0007; // note: each pixel = 2 - __int__(0x33); - - // set Y bounds - _DX = SCR_HIG - H; // bottom limit - _CX = 0; // top limit - _AX = 0x0008; - __int__(0x33); - - Step(0); - if (Busy) Busy->Step(0); - } -*/ +void MOUSE::On(void) { + /* + if (SeqPtr && Exist) + { + _CX = X + X; // horizontal position + _DX = Y; // vertical position + _AX = 0x0004; // Set Mouse Position + __int__(0x33); + // set new mouse fun + _ES = FP_SEG(NewMouseFun); + _DX = FP_OFF(NewMouseFun); + _CX = 0x001F; // 11111b = all events + _AX = 0x0014; // Swap User-Interrupt Vector + __int__(0x33); + // save old mouse fun + OldMouseMask = _CX; + OldMouseFun = (MOUSE_FUN *) MK_FP(_ES, _DX); + + // set X bounds + _DX = (SCR_WID - W) * 2; // right limit + _CX = 0; // left limit + _AX = 0x0007; // note: each pixel = 2 + __int__(0x33); + + // set Y bounds + _DX = SCR_HIG - H; // bottom limit + _CX = 0; // top limit + _AX = 0x0008; + __int__(0x33); + + Step(0); + if (Busy) Busy->Step(0); + } + */ + warning("STUB: MOUSE::On"); } - - - - -void MOUSE::Off (void) -{ -//TODO MOuse ASM - /* - if (SeqPtr == 0) - { - if (Exist) +void MOUSE::Off(void) { +/* + if (SeqPtr == 0) + { + if (Exist) { // bring back old mouse fun _ES = FP_SEG(OldMouseFun); _DX = FP_OFF(OldMouseFun); _CX = OldMouseMask; - _AX = 0x0014; // Swap User-Interrupt Vector + _AX = 0x0014; // Swap User-Interrupt Vector __int__(0x33); } - Step(1); - if (Busy) Busy->Step(1); - } + Step(1); + if (Busy) Busy->Step(1); + } */ + warning("STUB: MOUSE::Off"); } - - - - -void MOUSE::ClrEvt (SPRITE * spr) -{ - if (spr) - { - uint16 e; - for (e = EvtTail; e != EvtHead; e = (e + 1) % EVT_MAX) - if (Evt[e].Ptr == spr) Evt[e].Msk = 0; - } - else EvtTail = EvtHead; +void MOUSE::ClrEvt(SPRITE *spr) { + if (spr) { + uint16 e; + for (e = EvtTail; e != EvtHead; e = (e + 1) % EVT_MAX) + if (Evt[e].Ptr == spr) + Evt[e].Msk = 0; + } else + EvtTail = EvtHead; } - - - - -void MOUSE::Tick (void) -{ - Step(); - while (EvtTail != EvtHead) - { - EVENT e = Evt[EvtTail]; - if (e.Msk) - { - if (Hold && e.Ptr != Hold) - { - Hold->Touch(e.Msk | ATTN, e.X - Hold->X, e.Y - Hold->Y); - } - - // update mouse cursor position - if (e.Msk & ROLL) - { - Goto(e.X, e.Y); - } - - // activate current touched SPRITE - if (e.Ptr) - { - if (e.Msk & KEYB) e.Ptr->Touch(e.Msk, e.X, e.Y); - else e.Ptr->Touch(e.Msk, e.X - e.Ptr->X, e.Y - e.Ptr->Y); - } - else if (Sys) Sys->Touch(e.Msk, e.X, e.Y); - - if (e.Msk & L_DN) - { - Hold = e.Ptr; - if (Hold) - { - Hold->Flags.Hold = true; - #ifndef DEBUG - if (Hold->Flags.Drag) - #endif - { - hx = e.X - Hold->X; - hy = e.Y - Hold->Y; - } +void MOUSE::Tick(void) { + Step(); + while (EvtTail != EvtHead) { + EVENT e = Evt[EvtTail]; + if (e.Msk) { + if (Hold && e.Ptr != Hold) + Hold->Touch(e.Msk | ATTN, e.X - Hold->X, e.Y - Hold->Y); + + // update mouse cursor position + if (e.Msk & ROLL) + Goto(e.X, e.Y); + + // activate current touched SPRITE + if (e.Ptr) { + if (e.Msk & KEYB) + e.Ptr->Touch(e.Msk, e.X, e.Y); + else + e.Ptr->Touch(e.Msk, e.X - e.Ptr->X, e.Y - e.Ptr->Y); + } else if (Sys) + Sys->Touch(e.Msk, e.X, e.Y); + + if (e.Msk & L_DN) { + Hold = e.Ptr; + if (Hold) { + Hold->Flags.Hold = true; +#ifndef DEBUG + if (Hold->Flags.Drag) +#endif + { + hx = e.X - Hold->X; + hy = e.Y - Hold->Y; + } + } + } + + if (e.Msk & L_UP) { + if (Hold) { + Hold->Flags.Hold = false; + Hold = NULL; + } + } + ///Touched = e.Ptr; + + // discard Text if button released + if (e.Msk & (L_UP | R_UP)) + KillText(); } - } - - if (e.Msk & L_UP) - { - if (Hold) - { - Hold->Flags.Hold = false; - Hold = NULL; - } - } - ///Touched = e.Ptr; - - // discard Text if button released - if (e.Msk & (L_UP | R_UP)) KillText(); + EvtTail = (EvtTail + 1) % EVT_MAX; } - EvtTail = (EvtTail + 1) % EVT_MAX; - } - if (Hold) - #ifndef DEBUG - if (Hold->Flags.Drag) - #endif - Hold->Goto(X-hx, Y-hy); + if (Hold) +#ifndef DEBUG + if (Hold->Flags.Drag) +#endif + Hold->Goto(X - hx, Y - hy); } } // End of namespace CGE |