Removed AmigaOS code for 1.3 branch.
--- a/BUGS Sun Oct 29 03:39:13 2006 +0000
+++ b/BUGS Sun Oct 29 04:09:17 2006 +0000
@@ -190,15 +190,3 @@
More information on this port is available at:
http://www.kom.e-technik.tu-darmstadt.de/~griff/SDL/
-AmigaOS: -= NOT YET SUPPORTED =-
- The OpenGL support isn't implemented yet.
-
- SDL_WM_GrabInput() is not implemented.
- Does anyone know how to do this? SDL_WM_GrabInput() is designed
- to prevent the user from switching input and mouse focus away from
- the SDL application.
-
- Continuous relative mouse motion is not implemented.
-
- The AmigaOS port was done by Gabriele.Greco@galactica.it
-
--- a/README Sun Oct 29 03:39:13 2006 +0000
+++ b/README Sun Oct 29 04:09:17 2006 +0000
@@ -14,7 +14,7 @@
The current version supports Linux, Windows, Windows CE, BeOS, MacOS,
Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX.
-The code contains support for AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64,
+The code contains support for Dreamcast, Atari, AIX, OSF/Tru64,
RISC OS, SymbianOS, and OS/2, but these are not officially supported.
SDL is written in C, but works with C++ natively, and has bindings to
--- a/README.AmigaOS Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-This is the porting of 1.2.0 version of SDL (the latest stable one)
-to AmigaOS/68k.
-
-All the bugs known of the past version have been corrected. And I've
-added all the new SDL features.
-
-This version of SDL needs Cybergraphx V3 (r69+) or CyberGraphX V4
-and AHI v3+. Probably it works also with P96 or CGXAga, but it's
-untested.
-
-This version is available as linked library for SAS/C and GCC, only 68k this
-time, a powerup (ppcemu compatible) and a morphos version will be ready quite
-soon (i hope).
-
-Implemented:
-
-- 8/16/24/32bit video modes, both fullscreen and windowed.
-- Hardware surfaces.
-- CGX blitting acceleration.
-- CGX colorkey blitting acceleration.
-- AHI audio (8/16 bit, with any audio format), always uses unit 0 for now.
-- Thread support (maybe not 100% compatible with other implementations)
-- Semaphores
-- Window resizing and backdrop windows (NEW)
-- Joystick/Joypad support.
-
-To do:
-
-- CDRom audio playing support
-- OpenGL (A guy was working on it but I've lost his tracks :( )
-
-The SAS/C library is distributed with debug info attached, to strip debug info
-simply add STRIPDEBUG argument to the linker.
-
-NOTE: SDL includes debug output using kprintf, to disable it add to your
-project a function like this:
-
-void kprintf(char *a,...)
-{
-}
-
-Otherwise you can redirect the debug to a console window with sushi, sashimi or
-similar tools (the default output is the internal serial port).
-
-For info, support, bugfix and other feel free to mail me:
-
-Gabriele Greco (gabriele.greco@aruba.it)
-
-You can find also a small SDL Amiga page at:
-http://ggreco.interfree.it/sdl.html
--- a/include/SDL.h Sun Oct 29 03:39:13 2006 +0000
+++ b/include/SDL.h Sun Oct 29 04:09:17 2006 +0000
@@ -38,7 +38,7 @@
The current version supports Linux, Windows, Windows CE, BeOS, MacOS,
Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX.
-The code contains support for AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64,
+The code contains support for Dreamcast, Atari, AIX, OSF/Tru64,
RISC OS, SymbianOS, and OS/2, but these are not officially supported.
SDL is written in C, but works with C++ natively, and has bindings to
--- a/include/SDL_config.h.default Sun Oct 29 03:39:13 2006 +0000
+++ b/include/SDL_config.h.default Sun Oct 29 04:09:17 2006 +0000
@@ -26,9 +26,7 @@
#include "SDL_platform.h"
/* Add any platform that doesn't build using the configure system */
-#if defined(__AMIGA__)
-#include "SDL_config_amiga.h"
-#elif defined(__DREAMCAST__)
+#if defined(__DREAMCAST__)
#include "SDL_config_dreamcast.h"
#elif defined(__MACOSX__)
#include "SDL_config_macosx.h"
--- a/include/SDL_config.h.in Sun Oct 29 03:39:13 2006 +0000
+++ b/include/SDL_config.h.in Sun Oct 29 04:09:17 2006 +0000
@@ -149,7 +149,6 @@
#undef SDL_VIDEO_DISABLED
/* Enable various audio drivers */
-#undef SDL_AUDIO_DRIVER_AHI
#undef SDL_AUDIO_DRIVER_ALSA
#undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC
#undef SDL_AUDIO_DRIVER_ARTS
@@ -195,7 +194,6 @@
/* Enable various input drivers */
#undef SDL_INPUT_TSLIB
-#undef SDL_JOYSTICK_AMIGA
#undef SDL_JOYSTICK_BEOS
#undef SDL_JOYSTICK_DC
#undef SDL_JOYSTICK_DINPUT
@@ -220,7 +218,6 @@
#undef SDL_LOADSO_WIN32
/* Enable various threading systems */
-#undef SDL_THREAD_AMIGA
#undef SDL_THREAD_BEOS
#undef SDL_THREAD_DC
#undef SDL_THREAD_EPOC
@@ -233,7 +230,6 @@
#undef SDL_THREAD_WIN32
/* Enable various timer systems */
-#undef SDL_TIMER_AMIGA
#undef SDL_TIMER_BEOS
#undef SDL_TIMER_DC
#undef SDL_TIMER_DUMMY
@@ -248,7 +244,6 @@
/* Enable various video drivers */
#undef SDL_VIDEO_DRIVER_BWINDOW
#undef SDL_VIDEO_DRIVER_COCOA
-#undef SDL_VIDEO_DRIVER_CYBERGRAPHICS
#undef SDL_VIDEO_DRIVER_DC
#undef SDL_VIDEO_DRIVER_DIRECTFB
#undef SDL_VIDEO_DRIVER_DUMMY
--- a/include/SDL_config_amiga.h Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-
-#ifndef _SDL_config_amiga_h
-#define _SDL_config_amiga_h
-
-#include "SDL_platform.h"
-
-/* This is a set of defines to configure the SDL features */
-
-#define SDL_HAS_64BIT_TYPE 1
-
-/* Useful headers */
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_STDIO_H 1
-#define STDC_HEADERS 1
-#define HAVE_STRING_H 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_SIGNAL_H 1
-
-/* C library functions */
-#define HAVE_MALLOC 1
-#define HAVE_CALLOC 1
-#define HAVE_REALLOC 1
-#define HAVE_FREE 1
-#define HAVE_ALLOCA 1
-#define HAVE_GETENV 1
-#define HAVE_PUTENV 1
-#define HAVE_MEMSET 1
-#define HAVE_MEMCPY 1
-#define HAVE_MEMMOVE 1
-#define HAVE_MEMCMP 1
-
-/* Enable various audio drivers */
-#define SDL_AUDIO_DRIVER_AHI 1
-#define SDL_AUDIO_DRIVER_DISK 1
-#define SDL_AUDIO_DRIVER_DUMMY 1
-
-/* Enable various cdrom drivers */
-#define SDL_CDROM_DUMMY 1
-
-/* Enable various input drivers */
-#define SDL_JOYSTICK_AMIGA 1
-
-/* Enable various shared object loading systems */
-#define SDL_LOADSO_DUMMY 1
-
-/* Enable various threading systems */
-#define SDL_THREAD_AMIGA 1
-
-/* Enable various timer systems */
-#define SDL_TIMER_AMIGA 1
-
-/* Enable various video drivers */
-#define SDL_VIDEO_DRIVER_CYBERGRAPHICS 1
-#define SDL_VIDEO_DRIVER_DUMMY 1
-
-/* Enable OpenGL support */
-#define SDL_VIDEO_OPENGL 1
-
-#endif /* _SDL_config_amiga_h */
--- a/include/SDL_platform.h Sun Oct 29 03:39:13 2006 +0000
+++ b/include/SDL_platform.h Sun Oct 29 04:09:17 2006 +0000
@@ -29,10 +29,6 @@
#undef __AIX__
#define __AIX__ 1
#endif
-#if defined(AMIGA) || defined(__AMIGA) || defined(__amigados__)
-#undef __AMIGA__
-#define __AMIGA__ 1
-#endif
#if defined(__BEOS__)
#undef __BEOS__
#define __BEOS__ 1
--- a/src/joystick/amigaos/SDL_sysjoystick.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,219 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#ifdef SDL_JOYSTICK_AMIGA
-
-/* This is the system specific header for the SDL joystick API */
-
-#include <libraries/lowlevel.h>
-#if defined(__SASC) || defined(STORMC4_WOS)
-#include <proto/exec.h>
-#include <proto/lowlevel.h>
-#include <proto/graphics.h>
-#else
-#include <inline/exec.h>
-#include <inline/lowlevel.h>
-#include <inline/graphics.h>
-#endif
-#include "mydebug.h"
-
-extern struct ExecBase *SysBase;
-extern struct GfxBase *GfxBase;
-
-#include "SDL_joystick.h"
-#include "../SDL_sysjoystick.h"
-#include "../SDL_joystick_c.h"
-
-/* Function to scan the system for joysticks.
- * This function should set SDL_numjoysticks to the number of available
- * joysticks. Joystick 0 should be the system default joystick.
- * It should return 0, or -1 on an unrecoverable fatal error.
- */
-
-
-/* Amiga specific datas */
-struct Library *LowLevelBase = NULL;
-
-ULONG joybut[] = {
- JPF_BUTTON_RED,
- JPF_BUTTON_BLUE,
- JPF_BUTTON_PLAY,
- JPF_BUTTON_YELLOW,
- JPF_BUTTON_GREEN,
- JPF_BUTTON_FORWARD,
- JPF_BUTTON_REVERSE,
-};
-
-struct joystick_hwdata
-{
- ULONG joystate;
-};
-
-int
-SDL_SYS_JoystickInit(void)
-{
- if (!LowLevelBase) {
- if (LowLevelBase = OpenLibrary("lowlevel.library", 37))
- return 2;
- } else
- return 2;
-
- D(bug("%ld joysticks available.\n", SDL_numjoysticks));
-
- return 0;
-}
-
-/* Function to get the device-dependent name of a joystick */
-const char *
-SDL_SYS_JoystickName(int index)
-{
- if (index < 2 && LowLevelBase) {
- switch (index) {
- case 0:
- return "Port 1 Amiga Joystick/Joypad";
- case 1:
- return "Port 2 Amiga Joystick/Joypad";
- }
- }
-
- SDL_SetError("No joystick available with that index");
- return (NULL);
-}
-
-/* Function to open a joystick for use.
- The joystick to open is specified by the index field of the joystick.
- This should fill the nbuttons and naxes fields of the joystick structure.
- It returns 0, or -1 if there is an error.
- */
-
-int
-SDL_SYS_JoystickOpen(SDL_Joystick * joystick)
-{
- ULONG temp, i;
- D(bug("Opening joystick %ld\n", joystick->index));
-
- if (!(joystick->hwdata = SDL_malloc(sizeof(struct joystick_hwdata))))
- return -1;
-
-/* This loop is to check if the controller is a joypad */
-
- for (i = 0; i < 20; i++) {
- temp = ReadJoyPort(joystick->index ^ 1); // fix to invert amiga joyports
- WaitTOF();
- }
-
- if ((temp & JP_TYPE_MASK) == JP_TYPE_GAMECTLR)
- joystick->nbuttons = 7;
- else
- joystick->nbuttons = 3;
-
- joystick->nhats = 0;
- joystick->nballs = 0;
- joystick->naxes = 2;
- joystick->hwdata->joystate = 0L;
-
- return 0;
-}
-
-/* Function to update the state of a joystick - called as a device poll.
- * This function shouldn't update the joystick structure directly,
- * but instead should call SDL_PrivateJoystick*() to deliver events
- * and update joystick device state.
- */
-void
-SDL_SYS_JoystickUpdate(SDL_Joystick * joystick)
-{
- ULONG data;
- int i;
-
- if (joystick->index < 2) {
- data = ReadJoyPort(joystick->index);
-
- if (data & JP_DIRECTION_MASK) {
- if (data & JPF_JOY_DOWN) {
- if (!(joystick->hwdata->joystate & JPF_JOY_DOWN))
- SDL_PrivateJoystickAxis(joystick, 0, 127);
- } else if (data & JPF_JOY_UP) {
- if (!(joystick->hwdata->joystate & JPF_JOY_UP))
- SDL_PrivateJoystickAxis(joystick, 0, -127);
- } else if (joystick->hwdata->
- joystate & (JPF_JOY_UP | JPF_JOY_DOWN))
- SDL_PrivateJoystickAxis(joystick, 0, 0);
-
- if (data & JPF_JOY_LEFT) {
- if (!(joystick->hwdata->joystate & JPF_JOY_LEFT))
- SDL_PrivateJoystickAxis(joystick, 1, -127);
- } else if (data & JPF_JOY_RIGHT) {
- if (!(joystick->hwdata->joystate & JPF_JOY_RIGHT))
- SDL_PrivateJoystickAxis(joystick, 1, 127);
- } else if (joystick->hwdata->
- joystate & (JPF_JOY_LEFT | JPF_JOY_RIGHT))
- SDL_PrivateJoystickAxis(joystick, 1, 0);
- } else if (joystick->hwdata->
- joystate & (JPF_JOY_LEFT | JPF_JOY_RIGHT)) {
- SDL_PrivateJoystickAxis(joystick, 1, 0);
- } else if (joystick->hwdata->joystate & (JPF_JOY_UP | JPF_JOY_DOWN)) {
- SDL_PrivateJoystickAxis(joystick, 0, 0);
- }
-
- for (i = 0; i < joystick->nbuttons; i++) {
- if ((data & joybut[i])) {
- if (i == 1)
- data &= (~(joybut[2]));
-
- if (!(joystick->hwdata->joystate & joybut[i]))
- SDL_PrivateJoystickButton(joystick, i, SDL_PRESSED);
- } else if (joystick->hwdata->joystate & joybut[i])
- SDL_PrivateJoystickButton(joystick, i, SDL_RELEASED);
- }
-
- joystick->hwdata->joystate = data;
- }
-
- return;
-}
-
-/* Function to close a joystick after use */
-void
-SDL_SYS_JoystickClose(SDL_Joystick * joystick)
-{
- if (joystick->hwdata)
- SDL_free(joystick->hwdata);
- return;
-}
-
-/* Function to perform any system-specific joystick related cleanup */
-
-void
-SDL_SYS_JoystickQuit(void)
-{
- if (LowLevelBase) {
- CloseLibrary(LowLevelBase);
- LowLevelBase = NULL;
- SDL_numjoysticks = 0;
- }
- return;
-}
-
-#endif /* SDL_JOYSTICK_AMIGA */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/thread/SDL_thread_c.h Sun Oct 29 03:39:13 2006 +0000
+++ b/src/thread/SDL_thread_c.h Sun Oct 29 04:09:17 2006 +0000
@@ -27,8 +27,6 @@
/* Need the definitions of SYS_ThreadHandle */
#if SDL_THREADS_DISABLED
#include "generic/SDL_systhread_c.h"
-#elif SDL_THREAD_AMIGA
-#include "amigaos/SDL_systhread_c.h"
#elif SDL_THREAD_BEOS
#include "beos/SDL_systhread_c.h"
#elif SDL_THREAD_DC
--- a/src/thread/amigaos/SDL_syssem.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* An implementation of semaphores using mutexes and condition variables */
-
-#include "SDL_thread.h"
-#include "SDL_systhread_c.h"
-
-
-struct SDL_semaphore
-{
- struct SignalSemaphore Sem;
-};
-
-#undef D
-
-#define D(x)
-
-SDL_sem *
-SDL_CreateSemaphore(Uint32 initial_value)
-{
- SDL_sem *sem;
-
- sem = (SDL_sem *) SDL_malloc(sizeof(*sem));
-
- if (!sem) {
- SDL_OutOfMemory();
- return (0);
- }
-
- D(bug("Creating semaphore %lx...\n", sem));
-
- SDL_memset(sem, 0, sizeof(*sem));
-
- InitSemaphore(&sem->Sem);
-
- return (sem);
-}
-
-void
-SDL_DestroySemaphore(SDL_sem * sem)
-{
- D(bug("Destroying semaphore %lx...\n", sem));
-
- if (sem) {
-// Condizioni per liberare i task in attesa?
- SDL_free(sem);
- }
-}
-
-int
-SDL_SemTryWait(SDL_sem * sem)
-{
- if (!sem) {
- SDL_SetError("Passed a NULL semaphore");
- return -1;
- }
-
- D(bug("TryWait semaphore...%lx\n", sem));
-
- ObtainSemaphore(&sem->Sem);
-// ReleaseSemaphore(&sem->Sem);
-
- return 1;
-}
-
-int
-SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout)
-{
- int retval;
-
-
- if (!sem) {
- SDL_SetError("Passed a NULL semaphore");
- return -1;
- }
-
- D(bug("WaitTimeout (%ld) semaphore...%lx\n", timeout, sem));
-
- /* A timeout of 0 is an easy case */
- if (timeout == 0) {
- ObtainSemaphore(&sem->Sem);
- return 1;
- }
- if (!(retval = AttemptSemaphore(&sem->Sem))) {
- SDL_Delay(timeout);
- retval = AttemptSemaphore(&sem->Sem);
- }
-
- if (retval == TRUE) {
-// ReleaseSemaphore(&sem->Sem);
- retval = 1;
- }
-
- return retval;
-}
-
-int
-SDL_SemWait(SDL_sem * sem)
-{
- ObtainSemaphore(&sem->Sem);
- return 0;
-}
-
-Uint32
-SDL_SemValue(SDL_sem * sem)
-{
- Uint32 value;
-
- value = 0;
- if (sem) {
-#ifdef STORMC4_WOS
- value = sem->Sem.ssppc_SS.ss_NestCount;
-#else
- value = sem->Sem.ss_NestCount;
-#endif
- }
- return value;
-}
-
-int
-SDL_SemPost(SDL_sem * sem)
-{
- if (!sem) {
- SDL_SetError("Passed a NULL semaphore");
- return -1;
- }
- D(bug("SemPost semaphore...%lx\n", sem));
-
- ReleaseSemaphore(&sem->Sem);
- return 0;
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/thread/amigaos/SDL_systhread.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,165 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* BeOS thread management routines for SDL */
-
-#include "SDL_mutex.h"
-#include "SDL_thread.h"
-#include "../SDL_thread_c.h"
-#include "../SDL_systhread.h"
-#include "mydebug.h"
-
-typedef struct
-{
- int (*func) (void *);
- void *data;
- SDL_Thread *info;
- struct Task *wait;
-} thread_args;
-
-#ifndef MORPHOS
-
-#if defined(__SASC) && !defined(__PPC__)
-__saveds __asm Uint32
-RunThread(register __a0 char *args)
-#elif defined(__PPC__)
-Uint32
-RunThread(char *args)
-#else
-Uint32 __saveds
-RunThread(char *args __asm("a0"))
-#endif
-{
-#ifdef STORMC4_WOS
- thread_args *data = (thread_args *) args;
-#else
- thread_args *data = (thread_args *) atol(args);
-#endif
-
- struct Task *Father;
-
- D(bug("Received data: %lx\n", data));
- Father = data->wait;
-
- SDL_RunThread(data);
-
- Signal(Father, SIGBREAKF_CTRL_F);
- D(bug("Thread with data %lx ended\n", data));
- return (0);
-}
-
-#else
-
-#include <emul/emulinterface.h>
-
-Uint32
-RunTheThread(void)
-{
- thread_args *data = (thread_args *) atol((char *) REG_A0);
- struct Task *Father;
-
- D(bug("Received data: %lx\n", data));
- Father = data->wait;
-
- SDL_RunThread(data);
-
- Signal(Father, SIGBREAKF_CTRL_F);
- D(bug("Thread with data %lx ended\n", data));
- return (0);
-}
-
-struct EmulLibEntry RunThreadStruct = {
- TRAP_LIB,
- 0,
- (ULONG) RunTheThread
-};
-
-void *RunThread = &RunThreadStruct;
-#endif
-
-
-int
-SDL_SYS_CreateThread(SDL_Thread * thread, void *args)
-{
- /* Create the thread and go! */
- char buffer[20];
-
- D(bug("Sending %lx to the new thread...\n", args));
-
- if (args)
- SDL_snprintf(buffer, SDL_arraysize(buffer), "%ld", args);
-
-#ifdef STORMC4_WOS
- thread->handle = CreateTaskPPCTags(TASKATTR_CODE, RunThread,
- TASKATTR_NAME, "SDL subtask",
- TASKATTR_STACKSIZE, 100000,
- (args ? TASKATTR_R3 : TAG_IGNORE),
- args, TASKATTR_INHERITR2, TRUE,
- TAG_DONE);
-#else
- thread->handle = (struct Task *) CreateNewProcTags(NP_Output, Output(),
- NP_Name,
- (ULONG) "SDL subtask",
- NP_CloseOutput, FALSE,
- NP_StackSize, 20000,
- NP_Entry,
- (ULONG) RunThread,
- args ? NP_Arguments :
- TAG_IGNORE,
- (ULONG) buffer,
- TAG_DONE);
-#endif
-
- if (!thread->handle) {
- SDL_SetError("Not enough resources to create thread");
- return (-1);
- }
-
- return (0);
-}
-
-void
-SDL_SYS_SetupThread(void)
-{
-}
-
-Uint32
-SDL_ThreadID(void)
-{
- return ((Uint32) FindTask(NULL));
-}
-
-void
-SDL_SYS_WaitThread(SDL_Thread * thread)
-{
- SetSignal(0L, SIGBREAKF_CTRL_F | SIGBREAKF_CTRL_C);
- Wait(SIGBREAKF_CTRL_F | SIGBREAKF_CTRL_C);
-}
-
-void
-SDL_SYS_KillThread(SDL_Thread * thread)
-{
- Signal((struct Task *) thread->handle, SIGBREAKF_CTRL_C);
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/thread/amigaos/SDL_systhread_c.h Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include <exec/exec.h>
-#include <dos/dos.h>
-#include <dos/dostags.h>
-#if defined (__SASC) || defined(STORMC4_WOS)
-#include <proto/dos.h>
-#include <proto/exec.h>
-#else
-#include <inline/dos.h>
-#include <inline/exec.h>
-#endif
-
-#include "mydebug.h"
-
-extern struct ExecBase *SysBase;
-extern struct DosLibrary *DOSBase;
-
-#ifdef STORMC4_WOS
-#include <proto/powerpc.h>
-
-/* use powerpc.library functions instead og exec */
-#define SYS_ThreadHandle struct TaskPPC *
-#define Signal SignalPPC
-#define Wait WaitPPC
-#define Task TaskPPC
-#define FindTask FindTaskPPC
-#define SetSignal SetSignalPPC
-
-#define InitSemaphore InitSemaphorePPC
-#define ObtainSemaphore ObtainSemaphorePPC
-#define AttemptSemaphore AttemptSemaphorePPC
-#define ReleaseSemaphore ReleaseSemaphorePPC
-#define SignalSemaphore SignalSemaphorePPC
-
-#else
-
-#define SYS_ThreadHandle struct Task *
-#endif /*STORMC4_WOS */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/thread/amigaos/SDL_thread.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,291 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* System independent thread management routines for SDL */
-
-#include "SDL_mutex.h"
-#include "SDL_thread.h"
-#include "../SDL_thread_c.h"
-#include "../SDL_systhread.h"
-
-#define ARRAY_CHUNKSIZE 32
-/* The array of threads currently active in the application
- (except the main thread)
- The manipulation of an array here is safer than using a linked list.
-*/
-static int SDL_maxthreads = 0;
-static int SDL_numthreads = 0;
-static SDL_Thread **SDL_Threads = NULL;
-static struct SignalSemaphore thread_lock;
-int thread_lock_created = 0;
-
-int
-SDL_ThreadsInit(void)
-{
- InitSemaphore(&thread_lock);
- thread_lock_created = 1;
- return 0;
-}
-
-/* This should never be called...
- If this is called by SDL_Quit(), we don't know whether or not we should
- clean up threads here. If any threads are still running after this call,
- they will no longer have access to any per-thread data.
- */
-void
-SDL_ThreadsQuit()
-{
- thread_lock_created = 0;
-}
-
-/* Routines for manipulating the thread list */
-static void
-SDL_AddThread(SDL_Thread * thread)
-{
- SDL_Thread **threads;
-
- /* WARNING:
- If the very first threads are created simultaneously, then
- there could be a race condition causing memory corruption.
- In practice, this isn't a problem because by definition there
- is only one thread running the first time this is called.
- */
- if (!thread_lock_created) {
- if (SDL_ThreadsInit() < 0) {
- return;
- }
- }
- ObtainSemaphore(&thread_lock);
-
- /* Expand the list of threads, if necessary */
-#ifdef DEBUG_THREADS
- printf("Adding thread (%d already - %d max)\n",
- SDL_numthreads, SDL_maxthreads);
-#endif
- if (SDL_numthreads == SDL_maxthreads) {
- threads =
- (SDL_Thread **) SDL_malloc((SDL_maxthreads + ARRAY_CHUNKSIZE) *
- (sizeof *threads));
- if (threads == NULL) {
- SDL_OutOfMemory();
- goto done;
- }
- SDL_memcpy(threads, SDL_Threads, SDL_numthreads * (sizeof *threads));
- SDL_maxthreads += ARRAY_CHUNKSIZE;
- if (SDL_Threads) {
- SDL_free(SDL_Threads);
- }
- SDL_Threads = threads;
- }
- SDL_Threads[SDL_numthreads++] = thread;
- done:
- ReleaseSemaphore(&thread_lock);
-}
-
-static void
-SDL_DelThread(SDL_Thread * thread)
-{
- int i;
-
- if (thread_lock_created) {
- ObtainSemaphore(&thread_lock);
- for (i = 0; i < SDL_numthreads; ++i) {
- if (thread == SDL_Threads[i]) {
- break;
- }
- }
- if (i < SDL_numthreads) {
- --SDL_numthreads;
- while (i < SDL_numthreads) {
- SDL_Threads[i] = SDL_Threads[i + 1];
- ++i;
- }
-#ifdef DEBUG_THREADS
- printf("Deleting thread (%d left - %d max)\n",
- SDL_numthreads, SDL_maxthreads);
-#endif
- }
- ReleaseSemaphore(&thread_lock);
- }
-}
-
-/* The default (non-thread-safe) global error variable */
-static SDL_error SDL_global_error;
-
-/* Routine to get the thread-specific error variable */
-SDL_error *
-SDL_GetErrBuf(void)
-{
- SDL_error *errbuf;
-
- errbuf = &SDL_global_error;
- if (SDL_Threads) {
- int i;
- Uint32 this_thread;
-
- this_thread = SDL_ThreadID();
- ObtainSemaphore(&thread_lock);
- for (i = 0; i < SDL_numthreads; ++i) {
- if (this_thread == SDL_Threads[i]->threadid) {
- errbuf = &SDL_Threads[i]->errbuf;
- break;
- }
- }
- ReleaseSemaphore(&thread_lock);
- }
- return (errbuf);
-}
-
-
-/* Arguments and callback to setup and run the user thread function */
-typedef struct
-{
- int (*func) (void *);
- void *data;
- SDL_Thread *info;
- struct Task *wait;
-} thread_args;
-
-void
-SDL_RunThread(void *data)
-{
- thread_args *args;
- int (*userfunc) (void *);
- void *userdata;
- int *statusloc;
-
- /* Perform any system-dependent setup
- - this function cannot fail, and cannot use SDL_SetError()
- */
- SDL_SYS_SetupThread();
-
- /* Get the thread id */
- args = (thread_args *) data;
- args->info->threadid = SDL_ThreadID();
-
- /* Figure out what function to run */
- userfunc = args->func;
- userdata = args->data;
- statusloc = &args->info->status;
-
- /* Wake up the parent thread */
- Signal(args->wait, SIGBREAKF_CTRL_E);
-
- /* Run the function */
- *statusloc = userfunc(userdata);
-}
-
-SDL_Thread *
-SDL_CreateThread(int (*fn) (void *), void *data)
-{
- SDL_Thread *thread;
- thread_args *args;
- int ret;
-
- /* Allocate memory for the thread info structure */
- thread = (SDL_Thread *) SDL_malloc(sizeof(*thread));
- if (thread == NULL) {
- SDL_OutOfMemory();
- return (NULL);
- }
- SDL_memset(thread, 0, (sizeof *thread));
- thread->status = -1;
-
- /* Set up the arguments for the thread */
- args = (thread_args *) SDL_malloc(sizeof(*args));
- if (args == NULL) {
- SDL_OutOfMemory();
- SDL_free(thread);
- return (NULL);
- }
- args->func = fn;
- args->data = data;
- args->info = thread;
- args->wait = FindTask(NULL);
- if (args->wait == NULL) {
- SDL_free(thread);
- SDL_free(args);
- SDL_OutOfMemory();
- return (NULL);
- }
-
- /* Add the thread to the list of available threads */
- SDL_AddThread(thread);
-
- D(bug("Starting thread...\n"));
-
- /* Create the thread and go! */
- ret = SDL_SYS_CreateThread(thread, args);
- if (ret >= 0) {
- D(bug("Waiting for thread CTRL_E...\n"));
- /* Wait for the thread function to use arguments */
- Wait(SIGBREAKF_CTRL_E);
- D(bug(" Arrived."));
- } else {
- /* Oops, failed. Gotta free everything */
- SDL_DelThread(thread);
- SDL_free(thread);
- thread = NULL;
- }
- SDL_free(args);
-
- /* Everything is running now */
- return (thread);
-}
-
-void
-SDL_WaitThread(SDL_Thread * thread, int *status)
-{
- if (thread) {
- SDL_SYS_WaitThread(thread);
- if (status) {
- *status = thread->status;
- }
- SDL_DelThread(thread);
- SDL_free(thread);
- }
-}
-
-Uint32
-SDL_GetThreadID(SDL_Thread * thread)
-{
- Uint32 id;
-
- if (thread) {
- id = thread->threadid;
- } else {
- id = SDL_ThreadID();
- }
- return (id);
-}
-
-void
-SDL_KillThread(SDL_Thread * thread)
-{
- if (thread) {
- SDL_SYS_KillThread(thread);
- SDL_WaitThread(thread, NULL);
- }
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/timer/amigaos/SDL_systimer.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,268 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#ifdef SDL_TIMER_AMIGA
-
-#include <stdio.h>
-#include <time.h>
-#include <signal.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <exec/types.h>
-#ifdef __SASC
-#include <proto/dos.h>
-#include <clib/graphics_protos.h>
-#include <pragmas/graphics.h>
-#include <clib/exec_protos.h>
-#include <pragmas/exec.h>
-#elif defined(STORMC4_WOS)
-#include <proto/dos.h>
-#include <proto/exec.h>
-#include <proto/graphics.h>
-#else
-#include <inline/dos.h>
-#include <inline/exec.h>
-#include <inline/graphics.h>
-#endif
-#include "mydebug.h"
-
-extern struct DosLibrary *DOSBase;
-extern struct ExecBase *SysBase;
-static struct GfxBase *GfxBase;
-
-#include "SDL_timer.h"
-#include "../SDL_timer_c.h"
-
-/* The first ticks value of the application */
-
-#if !defined(__PPC__) || defined(STORMC4_WOS) || defined(MORPHOS)
-static clock_t start;
-
-void
-SDL_StartTicks(void)
-{
- /* Set first ticks value */
- start = clock();
-}
-
-Uint32
-SDL_GetTicks(void)
-{
- clock_t ticks;
-
- ticks = clock() - start;
-
-#ifdef __SASC
-// CLOCKS_PER_SEC == 1000 !
-
- return (ticks);
-#else
-// CLOCKS_PER_SEC != 1000 !
-
- return ticks * (1000 / CLOCKS_PER_SEC);
-#endif
-}
-
-void
-SDL_Delay(Uint32 ms)
-{
-// Do a busy wait if time is less than 50ms
-
- if (ms < 50) {
- clock_t to_wait = clock();
-
-#ifndef __SASC
- ms *= (CLOCKS_PER_SEC / 1000);
-#endif
- to_wait += ms;
-
- while (clock() < to_wait);
- } else {
- Delay(ms / 20);
- }
-}
-
-#else
-
-ULONG MY_CLOCKS_PER_SEC;
-
-void PPC_TimerInit(void);
-APTR MyTimer;
-
-ULONG start[2];
-
-void
-SDL_StartTicks(void)
-{
- /* Set first ticks value */
- if (!MyTimer)
- PPC_TimerInit();
-
- PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, start);
- start[1] >>= 10;
- start[1] |= ((result[0] & 0x3ff) << 22);
- start[0] >>= 10;
-}
-
-Uint32
-SDL_GetTicks(void)
-{
- ULONG result[2];
- PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, result);
-
-// PPCAsr64p(result,10);
-// Non va, la emulo:
-
- result[1] >>= 10;
- result[1] |= ((result[0] & 0x3ff) << 22);
-
-// Non mi interessa piu' result[0]
-
- return result[1] * 1000 / MY_CLOCKS_PER_SEC;
-}
-
-void
-SDL_Delay(Uint32 ms)
-{
-// Do a busy wait if time is less than 50ms
-
- if (ms < 50) {
- ULONG to_wait[2], actual[2];
- PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, result);
- actual[1] = 0;
- to_wait[1] += ms * 1000 / MY_CLOCKS_PER_SEC;
-
- while (actual[1] < to_wait[1]) {
- PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, actual);
- }
- } else {
- Delay(ms / 50);
- }
-}
-
-void
-PPC_TimerInit(void)
-{
- struct TagItem tags[] = {
- PPCTIMERTAG_CPU, TRUE,
- TAG_DONE, 0
- };
-
-
- if (MyTimer = PPCCreateTimerObject(tags)) {
- ULONG result[2];
-
- PPCGetTimerObject(MyTimer, PPCTIMERTAG_TICKSPERSEC, result);
- D(bug("Timer inizializzato, TPS: %lu - %lu\n", result[0], result[1]));
-// PPCAsr64p(result,10);
- result[1] >>= 10;
- result[1] |= ((result[0] & 0x3ff) << 22);
- result[0] >>= 10;
-
- D(bug("Shiftato TPS: %lu - %lu\n", result[0], result[1]));
- MY_CLOCKS_PER_SEC = result[1];
-
- PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, result);
-
- D(bug("Current ticks: %lu - %lu\n", result[0], result[1]));
- result[1] >>= 10;
- result[1] |= ((result[0] & 0x3ff) << 22);
- result[0] >>= 10;
-// PPCAsr64p(result,10);
- D(bug("Shiftato: %lu - %lu\n", result[0], result[1]));
- } else {
- D(bug("Errore nell'inizializzazione del timer!\n"));
- }
-}
-
-#endif
-
-#include "SDL_thread.h"
-
-/* Data to handle a single periodic alarm */
-static int timer_alive = 0;
-static SDL_Thread *timer_thread = NULL;
-
-static int
-RunTimer(void *unused)
-{
- D(bug("SYSTimer: Entering RunTimer loop..."));
-
- if (GfxBase == NULL)
- GfxBase = (struct GfxBase *) OpenLibrary("graphics.library", 37);
-
- while (timer_alive) {
- if (SDL_timer_running) {
- SDL_ThreadedTimerCheck();
- }
- if (GfxBase)
- WaitTOF(); // Check the timer every fifth of seconds. Was SDL_Delay(1)->BusyWait!
- else
- Delay(1);
- }
- D(bug("SYSTimer: EXITING RunTimer loop..."));
- return (0);
-}
-
-/* This is only called if the event thread is not running */
-int
-SDL_SYS_TimerInit(void)
-{
- D(bug("Creating thread for the timer (NOITIMER)...\n"));
-
- timer_alive = 1;
- timer_thread = SDL_CreateThread(RunTimer, NULL);
- if (timer_thread == NULL) {
- D(bug("Creazione del thread fallita...\n"));
-
- return (-1);
- }
- return (SDL_SetTimerThreaded(1));
-}
-
-void
-SDL_SYS_TimerQuit(void)
-{
- timer_alive = 0;
- if (timer_thread) {
- SDL_WaitThread(timer_thread, NULL);
- timer_thread = NULL;
- }
-}
-
-int
-SDL_SYS_StartTimer(void)
-{
- SDL_SetError("Internal logic error: AmigaOS uses threaded timer");
- return (-1);
-}
-
-void
-SDL_SYS_StopTimer(void)
-{
- return;
-}
-
-#endif /* SDL_TIMER_AMIGA */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/SDL_sysvideo.h Sun Oct 29 03:39:13 2006 +0000
+++ b/src/video/SDL_sysvideo.h Sun Oct 29 04:09:17 2006 +0000
@@ -344,9 +344,6 @@
#if SDL_VIDEO_DRIVER_BWINDOW
extern VideoBootStrap BWINDOW_bootstrap;
#endif
-#if SDL_VIDEO_DRIVER_CYBERGRAPHICS
-extern VideoBootStrap CGX_bootstrap;
-#endif
#if SDL_VIDEO_DRIVER_PHOTON
extern VideoBootStrap ph_bootstrap;
#endif
--- a/src/video/SDL_video.c Sun Oct 29 03:39:13 2006 +0000
+++ b/src/video/SDL_video.c Sun Oct 29 04:09:17 2006 +0000
@@ -82,9 +82,6 @@
#if SDL_VIDEO_DRIVER_BWINDOW
&BWINDOW_bootstrap,
#endif
-#if SDL_VIDEO_DRIVER_CYBERGRAPHICS
- &CGX_bootstrap,
-#endif
#if SDL_VIDEO_DRIVER_PHOTON
&ph_bootstrap,
#endif
--- a/src/video/cybergfx/SDL_amigaevents.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,539 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* Handle the event stream, converting Amiga events into SDL events */
-#include "SDL.h"
-
-#include "SDL_syswm.h"
-#include "../SDL_sysvideo.h"
-#include "../../events/SDL_sysevents.h"
-#include "../../events/SDL_events_c.h"
-#include "SDL_cgxvideo.h"
-#include "SDL_cgxmodes_c.h"
-#include "SDL_cgximage_c.h"
-#include "SDL_cgxwm_c.h"
-#include "SDL_amigaevents_c.h"
-
-
-/* The translation tables from an Amiga keysym to a SDL keysym */
-static SDLKey MISC_keymap[256];
-SDL_keysym *amiga_TranslateKey(int code, SDL_keysym * keysym);
-struct IOStdReq *ConReq = NULL;
-struct MsgPort *ConPort = NULL;
-
-/* Note: The X server buffers and accumulates mouse motion events, so
- the motion event generated by the warp may not appear exactly as we
- expect it to. We work around this (and improve performance) by only
- warping the pointer when it reaches the edge, and then wait for it.
-*/
-#define MOUSE_FUDGE_FACTOR 8
-
-#if 0
-
-static inline int
-amiga_WarpedMotion(_THIS, struct IntuiMessage *m)
-{
- int w, h, i;
- int deltax, deltay;
- int posted;
-
- w = SDL_VideoSurface->w;
- h = SDL_VideoSurface->h;
- deltax = xevent->xmotion.x - mouse_last.x;
- deltay = xevent->xmotion.y - mouse_last.y;
-#ifdef DEBUG_MOTION
- printf("Warped mouse motion: %d,%d\n", deltax, deltay);
-#endif
- mouse_last.x = xevent->xmotion.x;
- mouse_last.y = xevent->xmotion.y;
- posted = SDL_PrivateMouseMotion(0, 1, deltax, deltay);
-
- if ((xevent->xmotion.x < MOUSE_FUDGE_FACTOR) ||
- (xevent->xmotion.x > (w - MOUSE_FUDGE_FACTOR)) ||
- (xevent->xmotion.y < MOUSE_FUDGE_FACTOR) ||
- (xevent->xmotion.y > (h - MOUSE_FUDGE_FACTOR))) {
- /* Get the events that have accumulated */
- while (XCheckTypedEvent(SDL_Display, MotionNotify, xevent)) {
- deltax = xevent->xmotion.x - mouse_last.x;
- deltay = xevent->xmotion.y - mouse_last.y;
-#ifdef DEBUG_MOTION
- printf("Extra mouse motion: %d,%d\n", deltax, deltay);
-#endif
- mouse_last.x = xevent->xmotion.x;
- mouse_last.y = xevent->xmotion.y;
- posted += SDL_PrivateMouseMotion(0, 1, deltax, deltay);
- }
- mouse_last.x = w / 2;
- mouse_last.y = h / 2;
- XWarpPointer(SDL_Display, None, SDL_Window, 0, 0, 0, 0,
- mouse_last.x, mouse_last.y);
- for (i = 0; i < 10; ++i) {
- XMaskEvent(SDL_Display, PointerMotionMask, xevent);
- if ((xevent->xmotion.x >
- (mouse_last.x - MOUSE_FUDGE_FACTOR)) &&
- (xevent->xmotion.x <
- (mouse_last.x + MOUSE_FUDGE_FACTOR)) &&
- (xevent->xmotion.y >
- (mouse_last.y - MOUSE_FUDGE_FACTOR)) &&
- (xevent->xmotion.y < (mouse_last.y + MOUSE_FUDGE_FACTOR))) {
- break;
- }
-#ifdef DEBUG_XEVENTS
- printf("Lost mouse motion: %d,%d\n", xevent->xmotion.x,
- xevent->xmotion.y);
-#endif
- }
-#ifdef DEBUG_XEVENTS
- if (i == 10) {
- printf("Warning: didn't detect mouse warp motion\n");
- }
-#endif
- }
- return (posted);
-}
-
-#endif
-
-static int
-amiga_GetButton(int code)
-{
- switch (code) {
- case IECODE_MBUTTON:
- return SDL_BUTTON_MIDDLE;
- case IECODE_RBUTTON:
- return SDL_BUTTON_RIGHT;
- default:
- return SDL_BUTTON_LEFT;
- }
-}
-
-static int
-amiga_DispatchEvent(_THIS, struct IntuiMessage *msg)
-{
- int class = msg->Class, code = msg->Code;
- int posted;
-
- posted = 0;
- switch (class) {
- /* Gaining mouse coverage? */
- case IDCMP_ACTIVEWINDOW:
- posted = SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS);
- break;
-
- /* Losing mouse coverage? */
- case IDCMP_INACTIVEWINDOW:
- posted = SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS);
- break;
-#if 0
- /* Gaining input focus? */
- case IDCMP_ACTIVEWINDOW:
- posted = SDL_PrivateAppActive(1, SDL_APPINPUTFOCUS);
-
- /* Queue entry into fullscreen mode */
- switch_waiting = 0x01 | SDL_FULLSCREEN;
- switch_time = SDL_GetTicks() + 1500;
- break;
-
- /* Losing input focus? */
- case IDCMP_INACTIVEWINDOW:
- posted = SDL_PrivateAppActive(0, SDL_APPINPUTFOCUS);
-
- /* Queue leaving fullscreen mode */
- switch_waiting = 0x01;
- switch_time = SDL_GetTicks() + 200;
- break;
-#endif
- /* Mouse motion? */
- case IDCMP_MOUSEMOVE:
- if (SDL_VideoSurface) {
- posted = SDL_PrivateMouseMotion(0, 0,
- msg->MouseX -
- SDL_Window->BorderLeft,
- msg->MouseY -
- SDL_Window->BorderTop);
- }
- break;
-
- /* Mouse button press? */
- case IDCMP_MOUSEBUTTONS:
-
- if (!(code & IECODE_UP_PREFIX)) {
- posted = SDL_PrivateMouseButton(SDL_PRESSED,
- amiga_GetButton(code), 0, 0);
- }
- /* Mouse button release? */
- else {
- code &= ~IECODE_UP_PREFIX;
- posted = SDL_PrivateMouseButton(SDL_RELEASED,
- amiga_GetButton(code), 0, 0);
- }
- break;
-
- case IDCMP_RAWKEY:
-
- /* Key press? */
-
- if (!(code & IECODE_UP_PREFIX)) {
- SDL_keysym keysym;
- posted = SDL_PrivateKeyboard(SDL_PRESSED,
- amiga_TranslateKey(code, &keysym));
- } else {
- /* Key release? */
-
- SDL_keysym keysym;
- code &= ~IECODE_UP_PREFIX;
-
- /* Check to see if this is a repeated key */
-/* if ( ! X11_KeyRepeat(SDL_Display, &xevent) ) */
-
- posted = SDL_PrivateKeyboard(SDL_RELEASED,
- amiga_TranslateKey(code, &keysym));
- }
- break;
- /* Have we been iconified? */
-#if 0
- case UnmapNotify:
- {
-#ifdef DEBUG_XEVENTS
- printf("UnmapNotify!\n");
-#endif
- posted =
- SDL_PrivateAppActive(0, SDL_APPACTIVE | SDL_APPINPUTFOCUS);
- }
- break;
-
- /* Have we been restored? */
-
- case MapNotify:
- {
-#ifdef DEBUG_XEVENTS
- printf("MapNotify!\n");
-#endif
-
- posted = SDL_PrivateAppActive(1, SDL_APPACTIVE);
-
- if (SDL_VideoSurface &&
- (SDL_VideoSurface->flags & SDL_FULLSCREEN)) {
- CGX_EnterFullScreen(this);
- } else {
- X11_GrabInputNoLock(this, this->input_grab);
- }
- if (SDL_VideoSurface) {
- CGX_RefreshDisplay(this);
- }
- }
- break;
- case Expose:
- if (SDL_VideoSurface && (xevent.xexpose.count == 0)) {
- CGX_RefreshDisplay(this);
- }
- break;
-#endif
-
- /* Have we been resized? */
- case IDCMP_NEWSIZE:
- SDL_PrivateResize(SDL_Window->Width - SDL_Window->BorderLeft -
- SDL_Window->BorderRight,
- SDL_Window->Height - SDL_Window->BorderTop -
- SDL_Window->BorderBottom);
-
- break;
-
- /* Have we been requested to quit? */
- case IDCMP_CLOSEWINDOW:
- posted = SDL_PrivateQuit();
- break;
-
- /* Do we need to refresh ourselves? */
-
- default:
- {
- /* Only post the event if we're watching for it */
- if (SDL_ProcessEvents[SDL_SYSWMEVENT] == SDL_ENABLE) {
- SDL_SysWMmsg wmmsg;
-
- SDL_VERSION(&wmmsg.version);
-#if 0
- wmmsg.subsystem = SDL_SYSWM_CGX;
- wmmsg.event.xevent = xevent;
-#endif
- posted = SDL_PrivateSysWMEvent(&wmmsg);
- }
- }
- break;
- }
- ReplyMsg((struct Message *) msg);
-
-
- return (posted);
-}
-
-void
-amiga_PumpEvents(_THIS)
-{
- int pending;
- struct IntuiMessage *m;
-
- /* Keep processing pending events */
- pending = 0;
- while (m = (struct IntuiMessage *) GetMsg(SDL_Window->UserPort)) {
- amiga_DispatchEvent(this, m);
- ++pending;
- }
-}
-
-void
-amiga_InitKeymap(void)
-{
- int i;
-
- /* Map the miscellaneous keys */
- for (i = 0; i < SDL_arraysize(MISC_keymap); ++i)
- MISC_keymap[i] = SDLK_UNKNOWN;
-
- /* These X keysyms have 0xFF as the high byte */
- MISC_keymap[65] = SDLK_BACKSPACE;
- MISC_keymap[66] = SDLK_TAB;
- MISC_keymap[70] = SDLK_CLEAR;
- MISC_keymap[70] = SDLK_DELETE;
- MISC_keymap[68] = SDLK_RETURN;
-// MISC_keymap[XK_Pause&0xFF] = SDLK_PAUSE;
- MISC_keymap[69] = SDLK_ESCAPE;
- MISC_keymap[70] = SDLK_DELETE;
-/*
- SDLK_SPACE = 32,
- SDLK_MINUS = 45,
- SDLK_LESS = 60,
- SDLK_COMMA = 44,
- SDLK_PERIOD = 46,
- SDLK_0 = 48,
- SDLK_1 = 49,
- SDLK_2 = 50,
- SDLK_3 = 51,
- SDLK_4 = 52,
- SDLK_5 = 53,
- SDLK_6 = 54,
- SDLK_7 = 55,
- SDLK_8 = 56,
- SDLK_9 = 57,
- SDLK_BACKQUOTE = 96,
- SDLK_BACKSLASH = 92,
- SDLK_a = 97,
- SDLK_b = 98,
- SDLK_c = 99,
- SDLK_d = 100,
- SDLK_e = 101,
- SDLK_f = 102,
- SDLK_g = 103,
- SDLK_h = 104,
- SDLK_i = 105,
- SDLK_j = 106,
- SDLK_k = 107,
- SDLK_l = 108,
- SDLK_m = 109,
- SDLK_n = 110,
- SDLK_o = 111,
- SDLK_p = 112,
- SDLK_q = 113,
- SDLK_r = 114,
- SDLK_s = 115,
- SDLK_t = 116,
- SDLK_u = 117,
- SDLK_v = 118,
- SDLK_w = 119,
- SDLK_x = 120,
- SDLK_y = 121,
- SDLK_z = 122,
-*/
- MISC_keymap[15] = SDLK_KP0; /* Keypad 0-9 */
- MISC_keymap[29] = SDLK_KP1;
- MISC_keymap[30] = SDLK_KP2;
- MISC_keymap[31] = SDLK_KP3;
- MISC_keymap[45] = SDLK_KP4;
- MISC_keymap[46] = SDLK_KP5;
- MISC_keymap[47] = SDLK_KP6;
- MISC_keymap[61] = SDLK_KP7;
- MISC_keymap[62] = SDLK_KP8;
- MISC_keymap[63] = SDLK_KP9;
- MISC_keymap[60] = SDLK_KP_PERIOD;
- MISC_keymap[92] = SDLK_KP_DIVIDE;
- MISC_keymap[93] = SDLK_KP_MULTIPLY;
- MISC_keymap[74] = SDLK_KP_MINUS;
- MISC_keymap[94] = SDLK_KP_PLUS;
- MISC_keymap[67] = SDLK_KP_ENTER;
-// MISC_keymap[XK_KP_Equal&0xFF] = SDLK_KP_EQUALS;
-
- MISC_keymap[76] = SDLK_UP;
- MISC_keymap[77] = SDLK_DOWN;
- MISC_keymap[78] = SDLK_RIGHT;
- MISC_keymap[79] = SDLK_LEFT;
-/*
- MISC_keymap[XK_Insert&0xFF] = SDLK_INSERT;
- MISC_keymap[XK_Home&0xFF] = SDLK_HOME;
- MISC_keymap[XK_End&0xFF] = SDLK_END;
-*/
-// Mappati sulle parentesi del taastierino
- MISC_keymap[90] = SDLK_PAGEUP;
- MISC_keymap[91] = SDLK_PAGEDOWN;
-
- MISC_keymap[80] = SDLK_F1;
- MISC_keymap[81] = SDLK_F2;
- MISC_keymap[82] = SDLK_F3;
- MISC_keymap[83] = SDLK_F4;
- MISC_keymap[84] = SDLK_F5;
- MISC_keymap[85] = SDLK_F6;
- MISC_keymap[86] = SDLK_F7;
- MISC_keymap[87] = SDLK_F8;
- MISC_keymap[88] = SDLK_F9;
- MISC_keymap[89] = SDLK_F10;
-// MISC_keymap[XK_F11&0xFF] = SDLK_F11;
-// MISC_keymap[XK_F12&0xFF] = SDLK_F12;
-// MISC_keymap[XK_F13&0xFF] = SDLK_F13;
-// MISC_keymap[XK_F14&0xFF] = SDLK_F14;
-// MISC_keymap[XK_F15&0xFF] = SDLK_F15;
-
-// MISC_keymap[XK_Num_Lock&0xFF] = SDLK_NUMLOCK;
- MISC_keymap[98] = SDLK_CAPSLOCK;
-// MISC_keymap[XK_Scroll_Lock&0xFF] = SDLK_SCROLLOCK;
- MISC_keymap[97] = SDLK_RSHIFT;
- MISC_keymap[96] = SDLK_LSHIFT;
- MISC_keymap[99] = SDLK_LCTRL;
- MISC_keymap[99] = SDLK_LCTRL;
- MISC_keymap[101] = SDLK_RALT;
- MISC_keymap[100] = SDLK_LALT;
-// MISC_keymap[XK_Meta_R&0xFF] = SDLK_RMETA;
-// MISC_keymap[XK_Meta_L&0xFF] = SDLK_LMETA;
- MISC_keymap[103] = SDLK_LSUPER; /* Left "Windows" */
- MISC_keymap[102] = SDLK_RSUPER; /* Right "Windows */
-
- MISC_keymap[95] = SDLK_HELP;
-}
-
-SDL_keysym *
-amiga_TranslateKey(int code, SDL_keysym * keysym)
-{
-#ifdef STORMC4_WOS
- static struct Library *KeymapBase = NULL; /* Linking failed in WOS version if ConsoleDevice was used */
-#else
- static struct Library *ConsoleDevice = NULL;
-#endif
-
- /* Get the raw keyboard scancode */
- keysym->scancode = code;
- keysym->sym = MISC_keymap[code];
-
-#ifdef DEBUG_KEYS
- fprintf(stderr, "Translating key 0x%.4x (%d)\n", xsym, xkey->keycode);
-#endif
- /* Get the translated SDL virtual keysym */
- if (keysym->sym == SDLK_UNKNOWN) {
-#ifdef STORMC4_WOS
- if (!KeymapBase)
-#else
- if (!ConsoleDevice)
-#endif
- {
-#ifdef STORMC4_WOS
- KeymapBase = OpenLibrary("keymap.library", 0L);
-#else
- if (ConPort = CreateMsgPort()) {
- if (ConReq =
- CreateIORequest(ConPort, sizeof(struct IOStdReq))) {
- if (!OpenDevice
- ("console.device", -1,
- (struct IORequest *) ConReq, 0))
- ConsoleDevice = (struct Library *) ConReq->io_Device;
- else {
- DeleteIORequest(ConReq);
- ConReq = NULL;
- }
- } else {
- DeleteMsgPort(ConPort);
- ConPort = NULL;
- }
- }
-#endif
- }
-#ifdef STORMC4_WOS
- if (KeymapBase)
-#else
- if (ConsoleDevice)
-#endif
- {
- struct InputEvent event;
- long actual;
- char buffer[5];
-
- event.ie_Qualifier = 0;
- event.ie_Class = IECLASS_RAWKEY;
- event.ie_SubClass = 0L;
- event.ie_Code = code;
- event.ie_X = event.ie_Y = 0;
- event.ie_EventAddress = NULL;
- event.ie_NextEvent = NULL;
- event.ie_Prev1DownCode = event.ie_Prev1DownQual =
- event.ie_Prev2DownCode = event.ie_Prev2DownQual = 0;
-
-#ifdef STORMC4_WOS
- if ((actual = MapRawKey(&event, buffer, 5, NULL)) >= 0)
-#else
- if ((actual = RawKeyConvert(&event, buffer, 5, NULL)) >= 0)
-#endif
- {
- if (actual > 1) {
- D(bug("Warning (%ld) character conversion!\n", actual));
- } else if (actual == 1) {
- keysym->sym = *buffer;
- D(bug("Converted rawcode %ld to <%lc>\n", code, *buffer));
-// Bufferizzo x le successive chiamate!
- MISC_keymap[code] = *buffer;
- }
- }
- }
-
- }
- keysym->mod = KMOD_NONE;
-
- /* If UNICODE is on, get the UNICODE value for the key */
- keysym->unicode = 0;
- if (SDL_TranslateUNICODE) {
-#if 0
- static XComposeStatus state;
- /* Until we handle the IM protocol, use XLookupString() */
- unsigned char keybuf[32];
- if (XLookupString(xkey, (char *) keybuf, sizeof(keybuf),
- NULL, &state)) {
- keysym->unicode = keybuf[0];
- }
-#endif
- }
- return (keysym);
-}
-
-void
-amiga_InitOSKeymap(_THIS)
-{
- amiga_InitKeymap();
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_amigaevents_c.h Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_cgxvideo.h"
-
-/* Functions to be exported */
-extern void amiga_InitOSKeymap(_THIS);
-extern void amiga_PumpEvents(_THIS);
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_amigamouse.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_mouse.h"
-#include "../../events/SDL_events_c.h"
-#include "../SDL_cursor_c.h"
-#include "SDL_amigamouse_c.h"
-
-
-/* The implementation dependent data for the window manager cursor */
-
-typedef void *WMCursor;
-
-void
-amiga_FreeWMCursor(_THIS, WMcursor * cursor)
-{
-}
-
-WMcursor *
-amiga_CreateWMCursor(_THIS,
- Uint8 * data, Uint8 * mask, int w, int h, int hot_x,
- int hot_y)
-{
- return (WMcursor *) 1; // Amiga has an Hardware cursor, so it's ok to return something unuseful but true
-}
-
-int
-amiga_ShowWMCursor(_THIS, WMcursor * cursor)
-{
- /* Don't do anything if the display is gone */
- if (SDL_Display == NULL) {
- return (0);
- }
-
- /* Set the Amiga prefs cursor cursor, or blank if cursor is NULL */
-
- if (SDL_Window) {
- SDL_Lock_EventThread();
- if (cursor == NULL) {
- if (SDL_BlankCursor != NULL) {
-// Hide cursor HERE
- SetPointer(SDL_Window, (UWORD *) SDL_BlankCursor, 1, 1, 0, 0);
- }
- } else {
-// Show cursor
- ClearPointer(SDL_Window);
- }
- SDL_Unlock_EventThread();
- }
- return (1);
-}
-
-void
-amiga_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
-{
-/* FIXME: Not implemented */
-}
-
-/* Check to see if we need to enter or leave mouse relative mode */
-void
-amiga_CheckMouseMode(_THIS)
-{
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_amigamouse_c.h Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_cgxvideo.h"
-
-/* Functions to be exported */
-extern void amiga_FreeWMCursor(_THIS, WMcursor * cursor);
-extern WMcursor *amiga_CreateWMCursor(_THIS,
- Uint8 * data, Uint8 * mask, int w,
- int h, int hot_x, int hot_y);
-extern int amiga_ShowWMCursor(_THIS, WMcursor * cursor);
-extern void amiga_WarpWMCursor(_THIS, Uint16 x, Uint16 y);
-extern void amiga_CheckMouseMode(_THIS);
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgxaccel.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,272 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_endian.h"
-#include "SDL_video.h"
-#include "../SDL_sysvideo.h"
-#include "../SDL_blit.h"
-#include "SDL_cgxvideo.h"
-
-static int CGX_HWAccelBlit(SDL_Surface * src, SDL_Rect * srcrect,
- SDL_Surface * dst, SDL_Rect * dstrect);
-
-// These are needed to avoid register troubles with gcc -O2!
-
-#if defined(__SASC) || defined(__PPC__) || defined(MORPHOS)
-#define BMKBRP(a,b,c,d,e,f,g,h,i,j) BltMaskBitMapRastPort(a,b,c,d,e,f,g,h,i,j)
-#define BBRP(a,b,c,d,e,f,g,h,i) BltBitMapRastPort(a,b,c,d,e,f,g,h,i)
-#define BBB(a,b,c,d,e,f,g,h,i,j,k) BltBitMap(a,b,c,d,e,f,g,h,i,j,k)
-#else
-void
-BMKBRP(struct BitMap *a, WORD b, WORD c, struct RastPort *d, WORD e, WORD f,
- WORD g, WORD h, UBYTE i, APTR j)
-{
- BltMaskBitMapRastPort(a, b, c, d, e, f, g, h, i, j);
-}
-
-void
-BBRP(struct BitMap *a, WORD b, WORD c, struct RastPort *d, WORD e, WORD f,
- WORD g, WORD h, UBYTE i)
-{
- BltBitMapRastPort(a, b, c, d, e, f, g, h, i);
-}
-
-void
-BBB(struct BitMap *a, WORD b, WORD c, struct BitMap *d, WORD e, WORD f,
- WORD g, WORD h, UBYTE i, UBYTE j, UWORD * k)
-{
- BltBitMap(a, b, c, d, e, f, g, h, i, j, k);
-}
-#endif
-
-int
-CGX_SetHWColorKey(_THIS, SDL_Surface * surface, Uint32 key)
-{
- if (surface->hwdata) {
- if (surface->hwdata->mask)
- SDL_free(surface->hwdata->mask);
-
- if (surface->hwdata->mask =
- SDL_malloc(RASSIZE(surface->w, surface->h))) {
- Uint32 pitch, ok = 0;
- APTR lock;
-
- SDL_memset(surface->hwdata->mask, 255,
- RASSIZE(surface->w, surface->h));
-
- D(bug
- ("Building colorkey mask: color: %ld, size: %ld x %ld, %ld bytes...Bpp:%ld\n",
- key, surface->w, surface->h, RASSIZE(surface->w,
- surface->h),
- surface->format->BytesPerPixel));
-
- if (lock =
- LockBitMapTags(surface->hwdata->bmap, LBMI_BASEADDRESS,
- (ULONG) & surface->pixels,
- LBMI_BYTESPERROW, (ULONG) & pitch, TAG_DONE)) {
- switch (surface->format->BytesPerPixel) {
- case 1:
- {
- unsigned char k = key;
- register int i, j, t;
- register unsigned char *dest =
- surface->hwdata->mask, *map = surface->pixels;
-
- pitch -= surface->w;
-
- for (i = 0; i < surface->h; i++) {
- for (t = 128, j = 0; j < surface->w; j++) {
- if (*map == k)
- *dest &= ~t;
-
- t >>= 1;
-
- if (t == 0) {
- dest++;
- t = 128;
- }
- map++;
- }
- map += pitch;
- }
- }
- break;
- case 2:
- {
- Uint16 k = key, *mapw;
- register int i, j, t;
- register unsigned char *dest =
- surface->hwdata->mask, *map = surface->pixels;
-
- for (i = surface->h; i; --i) {
- mapw = (Uint16 *) map;
-
- for (t = 128, j = surface->w; j; --j) {
- if (*mapw == k)
- *dest &= ~t;
-
- t >>= 1;
-
- if (t == 0) {
- dest++;
- t = 128;
- }
- mapw++;
- }
- map += pitch;
- }
- }
- break;
- case 4:
- {
- Uint32 *mapl;
- register int i, j, t;
- register unsigned char *dest =
- surface->hwdata->mask, *map = surface->pixels;
-
- for (i = surface->h; i; --i) {
- mapl = (Uint32 *) map;
-
- for (t = 128, j = surface->w; j; --j) {
- if (*mapl == key)
- *dest &= ~t;
-
- t >>= 1;
-
- if (t == 0) {
- dest++;
- t = 128;
- }
- mapl++;
- }
- map += pitch;
- }
-
- }
- break;
- default:
- D(bug("Pixel mode non supported for color key..."));
- SDL_free(surface->hwdata->mask);
- surface->hwdata->mask = NULL;
- ok = -1;
- }
- UnLockBitMap(lock);
- D(bug("...Colorkey built!\n"));
- return ok;
- }
- }
- }
- D(bug("HW colorkey not supported for this depth\n"));
-
- return -1;
-}
-
-int
-CGX_CheckHWBlit(_THIS, SDL_Surface * src, SDL_Surface * dst)
-{
-// Doesn't support yet alpha blitting
-
- if (src->hwdata && !(src->flags & (SDL_SRCALPHA))) {
- D(bug("CheckHW blit... OK!\n"));
-
- if ((src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY) {
- if (CGX_SetHWColorKey(this, src, src->format->colorkey) < 0) {
- src->flags &= ~SDL_HWACCEL;
- return -1;
- }
- }
-
- src->flags |= SDL_HWACCEL;
- src->map->hw_blit = CGX_HWAccelBlit;
- return 1;
- } else
- src->flags &= ~SDL_HWACCEL;
-
- D(bug("CheckHW blit... NO!\n"));
-
- return 0;
-}
-
-static int temprp_init = 0;
-static struct RastPort temprp;
-
-static int
-CGX_HWAccelBlit(SDL_Surface * src, SDL_Rect * srcrect,
- SDL_Surface * dst, SDL_Rect * dstrect)
-{
- struct SDL_VideoDevice *this = src->hwdata->videodata;
-
-// D(bug("Accel blit!\n"));
-
- if (src->flags & SDL_SRCCOLORKEY && src->hwdata->mask) {
- if (dst == SDL_VideoSurface) {
- BMKBRP(src->hwdata->bmap, srcrect->x, srcrect->y,
- SDL_RastPort, dstrect->x + SDL_Window->BorderLeft,
- dstrect->y + SDL_Window->BorderTop, srcrect->w,
- srcrect->h, 0xc0, src->hwdata->mask);
- } else if (dst->hwdata) {
- if (!temprp_init) {
- InitRastPort(&temprp);
- temprp_init = 1;
- }
- temprp.BitMap = (struct BitMap *) dst->hwdata->bmap;
-
- BMKBRP(src->hwdata->bmap, srcrect->x, srcrect->y,
- &temprp, dstrect->x, dstrect->y,
- srcrect->w, srcrect->h, 0xc0, src->hwdata->mask);
-
- }
- } else if (dst == SDL_VideoSurface) {
- BBRP(src->hwdata->bmap, srcrect->x, srcrect->y, SDL_RastPort,
- dstrect->x + SDL_Window->BorderLeft,
- dstrect->y + SDL_Window->BorderTop, srcrect->w, srcrect->h,
- 0xc0);
- } else if (dst->hwdata)
- BBB(src->hwdata->bmap, srcrect->x, srcrect->y, dst->hwdata->bmap,
- dstrect->x, dstrect->y, srcrect->w, srcrect->h, 0xc0, 0xff, NULL);
-
- return 0;
-}
-
-int
-CGX_FillHWRect(_THIS, SDL_Surface * dst, SDL_Rect * dstrect, Uint32 color)
-{
- if (dst == SDL_VideoSurface) {
- FillPixelArray(SDL_RastPort, dstrect->x + SDL_Window->BorderLeft,
- dstrect->y + SDL_Window->BorderTop, dstrect->w,
- dstrect->h, color);
- } else if (dst->hwdata) {
- if (!temprp_init) {
- InitRastPort(&temprp);
- temprp_init = 1;
- }
-
- temprp.BitMap = (struct BitMap *) dst->hwdata->bmap;
-
- FillPixelArray(&temprp, dstrect->x, dstrect->y, dstrect->w,
- dstrect->h, color);
- }
- return 0;
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgxgl.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,227 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* StormMesa implementation of SDL OpenGL support */
-
-#include "SDL_cgxgl_c.h"
-#include "SDL_cgxvideo.h"
-
-#if SDL_VIDEO_OPENGL
-AmigaMesaContext glcont = NULL;
-#endif
-
-/* Init OpenGL */
-int
-CGX_GL_Init(_THIS)
-{
-#if SDL_VIDEO_OPENGL
- int i = 0;
- struct TagItem attributes[14]; /* 14 should be more than enough :) */
- struct Window *win = (struct Window *) SDL_Window;
-
- // default config. Always used...
- attributes[i].ti_Tag = AMA_Window;
- attributes[i++].ti_Data = (unsigned long) win;
- attributes[i].ti_Tag = AMA_Left;
- attributes[i++].ti_Data = 0;
- attributes[i].ti_Tag = AMA_Bottom;
- attributes[i++].ti_Data = 0;
- attributes[i].ti_Tag = AMA_Width;
- attributes[i++].ti_Data = win->Width - win->BorderLeft - win->BorderRight;
- attributes[i].ti_Tag = AMA_Height;
- attributes[i++].ti_Data =
- win->Height - win->BorderBottom - win->BorderTop;
- attributes[i].ti_Tag = AMA_DirectRender;
- attributes[i++].ti_Data = GL_TRUE;
-
- // double buffer ?
- attributes[i].ti_Tag = AMA_DoubleBuf;
- if (this->gl_config.double_buffer) {
- attributes[i++].ti_Data = GL_TRUE;
- } else {
- attributes[i++].ti_Data = GL_FALSE;
- }
- // RGB(A) Mode ?
- attributes[i].ti_Tag = AMA_RGBMode;
- if (this->gl_config.red_size != 0 &&
- this->gl_config.blue_size != 0 && this->gl_config.green_size != 0) {
- attributes[i++].ti_Data = GL_TRUE;
- } else {
- attributes[i++].ti_Data = GL_FALSE;
- }
- // no depth buffer ?
- if (this->gl_config.depth_size == 0) {
- attributes[i].ti_Tag = AMA_NoDepth;
- attributes[i++].ti_Data = GL_TRUE;
- }
- // no stencil buffer ?
- if (this->gl_config.stencil_size == 0) {
- attributes[i].ti_Tag = AMA_NoStencil;
- attributes[i++].ti_Data = GL_TRUE;
- }
- // no accum buffer ?
- if (this->gl_config.accum_red_size != 0 &&
- this->gl_config.accum_blue_size != 0 &&
- this->gl_config.accum_green_size != 0) {
- attributes[i].ti_Tag = AMA_NoAccum;
- attributes[i++].ti_Data = GL_TRUE;
- }
- // done...
- attributes[i].ti_Tag = TAG_DONE;
-
- glcont = AmigaMesaCreateContext(attributes);
- if (glcont == NULL) {
- SDL_SetError("Couldn't create OpenGL context");
- return (-1);
- }
- this->gl_data->gl_active = 1;
- this->gl_config.driver_loaded = 1;
-
- return (0);
-#else
- SDL_SetError("OpenGL support not configured");
- return (-1);
-#endif
-}
-
-/* Quit OpenGL */
-void
-CGX_GL_Quit(_THIS)
-{
-#if SDL_VIDEO_OPENGL
- if (glcont != NULL) {
- AmigaMesaDestroyContext(glcont);
- glcont = NULL;
- this->gl_data->gl_active = 0;
- this->gl_config.driver_loaded = 0;
- }
-#endif
-}
-
-/* Attach context to another window */
-int
-CGX_GL_Update(_THIS)
-{
-#if SDL_VIDEO_OPENGL
- struct TagItem tags[2];
- struct Window *win = (struct Window *) SDL_Window;
- if (glcont == NULL) {
- return -1; //should never happen
- }
- tags[0].ti_Tag = AMA_Window;
- tags[0].ti_Data = (unsigned long) win;
- tags[1].ti_Tag = TAG_DONE;
- AmigaMesaSetRast(glcont, tags);
-
- return 0;
-#else
- SDL_SetError("OpenGL support not configured");
- return -1;
-#endif
-}
-
-#if SDL_VIDEO_OPENGL
-
-/* Make the current context active */
-int
-CGX_GL_MakeCurrent(_THIS)
-{
- if (glcont == NULL)
- return -1;
-
- AmigaMesaMakeCurrent(glcont, glcont->buffer);
- return 0;
-}
-
-void
-CGX_GL_SwapBuffers(_THIS)
-{
- AmigaMesaSwapBuffers(glcont);
-}
-
-int
-CGX_GL_GetAttribute(_THIS, SDL_GLattr attrib, int *value)
-{
- GLenum mesa_attrib;
-
- switch (attrib) {
- case SDL_GL_RED_SIZE:
- mesa_attrib = GL_RED_BITS;
- break;
- case SDL_GL_GREEN_SIZE:
- mesa_attrib = GL_GREEN_BITS;
- break;
- case SDL_GL_BLUE_SIZE:
- mesa_attrib = GL_BLUE_BITS;
- break;
- case SDL_GL_ALPHA_SIZE:
- mesa_attrib = GL_ALPHA_BITS;
- break;
- case SDL_GL_DOUBLEBUFFER:
- mesa_attrib = GL_DOUBLEBUFFER;
- break;
- case SDL_GL_DEPTH_SIZE:
- mesa_attrib = GL_DEPTH_BITS;
- break;
- case SDL_GL_STENCIL_SIZE:
- mesa_attrib = GL_STENCIL_BITS;
- break;
- case SDL_GL_ACCUM_RED_SIZE:
- mesa_attrib = GL_ACCUM_RED_BITS;
- break;
- case SDL_GL_ACCUM_GREEN_SIZE:
- mesa_attrib = GL_ACCUM_GREEN_BITS;
- break;
- case SDL_GL_ACCUM_BLUE_SIZE:
- mesa_attrib = GL_ACCUM_BLUE_BITS;
- break;
- case SDL_GL_ACCUM_ALPHA_SIZE:
- mesa_attrib = GL_ACCUM_ALPHA_BITS;
- break;
- default:
- return -1;
- }
-
- AmigaMesaGetConfig(glcont->visual, mesa_attrib, value);
- return 0;
-}
-
-void *
-CGX_GL_GetProcAddress(_THIS, const char *proc)
-{
- void *func = NULL;
- func = AmiGetGLProc(proc);
- return func;
-}
-
-int
-CGX_GL_LoadLibrary(_THIS, const char *path)
-{
- /* Library is always open */
- this->gl_config.driver_loaded = 1;
-
- return 0;
-}
-
-#endif /* SDL_VIDEO_OPENGL */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgxgl_c.h Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* StormMesa implementation of SDL OpenGL support */
-
-#include "../SDL_sysvideo.h"
-
-#define _THIS SDL_VideoDevice *_this
-
-#if SDL_VIDEO_OPENGL
-#include <GL/Amigamesa.h>
-extern void *AmiGetGLProc(const char *proc);
-#endif /* SDL_VIDEO_OPENGL */
-
-struct SDL_PrivateGLData
-{
- int gl_active;
-};
-
-/* OpenGL functions */
-extern int CGX_GL_Init(_THIS);
-extern void CGX_GL_Quit(_THIS);
-extern int CGX_GL_Update(_THIS);
-#if SDL_VIDEO_OPENGL
-extern int CGX_GL_MakeCurrent(_THIS);
-extern int CGX_GL_GetAttribute(_THIS, SDL_GLattr attrib, int *value);
-extern void CGX_GL_SwapBuffers(_THIS);
-extern void *CGX_GL_GetProcAddress(_THIS, const char *proc);
-extern int CGX_GL_LoadLibrary(_THIS, const char *path);
-#endif
-
-#undef _THIS
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgximage.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,933 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_endian.h"
-#include "SDL_cgximage_c.h"
-
-#ifdef HAVE_KSTAT
-#include <kstat.h>
-#endif
-
-#ifdef USE_CGX_WRITELUTPIXEL
-#if defined(__SASC) || defined(__PPC__)
-#define WLUT WriteLUTPixelArray
-#else
-void
-WLUT(APTR a, UWORD b, UWORD c, UWORD d, struct RastPort *e, APTR f, UWORD g,
- UWORD h, UWORD i, UWORD l, UBYTE m)
-{
- WriteLUTPixelArray(a, b, c, d, e, f, g, h, i, l, m);
-}
-#endif
-
-#endif
-
-/* Various screen update functions available */
-static void CGX_NormalUpdate(_THIS, int numrects, SDL_Rect * rects);
-static void CGX_FakeUpdate(_THIS, int numrects, SDL_Rect * rects);
-
-BOOL SafeDisp = TRUE, SafeChange = TRUE;
-struct MsgPort *safeport = NULL, *dispport = NULL;
-ULONG safe_sigbit, disp_sigbit;
-int use_picasso96 = 1;
-
-int
-CGX_SetupImage(_THIS, SDL_Surface * screen)
-{
- SDL_Ximage = NULL;
-
- if (screen->flags & SDL_HWSURFACE) {
- ULONG pitch;
-
- if (!screen->hwdata) {
- if (!(screen->hwdata = SDL_malloc(sizeof(struct private_hwdata))))
- return -1;
-
- D(bug("Creating system accel struct\n"));
- }
- screen->hwdata->lock = NULL;
- screen->hwdata->allocated = 0;
- screen->hwdata->mask = NULL;
- screen->hwdata->bmap = SDL_RastPort->BitMap;
- screen->hwdata->videodata = this;
-
- if (!(screen->hwdata->lock = LockBitMapTags(screen->hwdata->bmap,
- LBMI_BASEADDRESS,
- (ULONG) & screen->
- pixels,
- LBMI_BYTESPERROW,
- (ULONG) & pitch,
- TAG_DONE))) {
- SDL_free(screen->hwdata);
- screen->hwdata = NULL;
- return -1;
- } else {
- UnLockBitMap(screen->hwdata->lock);
- screen->hwdata->lock = NULL;
- }
-
- screen->pitch = pitch;
-
- this->UpdateRects = CGX_FakeUpdate;
-
- D(bug
- ("Accel video image configured (%lx, pitch %ld).\n",
- screen->pixels, screen->pitch));
- return 0;
- }
-
- screen->pixels = SDL_malloc(screen->h * screen->pitch);
-
- if (screen->pixels == NULL) {
- SDL_OutOfMemory();
- return (-1);
- }
-
- SDL_Ximage = screen->pixels;
-
- if (SDL_Ximage == NULL) {
- SDL_SetError("Couldn't create XImage");
- return (-1);
- }
-
- this->UpdateRects = CGX_NormalUpdate;
-
- return (0);
-}
-
-void
-CGX_DestroyImage(_THIS, SDL_Surface * screen)
-{
- if (SDL_Ximage) {
- SDL_free(SDL_Ximage);
- SDL_Ximage = NULL;
- }
- if (screen) {
- screen->pixels = NULL;
-
- if (screen->hwdata) {
- SDL_free(screen->hwdata);
- screen->hwdata = NULL;
- }
- }
-}
-
-/* This is a hack to see whether this system has more than 1 CPU */
-static int
-num_CPU(void)
-{
- return 1;
-}
-
-int
-CGX_ResizeImage(_THIS, SDL_Surface * screen, Uint32 flags)
-{
- int retval;
-
- D(bug("Calling ResizeImage()\n"));
-
- CGX_DestroyImage(this, screen);
-
- if (flags & SDL_INTERNALOPENGL) { /* No image when using GL */
- retval = 0;
- } else {
- retval = CGX_SetupImage(this, screen);
- /* We support asynchronous blitting on the display */
- if (flags & SDL_ASYNCBLIT) {
- if (num_CPU() > 1) {
- screen->flags |= SDL_ASYNCBLIT;
- }
- }
- }
- return (retval);
-}
-
-int
-CGX_AllocHWSurface(_THIS, SDL_Surface * surface)
-{
- D(bug
- ("Alloc HW surface...%ld x %ld x %ld!\n", surface->w, surface->h,
- this->hidden->depth));
-
- if (surface == SDL_VideoSurface) {
- D(bug("Allocation skipped, it's system one!\n"));
- return 0;
- }
-
- if (!surface->hwdata) {
- if (!(surface->hwdata = SDL_malloc(sizeof(struct private_hwdata))))
- return -1;
- }
-
- surface->hwdata->mask = NULL;
- surface->hwdata->lock = NULL;
- surface->hwdata->videodata = this;
- surface->hwdata->allocated = 0;
-
- if (surface->hwdata->bmap =
- AllocBitMap(surface->w, surface->h, this->hidden->depth,
- BMF_MINPLANES, SDL_Display->RastPort.BitMap)) {
- surface->hwdata->allocated = 1;
- surface->flags |= SDL_HWSURFACE;
- D(bug("...OK\n"));
- return 0;
- } else {
- SDL_free(surface->hwdata);
- surface->hwdata = NULL;
- }
-
- return (-1);
-}
-
-void
-CGX_FreeHWSurface(_THIS, SDL_Surface * surface)
-{
- if (surface && surface != SDL_VideoSurface && surface->hwdata) {
- D(bug("Free hw surface.\n"));
-
- if (surface->hwdata->mask)
- SDL_free(surface->hwdata->mask);
-
- if (surface->hwdata->bmap && surface->hwdata->allocated)
- FreeBitMap(surface->hwdata->bmap);
-
- SDL_free(surface->hwdata);
- surface->hwdata = NULL;
- surface->pixels = NULL;
- D(bug("end of free hw surface\n"));
- }
- return;
-}
-
-int
-CGX_LockHWSurface(_THIS, SDL_Surface * surface)
-{
- if (surface->hwdata) {
-// D(bug("Locking a bitmap...\n"));
- if (!surface->hwdata->lock) {
- Uint32 pitch;
-
- if (!
- (surface->hwdata->lock =
- LockBitMapTags(surface->hwdata->bmap, LBMI_BASEADDRESS,
- (ULONG) & surface->pixels,
- LBMI_BYTESPERROW, (ULONG) & pitch, TAG_DONE)))
- return -1;
-
-// surface->pitch e' a 16bit!
-
- surface->pitch = pitch;
-
- if (!currently_fullscreen && surface == SDL_VideoSurface)
- surface->pixels =
- ((char *) surface->pixels) +
- (surface->pitch *
- (SDL_Window->BorderTop + SDL_Window->TopEdge) +
- surface->format->BytesPerPixel *
- (SDL_Window->BorderLeft + SDL_Window->LeftEdge));
- }
- D(
- else
- bug("Already locked!!!\n"));
- }
- return (0);
-}
-
-void
-CGX_UnlockHWSurface(_THIS, SDL_Surface * surface)
-{
- if (surface->hwdata && surface->hwdata->lock) {
- UnLockBitMap(surface->hwdata->lock);
- surface->hwdata->lock = NULL;
-// surface->pixels=NULL;
- }
-}
-
-int
-CGX_FlipHWSurface(_THIS, SDL_Surface * surface)
-{
- static int current = 0;
-
- if (this->hidden->dbuffer) {
- if (!SafeChange) {
- Wait(disp_sigbit);
-// Non faccio nulla, vuoto solo la porta
- while (GetMsg(dispport) != NULL);
- SafeChange = TRUE;
- }
-
- if (ChangeScreenBuffer(SDL_Display, this->hidden->SB[current ^ 1])) {
- surface->hwdata->bmap = SDL_RastPort->BitMap =
- this->hidden->SB[current]->sb_BitMap;
- SafeChange = FALSE;
- SafeDisp = FALSE;
- current ^= 1;
- }
-
- if (!SafeDisp) {
- Wait(safe_sigbit);
- while (GetMsg(safeport) != NULL);
- SafeDisp = TRUE;
- }
-
- }
- return (0);
-}
-
-/* Byte-swap the pixels in the display image */
-static void
-CGX_SwapAllPixels(SDL_Surface * screen)
-{
- int x, y;
-
- switch (screen->format->BytesPerPixel) {
- case 2:
- {
- Uint16 *spot;
- for (y = 0; y < screen->h; ++y) {
- spot = (Uint16 *) ((Uint8 *) screen->pixels +
- y * screen->pitch);
- for (x = 0; x < screen->w; ++x, ++spot) {
- *spot = SDL_Swap16(*spot);
- }
- }
- }
- break;
-
- case 4:
- {
- Uint32 *spot;
- for (y = 0; y < screen->h; ++y) {
- spot = (Uint32 *) ((Uint8 *) screen->pixels +
- y * screen->pitch);
- for (x = 0; x < screen->w; ++x, ++spot) {
- *spot = SDL_Swap32(*spot);
- }
- }
- }
- break;
-
- default:
- /* should never get here */
- break;
- }
-}
-static void
-CGX_SwapPixels(SDL_Surface * screen, int numrects, SDL_Rect * rects)
-{
- int i;
- int x, minx, maxx;
- int y, miny, maxy;
-
- switch (screen->format->BytesPerPixel) {
- case 2:
- {
- Uint16 *spot;
- for (i = 0; i < numrects; ++i) {
- minx = rects[i].x;
- maxx = rects[i].x + rects[i].w;
- miny = rects[i].y;
- maxy = rects[i].y + rects[i].h;
- for (y = miny; y < maxy; ++y) {
- spot = (Uint16 *) ((Uint8 *) screen->pixels +
- y * screen->pitch + minx * 2);
- for (x = minx; x < maxx; ++x, ++spot) {
- *spot = SDL_Swap16(*spot);
- }
- }
- }
- }
- break;
-
- case 4:
- {
- Uint32 *spot;
- for (i = 0; i < numrects; ++i) {
- minx = rects[i].x;
- maxx = rects[i].x + rects[i].w;
- miny = rects[i].y;
- maxy = rects[i].y + rects[i].h;
- for (y = miny; y < maxy; ++y) {
- spot = (Uint32 *) ((Uint8 *) screen->pixels +
- y * screen->pitch + minx * 4);
- for (x = minx; x < maxx; ++x, ++spot) {
- *spot = SDL_Swap32(*spot);
- }
- }
- }
- }
- break;
-
- default:
- /* should never get here */
- break;
- }
-}
-
-#ifdef __SASC
-
-#define USE_WPA WritePixelArray
-#else
-
-void
-USE_WPA(char *a, int b, int c, int d, struct RastPort *e, int f, int g,
- int h, int i, Uint32 l)
-{
- WritePixelArray(a, b, c, d, e, f, g, h, i, l);
-}
-
-#endif
-
-static void
-CGX_FakeUpdate(_THIS, int numrects, SDL_Rect * rects)
-{
-}
-
-static void
-CGX_NormalUpdate(_THIS, int numrects, SDL_Rect * rects)
-{
- int i, format, customroutine = 0;
-#ifndef USE_CGX_WRITELUTPIXEL
- int bpp;
-#endif
- if (this->hidden->same_format && !use_picasso96) {
- format = RECTFMT_RAW;
- } else
- switch (this->screen->format->BytesPerPixel) {
- case 4:
- format = RECTFMT_RGBA;
- break;
- case 3:
- format = RECTFMT_RGB;
- break;
- case 2:
- customroutine = 1;
- break;
- case 1:
-// D(bug("soft depth: 8 hardbpp: %ld\n",this->hidden->depth));
- if (this->hidden->depth > 8) {
-#ifndef USE_CGX_WRITELUTPIXEL
- if (this->hidden->depth > 32)
- customroutine = 4;
- else if (this->hidden->depth > 16) {
- bpp = this->hidden->BytesPerPixel; // That one is the only one that needs bpp
- customroutine = 2; // The slow one!
- } else
- customroutine = 3;
-#else
-
- customroutine = 2;
-#endif
-
-// format=RECTFMT_LUT8; Vecchia funzione x usare la WritePixelArray.
- } else
- customroutine = 1;
- break;
- default:
- D(bug("Unable to blit this surface!\n"));
- return;
- }
-
- /* Check for endian-swapped X server, swap if necessary (VERY slow!) */
- if (swap_pixels && ((this->screen->format->BytesPerPixel % 2) == 0)) {
- D(bug("Software Swapping! SLOOOW!\n"));
- CGX_SwapPixels(this->screen, numrects, rects);
- for (i = 0; i < numrects; ++i) {
- if (!rects[i].w) { /* Clipped? */
- continue;
- }
- USE_WPA(this->screen->pixels, rects[i].x, rects[i].y,
- this->screen->pitch, SDL_RastPort,
- SDL_Window->BorderLeft + rects[i].x,
- SDL_Window->BorderTop + rects[i].y, rects[i].w,
- rects[i].h, format);
- }
- CGX_SwapPixels(this->screen, numrects, rects);
- } else if (customroutine == 2) {
-#ifdef USE_CGX_WRITELUTPIXEL
- for (i = 0; i < numrects; ++i) {
- if (!rects[i].w) { /* Clipped? */
- continue;
- }
-
- WLUT(this->screen->pixels, rects[i].x, rects[i].y,
- this->screen->pitch, SDL_RastPort, SDL_XPixels,
- SDL_Window->BorderLeft + rects[i].x,
- SDL_Window->BorderTop + rects[i].y, rects[i].w,
- rects[i].h, CTABFMT_XRGB8);
- }
-#else
- unsigned char *bm_address;
- Uint32 destpitch;
- APTR handle;
-
- if (handle =
- LockBitMapTags(SDL_RastPort->BitMap, LBMI_BASEADDRESS,
- &bm_address, LBMI_BYTESPERROW, &destpitch,
- TAG_DONE)) {
- int srcwidth;
- unsigned char *destbase;
- register int j, k, t;
- register unsigned char *mask, *dst;
- register unsigned char *src, *dest;
-
-// Aggiungo il bordo della finestra se sono fullscreen.
- if (currently_fullscreen)
- destbase = bm_address;
- else
- destbase =
- bm_address + (SDL_Window->TopEdge +
- SDL_Window->BorderTop) * destpitch +
- (SDL_Window->BorderLeft +
- SDL_Window->LeftEdge) * this->hidden->BytesPerPixel;
-
- for (i = 0; i < numrects; ++i) {
- srcwidth = rects[i].w;
-
- if (!srcwidth) { /* Clipped? */
- continue;
- }
-
- dest = destbase + rects[i].x * this->hidden->BytesPerPixel;
- dest += (rects[i].y * destpitch);
- src = ((char *) (this->screen->pixels)) + rects[i].x;
- src += (rects[i].y * this->screen->pitch);
-
- for (j = rects[i].h; j; --j) {
- dst = dest;
-// SLOW routine, used for 8->24 bit mapping
- for (k = 0; k < srcwidth; k++) {
- mask = (unsigned char *) (&SDL_XPixels[src[k]]);
- for (t = 0; t < bpp; t++) {
- dst[t] = mask[t];
- }
- dst += bpp;
- }
- src += this->screen->pitch;
- dest += destpitch;
- }
- }
- UnLockBitMap(handle);
- }
- } else if (customroutine == 3) {
- unsigned char *bm_address;
- Uint32 destpitch;
- APTR handle;
-
- if (handle =
- LockBitMapTags(SDL_RastPort->BitMap, LBMI_BASEADDRESS,
- &bm_address, LBMI_BYTESPERROW, &destpitch,
- TAG_DONE)) {
- int srcwidth;
- unsigned char *destbase;
- register int j, k;
- register unsigned char *src, *dest;
- register Uint16 *destl, *srcl;
-
- if (currently_fullscreen)
- destbase = bm_address;
- else
- destbase =
- bm_address + (SDL_Window->TopEdge +
- SDL_Window->BorderTop) * destpitch +
- (SDL_Window->BorderLeft +
- SDL_Window->LeftEdge) * this->hidden->BytesPerPixel;
-
- for (i = 0; i < numrects; ++i) {
- srcwidth = rects[i].w;
-
- if (!srcwidth) { /* Clipped? */
- continue;
- }
-
- dest = destbase + rects[i].x * this->hidden->BytesPerPixel;
- dest += (rects[i].y * destpitch);
- src = ((char *) (this->screen->pixels)) + rects[i].x;
- src += (rects[i].y * this->screen->pitch);
-
-// This is the fast, well not too slow, remapping code for 16bit displays
-
- for (j = rects[i].h; j; --j) {
- destl = (Uint16 *) dest;
-
- for (k = 0; k < srcwidth; k++) {
- srcl = (Uint16 *) & SDL_XPixels[src[k]];
- *destl = *srcl;
- destl++;
- }
- src += this->screen->pitch;
- dest += destpitch;
- }
- }
- UnLockBitMap(handle);
- }
- } else if (customroutine == 4) {
- unsigned char *bm_address;
- Uint32 destpitch;
- APTR handle;
-
- if (handle =
- LockBitMapTags(SDL_RastPort->BitMap, LBMI_BASEADDRESS,
- &bm_address, LBMI_BYTESPERROW, &destpitch,
- TAG_DONE)) {
- int srcwidth;
- unsigned char *destbase;
- register int j, k;
- register unsigned char *src, *dest;
- register Uint32 *destl, *srcl;
-
- if (currently_fullscreen)
- destbase = bm_address;
- else
- destbase =
- bm_address + (SDL_Window->TopEdge +
- SDL_Window->BorderTop) * destpitch +
- (SDL_Window->BorderLeft +
- SDL_Window->LeftEdge) * this->hidden->BytesPerPixel;
-
- for (i = 0; i < numrects; ++i) {
- srcwidth = rects[i].w;
-
- if (!srcwidth) { /* Clipped? */
- continue;
- }
-
- dest = destbase + rects[i].x * this->hidden->BytesPerPixel;
- dest += (rects[i].y * destpitch);
- src = ((char *) (this->screen->pixels)) + rects[i].x;
- src += (rects[i].y * this->screen->pitch);
-
-// This is the fast, well not too slow, remapping code for 32bit displays
-
- for (j = rects[i].h; j; --j) {
- destl = (Uint32 *) dest;
-
- for (k = 0; k < srcwidth; k++) {
- srcl = (Uint32 *) & SDL_XPixels[src[k]];
- *destl = *srcl;
- destl++;
- }
- src += this->screen->pitch;
- dest += destpitch;
- }
- }
- UnLockBitMap(handle);
- }
-#endif
- } else if (customroutine) {
- unsigned char *bm_address;
- Uint32 destpitch;
- APTR handle;
-
-// D(bug("Using customroutine!\n"));
-
- if (handle =
- LockBitMapTags(SDL_RastPort->BitMap, LBMI_BASEADDRESS,
- (ULONG) & bm_address, LBMI_BYTESPERROW,
- (ULONG) & destpitch, TAG_DONE)) {
- unsigned char *destbase;
- register int j, srcwidth;
- register unsigned char *src, *dest;
-
-// Aggiungo il bordo della finestra se sono fullscreen.
- if (currently_fullscreen)
- destbase = bm_address;
- else
- destbase =
- bm_address + (SDL_Window->TopEdge +
- SDL_Window->BorderTop) * destpitch +
- (SDL_Window->BorderLeft +
- SDL_Window->LeftEdge) *
- this->screen->format->BytesPerPixel;
-
- for (i = 0; i < numrects; ++i) {
- srcwidth = rects[i].w;
-
- if (!srcwidth) { /* Clipped? */
- continue;
- }
-
- dest =
- destbase +
- rects[i].x * this->screen->format->BytesPerPixel;
- dest += (rects[i].y * destpitch);
- src =
- ((char *) (this->screen->pixels)) +
- rects[i].x * this->screen->format->BytesPerPixel;
- src += (rects[i].y * this->screen->pitch);
-
- srcwidth *= this->screen->format->BytesPerPixel;
-
-// D(bug("Rects: %ld,%ld %ld,%ld Src:%lx Dest:%lx\n",rects[i].x,rects[i].y,rects[i].w,rects[i].h,src,dest));
-
- for (j = rects[i].h; j; --j) {
- SDL_memcpy(dest, src, srcwidth);
- src += this->screen->pitch;
- dest += destpitch;
- }
- }
- UnLockBitMap(handle);
-// D(bug("Rectblit addr: %lx pitch: %ld rects:%ld srcptr: %lx srcpitch: %ld\n",bm_address,destpitch,numrects,this->screen->pixels,this->screen->pitch));
- }
- } else {
- for (i = 0; i < numrects; ++i) {
- if (!rects[i].w) { /* Clipped? */
- continue;
- }
- USE_WPA(this->screen->pixels, rects[i].x, rects[i].y,
- this->screen->pitch, SDL_RastPort,
- SDL_Window->BorderLeft + rects[i].x,
- SDL_Window->BorderTop + rects[i].y, rects[i].w,
- rects[i].h, format);
- }
- }
-}
-
-void
-CGX_RefreshDisplay(_THIS)
-{
- int format, customroutine = 0;
-#ifndef USE_CGX_WRITELUTPIXEL
- int bpp;
-#endif
- /* Don't refresh a display that doesn't have an image (like GL) */
- if (!SDL_Ximage) {
- return;
- }
-
- if (this->hidden->same_format && !use_picasso96) {
- format = RECTFMT_RAW;
- } else
- switch (this->screen->format->BytesPerPixel) {
- case 4:
- format = RECTFMT_RGBA;
- break;
- case 3:
- format = RECTFMT_RGB;
- break;
- case 2:
- customroutine = 1;
- break;
- case 1:
-// D(bug("soft depth: 8 hardbpp: %ld\n",this->hidden->depth));
- if (this->hidden->depth > 8) {
-#ifndef USE_CGX_WRITELUTPIXEL
- if (this->hidden->depth > 32)
- customroutine = 4;
- else if (this->hidden->depth > 16) {
- bpp = this->hidden->BytesPerPixel; // That one is the only one that needs bpp
- customroutine = 2; // The slow one!
- } else
- customroutine = 3;
-#else
-
- customroutine = 2;
-#endif
-// format=RECTFMT_LUT8;
- } else
- customroutine = 1;
- break;
-
- }
-
- /* Check for endian-swapped X server, swap if necessary */
- if (swap_pixels && ((this->screen->format->BytesPerPixel % 2) == 0)) {
- CGX_SwapAllPixels(this->screen);
- USE_WPA(this->screen->pixels, 0, 0, this->screen->pitch,
- SDL_RastPort, SDL_Window->BorderLeft,
- SDL_Window->BorderTop, this->screen->w, this->screen->h,
- format);
- CGX_SwapAllPixels(this->screen);
- } else if (customroutine == 2) {
-#ifdef USE_CGX_WRITELUTPIXEL
- WLUT(this->screen->pixels, 0, 0, this->screen->pitch,
- SDL_RastPort, SDL_XPixels, SDL_Window->BorderLeft,
- SDL_Window->BorderTop, this->screen->w, this->screen->h,
- CTABFMT_XRGB8);
-#else
- unsigned char *bm_address;
- Uint32 destpitch;
- APTR handle;
-
- if (handle =
- LockBitMapTags(SDL_RastPort->BitMap, LBMI_BASEADDRESS,
- (ULONG) & bm_address, LBMI_BYTESPERROW,
- (ULONG) & destpitch, TAG_DONE)) {
- register int j, k, t;
- register unsigned char *mask, *dst;
- register unsigned char *src, *dest;
-
-// Aggiungo il bordo della finestra se sono fullscreen.
- if (!currently_fullscreen)
- dest =
- bm_address + (SDL_Window->TopEdge +
- SDL_Window->BorderTop) * destpitch +
- (SDL_Window->BorderLeft +
- SDL_Window->LeftEdge) * this->hidden->BytesPerPixel;
- else
- dest = bm_address;
-
- src = this->screen->pixels;
-
- for (j = this->screen->h; j; --j) {
- dst = dest;
-// SLOW routine, used for 8->24 bit mapping
- for (k = 0; k < this->screen->w; k++) {
- mask = (unsigned char *) (&SDL_XPixels[src[k]]);
- for (t = 0; t < bpp; t++) {
- dst[t] = mask[t];
- }
- dst += bpp;
- }
- src += this->screen->pitch;
- dest += destpitch;
- }
- UnLockBitMap(handle);
- }
- } else if (customroutine == 3) {
- unsigned char *bm_address;
- Uint32 destpitch;
- APTR handle;
-
- if (handle =
- LockBitMapTags(SDL_RastPort->BitMap, LBMI_BASEADDRESS,
- (ULONG) & bm_address, LBMI_BYTESPERROW,
- (ULONG) & destpitch, TAG_DONE)) {
- register int j, k;
- register unsigned char *src, *dest;
- register Uint16 *destl, *srcl;
-
- if (!currently_fullscreen)
- dest =
- bm_address + (SDL_Window->TopEdge +
- SDL_Window->BorderTop) * destpitch +
- (SDL_Window->BorderLeft +
- SDL_Window->LeftEdge) * this->hidden->BytesPerPixel;
- else
- dest = bm_address;
-
- src = this->screen->pixels;
-
-// This is the fast, well not too slow, remapping code for 16bit displays
-
- for (j = this->screen->h; j; --j) {
- destl = (Uint16 *) dest;
-
- for (k = 0; k < this->screen->w; k++) {
- srcl = (Uint16 *) & SDL_XPixels[src[k]];
- *destl = *srcl;
- destl++;
- }
- src += this->screen->pitch;
- dest += destpitch;
- }
- UnLockBitMap(handle);
- }
- } else if (customroutine == 4) {
- unsigned char *bm_address;
- Uint32 destpitch;
- APTR handle;
-
- if (handle =
- LockBitMapTags(SDL_RastPort->BitMap, LBMI_BASEADDRESS,
- (ULONG) & bm_address, LBMI_BYTESPERROW,
- (ULONG) & destpitch, TAG_DONE)) {
- register int j, k;
- register unsigned char *src, *dest;
- register Uint32 *destl, *srcl;
-
- if (!currently_fullscreen)
- dest =
- bm_address + (SDL_Window->TopEdge +
- SDL_Window->BorderTop) * destpitch +
- (SDL_Window->BorderLeft +
- SDL_Window->LeftEdge) * this->hidden->BytesPerPixel;
- else
- dest = bm_address;
-
- src = this->screen->pixels;
-
-// This is the fast, well not too slow, remapping code for 32bit displays
-
- for (j = this->screen->h; j; --j) {
- destl = (Uint32 *) dest;
-
- for (k = 0; k < this->screen->w; k++) {
- srcl = (Uint32 *) & SDL_XPixels[src[k]];
- *destl = *srcl;
- destl++;
- }
- src += this->screen->pitch;
- dest += destpitch;
- }
- UnLockBitMap(handle);
- }
-#endif
- } else if (customroutine) {
- unsigned char *bm_address;
- Uint32 destpitch;
- APTR handle;
-
- if (handle = LockBitMapTags(SDL_RastPort->BitMap,
- LBMI_BASEADDRESS, (ULONG) & bm_address,
- LBMI_BYTESPERROW, (ULONG) & destpitch,
- TAG_DONE)) {
- register int j;
- register unsigned char *src, *dest;
-
- if (!currently_fullscreen)
- dest =
- bm_address + (SDL_Window->TopEdge +
- SDL_Window->BorderTop) * destpitch +
- (SDL_Window->BorderLeft +
- SDL_Window->LeftEdge) *
- this->screen->format->BytesPerPixel;
- else
- dest = bm_address;
-
- src = this->screen->pixels;
-
-// D(bug("addr: %lx pitch: %ld src:%lx srcpitch: %ld\n",dest,destpitch,this->screen->pixels,this->screen->pitch));
-
- if (this->screen->pitch == destpitch) {
- SDL_memcpy(dest, src, this->screen->pitch * this->screen->h);
- } else {
- for (j = this->screen->h; j; --j) {
- SDL_memcpy(dest, src, this->screen->pitch);
- src += this->screen->pitch;
- dest += destpitch;
- }
- }
-
- UnLockBitMap(handle);
- }
- } else {
- USE_WPA(this->screen->pixels, 0, 0, this->screen->pitch,
- SDL_RastPort, SDL_Window->BorderLeft,
- SDL_Window->BorderTop, this->screen->w, this->screen->h,
- format);
- }
-
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgximage_c.h Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_cgxvideo.h"
-
-extern int CGX_SetupImage(_THIS, SDL_Surface * screen);
-extern void CGX_DestroyImage(_THIS, SDL_Surface * screen);
-extern int CGX_ResizeImage(_THIS, SDL_Surface * screen, Uint32 flags);
-
-extern int CGX_AllocHWSurface(_THIS, SDL_Surface * surface);
-extern void CGX_FreeHWSurface(_THIS, SDL_Surface * surface);
-extern int CGX_LockHWSurface(_THIS, SDL_Surface * surface);
-extern void CGX_UnlockHWSurface(_THIS, SDL_Surface * surface);
-extern int CGX_FlipHWSurface(_THIS, SDL_Surface * surface);
-
-extern void CGX_RefreshDisplay(_THIS);
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgxmodes.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,334 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* Utilities for getting and setting the X display mode */
-
-#include "SDL_timer.h"
-#include "SDL_events.h"
-#include "../../events/SDL_events_c.h"
-#include "SDL_cgxvideo.h"
-#include "SDL_cgxwm_c.h"
-#include "SDL_cgxmodes_c.h"
-
-#define CGX_DEBUG
-
-static void
-set_best_resolution(_THIS, int width, int height)
-{
- Uint32 idok;
- int depth = 8;
-
- if (SDL_Display)
- depth =
- GetCyberMapAttr(SDL_Display->RastPort.BitMap, CYBRMATTR_DEPTH);
-
- idok = BestCModeIDTags(CYBRBIDTG_NominalWidth, width,
- CYBRBIDTG_NominalHeight, height,
- CYBRBIDTG_Depth, depth, TAG_DONE);
-
- if (idok != INVALID_ID) {
- if (SDL_Display) {
- if (currently_fullscreen)
- CloseScreen(SDL_Display);
- else
- UnlockPubScreen(NULL, SDL_Display);
- }
- SDL_Display = GFX_Display =
- OpenScreenTags(NULL, SA_Width, width, SA_Height, height,
- SA_Depth, depth, SA_DisplayID, idok,
- SA_ShowTitle, FALSE, TAG_DONE);
- }
-}
-
-static void
-get_real_resolution(_THIS, int *w, int *h)
-{
- *w = /*SDL_Display->Width */ SDL_Window->Width - SDL_Window->BorderLeft -
- SDL_Window->BorderRight;
- *h = /*SDL_Display->Height */ SDL_Window->Height -
- SDL_Window->BorderBottom - SDL_Window->BorderTop;
-}
-
-static void
-move_cursor_to(_THIS, int x, int y)
-{
-/* XWarpPointer(SDL_Display, None, SDL_Root, 0, 0, 0, 0, x, y); */
-
-/* DA FARE! */
-}
-
-static void
-add_visual(_THIS, int depth, int class)
-{
- Uint32 tID;
-
- tID = BestCModeIDTags(CYBRBIDTG_Depth, depth,
- CYBRBIDTG_NominalWidth, 640,
- CYBRBIDTG_NominalHeight, 480, TAG_DONE);
-
- if (tID != INVALID_ID) {
- int n = this->hidden->nvisuals;
-
- this->hidden->visuals[n].depth = depth;
- this->hidden->visuals[n].visual = tID;
- this->hidden->visuals[n].bpp = GetCyberIDAttr(CYBRIDATTR_BPPIX, tID);
- this->hidden->nvisuals++;
- }
-}
-
-#define TrueColor 1
-#define PseudoColor 2
-
-int
-CGX_GetVideoModes(_THIS)
-{
- int i;
- ULONG nextid;
- int nmodes = 0;
-
- SDL_modelist = NULL;
-
- nextid = NextDisplayInfo(INVALID_ID);
-
- while (nextid != INVALID_ID) {
- if (IsCyberModeID(nextid)) {
- DisplayInfoHandle h;
-
- if (h = FindDisplayInfo(nextid)) {
- struct DimensionInfo info;
-
- if (GetDisplayInfoData
- (h, (char *) &info, sizeof(struct DimensionInfo),
- DTAG_DIMS, NULL)) {
- int ok = 0;
-
- for (i = 0; i < nmodes; i++) {
- if (SDL_modelist[i]->w == (info.Nominal.MaxX + 1)
- && SDL_modelist[i]->h == (info.Nominal.MaxY + 1))
- ok = 1;
- }
-
- if (!ok) {
- nmodes++;
-
- SDL_modelist =
- (SDL_Rect **) SDL_realloc(SDL_modelist,
- (nmodes +
- 1) *
- sizeof(SDL_Rect *));
- SDL_modelist[nmodes] = NULL;
-
- if (SDL_modelist) {
- SDL_modelist[nmodes - 1] = (SDL_Rect *)
- SDL_malloc(sizeof(SDL_Rect));
-
- if (SDL_modelist[nmodes - 1] == NULL)
- break;
-
- SDL_modelist[nmodes - 1]->x = 0;
- SDL_modelist[nmodes - 1]->y = 0;
- SDL_modelist[nmodes - 1]->w =
- info.Nominal.MaxX + 1;
- SDL_modelist[nmodes - 1]->h =
- info.Nominal.MaxY + 1;
- }
- }
- }
- }
- }
- nextid = NextDisplayInfo(nextid);
- }
-
-
- this->hidden->nvisuals = 0;
- /* Search for the visuals in deepest-first order, so that the first
- will be the richest one */
- add_visual(this, 32, TrueColor);
- add_visual(this, 24, TrueColor);
- add_visual(this, 16, TrueColor);
- add_visual(this, 15, TrueColor);
- add_visual(this, 8, PseudoColor);
-
- if (this->hidden->nvisuals == 0) {
- SDL_SetError("Found no sufficiently capable CGX visuals");
- return -1;
- }
-
- if (SDL_modelist == NULL) {
- SDL_modelist = (SDL_Rect **) SDL_malloc((1 + 1) * sizeof(SDL_Rect *));
- i = 0;
- if (SDL_modelist) {
- SDL_modelist[i] = (SDL_Rect *) SDL_malloc(sizeof(SDL_Rect));
- if (SDL_modelist[i]) {
- SDL_modelist[i]->x = 0;
- SDL_modelist[i]->y = 0;
- SDL_modelist[i]->w = SDL_Display->Width;
- SDL_modelist[i]->h = SDL_Display->Height;
- ++i;
- }
- SDL_modelist[i] = NULL;
- }
- }
-
- D(if (SDL_modelist) {
- bug("CGX video mode list: (%ld)\n", nmodes);
- for (i = 0; SDL_modelist[i]; ++i) {
- bug("\t%ld x %ld\n", SDL_modelist[i]->w, SDL_modelist[i]->h);}
- }
- );
-
- D( {
- bug("CGX visuals list: (%ld)\n", this->hidden->nvisuals);
- for (i = 0; i < this->hidden->nvisuals; i++)
- bug("\t%lx - depth: %ld bpp: %ld\n",
- this->hidden->visuals[i].visual,
- this->hidden->visuals[i].depth, this->hidden->visuals[i].bpp);}
- );
- return 0;
-}
-
-int
-CGX_SupportedVisual(_THIS, SDL_PixelFormat * format)
-{
- int i;
- for (i = 0; i < this->hidden->nvisuals; i++) {
- if (this->hidden->visuals[i].depth == format->BitsPerPixel) // Era bpp
- return 1;
- }
- return 0;
-}
-
-SDL_Rect **
-CGX_ListModes(_THIS, SDL_PixelFormat * format, Uint32 flags)
-{
- if (CGX_SupportedVisual(this, format)) {
- if (flags & SDL_FULLSCREEN) {
- return (SDL_modelist);
- } else {
- return ((SDL_Rect **) - 1);
- }
- } else {
- return ((SDL_Rect **) 0);
- }
-}
-
-void
-CGX_FreeVideoModes(_THIS)
-{
- int i;
-
- if (SDL_modelist) {
- for (i = 0; SDL_modelist[i]; ++i) {
- SDL_free(SDL_modelist[i]);
- }
- SDL_free(SDL_modelist);
- SDL_modelist = NULL;
- }
-}
-
-int
-CGX_ResizeFullScreen(_THIS)
-{
- int x, y;
- int real_w, real_h;
-
- if (currently_fullscreen) {
-/* Per ora non faccio nulla qui */
- }
- return (1);
-}
-
-void
-_QueueEnterFullScreen(_THIS)
-{
-}
-
-int
-CGX_EnterFullScreen(_THIS)
-{
- int okay;
- Uint32 saved_flags;
-
- okay = 1;
- saved_flags = this->screen->flags;
-
- if (!currently_fullscreen) {
- int real_w, real_h;
-
- /* Map the fullscreen window to blank the screen */
- get_real_resolution(this, &real_w, &real_h);
-
- CGX_DestroyWindow(this, this->screen);
- set_best_resolution(this, real_w, real_h);
-
- currently_fullscreen = 1;
- this->screen->flags = saved_flags;
-
- CGX_CreateWindow(this, this->screen, real_w, real_h,
- GetCyberMapAttr(SDL_Display->RastPort.BitMap,
- CYBRMATTR_DEPTH),
- this->screen->flags);
-
- /* Set the new resolution */
- okay = CGX_ResizeFullScreen(this);
- if (!okay) {
- CGX_LeaveFullScreen(this);
- }
- /* Set the colormap */
-/*
- if ( SDL_XColorMap ) {
- XInstallColormap(SDL_Display, SDL_XColorMap);
- }
-*/
- }
-// CGX_GrabInputNoLock(this, this->input_grab | SDL_GRAB_FULLSCREEN);
- return (okay);
-}
-
-int
-CGX_LeaveFullScreen(_THIS)
-{
- if (currently_fullscreen) {
- int width, height;
- if (SDL_Window) {
- CloseWindow(SDL_Window);
- SDL_Window = NULL;
- }
- CloseScreen(SDL_Display);
-
- GFX_Display = SDL_Display = LockPubScreen(NULL);
-
- currently_fullscreen = 0;
-
- CGX_CreateWindow(this, this->screen, this->screen->w,
- this->screen->h,
- GetCyberMapAttr(SDL_Display->RastPort.BitMap,
- CYBRMATTR_DEPTH),
- this->screen->flags);
- CGX_ResizeImage(this, this->screen, 0L);
- }
-
- return (0);
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgxmodes_c.h Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* Utilities for getting and setting the X display mode */
-
-#include "SDL_cgxvideo.h"
-
-/* Define this if you want to grab the keyboard in fullscreen mode.
- If you do not define this, SDL will return from SDL_SetVideoMode()
- immediately, but will not actually go fullscreen until the window
- manager is idle.
-*/
-#define GRAB_FULLSCREEN
-
-extern int CGX_GetVideoModes(_THIS);
-extern SDL_Rect **CGX_ListModes(_THIS, SDL_PixelFormat * format,
- Uint32 flags);
-extern void CGX_FreeVideoModes(_THIS);
-extern int CGX_ResizeFullScreen(_THIS);
-/*
-extern void CGX_WaitMapped(_THIS, Window win);
-extern void CGX_WaitUnmapped(_THIS, Window win);
-extern void CGX_QueueEnterFullScreen(_THIS);
-*/
-extern int CGX_EnterFullScreen(_THIS);
-extern int CGX_LeaveFullScreen(_THIS);
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgxvideo.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1444 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/*
- * CGX based SDL video driver implementation by Gabriele Greco
- * gabriele.greco@aruba.it
- */
-
-#include "SDL_endian.h"
-#include "SDL_timer.h"
-#include "SDL_thread.h"
-#include "SDL_video.h"
-#include "SDL_mouse.h"
-#include "../SDL_sysvideo.h"
-#include "../SDL_pixels_c.h"
-#include "../../events/SDL_events_c.h"
-#include "SDL_cgxgl_c.h"
-#include "SDL_cgxvideo.h"
-#include "SDL_cgxwm_c.h"
-#include "SDL_amigamouse_c.h"
-#include "SDL_amigaevents_c.h"
-#include "SDL_cgxmodes_c.h"
-#include "SDL_cgximage_c.h"
-
-/* Initialization/Query functions */
-static int CGX_VideoInit(_THIS, SDL_PixelFormat * vformat);
-static SDL_Surface *CGX_SetVideoMode(_THIS, SDL_Surface * current, int width,
- int height, int bpp, Uint32 flags);
-static int CGX_ToggleFullScreen(_THIS, int on);
-static void CGX_UpdateMouse(_THIS);
-static int CGX_SetColors(_THIS, int firstcolor, int ncolors,
- SDL_Color * colors);
-static void CGX_VideoQuit(_THIS);
-
-/* CGX driver bootstrap functions */
-
-struct Library *CyberGfxBase = NULL;
-struct IntuitionBase *IntuitionBase = NULL;
-struct GfxBase *GfxBase = NULL;
-
-int
-CGX_SetGamma(_THIS, float red, float green, float blue)
-{
- SDL_SetError("Gamma correction not supported");
- return -1;
-}
-
-int
-CGX_GetGamma(_THIS, float red, float green, float blue)
-{
- SDL_SetError("Gamma correction not supported");
- return -1;
-}
-
-int
-CGX_SetGammaRamp(_THIS, Uint16 * ramp)
-{
-#if 0
- Int i, ncolors;
- XColor xcmap[256];
-
- /* See if actually setting the gamma is supported */
- if (SDL_Visual->class != DirectColor) {
- SDL_SetError("Gamma correction not supported on this visual");
- return (-1);
- }
-
- /* Calculate the appropriate palette for the given gamma ramp */
- ncolors = SDL_Visual->map_entries;
- for (i = 0; i < ncolors; ++i) {
- Uint8 c = (256 * i / ncolors);
- xcmap[i].pixel = SDL_MapRGB(this->screen->format, c, c, c);
- xcmap[i].red = ramp[0 * 256 + c];
- xcmap[i].green = ramp[1 * 256 + c];
- xcmap[i].blue = ramp[2 * 256 + c];
- xcmap[i].flags = (DoRed | DoGreen | DoBlue);
- }
- XStoreColors(GFX_Display, SDL_XColorMap, xcmap, ncolors);
- XSync(GFX_Display, False);
-
- return (0);
-
-#else
- SDL_SetError("Gamma correction not supported on this visual");
- return (-1);
-
-#endif
-}
-
-static void
-DestroyScreen(_THIS)
-{
- if (currently_fullscreen) {
- if (this->hidden->dbuffer) {
- extern struct MsgPort *safeport, *dispport;
-
- this->hidden->dbuffer = 0;
-
- if (safeport) {
- while (GetMsg(safeport) != NULL);
- DeleteMsgPort(safeport);
- }
- if (dispport) {
- while (GetMsg(dispport) != NULL);
- DeleteMsgPort(dispport);
- }
-
- this->hidden->SB[0]->sb_DBufInfo->dbi_SafeMessage.
- mn_ReplyPort =
- this->hidden->SB[0]->sb_DBufInfo->dbi_DispMessage.
- mn_ReplyPort = NULL;
- this->hidden->SB[1]->sb_DBufInfo->dbi_SafeMessage.
- mn_ReplyPort =
- this->hidden->SB[1]->sb_DBufInfo->dbi_DispMessage.
- mn_ReplyPort = NULL;
-
- if (this->hidden->SB[1])
- FreeScreenBuffer(SDL_Display, this->hidden->SB[1]);
- if (this->hidden->SB[0])
- FreeScreenBuffer(SDL_Display, this->hidden->SB[0]);
-
-
- this->hidden->SB[0] = this->hidden->SB[1] = NULL;
-
- if (SDL_RastPort && SDL_RastPort != &SDL_Display->RastPort)
- SDL_free(SDL_RastPort);
-
- SDL_RastPort = NULL;
- }
- CloseScreen(GFX_Display);
- currently_fullscreen = 0;
- } else if (GFX_Display)
- UnlockPubScreen(NULL, GFX_Display);
-
- GFX_Display = NULL;
-}
-
-static int
-CGX_Available(void)
-{
- struct Library *l;
-
- l = OpenLibrary("cybergraphics.library", 0L);
-
- if (l != NULL) {
- D(bug("CGX video device AVAILABLE\n"));
- CloseLibrary(l);
- }
- D(
- else
- bug("**CGX video device UNAVAILABLE\n"));
-
- return (l != NULL);
-}
-
-static void
-CGX_DeleteDevice(SDL_VideoDevice * device)
-{
- if (device) {
- if (device->hidden) {
- SDL_free(device->hidden);
- }
- if (device->gl_data) {
- SDL_free(device->gl_data);
- }
- SDL_free(device);
- }
-}
-
-static SDL_VideoDevice *
-CGX_CreateDevice(int devindex)
-{
- SDL_VideoDevice *device;
-
- /* Initialize all variables that we clean on shutdown */
- device = (SDL_VideoDevice *) SDL_malloc(sizeof(SDL_VideoDevice));
- if (device) {
- SDL_memset(device, 0, (sizeof *device));
- device->hidden = (struct SDL_PrivateVideoData *)
- SDL_malloc((sizeof *device->hidden));
- device->gl_data = (struct SDL_PrivateGLData *)
- SDL_malloc((sizeof *device->gl_data));
- }
- if ((device == NULL) || (device->hidden == NULL) ||
- (device->gl_data == NULL)) {
- D(bug("Unable to create video device!\n"));
- SDL_OutOfMemory();
- CGX_DeleteDevice(device);
- return (0);
- }
- SDL_memset(device->hidden, 0, sizeof(*device->hidden));
- SDL_memset(device->gl_data, 0, sizeof(*device->gl_data));
-
- /* Set the driver flags */
- device->handles_any_size = 1;
-
- /* Set the function pointers */
- device->VideoInit = CGX_VideoInit;
- device->ListModes = CGX_ListModes;
- device->SetVideoMode = CGX_SetVideoMode;
- device->ToggleFullScreen = CGX_ToggleFullScreen;
- device->UpdateMouse = CGX_UpdateMouse;
- device->SetColors = CGX_SetColors;
- device->UpdateRects = NULL;
- device->VideoQuit = CGX_VideoQuit;
- device->AllocHWSurface = CGX_AllocHWSurface;
- device->CheckHWBlit = CGX_CheckHWBlit;
- device->FillHWRect = CGX_FillHWRect;
- device->SetHWColorKey = CGX_SetHWColorKey;
- device->SetHWAlpha = NULL;
- device->LockHWSurface = CGX_LockHWSurface;
- device->UnlockHWSurface = CGX_UnlockHWSurface;
- device->FlipHWSurface = CGX_FlipHWSurface;
- device->FreeHWSurface = CGX_FreeHWSurface;
- device->SetGamma = CGX_SetGamma;
- device->GetGamma = CGX_GetGamma;
- device->SetGammaRamp = CGX_SetGammaRamp;
- device->GetGammaRamp = NULL;
-#if SDL_VIDEO_OPENGL
- device->GL_LoadLibrary = CGX_GL_LoadLibrary;
- device->GL_GetProcAddress = CGX_GL_GetProcAddress;
- device->GL_GetAttribute = CGX_GL_GetAttribute;
- device->GL_MakeCurrent = CGX_GL_MakeCurrent;
- device->GL_SwapBuffers = CGX_GL_SwapBuffers;
-#endif
- device->SetIcon = CGX_SetIcon;
- device->SetCaption = CGX_SetCaption;
- device->IconifyWindow = NULL; /* CGX_IconifyWindow; */
- device->GrabInput = NULL /* CGX_GrabInput */ ;
- device->GetWMInfo = CGX_GetWMInfo;
- device->FreeWMCursor = amiga_FreeWMCursor;
- device->CreateWMCursor = amiga_CreateWMCursor;
- device->ShowWMCursor = amiga_ShowWMCursor;
- device->WarpWMCursor = amiga_WarpWMCursor;
- device->CheckMouseMode = amiga_CheckMouseMode;
- device->InitOSKeymap = amiga_InitOSKeymap;
- device->PumpEvents = amiga_PumpEvents;
-
- device->free = CGX_DeleteDevice;
-
- return device;
-}
-
-VideoBootStrap CGX_bootstrap = {
- "CGX", "AmigaOS CyberGraphics", CGX_Available, CGX_CreateDevice
-};
-
-Uint32
-MakeBitMask(_THIS, int type, int format, int *bpp)
-{
- D(if (type == 0) bug("REAL pixel format: "));
-
- if (this->hidden->depth == *bpp) {
-
- switch (format) {
- case PIXFMT_LUT8:
- D(if (type == 0) bug("LUT8\n"));
- return 0;
- case PIXFMT_BGR15:
- case PIXFMT_RGB15PC:
- switch (type) {
- case 0:
- D(bug("RGB15PC/BGR15\n"));
- return 31;
- case 1:
- return 992;
- case 2:
- return 31744;
- }
- case PIXFMT_RGB15:
- case PIXFMT_BGR15PC:
- switch (type) {
- case 0:
- D(bug("RGB15/BGR15PC\n"));
- return 31744;
- case 1:
- return 992;
- case 2:
- return 31;
- }
- case PIXFMT_BGR16PC:
- case PIXFMT_RGB16:
- switch (type) {
- case 0:
- D(bug("RGB16PC\n"));
- return 63488;
- case 1:
- return 2016;
- case 2:
- return 31;
- }
- case PIXFMT_BGR16:
- case PIXFMT_RGB16PC:
- switch (type) {
- case 0:
- D(bug("RGB16PC/BGR16\n"));
- return 31;
- case 1:
- return 2016;
- case 2:
- return 63488;
- }
-
- case PIXFMT_RGB24:
- switch (type) {
- case 0:
- D(bug("RGB24/BGR24\n"));
- return 0xff0000;
- case 1:
- return 0xff00;
- case 2:
- return 0xff;
- }
- case PIXFMT_BGR24:
- switch (type) {
- case 0:
- D(bug("BGR24\n"));
- return 0xff;
- case 1:
- return 0xff00;
- case 2:
- return 0xff0000;
- }
- case PIXFMT_ARGB32:
- switch (type) {
- case 0:
- D(bug("ARGB32\n"));
- return 0xff0000;
- case 1:
- return 0xff00;
- case 2:
- return 0xff;
- }
- case PIXFMT_BGRA32:
- switch (type) {
- case 0:
- D(bug("BGRA32\n"));
- return 0xff00;
- case 1:
- return 0xff0000;
- case 2:
- return 0xff000000;
- }
- case PIXFMT_RGBA32:
- switch (type) {
- case 0:
- D(bug("RGBA32\n"));
- return 0xff000000;
- case 1:
- return 0xff0000;
- case 2:
- return 0xff00;
- }
- default:
- D(bug("Unknown pixel format! Default to 24bit\n"));
- return (Uint32) (255 << (type * 8));
- }
- } else {
- D(if (type == 0)
- bug("DIFFERENT from screen.\nAllocated screen format: "));
-
- switch (*bpp) {
- case 32:
- D(if (type == 0) bug("RGBA32\n"));
- switch (type) {
- case 0:
- return 0xff000000;
- case 1:
- return 0xff0000;
- case 2:
- return 0xff00;
- }
- break;
- case 24:
- use_truecolor:
- switch (type) {
- case 0:
- D(bug("RGB24\n"));
- return 0xff0000;
- case 1:
- return 0xff00;
- case 2:
- return 0xff;
- }
- case 16:
- case 15:
- D(if (type == 0)
- bug("Not supported, switching to 24bit!\n"));
- *bpp = 24;
- goto use_truecolor;
- break;
- default:
- D(if (type == 0) bug("This is a chunky display\n"));
-// For chunky display mask is always 0;
- return 0;
- }
- }
- return 0;
-}
-
-static int
-CGX_VideoInit(_THIS, SDL_PixelFormat * vformat)
-{
- int i;
- struct Library *RTGBase;
-
- D(bug("VideoInit... Opening libraries\n"));
-
- if (!IntuitionBase) {
- if (!
- (IntuitionBase =
- (struct IntuitionBase *) OpenLibrary("intuition.library",
- 39L))) {
- SDL_SetError("Couldn't open intuition V39+");
- return -1;
- }
- }
-
- if (!GfxBase) {
- if (!
- (GfxBase =
- (struct GfxBase *) OpenLibrary("graphics.library", 39L))) {
- SDL_SetError("Couldn't open graphics V39+");
- return -1;
- }
- }
-
- if (!CyberGfxBase) {
- if (!(CyberGfxBase = OpenLibrary("cybergraphics.library", 40L))) {
- SDL_SetError("Couldn't open cybergraphics.");
- return (-1);
- }
- }
-
- if (RTGBase = OpenLibrary("libs:picasso96/rtg.library", 0L)) {
- extern int use_picasso96;
-
- CloseLibrary(RTGBase);
- use_picasso96 = 1;
- }
-
- D(bug("Library intialized, locking screen...\n"));
-
- SDL_Display = LockPubScreen(NULL);
-
- if (SDL_Display == NULL) {
- D(bug("Cannot lock display...\n"));
- SDL_SetError("Couldn't lock the display");
- return (-1);
- }
- this->info.current_w = SDL_Display->Width;
- this->info.current_h = SDL_Display->Height;
-
- D(bug("Checking if we are using a CGX native display...\n"));
-
- if (!IsCyberModeID(GetVPModeID(&SDL_Display->ViewPort))) {
- Uint32 okid =
- BestCModeIDTags(CYBRBIDTG_NominalWidth, SDL_Display->Width,
- CYBRBIDTG_NominalHeight, SDL_Display->Height,
- CYBRBIDTG_Depth, 8,
- TAG_DONE);
-
- D(bug("Default visual is not CGX native!\n"));
-
- UnlockPubScreen(NULL, SDL_Display);
-
- GFX_Display = NULL;
-
- if (okid != INVALID_ID) {
- GFX_Display = OpenScreenTags(NULL,
- SA_Width, SDL_Display->Width,
- SA_Height, SDL_Display->Height,
- SA_Depth, 8, SA_Quiet, TRUE,
- SA_ShowTitle, FALSE,
- SA_DisplayID, okid, TAG_DONE);
- }
-
- if (!GFX_Display) {
- SDL_SetError("Unable to open a suited CGX display");
- return -1;
- } else
- SDL_Display = GFX_Display;
-
- } else
- GFX_Display = SDL_Display;
-
-
- /* See whether or not we need to swap pixels */
-
- swap_pixels = 0;
-
-// Non e' detto che sia cosi' pero', alcune schede potrebbero gestire i modi in modo differente
-
- if (SDL_BYTEORDER == SDL_LIL_ENDIAN) {
- swap_pixels = 1;
- }
-
- D(bug("Before GetVideoModes....\n"));
-
- /* Get the available video modes */
- if (CGX_GetVideoModes(this) < 0)
- return -1;
-
- /* Determine the default screen depth:
- Use the default visual (or at least one with the same depth) */
-
- for (i = 0; i < this->hidden->nvisuals; i++)
- if (this->hidden->visuals[i].depth ==
- GetCyberMapAttr(SDL_Display->RastPort.BitMap, CYBRMATTR_DEPTH))
- break;
- if (i == this->hidden->nvisuals) {
- /* default visual was useless, take the deepest one instead */
- i = 0;
- }
- SDL_Visual = this->hidden->visuals[i].visual;
-
-// SDL_XColorMap = SDL_DisplayColormap;
-
- this->hidden->depth = this->hidden->visuals[i].depth;
- D(bug("Init: Setting screen depth to: %ld\n", this->hidden->depth));
- vformat->BitsPerPixel = this->hidden->visuals[i].depth; /* this->hidden->visuals[i].bpp; */
-
- {
- int form;
- APTR handle;
- struct DisplayInfo info;
-
- if (!(handle = FindDisplayInfo(this->hidden->visuals[i].visual))) {
- D(bug("Unable to get visual info...\n"));
- return -1;
- }
-
- if (!GetDisplayInfoData
- (handle, (char *) &info, sizeof(struct DisplayInfo), DTAG_DISP,
- NULL)) {
- D(bug("Unable to get visual info data...\n"));
- return -1;
- }
-
- form = GetCyberIDAttr(CYBRIDATTR_PIXFMT, SDL_Visual);
-
-// In this case I use makebitmask in a way that I'm sure I'll get PIXFMT pixel mask
-
- if (vformat->BitsPerPixel > 8) {
- vformat->Rmask = MakeBitMask(this, 0, form, &this->hidden->depth);
- vformat->Gmask = MakeBitMask(this, 1, form, &this->hidden->depth);
- vformat->Bmask = MakeBitMask(this, 2, form, &this->hidden->depth);
- }
- }
-
- /* See if we have been passed a window to use */
-/* SDL_windowid = SDL_getenv("SDL_WINDOWID"); */
- SDL_windowid = NULL;
-
- /* Create the blank cursor */
- SDL_BlankCursor = AllocMem(16, MEMF_CHIP | MEMF_CLEAR);
-
- /* Fill in some window manager capabilities */
- this->info.wm_available = 1;
- this->info.blit_hw = 1;
- this->info.blit_hw_CC = 1;
- this->info.blit_sw = 1;
- this->info.blit_fill = 1;
- this->info.video_mem = 2000000; // Not always true but almost any Amiga card has this memory!
-
- this->hidden->same_format = 0;
- SDL_RastPort = &SDL_Display->RastPort;
- /* We're done! */
- D(bug("End of CGX_VideoInit\n"));
-
- return (0);
-}
-
-void
-CGX_DestroyWindow(_THIS, SDL_Surface * screen)
-{
- D(bug("Destroy Window...\n"));
-
- if (!SDL_windowid) {
- /* Hide the managed window */
- int was_fullscreen = 0;
-
- /* Clean up OpenGL */
- if (screen) {
- screen->flags &= ~SDL_INTERNALOPENGL;
- }
-
- if (screen && (screen->flags & SDL_FULLSCREEN)) {
- was_fullscreen = 1;
- screen->flags &= ~SDL_FULLSCREEN;
-// CGX_LeaveFullScreen(this); tolto x crash
- }
-
- /* Destroy the output window */
- if (SDL_Window) {
- CloseWindow(SDL_Window);
- SDL_Window = NULL;
- }
-
- /* Free the colormap entries */
- if (SDL_XPixels) {
- int numcolors;
- unsigned long pixel;
-
- if (this->screen->format && this->hidden->depth == 8
- && !was_fullscreen) {
- numcolors = 1 << this->screen->format->BitsPerPixel;
-
- if (numcolors > 256)
- numcolors = 256;
-
- if (!was_fullscreen && this->hidden->depth == 8) {
- for (pixel = 0; pixel < numcolors; pixel++) {
- if (SDL_XPixels[pixel] >= 0)
- ReleasePen(GFX_Display->ViewPort.
- ColorMap, SDL_XPixels[pixel]);
- }
- }
- }
- SDL_free(SDL_XPixels);
- SDL_XPixels = NULL;
- }
- }
-}
-
-static void
-CGX_SetSizeHints(_THIS, int w, int h, Uint32 flags)
-{
- if (flags & SDL_RESIZABLE) {
- WindowLimits(SDL_Window, 32, 32, 4096, 4096);
- } else {
- WindowLimits(SDL_Window, w, h, w, h);
- }
- if (flags & SDL_FULLSCREEN) {
- flags &= ~SDL_RESIZABLE;
- } else if (SDL_getenv("SDL_VIDEO_CENTERED")) {
- int display_w, display_h;
-
- display_w = SDL_Display->Width;
- display_h = SDL_Display->Height;
- ChangeWindowBox(SDL_Window,
- (display_w - w - SDL_Window->BorderLeft -
- SDL_Window->BorderRight) / 2,
- (display_h - h - SDL_Window->BorderTop -
- SDL_Window->BorderBottom) / 2,
- w + SDL_Window->BorderLeft +
- SDL_Window->BorderRight,
- h + SDL_Window->BorderTop + SDL_Window->BorderBottom);
- }
-}
-
-int
-CGX_CreateWindow(_THIS, SDL_Surface * screen,
- int w, int h, int bpp, Uint32 flags)
-{
-#if 0
- int i, depth;
- Uint32 vis;
-#endif
- D(bug("CGX_CreateWindow\n"));
-
- /* If a window is already present, destroy it and start fresh */
- if (SDL_Window) {
- CGX_DestroyWindow(this, screen);
- }
-
- /* See if we have been given a window id */
- if (SDL_windowid) {
- SDL_Window = (struct Window *) atol(SDL_windowid);
- } else {
- SDL_Window = 0;
- }
-
- /* find out which visual we are going to use */
-#if 0
-/* questo l'ho spostato nell'apertura dello schermo, in quanto su Amiga le finestre
- hanno il pixel mode degli schermi.
- */
- /*if ( flags & SDL_INTERNALOPENGL ) {
- SDL_SetError("OpenGL not supported by the Amiga SDL!");
- return -1;
- }
- else { */
- for (i = 0; i < this->hidden->nvisuals; i++) {
- if (this->hidden->visuals[i].depth == bpp) /* era .depth */
- break;
- }
- if (i == this->hidden->nvisuals) {
- SDL_SetError("No matching visual for requested depth");
- return -1; /* should never happen */
- }
- vis = this->hidden->visuals[i].visual;
- depth = this->hidden->visuals[i].depth;
-// }
- SDL_Visual = vis;
- this->hidden->depth = depth;
- D(bug("Setting screen depth to: %ld\n", this->hidden->depth));
-#endif
-
- /* Allocate the new pixel format for this video mode */
- {
- Uint32 form;
- APTR handle;
- struct DisplayInfo info;
-
- if (!(handle = FindDisplayInfo(SDL_Visual)))
- return -1;
-
- if (!GetDisplayInfoData
- (handle, (char *) &info, sizeof(struct DisplayInfo), DTAG_DISP,
- NULL))
- return -1;
-
- form = GetCyberIDAttr(CYBRIDATTR_PIXFMT, SDL_Visual);
-
- if (flags & SDL_HWSURFACE) {
- if (bpp != this->hidden->depth) {
- bpp = this->hidden->depth;
- D(bug("Accel forces bpp to be equal (%ld)\n", bpp));
- }
- }
-
- D(bug
- ("BEFORE screen allocation: bpp:%ld (real:%ld)\n", bpp,
- this->hidden->depth));
-
-/* With this call if needed I'll revert the wanted bpp to a bpp best suited for the display, actually occurs
- only with requested format 15/16bit and display format != 15/16bit
- */
-
- if (!SDL_ReallocFormat(screen, bpp,
- MakeBitMask(this, 0, form, &bpp),
- MakeBitMask(this, 1, form, &bpp),
- MakeBitMask(this, 2, form, &bpp), 0))
- return -1;
-
- D(bug
- ("AFTER screen allocation: bpp:%ld (real:%ld)\n", bpp,
- this->hidden->depth));
-
- }
-
- /* Create the appropriate colormap */
-/*
- if ( SDL_XColorMap != SDL_DisplayColormap ) {
- XFreeColormap(SDL_Display, SDL_XColorMap);
- }
-*/
- if (GetCyberMapAttr(SDL_Display->RastPort.BitMap, CYBRMATTR_PIXFMT) ==
- PIXFMT_LUT8 || bpp == 8) {
- int ncolors, i;
- D(bug("XPixels palette allocation...\n"));
-
- /* Allocate the pixel flags */
-
- if (bpp == 8)
- ncolors = 256;
- else
- ncolors = 1 << screen->format->BitsPerPixel;
-
- SDL_XPixels = (Sint32 *) SDL_malloc(ncolors * sizeof(Sint32));
-
- if (SDL_XPixels == NULL) {
- SDL_OutOfMemory();
- return -1;
- }
-
-
- for (i = 0; i < ncolors; i++)
- SDL_XPixels[i] = -1;
-
- /* always allocate a private colormap on non-default visuals */
- if (bpp == 8)
- flags |= SDL_HWPALETTE;
-
- if (flags & SDL_HWPALETTE)
- screen->flags |= SDL_HWPALETTE;
- }
-
- /* resize the (possibly new) window manager window */
-
- /* Create (or use) the X11 display window */
-
- if (!SDL_windowid) {
- if (flags & SDL_FULLSCREEN) {
- SDL_Window = OpenWindowTags(NULL, WA_Width, w, WA_Height, h,
- WA_Flags,
- WFLG_ACTIVATE | WFLG_RMBTRAP |
- WFLG_BORDERLESS | WFLG_BACKDROP |
- WFLG_REPORTMOUSE, WA_IDCMP,
- IDCMP_RAWKEY | IDCMP_MOUSEBUTTONS
- | IDCMP_MOUSEMOVE,
- WA_CustomScreen,
- (ULONG) SDL_Display, TAG_DONE);
-
- D(bug
- ("Opening backdrop window %ldx%ld on display %lx!\n", w, h,
- SDL_Display));
- } else {
- /* Create GimmeZeroZero window when OpenGL is used */
- unsigned long gzz = FALSE;
- if (flags & SDL_INTERNALOPENGL) {
- gzz = TRUE;
- }
-
- SDL_Window =
- OpenWindowTags(NULL, WA_InnerWidth, w, WA_InnerHeight, h,
- WA_Flags,
- WFLG_REPORTMOUSE | WFLG_ACTIVATE |
- WFLG_RMBTRAP | ((flags & SDL_NOFRAME) ? 0
- : (WFLG_DEPTHGADGET |
- WFLG_CLOSEGADGET |
- WFLG_DRAGBAR |
- ((flags &
- SDL_RESIZABLE) ?
- WFLG_SIZEGADGET |
- WFLG_SIZEBBOTTOM :
- 0))), WA_IDCMP,
- IDCMP_RAWKEY | IDCMP_CLOSEWINDOW |
- IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
- IDCMP_MOUSEMOVE, WA_PubScreen,
- (ULONG) SDL_Display, WA_GimmeZeroZero,
- gzz, TAG_DONE);
- D(bug("Opening WB window of size: %ldx%ld!\n", w, h));
- }
-
- if (!SDL_Window)
- return -1;
- }
-
- this->hidden->BytesPerPixel =
- GetCyberMapAttr(SDL_Window->RPort->BitMap, CYBRMATTR_BPPIX);
-
- if (screen->flags & SDL_DOUBLEBUF) {
- if (SDL_RastPort = SDL_malloc(sizeof(struct RastPort))) {
- InitRastPort(SDL_RastPort);
- SDL_RastPort->BitMap = this->hidden->SB[1]->sb_BitMap;
- } else
- return -1;
- } else
- SDL_RastPort = SDL_Window->RPort;
-
- if (flags & SDL_HWSURFACE)
- screen->flags |= SDL_HWSURFACE;
-
- if (!SDL_windowid) {
- CGX_SetSizeHints(this, w, h, flags);
- }
-
- /* Set our colormaps when not setting a GL mode */
-/*
- if ( ! (flags & SDL_INTERNALOPENGL) ) {
- XSetWindowColormap(SDL_Display, SDL_Window, SDL_XColorMap);
- }
-*/
-
- /* Map them both and go fullscreen, if requested */
- if (!SDL_windowid) {
- if (flags & SDL_FULLSCREEN) {
- screen->flags |= SDL_FULLSCREEN;
- currently_fullscreen = 1;
-// CGX_EnterFullScreen(this); Ci siamo gia'!
- } else {
- screen->flags &= ~SDL_FULLSCREEN;
- }
- }
- screen->w = w;
- screen->h = h;
- screen->pitch = SDL_CalculatePitch(screen);
- CGX_ResizeImage(this, screen, flags);
-
- /* Make OpenGL Context if needed */
- if (flags & SDL_INTERNALOPENGL) {
- if (this->gl_data->gl_active == 0) {
- if (CGX_GL_Init(this) < 0)
- return -1;
- else
- screen->flags |= SDL_INTERNALOPENGL;
- } else {
- if (CGX_GL_Update(this) < 0)
- return -1;
- else
- screen->flags |= SDL_INTERNALOPENGL;
- }
- }
-}
-
-int
-CGX_ResizeWindow(_THIS, SDL_Surface * screen, int w, int h, Uint32 flags)
-{
- D(bug("CGX_ResizeWindow\n"));
-
- if (!SDL_windowid) {
- /* Resize the window manager window */
- CGX_SetSizeHints(this, w, h, flags);
-
- ChangeWindowBox(SDL_Window, SDL_Window->LeftEdge,
- SDL_Window->TopEdge,
- w + SDL_Window->BorderLeft +
- SDL_Window->BorderRight,
- h + SDL_Window->BorderTop + SDL_Window->BorderBottom);
-
- screen->w = w;
- screen->h = h;
- screen->pitch = SDL_CalculatePitch(screen);
- CGX_ResizeImage(this, screen, flags);
- }
- return (0);
-}
-
-static SDL_Surface *
-CGX_SetVideoMode(_THIS, SDL_Surface * current,
- int width, int height, int bpp, Uint32 flags)
-{
- Uint32 saved_flags;
- int needcreate = 0;
-
- D(bug("CGX_SetVideoMode current:%lx\n", current));
-
- /* Lock the event thread, in multi-threading environments */
- SDL_Lock_EventThread();
-
-// Check if the window needs to be closed or can be resized
-
- if ((flags & SDL_FULLSCREEN)
- || (current && current->flags & SDL_FULLSCREEN
- && !(flags & SDL_FULLSCREEN)))
- needcreate = 1;
-
-// Check if we need to close an already existing videomode...
-
- if (current && current->flags & SDL_FULLSCREEN
- && !(flags & SDL_FULLSCREEN)) {
- unsigned long i;
- D(bug("Destroying image, window & screen!\n"));
-
- CGX_DestroyImage(this, current);
- CGX_DestroyWindow(this, current);
- DestroyScreen(this);
- GFX_Display = SDL_Display = LockPubScreen(NULL);
-
- bpp = this->hidden->depth =
- GetCyberMapAttr(SDL_Display->RastPort.BitMap, CYBRMATTR_DEPTH);
-
- for (i = 0; i < this->hidden->nvisuals; i++) {
- if (this->hidden->visuals[i].depth == bpp) /* era .depth */
- break;
- }
- if (i == this->hidden->nvisuals) {
- SDL_SetError("No matching visual for requested depth");
- return NULL; /* should never happen */
- }
- SDL_Visual = this->hidden->visuals[i].visual;
-
- D(bug("Setting screen depth to: %ld\n", this->hidden->depth));
-
- }
- /* Check the combination of flags we were passed */
- if (flags & SDL_FULLSCREEN) {
- int i;
-
- /* Clear fullscreen flag if not supported */
- if (SDL_windowid) {
- flags &= ~SDL_FULLSCREEN;
- } else if (current && current->flags & SDL_FULLSCREEN) {
- if (current->w != width ||
- current->h != height ||
- (this->hidden && this->hidden->depth != bpp)) {
- D(bug("Deleting previous window...\n"));
- CGX_DestroyImage(this, current);
- CGX_DestroyWindow(this, current);
- DestroyScreen(this);
- goto buildnewscreen;
- }
- } else
- buildnewscreen:
- {
- Uint32 okid = BestCModeIDTags(CYBRBIDTG_NominalWidth, width,
- CYBRBIDTG_NominalHeight,
- height,
- CYBRBIDTG_Depth, bpp,
- TAG_DONE);
-
- GFX_Display = NULL;
-
- D(bug("Opening screen...\n"));
-
- if (okid != INVALID_ID)
- GFX_Display = OpenScreenTags(NULL,
- SA_Width, width,
- SA_Height, height,
- SA_Quiet, TRUE,
- SA_ShowTitle, FALSE,
- SA_Depth, bpp, SA_DisplayID,
- okid, TAG_DONE);
-
- if (!GFX_Display) {
- GFX_Display = SDL_Display;
- flags &= ~SDL_FULLSCREEN;
- flags &= ~SDL_DOUBLEBUF;
- } else {
- UnlockPubScreen(NULL, SDL_Display);
- SDL_Display = GFX_Display;
-
- D(bug("Screen opened.\n"));
-
- if (flags & SDL_DOUBLEBUF) {
- int ok = 0;
- D(bug("Start of DBuffering allocations...\n"));
-
- if (this->hidden->SB[0] =
- AllocScreenBuffer(SDL_Display, NULL,
- SB_SCREEN_BITMAP)) {
-
- if (this->hidden->SB[1] =
- AllocScreenBuffer(SDL_Display, NULL, 0L)) {
- extern struct MsgPort *safeport, *dispport;
-
- safeport = CreateMsgPort();
- dispport = CreateMsgPort();
-
- if (!safeport || !dispport) {
- if (safeport) {
- DeleteMsgPort(safeport);
- safeport = NULL;
- }
- if (dispport) {
- DeleteMsgPort(dispport);
- dispport = NULL;
- }
- FreeScreenBuffer(SDL_Display,
- this->hidden->SB[0]);
- FreeScreenBuffer(SDL_Display,
- this->hidden->SB[1]);
- } else {
- extern ULONG safe_sigbit, disp_sigbit;
- int i;
-
- safe_sigbit = 1L << safeport->mp_SigBit;
- disp_sigbit = 1L << dispport->mp_SigBit;
-
- for (i = 0; i < 2; i++) {
- this->hidden->SB[i]->
- sb_DBufInfo->
- dbi_SafeMessage.
- mn_ReplyPort = safeport;
- this->hidden->SB[i]->
- sb_DBufInfo->
- dbi_DispMessage.
- mn_ReplyPort = dispport;
- }
-
- ok = 1;
- D(bug("Dbuffering enabled!\n"));
- this->hidden->dbuffer = 1;
- current->flags |= SDL_DOUBLEBUF;
- }
- } else {
- FreeScreenBuffer(SDL_Display,
- this->hidden->SB[1]);
- this->hidden->SB[0] = NULL;
- }
- }
-
- if (!ok)
- flags &= ~SDL_DOUBLEBUF;
- }
- }
-
- if (GetCyberMapAttr
- (SDL_Display->RastPort.BitMap, CYBRMATTR_DEPTH) == bpp)
- this->hidden->same_format = 1;
- }
-
- bpp = this->hidden->depth =
- GetCyberMapAttr(SDL_Display->RastPort.BitMap, CYBRMATTR_DEPTH);
- D(bug("Setting screen depth to: %ld\n", this->hidden->depth));
-
- for (i = 0; i < this->hidden->nvisuals; i++)
- if (this->hidden->visuals[i].depth == bpp) /* era .depth */
- break;
-
- if (i == this->hidden->nvisuals) {
- SDL_SetError("No matching visual for requested depth");
- return NULL; /* should never happen */
- }
- SDL_Visual = this->hidden->visuals[i].visual;
-
- }
-
- /* Set up the X11 window */
- saved_flags = current->flags;
-
- if (SDL_Window
- && (saved_flags & SDL_INTERNALOPENGL) == (flags & SDL_INTERNALOPENGL)
- && bpp == current->format->BitsPerPixel && !needcreate) {
- if (CGX_ResizeWindow(this, current, width, height, flags) < 0) {
- current = NULL;
- goto done;
- }
- } else {
- if (CGX_CreateWindow(this, current, width, height, bpp, flags) < 0) {
- current = NULL;
- goto done;
- }
- }
-
-#if 0
- /* Set up the new mode framebuffer */
- if (((current->w != width) || (current->h != height)) ||
- ((saved_flags & SDL_INTERNALOPENGL) != (flags & SDL_INTERNALOPENGL)))
- {
- current->w = width;
- current->h = height;
- current->pitch = SDL_CalculatePitch(current);
- CGX_ResizeImage(this, current, flags);
- }
-#endif
-
- current->flags |= (flags & SDL_RESIZABLE); // Resizable only if the user asked it
-
- done:
- /* Release the event thread */
- SDL_Unlock_EventThread();
-
- /* We're done! */
- return (current);
-}
-
-static int
-CGX_ToggleFullScreen(_THIS, int on)
-{
- Uint32 event_thread;
-
- /* Don't switch if we don't own the window */
- if (SDL_windowid) {
- return (0);
- }
-
- /* Don't lock if we are the event thread */
- event_thread = SDL_EventThreadID();
- if (event_thread && (SDL_ThreadID() == event_thread)) {
- event_thread = 0;
- }
- if (event_thread) {
- SDL_Lock_EventThread();
- }
- if (on) {
- this->screen->flags |= SDL_FULLSCREEN;
- CGX_EnterFullScreen(this);
- } else {
- this->screen->flags &= ~SDL_FULLSCREEN;
- CGX_LeaveFullScreen(this);
- }
-
- CGX_RefreshDisplay(this);
- if (event_thread) {
- SDL_Unlock_EventThread();
- }
-
- SDL_ResetKeyboard();
-
- return (1);
-}
-
-static void
-SetSingleColor(Uint32 fmt, unsigned char r, unsigned char g, unsigned char b,
- unsigned char *c)
-{
- switch (fmt) {
- case PIXFMT_BGR15:
- case PIXFMT_RGB15PC:
- {
- Uint16 *t = (Uint16 *) c;
- *t = (r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10);
- }
- break;
- case PIXFMT_RGB15:
- case PIXFMT_BGR15PC:
- {
- Uint16 *t = (Uint16 *) c;
- *t = (b >> 3) | ((g >> 3) << 5) | ((r >> 3) << 10);
- }
- break;
- case PIXFMT_BGR16PC:
- case PIXFMT_RGB16:
- {
- Uint16 *t = (Uint16 *) c;
- *t = (b >> 3) | ((g >> 2) << 5) | ((r >> 3) << 11);
- }
- break;
- case PIXFMT_BGR16:
- case PIXFMT_RGB16PC:
- {
- Uint16 *t = (Uint16 *) c;
- *t = (r >> 3) | ((g >> 2) << 5) | ((b >> 3) << 11);
- }
- break;
- case PIXFMT_RGB24:
- c[0] = r;
- c[1] = g;
- c[2] = b;
- c[3] = 0;
- break;
- case PIXFMT_BGR24:
- c[0] = b;
- c[1] = g;
- c[2] = r;
- c[3] = 0;
- break;
- case PIXFMT_ARGB32:
- c[0] = 0;
- c[1] = r;
- c[2] = g;
- c[3] = b;
- break;
- case PIXFMT_BGRA32:
- c[0] = b;
- c[1] = g;
- c[2] = r;
- c[3] = 0;
- break;
- case PIXFMT_RGBA32:
- c[0] = r;
- c[1] = g;
- c[2] = b;
- c[3] = 0;
- break;
-
- default:
- D(bug("Error, SetSingleColor with PIXFMT %ld!\n", fmt));
- }
-}
-
-/* Update the current mouse state and position */
-static void
-CGX_UpdateMouse(_THIS)
-{
- /* Lock the event thread, in multi-threading environments */
- SDL_Lock_EventThread();
-
- if (currently_fullscreen) {
- SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS);
- SDL_PrivateMouseMotion(0, 0, SDL_Display->MouseX,
- SDL_Display->MouseY);
- } else {
- if (SDL_Display->MouseX >=
- (SDL_Window->LeftEdge + SDL_Window->BorderLeft)
- && SDL_Display->MouseX <
- (SDL_Window->LeftEdge + SDL_Window->Width -
- SDL_Window->BorderRight)
- && SDL_Display->MouseY >=
- (SDL_Window->TopEdge + SDL_Window->BorderLeft)
- && SDL_Display->MouseY <
- (SDL_Window->TopEdge + SDL_Window->Height -
- SDL_Window->BorderBottom)) {
- SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS);
- SDL_PrivateMouseMotion(0, 0,
- SDL_Display->MouseX -
- SDL_Window->LeftEdge -
- SDL_Window->BorderLeft,
- SDL_Display->MouseY -
- SDL_Window->TopEdge -
- SDL_Window->BorderTop);
- } else {
- SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS);
- }
- }
- SDL_Unlock_EventThread();
-}
-
-static int
-CGX_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color * colors)
-{
- int i;
-
- /* Check to make sure we have a colormap allocated */
-
- /* It's easy if we have a hidden colormap */
- if ((this->screen->flags & SDL_HWPALETTE) && currently_fullscreen) {
- ULONG xcmap[256 * 3 + 2];
-
- xcmap[0] = (ncolors << 16);
- xcmap[0] += firstcolor;
-
-// D(bug("Setting %ld colors on an HWPALETTE screen\n",ncolors));
-
- for (i = 0; i < ncolors; i++) {
- xcmap[i * 3 + 1] = colors[i + firstcolor].r << 24;
- xcmap[i * 3 + 2] = colors[i + firstcolor].g << 24;
- xcmap[i * 3 + 3] = colors[i + firstcolor].b << 24;
- }
- xcmap[ncolors * 3 + 1] = 0;
- LoadRGB32(&GFX_Display->ViewPort, xcmap);
- } else {
-// XPixels are not needed on 8bit screen with hwpalette
- unsigned long pixel;
-
- if (SDL_XPixels == NULL) {
- D(bug("SetColors without colormap!"));
- return (0);
- }
-
- if (this->hidden->depth == 8) {
-// In this case I have to unalloc and realloc the full palette
- D(bug("Obtaining %ld colors on the screen\n", ncolors));
-
- /* Free existing allocated colors */
- for (pixel = 0;
- pixel < this->screen->format->palette->ncolors; ++pixel) {
- if (SDL_XPixels[pixel] >= 0)
- ReleasePen(GFX_Display->ViewPort.ColorMap,
- SDL_XPixels[pixel]);
- }
-
- /* Try to allocate all the colors */
- for (i = 0; i < this->screen->format->palette->ncolors; ++i) {
- SDL_XPixels[i] =
- ObtainBestPenA(GFX_Display->ViewPort.ColorMap,
- colors[i].r << 24,
- colors[i].g << 24,
- colors[i].b << 24, NULL);
- }
- } else {
-#ifndef USE_CGX_WRITELUTPIXEL
- Uint32 fmt;
- D(bug("Preparing a conversion pixel table...\n"));
-
- fmt =
- GetCyberMapAttr(SDL_Display->RastPort.BitMap,
- CYBRMATTR_PIXFMT);
-
- for (i = 0; i < ncolors; i++) {
- SetSingleColor(fmt, colors[firstcolor + i].r,
- colors[firstcolor + i].g,
- colors[firstcolor + i].b, (unsigned char *)
- &SDL_XPixels[firstcolor + i]);
- }
-#else
-// D(bug("Executing XPixel(%lx) remapping: (from %ld, %ld colors) first: r%ld g%ld b%ld\n",SDL_XPixels,firstcolor,ncolors,colors[firstcolor].r,colors[firstcolor].g,colors[firstcolor].b));
- for (i = 0; i < ncolors; i++)
- SDL_XPixels[i + firstcolor] =
- (colors[firstcolor + i].r << 16) +
- (colors[firstcolor + i].g << 8) + colors[firstcolor +
- i].b;
-#endif
- }
- }
-
-// Actually it cannot fail!
-
- return 1;
-}
-
-/* Note: If we are terminated, this could be called in the middle of
- another SDL video routine -- notably UpdateRects.
-*/
-static void
-CGX_VideoQuit(_THIS)
-{
- /* Shutdown everything that's still up */
- /* The event thread should be done, so we can touch SDL_Display */
- D(bug("CGX_VideoQuit\n"));
-
- if (SDL_Display != NULL) {
- /* Clean up OpenGL */
- if (this->gl_data->gl_active == 1) {
- CGX_GL_Quit(this);
- }
- /* Start shutting down the windows */
- D(bug("Destroying image...\n"));
- CGX_DestroyImage(this, this->screen);
- D(bug("Destroying window...\n"));
- CGX_DestroyWindow(this, this->screen);
-// Otherwise SDL_VideoQuit will try to free it!
- SDL_VideoSurface = NULL;
-
- CGX_FreeVideoModes(this);
-
- /* Free that blank cursor */
- if (SDL_BlankCursor != NULL) {
- FreeMem(SDL_BlankCursor, 16);
- SDL_BlankCursor = NULL;
- }
-
- /* Close the X11 graphics connection */
- this->hidden->same_format = 0;
-
- D(bug("Destroying screen...\n"));
-
- if (GFX_Display != NULL)
- DestroyScreen(this);
-
- /* Close the X11 display connection */
- SDL_Display = NULL;
-
- /* Unload GL library after X11 shuts down */
- }
-
- D(bug("Closing libraries...\n"));
-
- if (CyberGfxBase) {
- CloseLibrary(CyberGfxBase);
- CyberGfxBase = NULL;
- }
-
- if (IntuitionBase) {
- CloseLibrary((struct Library *) IntuitionBase);
- IntuitionBase = NULL;
- }
- if (GfxBase) {
- CloseLibrary((struct Library *) GfxBase);
- GfxBase = NULL;
- }
-
- if (this->screen && (this->screen->flags & SDL_HWSURFACE)) {
- /* Direct screen access, no memory buffer */
- this->screen->pixels = NULL;
- }
- D(bug("End of CGX_VideoQuit.\n"));
-
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgxvideo.h Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#ifndef _SDL_cgxvideo_h
-#define _SDL_cgxvideo_h
-
-
-#include <exec/exec.h>
-#include <cybergraphx/cybergraphics.h>
-#include <graphics/scale.h>
-#include <graphics/gfx.h>
-#include <intuition/intuition.h>
-#if defined(__SASC) || defined(STORMC4_WOS)
-#include <proto/exec.h>
-#include <proto/cybergraphics.h>
-#include <proto/graphics.h>
-#include <proto/intuition.h>
-#include <proto/console.h>
-#else
-#include <inline/exec.h>
-#include <inline/cybergraphics.h>
-#include <inline/graphics.h>
-#include <inline/intuition.h>
-#include <inline/console.h>
-#endif
-
-#include "SDL_mouse.h"
-#include "../SDL_sysvideo.h"
-#include "mydebug.h"
-
-#define USE_CGX_WRITELUTPIXEL
-
-/* Hidden "this" pointer for the video functions */
-#define _THIS SDL_VideoDevice *this
-
-/* Private display data */
-struct SDL_PrivateVideoData
-{
- struct Screen *Public_Display; /* Used for events and window management */
- struct Screen *GFX_Display; /* Used for graphics and colormap stuff */
- Uint32 SDL_VisualUnused; /* The visual used by our window */
- struct Window *SDL_Window; /* Shared by both displays (no X security?) */
- unsigned char *BlankCursor; /* The invisible cursor */
-
- char *SDL_windowid; /* Flag: true if we have been passed a window */
-
- /* The variables used for displaying graphics */
- Uint8 *Ximage; /* The X image for our window */
- int swap_pixels; /* Flag: true if display is swapped endian */
-
- /* Support for internal mouse warping */
- struct
- {
- int x;
- int y;
- } mouse_last;
- struct
- {
- int numerator;
- int denominator;
- int threshold;
- } mouse_accel;
- int mouse_relative;
-
- /* The current list of available video modes */
- SDL_Rect **modelist;
-
- /* available visuals of interest to us, sorted deepest first */
- struct
- {
- Uint32 visual;
- int depth; /* number of significant bits/pixel */
- int bpp; /* pixel quantum in bits */
- } visuals[5]; /* at most entries for 8, 15, 16, 24 */
- int nvisuals;
-
- Uint32 vis; /* current visual in use */
- int depth; /* current visual depth (not bpp) */
- int BytesPerPixel;
- int currently_fullscreen, same_format, dbuffer;
-
- /* Automatic mode switching support (entering/leaving fullscreen) */
- Uint32 switch_waiting;
- Uint32 switch_time;
-
- /* Prevent too many XSync() calls */
- int blit_queued;
-
- /* Colormap handling */
- LONG Pens;
- Sint32 *XPixels; /* A list of pixels that have been allocated, the size depends on the screen format */
- struct ScreenBuffer *SB[2];
- struct RastPort *RP;
- short *iconcolors; /* List of colors used by the icon */
-};
-
-/* Old variable names */
-#define local_X11 (this->hidden->local_X11)
-#define SDL_Display (this->hidden->Public_Display)
-#define GFX_Display (this->hidden->GFX_Display)
-#define SDL_Screen DefaultScreen(this->hidden->Public_Display)
-
-#define SDL_Visual (this->hidden->vis)
-
-#define SDL_Root RootWindow(SDL_Display, SDL_Screen)
-#define WMwindow (this->hidden->WMwindow)
-#define FSwindow (this->hidden->FSwindow)
-#define SDL_Window (this->hidden->SDL_Window)
-#define WM_DELETE_WINDOW (this->hidden->WM_DELETE_WINDOW)
-#define SDL_BlankCursor (this->hidden->BlankCursor)
-#define SDL_windowid (this->hidden->SDL_windowid)
-#define SDL_Ximage (this->hidden->Ximage)
-#define SDL_GC (this->hidden->gc)
-#define swap_pixels (this->hidden->swap_pixels)
-#define mouse_last (this->hidden->mouse_last)
-#define mouse_accel (this->hidden->mouse_accel)
-#define mouse_relative (this->hidden->mouse_relative)
-#define SDL_modelist (this->hidden->modelist)
-#define SDL_RastPort (this->hidden->RP)
-#define saved_mode (this->hidden->saved_mode)
-#define saved_view (this->hidden->saved_view)
-#define currently_fullscreen (this->hidden->currently_fullscreen)
-#define blit_queued (this->hidden->blit_queued)
-#define SDL_DisplayColormap (this->hidden->GFX_Display->ViewPort.ColorMap)
-#define SDL_XPixels (this->hidden->XPixels)
-#define SDL_iconcolors (this->hidden->iconcolors)
-
-/* Used to get the X cursor from a window-manager specific cursor */
-// extern Cursor SDL_GetWMXCursor(WMcursor *cursor);
-
-extern int CGX_CreateWindow(_THIS, SDL_Surface * screen,
- int w, int h, int bpp, Uint32 flags);
-extern int CGX_ResizeWindow(_THIS,
- SDL_Surface * screen, int w, int h, Uint32 flags);
-
-extern void CGX_DestroyWindow(_THIS, SDL_Surface * screen);
-
-extern struct Library *CyberGfxBase;
-extern struct IntuitionBase *IntuitionBase;
-extern struct GfxBase *GfxBase;
-extern struct ExecBase *SysBase;
-extern struct DosLibrary *DOSBase;
-
-struct private_hwdata
-{
- struct BitMap *bmap;
- APTR lock;
- struct SDL_VideoDevice *videodata;
- APTR mask;
- int allocated;
-};
-
-int CGX_CheckHWBlit(_THIS, SDL_Surface * src, SDL_Surface * dst);
-int CGX_FillHWRect(_THIS, SDL_Surface * dst, SDL_Rect * dstrect,
- Uint32 color);
-int CGX_SetHWColorKey(_THIS, SDL_Surface * surface, Uint32 key);
-#endif /* _SDL_x11video_h */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgxwm.c Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_version.h"
-#include "SDL_timer.h"
-#include "SDL_video.h"
-#include "SDL_syswm.h"
-#include "../../events/SDL_events_c.h"
-#include "../SDL_pixels_c.h"
-#include "SDL_cgxmodes_c.h"
-#include "SDL_cgxwm_c.h"
-
-/* This is necessary for working properly with Enlightenment, etc. */
-#define USE_ICON_WINDOW
-
-void
-CGX_SetIcon(_THIS, SDL_Surface * icon, Uint8 * mask)
-{
-/* Not yet implemented */
-}
-
-void
-CGX_SetCaption(_THIS, const char *title, const char *icon)
-{
- if (SDL_Window)
- SetWindowTitles(SDL_Window, (char *) title, NULL);
-}
-
-/* Iconify the window */
-int
-CGX_IconifyWindow(_THIS)
-{
-/* Not yet implemented */
- return 0;
-}
-
-int
-CGX_GetWMInfo(_THIS, SDL_SysWMinfo * info)
-{
- if (info->version.major <= SDL_MAJOR_VERSION) {
- return (1);
- } else {
- SDL_SetError("Application not compiled with SDL %d.%d\n",
- SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
- return (-1);
- }
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/cybergfx/SDL_cgxwm_c.h Sun Oct 29 03:39:13 2006 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- SDL - Simple DirectMedia Layer
- Copyright (C) 1997-2006 Sam Lantinga
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- Sam Lantinga
- slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_cgxvideo.h"
-
-/* Functions to be exported */
-extern void CGX_SetCaption(_THIS, const char *title, const char *icon);
-extern void CGX_SetIcon(_THIS, SDL_Surface * icon, Uint8 * mask);
-extern int CGX_IconifyWindow(_THIS);
-extern SDL_GrabMode CGX_GrabInputNoLock(_THIS, SDL_GrabMode mode);
-extern SDL_GrabMode CGX_GrabInput(_THIS, SDL_GrabMode mode);
-extern int CGX_GetWMInfo(_THIS, SDL_SysWMinfo * info);
-/* vi: set ts=4 sw=4 expandtab: */
--- a/test/testplatform.c Sun Oct 29 03:39:13 2006 +0000
+++ b/test/testplatform.c Sun Oct 29 04:09:17 2006 +0000
@@ -160,8 +160,6 @@
printf("This system is running %s\n",
#if __AIX__
"AIX"
-#elif __AMIGA__
- "AmigaOS"
#elif __BEOS__
"BeOS"
#elif __BSDI__