Updated to latest changes...
This commit is contained in:
parent
7adae75957
commit
c9afc1f65d
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: amigagui.h,v 1.2 2001-10-03 13:10:37 bdenney Exp $
|
||||
// $Id: amigagui.h,v 1.3 2003-02-21 15:06:16 cisc Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
#include <exec/types.h>
|
||||
@ -13,13 +13,13 @@
|
||||
#include <proto/diskfont.h>
|
||||
#include <proto/gadtools.h>
|
||||
#include <diskfont/diskfont.h>
|
||||
#include <intuition/IntuitionBase.h>
|
||||
#include <intuition/intuitionbase.h>
|
||||
#include <intuition/pointerclass.h>
|
||||
#include <devices/input.h>
|
||||
#include <devices/inputevent.h>
|
||||
#include <graphics/gfxbase.h>
|
||||
#include <graphics/videocontrol.h>
|
||||
#include <cybergraphics/cybergraphics.h>
|
||||
#include <cybergraphx/cybergraphics.h>
|
||||
#include <libraries/gadtools.h>
|
||||
#define FULL(x) (x*0x01010101)
|
||||
|
||||
@ -60,8 +60,11 @@ static unsigned bx_bordertop, bx_borderleft, bx_borderright, bx_borderbottom,
|
||||
bx_headerbar_y, mouse_button_state = 0, bx_headernext_left,
|
||||
bx_headernext_right, x_tilesize, y_tilesize, bx_mouseX, bx_mouseY;
|
||||
static LONG apen = -1, black = -1, white = -1;
|
||||
BOOL bx_xchanged = FALSE;
|
||||
void *vi;
|
||||
|
||||
extern "C" { void dprintf(char *, ...) __attribute__ ((format (printf, 1, 2)));}
|
||||
|
||||
int w = 648, h = 480, d = 8;
|
||||
|
||||
char HandlerName[]="Bochs InputHandler";
|
||||
@ -82,7 +85,7 @@ const unsigned char raw_to_bochs [130] = {
|
||||
BX_KEY_EQUALS,
|
||||
BX_KEY_BACKSLASH,
|
||||
0,
|
||||
BX_KEY_INSERT,
|
||||
BX_KEY_KP_INSERT,
|
||||
BX_KEY_Q,
|
||||
BX_KEY_W,
|
||||
BX_KEY_E,
|
||||
@ -127,7 +130,7 @@ const unsigned char raw_to_bochs [130] = {
|
||||
BX_KEY_PERIOD,
|
||||
BX_KEY_SLASH,
|
||||
0,
|
||||
BX_KEY_KP_INSERT, /*60*/
|
||||
BX_KEY_KP_DELETE, /*60*/
|
||||
BX_KEY_KP_HOME,
|
||||
BX_KEY_KP_UP,
|
||||
BX_KEY_KP_PAGE_UP,
|
||||
@ -138,11 +141,11 @@ const unsigned char raw_to_bochs [130] = {
|
||||
BX_KEY_ENTER,
|
||||
BX_KEY_ESC,
|
||||
BX_KEY_DELETE, /*70*/
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
BX_KEY_INSERT,
|
||||
BX_KEY_PAGE_UP,
|
||||
BX_KEY_PAGE_DOWN,
|
||||
BX_KEY_KP_SUBTRACT,
|
||||
0,
|
||||
BX_KEY_F11,
|
||||
BX_KEY_UP,
|
||||
BX_KEY_DOWN,
|
||||
BX_KEY_RIGHT,
|
||||
@ -157,21 +160,34 @@ const unsigned char raw_to_bochs [130] = {
|
||||
BX_KEY_F8,
|
||||
BX_KEY_F9,
|
||||
BX_KEY_F10,
|
||||
BX_KEY_NUM_LOCK, /*90*/
|
||||
0, /*90*/
|
||||
0,
|
||||
BX_KEY_KP_DIVIDE,
|
||||
BX_KEY_KP_MULTIPLY,
|
||||
BX_KEY_KP_ADD,
|
||||
0,
|
||||
BX_KEY_MENU,
|
||||
BX_KEY_SHIFT_L,
|
||||
BX_KEY_SHIFT_R,
|
||||
BX_KEY_CAPS_LOCK,
|
||||
BX_KEY_CTRL_L,
|
||||
BX_KEY_ALT_L, /*100*/
|
||||
BX_KEY_ALT_R
|
||||
/* missing:
|
||||
BX_KEY_HOME
|
||||
BX_KEY_END
|
||||
BX_KEY_PAGE_UP
|
||||
BX_KEY_PAGE_DOWN */
|
||||
BX_KEY_ALT_R,
|
||||
BX_KEY_WIN_L,
|
||||
BX_KEY_WIN_R,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
BX_KEY_SCRL_LOCK,
|
||||
BX_KEY_PRINT,
|
||||
BX_KEY_NUM_LOCK,
|
||||
BX_KEY_PAUSE, /*110*/
|
||||
BX_KEY_F12,
|
||||
BX_KEY_HOME,
|
||||
BX_KEY_END,
|
||||
BX_KEY_INT_STOP,
|
||||
BX_KEY_INT_FAV,
|
||||
BX_KEY_INT_BACK,
|
||||
BX_KEY_INT_FORWARD,
|
||||
BX_KEY_INT_HOME,
|
||||
BX_KEY_INT_SEARCH
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: amigaos.cc,v 1.11 2002-11-19 05:47:44 bdenney Exp $
|
||||
// $Id: amigaos.cc,v 1.12 2003-02-21 15:06:18 cisc Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2000 MandrakeSoft S.A.
|
||||
@ -35,6 +35,8 @@
|
||||
#include "icon_bochs.h"
|
||||
#include "amigagui.h"
|
||||
|
||||
unsigned long __stack = 100000;
|
||||
|
||||
class bx_amigaos_gui_c : public bx_gui_c {
|
||||
public:
|
||||
bx_amigaos_gui_c (void) {}
|
||||
@ -58,58 +60,58 @@ static ULONG screenreqfunc(struct Hook *hook, struct ScreenModeRequester *smr, U
|
||||
}
|
||||
|
||||
LONG DispatcherFunc(void) {
|
||||
struct Hook *hook = (Hook *)REG_A0;
|
||||
return (*(LONG(*)(struct Hook *,LONG,LONG))hook->h_SubEntry)(hook,REG_A2,REG_A1);
|
||||
struct Hook *hook = (Hook *)REG_A0;
|
||||
return (*(LONG(*)(struct Hook *,LONG,LONG))hook->h_SubEntry)(hook,REG_A2,REG_A1);
|
||||
}
|
||||
|
||||
struct InputEvent *
|
||||
MyInputHandler(void)
|
||||
{
|
||||
struct InputEvent *event = (struct InputEvent *)REG_A0;
|
||||
struct InputEvent *event = (struct InputEvent *)REG_A0;
|
||||
|
||||
if(bx_options.Omouse_enabled->get ())
|
||||
{
|
||||
switch(event->ie_Code)
|
||||
{
|
||||
case IECODE_LBUTTON:
|
||||
{
|
||||
mouse_button_state |= 0x01;
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
|
||||
if(bx_options.Omouse_enabled->get ())
|
||||
{
|
||||
switch(event->ie_Code)
|
||||
{
|
||||
case IECODE_LBUTTON:
|
||||
{
|
||||
mouse_button_state |= 0x01;
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
case (IECODE_LBUTTON | IECODE_UP_PREFIX):
|
||||
{
|
||||
mouse_button_state &= ~0x01;
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
case (IECODE_LBUTTON | IECODE_UP_PREFIX):
|
||||
{
|
||||
mouse_button_state &= ~0x01;
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
case IECODE_RBUTTON:
|
||||
{
|
||||
mouse_button_state |= 0x02;
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
case IECODE_RBUTTON:
|
||||
{
|
||||
mouse_button_state |= 0x02;
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
case (IECODE_RBUTTON | IECODE_UP_PREFIX):
|
||||
{
|
||||
mouse_button_state &= 0x01;
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
case (IECODE_RBUTTON | IECODE_UP_PREFIX):
|
||||
{
|
||||
mouse_button_state &= 0x01;
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (event->ie_Class == IECLASS_RAWMOUSE)
|
||||
{
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
return NULL;
|
||||
}
|
||||
if (event->ie_Class == IECLASS_RAWMOUSE)
|
||||
{
|
||||
DEV_mouse_motion(event->ie_position.ie_xy.ie_x, -event->ie_position.ie_xy.ie_y, mouse_button_state);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (event);
|
||||
}
|
||||
return (event);
|
||||
return (event);
|
||||
}
|
||||
return (event);
|
||||
}
|
||||
|
||||
void
|
||||
@ -122,179 +124,194 @@ setup_inputhandler(void)
|
||||
};
|
||||
|
||||
|
||||
if (inputPort=CreateMsgPort())
|
||||
{
|
||||
if (inputHandler=(struct Interrupt *)AllocMem(sizeof(struct Interrupt),
|
||||
MEMF_PUBLIC|MEMF_CLEAR))
|
||||
{
|
||||
if (inputReqBlk=(struct IOStdReq *)CreateIORequest(inputPort,
|
||||
sizeof(struct IOStdReq)))
|
||||
{
|
||||
if (!(input_error = OpenDevice("input.device",NULL,
|
||||
(struct IORequest *)inputReqBlk,NULL)))
|
||||
{
|
||||
inputHandler->is_Code=(void(*)())&GATEMyInputHandler;
|
||||
inputHandler->is_Data=NULL;
|
||||
inputHandler->is_Node.ln_Pri=100;
|
||||
inputHandler->is_Node.ln_Name=HandlerName;
|
||||
inputReqBlk->io_Data=(APTR)inputHandler;
|
||||
inputReqBlk->io_Command=IND_ADDHANDLER;
|
||||
DoIO((struct IORequest *)inputReqBlk);
|
||||
}
|
||||
else
|
||||
BX_PANIC(("Amiga: Could not open input.device"));
|
||||
}
|
||||
else
|
||||
BX_PANIC(("Amiga: Could not create I/O request"));
|
||||
}
|
||||
else
|
||||
BX_PANIC(("Amiga: Could not allocate interrupt struct memory"));
|
||||
}
|
||||
if (inputPort=CreateMsgPort())
|
||||
{
|
||||
if (inputHandler=(struct Interrupt *)AllocMem(sizeof(struct Interrupt),
|
||||
MEMF_PUBLIC|MEMF_CLEAR))
|
||||
{
|
||||
if (inputReqBlk=(struct IOStdReq *)CreateIORequest(inputPort,
|
||||
sizeof(struct IOStdReq)))
|
||||
{
|
||||
if (!(input_error = OpenDevice("input.device",NULL,
|
||||
(struct IORequest *)inputReqBlk,NULL)))
|
||||
{
|
||||
inputHandler->is_Code=(void(*)())&GATEMyInputHandler;
|
||||
inputHandler->is_Data=NULL;
|
||||
inputHandler->is_Node.ln_Pri=100;
|
||||
inputHandler->is_Node.ln_Name=HandlerName;
|
||||
inputReqBlk->io_Data=(APTR)inputHandler;
|
||||
inputReqBlk->io_Command=IND_ADDHANDLER;
|
||||
DoIO((struct IORequest *)inputReqBlk);
|
||||
}
|
||||
else
|
||||
BX_PANIC(("Amiga: Could not open input.device"));
|
||||
}
|
||||
else
|
||||
BX_PANIC(("Amiga: Could not create I/O request"));
|
||||
}
|
||||
else
|
||||
printf(("Amiga: Could not create message port"));
|
||||
BX_PANIC(("Amiga: Could not allocate interrupt struct memory"));
|
||||
}
|
||||
else
|
||||
printf(("Amiga: Could not create message port"));
|
||||
}
|
||||
|
||||
bx_bool
|
||||
open_screen(void)
|
||||
{
|
||||
|
||||
int id = INVALID_ID;
|
||||
ULONG id = INVALID_ID;
|
||||
|
||||
char *scrmode;
|
||||
struct DrawInfo *screen_drawinfo = NULL;
|
||||
char *scrmode;
|
||||
struct DrawInfo *screen_drawinfo = NULL;
|
||||
|
||||
struct ScreenModeRequester *smr;
|
||||
|
||||
static struct EmulLibEntry GATEDispatcherFunc=
|
||||
struct ScreenModeRequester *smr;
|
||||
|
||||
static struct EmulLibEntry GATEDispatcherFunc=
|
||||
{
|
||||
TRAP_LIB, 0, (void (*)(void))DispatcherFunc
|
||||
};
|
||||
|
||||
struct Hook screenreqhook = { 0, 0, (ULONG(*)())&GATEDispatcherFunc, (ULONG(*)())screenreqfunc, 0 };
|
||||
struct Hook screenreqhook = { 0, 0, (ULONG(*)())&GATEDispatcherFunc, (ULONG(*)())screenreqfunc, 0 };
|
||||
|
||||
|
||||
if(bx_options.Ofullscreen->get ())
|
||||
{
|
||||
if (smr = (ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,
|
||||
ASLSM_DoWidth, TRUE,
|
||||
ASLSM_DoHeight, TRUE,
|
||||
ASLSM_MinDepth, 8,
|
||||
ASLSM_MaxDepth, 32,
|
||||
ASLSM_PropertyFlags, DIPF_IS_WB,
|
||||
ASLSM_PropertyMask, DIPF_IS_WB,
|
||||
ASLSM_FilterFunc, (ULONG) &screenreqhook,
|
||||
TAG_DONE))
|
||||
if (AslRequest(smr, NULL))
|
||||
{
|
||||
id = smr->sm_DisplayID;
|
||||
FreeAslRequest(smr);
|
||||
}
|
||||
else
|
||||
BX_PANIC(("Amiga: Can't start without a screen"));
|
||||
if(bx_options.Ofullscreen->get ())
|
||||
{
|
||||
if((scrmode = bx_options.Oscreenmode->getptr ()))
|
||||
{
|
||||
id = strtoul(scrmode, NULL, 0);
|
||||
if (!IsCyberModeID(id)) id = INVALID_ID;
|
||||
}
|
||||
|
||||
if (id == INVALID_ID)
|
||||
{
|
||||
if (smr = (ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,
|
||||
ASLSM_DoWidth, TRUE,
|
||||
ASLSM_DoHeight, TRUE,
|
||||
ASLSM_MinDepth, 8,
|
||||
ASLSM_MaxDepth, 32,
|
||||
ASLSM_PropertyFlags, DIPF_IS_WB,
|
||||
ASLSM_PropertyMask, DIPF_IS_WB,
|
||||
ASLSM_FilterFunc, (ULONG) &screenreqhook,
|
||||
TAG_DONE))
|
||||
{
|
||||
if (AslRequest(smr, NULL))
|
||||
{
|
||||
id = smr->sm_DisplayID;
|
||||
FreeAslRequest(smr);
|
||||
}
|
||||
else
|
||||
{
|
||||
FreeAslRequest(smr);
|
||||
BX_PANIC(("Amiga: Can't start without a screen"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h = GetCyberIDAttr(CYBRIDATTR_HEIGHT, id);
|
||||
w = GetCyberIDAttr(CYBRIDATTR_WIDTH, id);
|
||||
d = GetCyberIDAttr(CYBRIDATTR_DEPTH, id);
|
||||
w = GetCyberIDAttr(CYBRIDATTR_WIDTH, id);
|
||||
d = GetCyberIDAttr(CYBRIDATTR_DEPTH, id);
|
||||
|
||||
//sprintf(scrmode, "%d", id);
|
||||
//setenv("env:bochs/screenmode", scrmode, 1);
|
||||
|
||||
//sprintf(scrmode, "%d", id);
|
||||
//setenv("env:bochs/screenmode", scrmode, 1);
|
||||
|
||||
|
||||
screen = OpenScreenTags(NULL,
|
||||
SA_Width, w,
|
||||
SA_Height, h,
|
||||
SA_Depth, d,
|
||||
SA_DisplayID, id,
|
||||
SA_ShowTitle, FALSE,
|
||||
SA_Type, PUBLICSCREEN,
|
||||
SA_SharePens, TRUE,
|
||||
TAG_DONE);
|
||||
screen = OpenScreenTags(NULL,
|
||||
SA_Width, w,
|
||||
SA_Height, h,
|
||||
SA_Depth, d,
|
||||
SA_DisplayID, id,
|
||||
SA_ShowTitle, FALSE,
|
||||
SA_Type, PUBLICSCREEN,
|
||||
SA_SharePens, TRUE,
|
||||
TAG_DONE);
|
||||
|
||||
if(!screen)
|
||||
BX_PANIC(("Amiga: Couldn't open screen"));
|
||||
if(!screen)
|
||||
BX_PANIC(("Amiga: Couldn't open screen"));
|
||||
|
||||
window = OpenWindowTags(NULL,
|
||||
WA_CustomScreen,(int)screen,
|
||||
WA_Width,w,
|
||||
WA_Height,h,
|
||||
WA_IDCMP, IDCMP_RAWKEY | IDCMP_GADGETUP,
|
||||
WA_ReportMouse, TRUE,
|
||||
WA_RMBTrap, TRUE,
|
||||
WA_Backdrop,TRUE,
|
||||
WA_Borderless,TRUE,
|
||||
WA_Activate,TRUE,
|
||||
TAG_DONE);
|
||||
}
|
||||
window = OpenWindowTags(NULL,
|
||||
WA_CustomScreen,(int)screen,
|
||||
WA_Width,w,
|
||||
WA_Height,h,
|
||||
WA_IDCMP, IDCMP_RAWKEY | IDCMP_GADGETUP,
|
||||
WA_ReportMouse, TRUE,
|
||||
WA_RMBTrap, TRUE,
|
||||
WA_Backdrop,TRUE,
|
||||
WA_Borderless,TRUE,
|
||||
WA_Activate,TRUE,
|
||||
TAG_DONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
pub_screen = LockPubScreen(NULL);
|
||||
if (pub_screen != NULL )
|
||||
{
|
||||
screen_drawinfo = GetScreenDrawInfo(pub_screen);
|
||||
if ( screen_drawinfo != NULL)
|
||||
{
|
||||
id = GetVPModeID(&pub_screen->ViewPort);
|
||||
d = GetCyberIDAttr(CYBRIDATTR_DEPTH, id);
|
||||
}
|
||||
else
|
||||
BX_PANIC(("Amiga: Couldn't get ScreenDrawInfo"));
|
||||
{
|
||||
pub_screen = LockPubScreen(NULL);
|
||||
if (pub_screen != NULL )
|
||||
{
|
||||
screen_drawinfo = GetScreenDrawInfo(pub_screen);
|
||||
if ( screen_drawinfo != NULL)
|
||||
{
|
||||
id = GetVPModeID(&pub_screen->ViewPort);
|
||||
d = GetCyberIDAttr(CYBRIDATTR_DEPTH, id);
|
||||
} else {
|
||||
UnlockPubScreen(NULL,pub_screen);
|
||||
BX_PANIC(("Amiga: Couldn't get ScreenDrawInfo"));
|
||||
}
|
||||
|
||||
window = OpenWindowTags(NULL,
|
||||
WA_Width,w,
|
||||
WA_Height,h,
|
||||
WA_IDCMP, IDCMP_RAWKEY | IDCMP_GADGETUP,
|
||||
WA_RMBTrap, TRUE,
|
||||
WA_DepthGadget, TRUE,
|
||||
WA_ReportMouse, TRUE,
|
||||
WA_DragBar, TRUE,
|
||||
WA_Activate,TRUE,
|
||||
TAG_DONE);
|
||||
window = OpenWindowTags(NULL,
|
||||
WA_Width,w,
|
||||
WA_Height,h,
|
||||
WA_IDCMP, IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_CHANGEWINDOW,
|
||||
WA_RMBTrap, TRUE,
|
||||
WA_DepthGadget, TRUE,
|
||||
WA_ReportMouse, TRUE,
|
||||
WA_DragBar, TRUE,
|
||||
WA_Activate,TRUE,
|
||||
TAG_DONE);
|
||||
|
||||
UnlockPubScreen(NULL,pub_screen);
|
||||
UnlockPubScreen(NULL,pub_screen);
|
||||
}
|
||||
else
|
||||
BX_PANIC(("Amiga: Couldn't lock the public screen"));
|
||||
}
|
||||
|
||||
if (!window)
|
||||
bx_amigaos_gui_c::exit();
|
||||
if (!window)
|
||||
BX_PANIC(("Amiga: Couldn't open the window"));
|
||||
|
||||
if ((emptypointer = (UWORD *)AllocVec (16, MEMF_CLEAR)) == NULL)
|
||||
BX_PANIC(("Amiga: Couldn't allocate memory"));
|
||||
if ((emptypointer = (UWORD *)AllocVec (16, MEMF_CLEAR)) == NULL)
|
||||
BX_PANIC(("Amiga: Couldn't allocate memory"));
|
||||
|
||||
vgafont = OpenDiskFont(&vgata);
|
||||
vgafont = OpenDiskFont(&vgata);
|
||||
|
||||
if (bx_options.Omouse_enabled->get ())
|
||||
if (bx_options.Omouse_enabled->get ())
|
||||
hide_pointer();
|
||||
|
||||
if(!vgafont)
|
||||
BX_PANIC(("Amiga: Couldn't open the vga font"));
|
||||
if(!vgafont)
|
||||
BX_PANIC(("Amiga: Couldn't open the vga font"));
|
||||
|
||||
SetFont(window->RPort, vgafont);
|
||||
SetFont(window->RPort, vgafont);
|
||||
|
||||
if (NULL == (vi = GetVisualInfo(window->WScreen, TAG_END)))
|
||||
BX_PANIC(("Amiga: GetVisualInfo() failed"));
|
||||
if (NULL == (vi = GetVisualInfo(window->WScreen, TAG_END)))
|
||||
BX_PANIC(("Amiga: GetVisualInfo() failed"));
|
||||
|
||||
bx_gadget_handle = CreateContext(&bx_glistptr);
|
||||
bx_gadget_handle = CreateContext(&bx_glistptr);
|
||||
|
||||
bx_bordertop = window->BorderTop;
|
||||
bx_borderleft = window->BorderLeft;
|
||||
bx_borderright = window->BorderRight;
|
||||
bx_borderbottom = window->BorderBottom;
|
||||
bx_headernext_left = bx_borderleft;
|
||||
bx_headernext_right += bx_borderright;
|
||||
bx_bordertop = window->BorderTop;
|
||||
bx_borderleft = window->BorderLeft;
|
||||
bx_borderright = window->BorderRight;
|
||||
bx_borderbottom = window->BorderBottom;
|
||||
bx_headernext_left = bx_borderleft;
|
||||
bx_headernext_right += bx_borderright;
|
||||
|
||||
for (apen = 0; apen < 256; apen++) /*fill the pen map with -1 so we can know which pens to free at exit*/
|
||||
pmap[apen] = -1;
|
||||
for (apen = 0; apen < 256; apen++) /*fill the pen map with -1 so we can know which pens to free at exit*/
|
||||
pmap[apen] = -1;
|
||||
|
||||
white = ObtainBestPen(window->WScreen->ViewPort.ColorMap, 0xffffffff, 0xffffffff, 0xffffffff);
|
||||
black = ObtainBestPen(window->WScreen->ViewPort.ColorMap, 0x00000000, 0x00000000, 0x00000000);
|
||||
|
||||
white = ObtainBestPen(window->WScreen->ViewPort.ColorMap, 0xffffffff, 0xffffffff, 0xffffffff, NULL);
|
||||
black = ObtainBestPen(window->WScreen->ViewPort.ColorMap, 0x00000000, 0x00000000, 0x00000000, NULL);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
bx_amigaos_gui_c::specific_init(int argc, char **argv, unsigned tilewidth, unsigned tileheight,
|
||||
unsigned headerbar_y)
|
||||
unsigned headerbar_y)
|
||||
{
|
||||
|
||||
x_tilesize = tilewidth;
|
||||
@ -304,77 +321,90 @@ bx_amigaos_gui_c::specific_init(int argc, char **argv, unsigned tilewidth, unsig
|
||||
|
||||
IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 39);
|
||||
if (IntuitionBase == NULL)
|
||||
BX_PANIC(("Amiga: Failed to open intuition.library v39 or later!"));
|
||||
BX_PANIC(("Amiga: Failed to open intuition.library v39 or later!"));
|
||||
if (IntuitionBase->LibNode.lib_Version == 50 && IntuitionBase->LibNode.lib_Revision < 5)
|
||||
BX_PANIC(("Amiga: intuition.library v50 needs to be revision 5 or higher!"));
|
||||
|
||||
|
||||
GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 39);
|
||||
if (GfxBase == NULL)
|
||||
BX_PANIC(("Amiga: Failed to open graphics.library v39 or later!"));
|
||||
BX_PANIC(("Amiga: Failed to open graphics.library v39 or later!"));
|
||||
|
||||
GadToolsBase = OpenLibrary("gadtools.library", 37);
|
||||
if (GadToolsBase == NULL)
|
||||
BX_PANIC(("Amiga: Failed to open gadtools.library v37 or later!"));
|
||||
if (GadToolsBase == NULL)
|
||||
BX_PANIC(("Amiga: Failed to open gadtools.library v37 or later!"));
|
||||
if (GadToolsBase->lib_Version == 50 && GadToolsBase->lib_Revision < 3)
|
||||
BX_PANIC(("Amiga: gadtools.library v50 needs to be revision 3 or higher!"));
|
||||
|
||||
CyberGfxBase = OpenLibrary("cybergraphics.library", 40);
|
||||
if (CyberGfxBase == NULL)
|
||||
BX_PANIC(("Amiga: Failed to open cybergraphics.library v40 or later!"));
|
||||
BX_PANIC(("Amiga: Failed to open cybergraphics.library v40 or later!"));
|
||||
|
||||
AslBase = OpenLibrary("asl.library", 38);
|
||||
if (AslBase == NULL)
|
||||
BX_PANIC(("Amiga: Failed to open asl.library v38 or later!"));
|
||||
BX_PANIC(("Amiga: Failed to open asl.library v38 or later!"));
|
||||
|
||||
DiskfontBase = OpenLibrary("diskfont.library", 38);
|
||||
if (DiskfontBase == NULL)
|
||||
BX_PANIC(("Amiga: Failed to open diskfont.library v38 or later!"));
|
||||
|
||||
open_screen();
|
||||
setup_inputhandler();
|
||||
open_screen();
|
||||
setup_inputhandler();
|
||||
/*
|
||||
if (bx_options.private_colormap) {
|
||||
fprintf(stderr, "# WARNING: Amiga: private_colormap option ignored.\n");
|
||||
}*/
|
||||
fprintf(stderr, "# WARNING: Amiga: private_colormap option ignored.\n");
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
bx_amigaos_gui_c::handle_events(void)
|
||||
{
|
||||
void (*func) (void);
|
||||
struct IntuiMessage *imsg = NULL;
|
||||
void (*func) (void);
|
||||
struct IntuiMessage *imsg = NULL;
|
||||
struct Gadget *gad;
|
||||
ULONG imCode,imClass;
|
||||
Bit32u key_event;
|
||||
ULONG imCode,imClass,imQualifier;
|
||||
Bit32u key_event;
|
||||
|
||||
while ((imsg = (struct IntuiMessage *)GetMsg(window->UserPort)))
|
||||
{
|
||||
gad = (struct Gadget *)imsg->IAddress;
|
||||
key_event= 0;
|
||||
while ((imsg = (struct IntuiMessage *)GetMsg(window->UserPort)))
|
||||
{
|
||||
gad = (struct Gadget *)imsg->IAddress;
|
||||
key_event= 0;
|
||||
|
||||
imClass = imsg->Class;
|
||||
imCode = imsg->Code;
|
||||
imClass = imsg->Class;
|
||||
imCode = imsg->Code;
|
||||
imQualifier = imsg->Qualifier;
|
||||
|
||||
ReplyMsg((struct Message *)imsg);
|
||||
ReplyMsg((struct Message *)imsg);
|
||||
|
||||
switch (imClass)
|
||||
{
|
||||
case IDCMP_RAWKEY:
|
||||
if (imsg->Qualifier & IEQUALIFIER_LSHIFT && imsg->Qualifier & IEQUALIFIER_CONTROL && imsg->Qualifier & IEQUALIFIER_LCOMMAND)
|
||||
{
|
||||
toggle_mouse_enable();
|
||||
break;
|
||||
}
|
||||
if(imCode <= 101)
|
||||
key_event = raw_to_bochs[imCode];
|
||||
if(imCode >= 128)
|
||||
key_event = raw_to_bochs[imCode-128] | BX_KEY_RELEASED;
|
||||
if(key_event)
|
||||
DEV_kbd_gen_scancode(key_event);
|
||||
break;
|
||||
switch (imClass)
|
||||
{
|
||||
case IDCMP_RAWKEY:
|
||||
if (imQualifier & IEQUALIFIER_LSHIFT && imQualifier & IEQUALIFIER_CONTROL && imQualifier & IEQUALIFIER_LCOMMAND)
|
||||
{
|
||||
toggle_mouse_enable();
|
||||
break;
|
||||
}
|
||||
if(imCode <= 101)
|
||||
key_event = raw_to_bochs[imCode];
|
||||
if(imCode >= 128)
|
||||
key_event = raw_to_bochs[imCode-128] | BX_KEY_RELEASED;
|
||||
if(key_event)
|
||||
DEV_kbd_gen_scancode(key_event);
|
||||
break;
|
||||
|
||||
case GADGETUP:
|
||||
((void (*)()) bx_header_gadget[gad->GadgetID]->UserData)();
|
||||
break;
|
||||
}
|
||||
case GADGETUP:
|
||||
((void (*)()) bx_header_gadget[gad->GadgetID]->UserData)();
|
||||
break;
|
||||
|
||||
case IDCMP_CHANGEWINDOW:
|
||||
if(bx_xchanged)
|
||||
{
|
||||
bx_amigaos_gui_c::show_headerbar();
|
||||
bx_xchanged = FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -387,22 +417,22 @@ bx_amigaos_gui_c::flush(void)
|
||||
void
|
||||
bx_amigaos_gui_c::clear_screen(void)
|
||||
{
|
||||
if(d > 8 || !bx_options.Ofullscreen->get ())
|
||||
SetAPen(window->RPort, black);
|
||||
else
|
||||
SetAPen(window->RPort, 0); /*should be ok to clear with the first pen in the map*/
|
||||
RectFill(window->RPort, bx_borderleft, bx_bordertop + bx_headerbar_y, window->Width - bx_borderright - 1, window->Height - bx_borderbottom - 1);
|
||||
if(d > 8 || !bx_options.Ofullscreen->get ())
|
||||
SetAPen(window->RPort, black);
|
||||
else
|
||||
SetAPen(window->RPort, 0); /*should be ok to clear with the first pen in the map*/
|
||||
RectFill(window->RPort, bx_borderleft, bx_bordertop + bx_headerbar_y, window->Width - bx_borderright - 1, window->Height - bx_borderbottom - 1);
|
||||
}
|
||||
|
||||
void
|
||||
bx_amigaos_gui_c::text_update(Bit8u *old_text, Bit8u *new_text,
|
||||
unsigned long cursor_x, unsigned long cursor_y,
|
||||
Bit16u cursor_state, unsigned nrows)
|
||||
unsigned long cursor_x, unsigned long cursor_y,
|
||||
Bit16u cursor_state, unsigned nrows)
|
||||
{
|
||||
int i;
|
||||
int cursori;
|
||||
unsigned nchars, ncols;
|
||||
unsigned char achar;
|
||||
char achar;
|
||||
char string[80];
|
||||
int x, y;
|
||||
static int previ;
|
||||
@ -416,36 +446,36 @@ unsigned int fgcolor, bgcolor;
|
||||
// Number of characters on screen, variable number of rows
|
||||
nchars = ncols*nrows;
|
||||
|
||||
|
||||
for (i=0; i<nchars*2; i+=2)
|
||||
{
|
||||
if ( i == cursori || i == previ || new_text[i] != old_text[i] || new_text[i+1] != old_text[i+1])
|
||||
{
|
||||
achar = new_text[i];
|
||||
fgcolor = new_text[i+1] & 0x0F;
|
||||
bgcolor = (new_text[i+1] & 0xF0) >> 4;
|
||||
|
||||
if (i == cursori) /*invert the cursor block*/
|
||||
{
|
||||
SetAPen(window->RPort, pmap[bgcolor]);
|
||||
SetBPen(window->RPort, pmap[fgcolor]);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetAPen(window->RPort, pmap[fgcolor]);
|
||||
SetBPen(window->RPort, pmap[bgcolor]);
|
||||
}
|
||||
fgcolor = new_text[i+1] & 0x0F;
|
||||
bgcolor = (new_text[i+1] & 0xF0) >> 4;
|
||||
|
||||
if (i == cursori) /*invert the cursor block*/
|
||||
{
|
||||
SetAPen(window->RPort, pmap[bgcolor]);
|
||||
SetBPen(window->RPort, pmap[fgcolor]);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetAPen(window->RPort, pmap[fgcolor]);
|
||||
SetBPen(window->RPort, pmap[bgcolor]);
|
||||
}
|
||||
|
||||
|
||||
x = ((i/2) % ncols)*window->RPort->TxWidth;
|
||||
y = ((i/2) / ncols)*window->RPort->TxHeight;
|
||||
|
||||
Move(window->RPort, bx_borderleft + x, bx_bordertop + bx_headerbar_y + y + window->RPort->TxBaseline);
|
||||
Text(window->RPort, &achar, 1);
|
||||
}
|
||||
x = ((i/2) % ncols)*window->RPort->TxWidth;
|
||||
y = ((i/2) / ncols)*window->RPort->TxHeight;
|
||||
|
||||
Move(window->RPort, bx_borderleft + x, bx_bordertop + bx_headerbar_y + y + window->RPort->TxBaseline);
|
||||
Text(window->RPort, &achar, 1);
|
||||
}
|
||||
}
|
||||
|
||||
previ = cursori;
|
||||
previ = cursori;
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
@ -466,7 +496,7 @@ bx_amigaos_gui_c::palette_change(unsigned index, unsigned red, unsigned green, u
|
||||
{
|
||||
|
||||
Bit8u *ptr;
|
||||
|
||||
|
||||
ptr = (Bit8u *)(cmap+index);
|
||||
|
||||
ptr++; /*first 8bits are not defined in the XRGB8 entry*/
|
||||
@ -482,8 +512,8 @@ bx_amigaos_gui_c::palette_change(unsigned index, unsigned red, unsigned green, u
|
||||
}
|
||||
else
|
||||
{
|
||||
SetRGB32(&screen->ViewPort, index, red << 24, green << 24, blue << 24);
|
||||
pmap[index] = index;
|
||||
SetRGB32(&screen->ViewPort, index, red << 24, green << 24, blue << 24);
|
||||
pmap[index] = index;
|
||||
}
|
||||
|
||||
//printf("%d, %d: [%d, %d, %d]\n", pmap[index], index, red, green, blue);
|
||||
@ -507,19 +537,37 @@ bx_amigaos_gui_c::graphics_tile_update(Bit8u *tile, unsigned x0, unsigned y0)
|
||||
void
|
||||
bx_amigaos_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight)
|
||||
{
|
||||
if (fheight > 0) {
|
||||
if (fheight != 16) {
|
||||
y = y * 16 / fheight;
|
||||
}
|
||||
}
|
||||
|
||||
if(!bx_options.Ofullscreen->get () && (x != w || y != h))
|
||||
{
|
||||
ChangeWindowBox(window, window->LeftEdge, window->TopEdge, x + bx_borderleft + bx_borderright, y + bx_bordertop + bx_borderbottom + bx_headerbar_y);
|
||||
w = x;
|
||||
h = y;
|
||||
}
|
||||
/* todo: I should also realign the rightaligned gadgets*/
|
||||
int xdiff = w - x;
|
||||
|
||||
if (fheight > 0) {
|
||||
if (fheight != 16) {
|
||||
y = y * 16 / fheight;
|
||||
}
|
||||
}
|
||||
|
||||
if(!bx_options.Ofullscreen->get () && (x != w || y != h))
|
||||
{
|
||||
ChangeWindowBox(window, window->LeftEdge, window->TopEdge, x + bx_borderleft + bx_borderright, y + bx_bordertop + bx_borderbottom + bx_headerbar_y);
|
||||
w = x;
|
||||
h = y;
|
||||
}
|
||||
|
||||
/* Now we need to realign the gadgets and refresh the title bar*/
|
||||
|
||||
if(xdiff != 0)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < bx_headerbar_entries; i++)
|
||||
{
|
||||
if(bx_header_gadget[i]->LeftEdge + bx_header_gadget[i]->Width > bx_headernext_left)
|
||||
bx_header_gadget[i]->LeftEdge -= xdiff;
|
||||
}
|
||||
|
||||
bx_xchanged = TRUE;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -527,34 +575,37 @@ bx_amigaos_gui_c::dimension_update(unsigned x, unsigned y, unsigned fheight)
|
||||
unsigned
|
||||
bx_amigaos_gui_c::create_bitmap(const unsigned char *bmap, unsigned xdim, unsigned ydim)
|
||||
{
|
||||
int i = 0;
|
||||
Bit8u *a;
|
||||
|
||||
if (bx_image_entries >= BX_MAX_PIXMAPS) {
|
||||
BX_PANIC(("amiga: too many pixmaps, increase BX_MAX_PIXMAPS"));
|
||||
}
|
||||
int i = 0;
|
||||
Bit8u *a;
|
||||
|
||||
bx_header_image[bx_headerbar_entries].LeftEdge = 0;
|
||||
bx_header_image[bx_image_entries].TopEdge = 0;
|
||||
bx_header_image[bx_image_entries].Width = xdim;
|
||||
bx_header_image[bx_image_entries].Height = ydim;
|
||||
bx_header_image[bx_image_entries].Depth = 2;
|
||||
bx_header_image[bx_image_entries].ImageData = (UWORD *)bmap;
|
||||
bx_header_image[bx_image_entries].NextImage = NULL;
|
||||
bx_header_image[bx_image_entries].PlanePick = 0x1;
|
||||
if(d > 8 || !bx_options.Ofullscreen->get ())
|
||||
bx_header_image[bx_image_entries].PlaneOnOff = 0x2;
|
||||
if (bx_image_entries >= BX_MAX_PIXMAPS) {
|
||||
BX_PANIC(("amiga: too many pixmaps, increase BX_MAX_PIXMAPS"));
|
||||
}
|
||||
|
||||
/*we need to reverse the bitorder for this to work*/
|
||||
bx_header_image[bx_image_entries].LeftEdge = 0;
|
||||
bx_header_image[bx_image_entries].TopEdge = 0;
|
||||
bx_header_image[bx_image_entries].Width = xdim;
|
||||
bx_header_image[bx_image_entries].Height = ydim;
|
||||
bx_header_image[bx_image_entries].Depth = 2;
|
||||
bx_header_image[bx_image_entries].ImageData = (UWORD *)bmap;
|
||||
bx_header_image[bx_image_entries].NextImage = NULL;
|
||||
bx_header_image[bx_image_entries].PlanePick = 0x1;
|
||||
if(d > 8 || !bx_options.Ofullscreen->get ())
|
||||
bx_header_image[bx_image_entries].PlaneOnOff = 0x2;
|
||||
|
||||
a = (Bit8u *) bx_header_image[bx_image_entries].ImageData;
|
||||
/*we need to reverse the bitorder for this to work*/
|
||||
|
||||
for(i = 0; i <= xdim*ydim/8; i++, a++)
|
||||
{
|
||||
*a = ((*a & 0xf0) >> 4) | ((*a & 0x0f) << 4);
|
||||
a = (Bit8u *) bx_header_image[bx_image_entries].ImageData;
|
||||
|
||||
for(i = 0; i <= xdim*ydim/8; i++, a++)
|
||||
{
|
||||
*a = ((*a & 0xf0) >> 4) | ((*a & 0x0f) << 4);
|
||||
*a = ((*a & 0xcc) >> 2) | ((*a & 0x33) << 2);
|
||||
*a = ((*a & 0xaa) >> 1) | ((*a & 0x55) << 1);
|
||||
}
|
||||
}
|
||||
|
||||
// dprintf("image data (%d), %lx\n", bx_image_entries, bmap);
|
||||
|
||||
bx_image_entries++;
|
||||
return(bx_image_entries - 1); // return index as handle
|
||||
@ -572,27 +623,32 @@ ng.ng_VisualInfo = vi;
|
||||
ng.ng_TextAttr = &vgata;
|
||||
ng.ng_GadgetID = bx_headerbar_entries;
|
||||
ng.ng_GadgetText = (UBYTE *)"";
|
||||
ng.ng_Flags = 0;
|
||||
|
||||
ng.ng_UserData = f;
|
||||
|
||||
if (alignment == BX_GRAVITY_LEFT)
|
||||
{
|
||||
ng.ng_LeftEdge = bx_headernext_left;
|
||||
bx_headernext_left += ng.ng_Width;
|
||||
bx_headernext_left += ng.ng_Width;
|
||||
}
|
||||
else
|
||||
{
|
||||
ng.ng_LeftEdge = window->Width - bx_headernext_right - ng.ng_Width;
|
||||
bx_headernext_right += ng.ng_Width;
|
||||
bx_headernext_right += ng.ng_Width;
|
||||
}
|
||||
|
||||
bx_gadget_handle = bx_header_gadget[bx_headerbar_entries] =
|
||||
CreateGadget(BUTTON_KIND, bx_gadget_handle, &ng,
|
||||
GT_Underscore, '_',
|
||||
TAG_END);
|
||||
GT_Underscore, '_',
|
||||
TAG_END);
|
||||
|
||||
bx_gadget_handle->GadgetType |= GTYP_BOOLGADGET;
|
||||
bx_gadget_handle->Flags |= GFLG_GADGIMAGE | GFLG_GADGHNONE;
|
||||
bx_gadget_handle->GadgetRender = &bx_header_image[bmap_id];
|
||||
bx_gadget_handle->UserData = f;
|
||||
|
||||
|
||||
bx_headerbar_entries++;
|
||||
return(bx_headerbar_entries - 1);
|
||||
}
|
||||
@ -601,14 +657,18 @@ return(bx_headerbar_entries - 1);
|
||||
void
|
||||
bx_amigaos_gui_c::show_headerbar(void)
|
||||
{
|
||||
if(d > 8 || !bx_options.Ofullscreen->get ())
|
||||
SetAPen(window->RPort, white);
|
||||
else
|
||||
SetAPen(window->RPort, 0);
|
||||
RectFill(window->RPort, bx_borderleft, bx_bordertop, window->Width - bx_borderright - 1, bx_headerbar_y + bx_bordertop - 1);
|
||||
RemoveGList(window, bx_glistptr, bx_headerbar_entries);
|
||||
AddGList(window, bx_glistptr, ~0, bx_headerbar_entries + 1, NULL);
|
||||
RefreshGList(bx_glistptr, window, NULL, bx_headerbar_entries + 1);
|
||||
RemoveGList(window, bx_glistptr, bx_headerbar_entries);
|
||||
|
||||
if(d > 8 || !bx_options.Ofullscreen->get ())
|
||||
SetAPen(window->RPort, white);
|
||||
else
|
||||
SetAPen(window->RPort, 0);
|
||||
RectFill(window->RPort, bx_borderleft, bx_bordertop, window->Width - bx_borderright - 1, bx_headerbar_y + bx_bordertop - 1);
|
||||
|
||||
AddGList(window, bx_glistptr, ~0, bx_headerbar_entries, NULL);
|
||||
RefreshGList(bx_glistptr, window, NULL, bx_headerbar_entries + 1);
|
||||
|
||||
GT_RefreshWindow(window,NULL);
|
||||
}
|
||||
|
||||
|
||||
@ -616,7 +676,8 @@ bx_amigaos_gui_c::show_headerbar(void)
|
||||
bx_amigaos_gui_c::replace_bitmap(unsigned hbar_id, unsigned bmap_id)
|
||||
{
|
||||
bx_header_gadget[hbar_id]->GadgetRender = &bx_header_image[bmap_id];
|
||||
RefreshGList(bx_glistptr, window, NULL, bx_headerbar_entries + 1);
|
||||
|
||||
RefreshGList(bx_glistptr, window, NULL, bx_headerbar_entries + 1);
|
||||
}
|
||||
|
||||
void
|
||||
@ -624,22 +685,25 @@ bx_amigaos_gui_c::exit(void)
|
||||
{
|
||||
if(window)
|
||||
{
|
||||
|
||||
RemoveGList(window, bx_glistptr, bx_headerbar_entries);
|
||||
FreeGadgets(bx_glistptr);
|
||||
FreeVec(emptypointer);
|
||||
|
||||
/*Release the pens*/
|
||||
while (apen >= 0)
|
||||
while (apen >= 0)
|
||||
{
|
||||
if (pmap[apen] == black)
|
||||
black = -1;
|
||||
if (pmap[apen] == white)
|
||||
white = -1;
|
||||
ReleasePen(window->WScreen->ViewPort.ColorMap, pmap[apen]);
|
||||
apen--;
|
||||
if (pmap[apen] == black)
|
||||
black = -1;
|
||||
if (pmap[apen] == white)
|
||||
white = -1;
|
||||
ReleasePen(window->WScreen->ViewPort.ColorMap, pmap[apen]);
|
||||
apen--;
|
||||
}
|
||||
if (black != -1)
|
||||
ReleasePen(window->WScreen->ViewPort.ColorMap, black);
|
||||
if(white != -1)
|
||||
ReleasePen(window->WScreen->ViewPort.ColorMap, white);
|
||||
CloseWindow(window);
|
||||
if (black != -1)
|
||||
ReleasePen(window->WScreen->ViewPort.ColorMap, black);
|
||||
if(white != -1)
|
||||
ReleasePen(window->WScreen->ViewPort.ColorMap, white);
|
||||
CloseWindow(window);
|
||||
}
|
||||
|
||||
if(screen)
|
||||
@ -647,31 +711,30 @@ bx_amigaos_gui_c::exit(void)
|
||||
if(CyberGfxBase)
|
||||
CloseLibrary(CyberGfxBase);
|
||||
if(GadToolsBase)
|
||||
CloseLibrary(GadToolsBase);
|
||||
CloseLibrary(GadToolsBase);
|
||||
if(GfxBase)
|
||||
CloseLibrary(GfxBase);
|
||||
CloseLibrary((struct Library *)GfxBase);
|
||||
if(IntuitionBase)
|
||||
CloseLibrary(IntuitionBase);
|
||||
CloseLibrary((struct Library *)IntuitionBase);
|
||||
if(DiskfontBase)
|
||||
CloseLibrary(DiskfontBase);
|
||||
if(AslBase)
|
||||
CloseLibrary(AslBase);
|
||||
|
||||
if(!input_error)
|
||||
{
|
||||
printf("closing device\n");
|
||||
inputReqBlk->io_Data=(APTR)inputHandler;
|
||||
{
|
||||
inputReqBlk->io_Data=(APTR)inputHandler;
|
||||
inputReqBlk->io_Command=IND_REMHANDLER;
|
||||
DoIO((struct IORequest *)inputReqBlk);
|
||||
CloseDevice((struct IORequest *)inputReqBlk);
|
||||
}
|
||||
CloseDevice((struct IORequest *)inputReqBlk);
|
||||
}
|
||||
|
||||
if(inputReqBlk)
|
||||
DeleteIORequest((struct IORequest *)inputReqBlk);
|
||||
if(inputReqBlk)
|
||||
DeleteIORequest((struct IORequest *)inputReqBlk);
|
||||
if(inputHandler)
|
||||
FreeMem(inputHandler,sizeof(struct Interrupt));
|
||||
FreeMem(inputHandler,sizeof(struct Interrupt));
|
||||
if(inputPort)
|
||||
DeleteMsgPort(inputPort);
|
||||
DeleteMsgPort(inputPort);
|
||||
}
|
||||
|
||||
void
|
||||
@ -689,13 +752,12 @@ hide_pointer(void)
|
||||
void
|
||||
bx_amigaos_gui_c::mouse_enabled_changed_specific (bx_bool val)
|
||||
{
|
||||
BX_INFO (("mouse_enabled=%d, x11 specific code", val?1:0));
|
||||
if (val) {
|
||||
BX_INFO(("[AmigaOS] Mouse on"));
|
||||
hide_pointer();
|
||||
BX_INFO(("[AmigaOS] Mouse on"));
|
||||
hide_pointer();
|
||||
} else {
|
||||
BX_INFO(("[AmigaOS] Mouse off"));
|
||||
show_pointer();
|
||||
BX_INFO(("[AmigaOS] Mouse off"));
|
||||
show_pointer();
|
||||
}
|
||||
}
|
||||
#endif /* if BX_WITH_AMIGAOS */
|
||||
|
Loading…
Reference in New Issue
Block a user