Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libSDL
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
libSDL
Commits
008911fd
Commit
008911fd
authored
Jan 20, 2011
by
Sam Lantinga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Nobody has stepped up to maintain an svgalib driver. Bye bye! :)
parent
75ed99ed
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1 addition
and
1220 deletions
+1
-1220
SDL.spec.in
SDL.spec.in
+1
-1
configure.in
configure.in
+0
-31
SDL_config.h.in
include/SDL_config.h.in
+0
-1
SDL_sysvideo.h
src/video/SDL_sysvideo.h
+0
-3
SDL_video.c
src/video/SDL_video.c
+0
-3
SDL_svgaevents.c
src/video/svga/SDL_svgaevents.c
+0
-420
SDL_svgaevents_c.h
src/video/svga/SDL_svgaevents_c.h
+0
-36
SDL_svgamouse.c
src/video/svga/SDL_svgamouse.c
+0
-35
SDL_svgamouse_c.h
src/video/svga/SDL_svgamouse_c.h
+0
-27
SDL_svgavideo.c
src/video/svga/SDL_svgavideo.c
+0
-604
SDL_svgavideo.h
src/video/svga/SDL_svgavideo.h
+0
-59
No files found.
SDL.spec.in
View file @
008911fd
...
...
@@ -39,7 +39,7 @@ to develop SDL applications.
%build
%ifos linux
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --disable-video-
aalib --disable-video-directfb --disable-video-ggi --disable-video-svga
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --disable-video-
directfb
%else
%configure
%endif
...
...
configure.in
View file @
008911fd
...
...
@@ -1586,36 +1586,6 @@ CheckPS3()
fi
}
dnl Find the SVGAlib includes and libraries
CheckSVGA()
{
AC_ARG_ENABLE(video-svga,
AC_HELP_STRING([--enable-video-svga], [use SVGAlib video driver [[default=no]]]),
, enable_video_svga=no)
if test x$enable_video = xyes -a x$enable_video_svga = xyes; then
AC_MSG_CHECKING(for SVGAlib (1.4.0+) support)
video_svga=no
AC_TRY_COMPILE([
#include <vga.h>
#include <vgamouse.h>
#include <vgakeyboard.h>
],[
if ( SCANCODE_RIGHTWIN && SCANCODE_LEFTWIN ) {
exit(0);
}
],[
video_svga=yes
])
AC_MSG_RESULT($video_svga)
if test x$video_svga = xyes; then
AC_DEFINE(SDL_VIDEO_DRIVER_SVGALIB)
SOURCES="$SOURCES $srcdir/src/video/svga/*.c"
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lvga"
have_video=yes
fi
fi
}
dnl rcg04172001 Set up the Null video driver.
CheckDummyVideo()
{
...
...
@@ -2276,7 +2246,6 @@ case "$host" in
CheckDirectFB
CheckFusionSound
CheckPS3
CheckSVGA
CheckOpenGLX11
CheckInputEvents
CheckTslib
...
...
include/SDL_config.h.in
View file @
008911fd
...
...
@@ -266,7 +266,6 @@
#undef SDL_VIDEO_DRIVER_QNXGF
#undef SDL_VIDEO_DRIVER_PS3
#undef SDL_VIDEO_DRIVER_RISCOS
#undef SDL_VIDEO_DRIVER_SVGALIB
#undef SDL_VIDEO_DRIVER_WIN32
#undef SDL_VIDEO_DRIVER_X11
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC
...
...
src/video/SDL_sysvideo.h
View file @
008911fd
...
...
@@ -414,9 +414,6 @@ extern VideoBootStrap DirectFB_bootstrap;
#if SDL_VIDEO_DRIVER_PS3
extern
VideoBootStrap
PS3_bootstrap
;
#endif
#if SDL_VIDEO_DRIVER_SVGALIB
extern
VideoBootStrap
SVGALIB_bootstrap
;
#endif
#if SDL_VIDEO_DRIVER_WIN32
extern
VideoBootStrap
WIN32_bootstrap
;
#endif
...
...
src/video/SDL_video.c
View file @
008911fd
...
...
@@ -68,9 +68,6 @@ static VideoBootStrap *bootstrap[] = {
#if SDL_VIDEO_DRIVER_PS3
&
PS3_bootstrap
,
#endif
#if SDL_VIDEO_DRIVER_SVGALIB
&
SVGALIB_bootstrap
,
#endif
#if SDL_VIDEO_DRIVER_WIN32
&
WIN32_bootstrap
,
#endif
...
...
src/video/svga/SDL_svgaevents.c
deleted
100644 → 0
View file @
75ed99ed
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 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 X11 events into SDL events */
#include <vga.h>
#include <vgamouse.h>
#include <vgakeyboard.h>
#if defined(__LINUX__)
#include <linux/kd.h>
#include <linux/keyboard.h>
#elif defined(__FREEBSD__)
#include <sys/kbio.h>
#else
#error You must choose your operating system here
#endif
#include "../../events/SDL_sysevents.h"
#include "../../events/SDL_events_c.h"
#include "SDL_svgavideo.h"
#include "SDL_svgaevents_c.h"
/* The translation tables from a console scancode to a SDL keysym */
#if defined(linux)
#define NUM_VGAKEYMAPS (1<<KG_CAPSSHIFT)
static
Uint16
vga_keymap
[
NUM_VGAKEYMAPS
][
NR_KEYS
];
#elif defined(__FREEBSD__)
/* FIXME: Free the keymap when we shut down the video mode */
static
keymap_t
*
vga_keymap
=
NULL
;
#else
#error You must choose your operating system here
#endif
static
SDLKey
keymap
[
128
];
static
SDL_keysym
*
TranslateKey
(
int
scancode
,
SDL_keysym
*
keysym
);
/* Ugh, we have to duplicate the kernel's keysym mapping code...
Oh, it's not so bad. :-)
FIXME: Add keyboard LED handling code
*/
#if defined(linux)
int
SVGA_initkeymaps
(
int
fd
)
{
struct
kbentry
entry
;
int
map
,
i
;
/* Load all the keysym mappings */
for
(
map
=
0
;
map
<
NUM_VGAKEYMAPS
;
++
map
)
{
SDL_memset
(
vga_keymap
[
map
],
0
,
NR_KEYS
*
sizeof
(
Uint16
));
for
(
i
=
0
;
i
<
NR_KEYS
;
++
i
)
{
entry
.
kb_table
=
map
;
entry
.
kb_index
=
i
;
if
(
ioctl
(
fd
,
KDGKBENT
,
&
entry
)
==
0
)
{
/* The "Enter" key is a special case */
if
(
entry
.
kb_value
==
K_ENTER
)
{
entry
.
kb_value
=
K
(
KT_ASCII
,
13
);
}
/* Handle numpad specially as well */
if
(
KTYP
(
entry
.
kb_value
)
==
KT_PAD
)
{
switch
(
entry
.
kb_value
)
{
case
K_P0
:
case
K_P1
:
case
K_P2
:
case
K_P3
:
case
K_P4
:
case
K_P5
:
case
K_P6
:
case
K_P7
:
case
K_P8
:
case
K_P9
:
vga_keymap
[
map
][
i
]
=
entry
.
kb_value
;
vga_keymap
[
map
][
i
]
+=
'0'
;
break
;
case
K_PPLUS
:
vga_keymap
[
map
][
i
]
=
K
(
KT_ASCII
,
'+'
);
break
;
case
K_PMINUS
:
vga_keymap
[
map
][
i
]
=
K
(
KT_ASCII
,
'-'
);
break
;
case
K_PSTAR
:
vga_keymap
[
map
][
i
]
=
K
(
KT_ASCII
,
'*'
);
break
;
case
K_PSLASH
:
vga_keymap
[
map
][
i
]
=
K
(
KT_ASCII
,
'/'
);
break
;
case
K_PENTER
:
vga_keymap
[
map
][
i
]
=
K
(
KT_ASCII
,
'\r'
);
break
;
case
K_PCOMMA
:
vga_keymap
[
map
][
i
]
=
K
(
KT_ASCII
,
','
);
break
;
case
K_PDOT
:
vga_keymap
[
map
][
i
]
=
K
(
KT_ASCII
,
'.'
);
break
;
default:
break
;
}
}
/* Do the normal key translation */
if
((
KTYP
(
entry
.
kb_value
)
==
KT_LATIN
)
||
(
KTYP
(
entry
.
kb_value
)
==
KT_ASCII
)
||
(
KTYP
(
entry
.
kb_value
)
==
KT_LETTER
))
{
vga_keymap
[
map
][
i
]
=
entry
.
kb_value
;
}
}
}
}
return
(
0
);
}
#elif defined(__FREEBSD__)
int
SVGA_initkeymaps
(
int
fd
)
{
vga_keymap
=
SDL_malloc
(
sizeof
(
keymap_t
));
if
(
!
vga_keymap
)
{
SDL_OutOfMemory
();
return
(
-
1
);
}
if
(
ioctl
(
fd
,
GIO_KEYMAP
,
vga_keymap
)
==
-
1
)
{
SDL_free
(
vga_keymap
);
vga_keymap
=
NULL
;
SDL_SetError
(
"Unable to get keyboard map"
);
return
(
-
1
);
}
return
(
0
);
}
#else
#error You must choose your operating system here
#endif
int
posted
=
0
;
void
SVGA_mousecallback
(
int
button
,
int
dx
,
int
dy
,
int
u1
,
int
u2
,
int
u3
,
int
u4
)
{
if
(
dx
||
dy
)
{
posted
+=
SDL_PrivateMouseMotion
(
0
,
1
,
dx
,
dy
);
}
if
(
button
&
MOUSE_LEFTBUTTON
)
{
if
(
!
(
SDL_GetMouseState
(
NULL
,
NULL
)
&
SDL_BUTTON
(
1
)))
{
posted
+=
SDL_PrivateMouseButton
(
SDL_PRESSED
,
1
,
0
,
0
);
}
}
else
{
if
((
SDL_GetMouseState
(
NULL
,
NULL
)
&
SDL_BUTTON
(
1
)))
{
posted
+=
SDL_PrivateMouseButton
(
SDL_RELEASED
,
1
,
0
,
0
);
}
}
if
(
button
&
MOUSE_MIDDLEBUTTON
)
{
if
(
!
(
SDL_GetMouseState
(
NULL
,
NULL
)
&
SDL_BUTTON
(
2
)))
{
posted
+=
SDL_PrivateMouseButton
(
SDL_PRESSED
,
2
,
0
,
0
);
}
}
else
{
if
((
SDL_GetMouseState
(
NULL
,
NULL
)
&
SDL_BUTTON
(
2
)))
{
posted
+=
SDL_PrivateMouseButton
(
SDL_RELEASED
,
2
,
0
,
0
);
}
}
if
(
button
&
MOUSE_RIGHTBUTTON
)
{
if
(
!
(
SDL_GetMouseState
(
NULL
,
NULL
)
&
SDL_BUTTON
(
3
)))
{
posted
+=
SDL_PrivateMouseButton
(
SDL_PRESSED
,
3
,
0
,
0
);
}
}
else
{
if
((
SDL_GetMouseState
(
NULL
,
NULL
)
&
SDL_BUTTON
(
3
)))
{
posted
+=
SDL_PrivateMouseButton
(
SDL_RELEASED
,
3
,
0
,
0
);
}
}
}
void
SVGA_keyboardcallback
(
int
scancode
,
int
pressed
)
{
SDL_keysym
keysym
;
if
(
pressed
)
{
posted
+=
SDL_PrivateKeyboard
(
SDL_PRESSED
,
TranslateKey
(
scancode
,
&
keysym
));
}
else
{
posted
+=
SDL_PrivateKeyboard
(
SDL_RELEASED
,
TranslateKey
(
scancode
,
&
keysym
));
}
}
void
SVGA_PumpEvents
(
_THIS
)
{
do
{
posted
=
0
;
mouse_update
();
keyboard_update
();
}
while
(
posted
);
}
void
SVGA_InitOSKeymap
(
_THIS
)
{
int
i
;
/* Initialize the BeOS key translation table */
for
(
i
=
0
;
i
<
SDL_arraysize
(
keymap
);
++
i
)
keymap
[
i
]
=
SDLK_UNKNOWN
;
keymap
[
SCANCODE_ESCAPE
]
=
SDLK_ESCAPE
;
keymap
[
SCANCODE_1
]
=
SDLK_1
;
keymap
[
SCANCODE_2
]
=
SDLK_2
;
keymap
[
SCANCODE_3
]
=
SDLK_3
;
keymap
[
SCANCODE_4
]
=
SDLK_4
;
keymap
[
SCANCODE_5
]
=
SDLK_5
;
keymap
[
SCANCODE_6
]
=
SDLK_6
;
keymap
[
SCANCODE_7
]
=
SDLK_7
;
keymap
[
SCANCODE_8
]
=
SDLK_8
;
keymap
[
SCANCODE_9
]
=
SDLK_9
;
keymap
[
SCANCODE_0
]
=
SDLK_0
;
keymap
[
SCANCODE_MINUS
]
=
SDLK_MINUS
;
keymap
[
SCANCODE_EQUAL
]
=
SDLK_EQUALS
;
keymap
[
SCANCODE_BACKSPACE
]
=
SDLK_BACKSPACE
;
keymap
[
SCANCODE_TAB
]
=
SDLK_TAB
;
keymap
[
SCANCODE_Q
]
=
SDLK_q
;
keymap
[
SCANCODE_W
]
=
SDLK_w
;
keymap
[
SCANCODE_E
]
=
SDLK_e
;
keymap
[
SCANCODE_R
]
=
SDLK_r
;
keymap
[
SCANCODE_T
]
=
SDLK_t
;
keymap
[
SCANCODE_Y
]
=
SDLK_y
;
keymap
[
SCANCODE_U
]
=
SDLK_u
;
keymap
[
SCANCODE_I
]
=
SDLK_i
;
keymap
[
SCANCODE_O
]
=
SDLK_o
;
keymap
[
SCANCODE_P
]
=
SDLK_p
;
keymap
[
SCANCODE_BRACKET_LEFT
]
=
SDLK_LEFTBRACKET
;
keymap
[
SCANCODE_BRACKET_RIGHT
]
=
SDLK_RIGHTBRACKET
;
keymap
[
SCANCODE_ENTER
]
=
SDLK_RETURN
;
keymap
[
SCANCODE_LEFTCONTROL
]
=
SDLK_LCTRL
;
keymap
[
SCANCODE_A
]
=
SDLK_a
;
keymap
[
SCANCODE_S
]
=
SDLK_s
;
keymap
[
SCANCODE_D
]
=
SDLK_d
;
keymap
[
SCANCODE_F
]
=
SDLK_f
;
keymap
[
SCANCODE_G
]
=
SDLK_g
;
keymap
[
SCANCODE_H
]
=
SDLK_h
;
keymap
[
SCANCODE_J
]
=
SDLK_j
;
keymap
[
SCANCODE_K
]
=
SDLK_k
;
keymap
[
SCANCODE_L
]
=
SDLK_l
;
keymap
[
SCANCODE_SEMICOLON
]
=
SDLK_SEMICOLON
;
keymap
[
SCANCODE_APOSTROPHE
]
=
SDLK_QUOTE
;
keymap
[
SCANCODE_GRAVE
]
=
SDLK_BACKQUOTE
;
keymap
[
SCANCODE_LEFTSHIFT
]
=
SDLK_LSHIFT
;
keymap
[
SCANCODE_BACKSLASH
]
=
SDLK_BACKSLASH
;
keymap
[
SCANCODE_Z
]
=
SDLK_z
;
keymap
[
SCANCODE_X
]
=
SDLK_x
;
keymap
[
SCANCODE_C
]
=
SDLK_c
;
keymap
[
SCANCODE_V
]
=
SDLK_v
;
keymap
[
SCANCODE_B
]
=
SDLK_b
;
keymap
[
SCANCODE_N
]
=
SDLK_n
;
keymap
[
SCANCODE_M
]
=
SDLK_m
;
keymap
[
SCANCODE_COMMA
]
=
SDLK_COMMA
;
keymap
[
SCANCODE_PERIOD
]
=
SDLK_PERIOD
;
keymap
[
SCANCODE_SLASH
]
=
SDLK_SLASH
;
keymap
[
SCANCODE_RIGHTSHIFT
]
=
SDLK_RSHIFT
;
keymap
[
SCANCODE_KEYPADMULTIPLY
]
=
SDLK_KP_MULTIPLY
;
keymap
[
SCANCODE_LEFTALT
]
=
SDLK_LALT
;
keymap
[
SCANCODE_SPACE
]
=
SDLK_SPACE
;
keymap
[
SCANCODE_CAPSLOCK
]
=
SDLK_CAPSLOCK
;
keymap
[
SCANCODE_F1
]
=
SDLK_F1
;
keymap
[
SCANCODE_F2
]
=
SDLK_F2
;
keymap
[
SCANCODE_F3
]
=
SDLK_F3
;
keymap
[
SCANCODE_F4
]
=
SDLK_F4
;
keymap
[
SCANCODE_F5
]
=
SDLK_F5
;
keymap
[
SCANCODE_F6
]
=
SDLK_F6
;
keymap
[
SCANCODE_F7
]
=
SDLK_F7
;
keymap
[
SCANCODE_F8
]
=
SDLK_F8
;
keymap
[
SCANCODE_F9
]
=
SDLK_F9
;
keymap
[
SCANCODE_F10
]
=
SDLK_F10
;
keymap
[
SCANCODE_NUMLOCK
]
=
SDLK_NUMLOCK
;
keymap
[
SCANCODE_SCROLLLOCK
]
=
SDLK_SCROLLOCK
;
keymap
[
SCANCODE_KEYPAD7
]
=
SDLK_KP7
;
keymap
[
SCANCODE_CURSORUPLEFT
]
=
SDLK_KP7
;
keymap
[
SCANCODE_KEYPAD8
]
=
SDLK_KP8
;
keymap
[
SCANCODE_CURSORUP
]
=
SDLK_KP8
;
keymap
[
SCANCODE_KEYPAD9
]
=
SDLK_KP9
;
keymap
[
SCANCODE_CURSORUPRIGHT
]
=
SDLK_KP9
;
keymap
[
SCANCODE_KEYPADMINUS
]
=
SDLK_KP_MINUS
;
keymap
[
SCANCODE_KEYPAD4
]
=
SDLK_KP4
;
keymap
[
SCANCODE_CURSORLEFT
]
=
SDLK_KP4
;
keymap
[
SCANCODE_KEYPAD5
]
=
SDLK_KP5
;
keymap
[
SCANCODE_KEYPAD6
]
=
SDLK_KP6
;
keymap
[
SCANCODE_CURSORRIGHT
]
=
SDLK_KP6
;
keymap
[
SCANCODE_KEYPADPLUS
]
=
SDLK_KP_PLUS
;
keymap
[
SCANCODE_KEYPAD1
]
=
SDLK_KP1
;
keymap
[
SCANCODE_CURSORDOWNLEFT
]
=
SDLK_KP1
;
keymap
[
SCANCODE_KEYPAD2
]
=
SDLK_KP2
;
keymap
[
SCANCODE_CURSORDOWN
]
=
SDLK_KP2
;
keymap
[
SCANCODE_KEYPAD3
]
=
SDLK_KP3
;
keymap
[
SCANCODE_CURSORDOWNRIGHT
]
=
SDLK_KP3
;
keymap
[
SCANCODE_KEYPAD0
]
=
SDLK_KP0
;
keymap
[
SCANCODE_KEYPADPERIOD
]
=
SDLK_KP_PERIOD
;
keymap
[
SCANCODE_LESS
]
=
SDLK_LESS
;
keymap
[
SCANCODE_F11
]
=
SDLK_F11
;
keymap
[
SCANCODE_F12
]
=
SDLK_F12
;
keymap
[
SCANCODE_KEYPADENTER
]
=
SDLK_KP_ENTER
;
keymap
[
SCANCODE_RIGHTCONTROL
]
=
SDLK_RCTRL
;
keymap
[
SCANCODE_CONTROL
]
=
SDLK_RCTRL
;
keymap
[
SCANCODE_KEYPADDIVIDE
]
=
SDLK_KP_DIVIDE
;
keymap
[
SCANCODE_PRINTSCREEN
]
=
SDLK_PRINT
;
keymap
[
SCANCODE_RIGHTALT
]
=
SDLK_RALT
;
keymap
[
SCANCODE_BREAK
]
=
SDLK_BREAK
;
keymap
[
SCANCODE_BREAK_ALTERNATIVE
]
=
SDLK_UNKNOWN
;
keymap
[
SCANCODE_HOME
]
=
SDLK_HOME
;
keymap
[
SCANCODE_CURSORBLOCKUP
]
=
SDLK_UP
;
keymap
[
SCANCODE_PAGEUP
]
=
SDLK_PAGEUP
;
keymap
[
SCANCODE_CURSORBLOCKLEFT
]
=
SDLK_LEFT
;
keymap
[
SCANCODE_CURSORBLOCKRIGHT
]
=
SDLK_RIGHT
;
keymap
[
SCANCODE_END
]
=
SDLK_END
;
keymap
[
SCANCODE_CURSORBLOCKDOWN
]
=
SDLK_DOWN
;
keymap
[
SCANCODE_PAGEDOWN
]
=
SDLK_PAGEDOWN
;
keymap
[
SCANCODE_INSERT
]
=
SDLK_INSERT
;
keymap
[
SCANCODE_REMOVE
]
=
SDLK_DELETE
;
keymap
[
119
]
=
SDLK_PAUSE
;
keymap
[
SCANCODE_RIGHTWIN
]
=
SDLK_RSUPER
;
keymap
[
SCANCODE_LEFTWIN
]
=
SDLK_LSUPER
;
keymap
[
127
]
=
SDLK_MENU
;
}
#if defined(linux)
static
SDL_keysym
*
TranslateKey
(
int
scancode
,
SDL_keysym
*
keysym
)
{
/* Set the keysym information */
keysym
->
scancode
=
scancode
;
keysym
->
sym
=
keymap
[
scancode
];
keysym
->
mod
=
KMOD_NONE
;
/* If UNICODE is on, get the UNICODE value for the key */
keysym
->
unicode
=
0
;
if
(
SDL_TranslateUNICODE
)
{
int
map
;
SDLMod
modstate
;
modstate
=
SDL_GetModState
();
map
=
0
;
if
(
modstate
&
KMOD_SHIFT
)
{
map
|=
(
1
<<
KG_SHIFT
);
}
if
(
modstate
&
KMOD_CTRL
)
{
map
|=
(
1
<<
KG_CTRL
);
}
if
(
modstate
&
KMOD_ALT
)
{
map
|=
(
1
<<
KG_ALT
);
}
if
(
modstate
&
KMOD_MODE
)
{
map
|=
(
1
<<
KG_ALTGR
);
}
if
(
KTYP
(
vga_keymap
[
map
][
scancode
])
==
KT_LETTER
)
{
if
(
modstate
&
KMOD_CAPS
)
{
map
^=
(
1
<<
KG_SHIFT
);
}
}
if
(
KTYP
(
vga_keymap
[
map
][
scancode
])
==
KT_PAD
)
{
if
(
modstate
&
KMOD_NUM
)
{
keysym
->
unicode
=
KVAL
(
vga_keymap
[
map
][
scancode
]);
}
}
else
{
keysym
->
unicode
=
KVAL
(
vga_keymap
[
map
][
scancode
]);
}
}
return
(
keysym
);
}
#elif defined(__FREEBSD__)
static
SDL_keysym
*
TranslateKey
(
int
scancode
,
SDL_keysym
*
keysym
)
{
/* Set the keysym information */
keysym
->
scancode
=
scancode
;
keysym
->
sym
=
keymap
[
scancode
];
keysym
->
mod
=
KMOD_NONE
;
/* If UNICODE is on, get the UNICODE value for the key */
keysym
->
unicode
=
0
;
if
(
SDL_TranslateUNICODE
&&
vga_keymap
)
{
int
map
;
SDLMod
modstate
;
modstate
=
SDL_GetModState
();
map
=
0
;
if
(
modstate
&
KMOD_SHIFT
)
{
map
+=
1
;
}
if
(
modstate
&
KMOD_CTRL
)
{
map
+=
2
;
}
if
(
modstate
&
KMOD_ALT
)
{
map
+=
4
;
}
if
(
!
(
vga_keymap
->
key
[
scancode
].
spcl
&
(
0x80
>>
map
)))
{
keysym
->
unicode
=
vga_keymap
->
key
[
scancode
].
map
[
map
];
}
}
return
(
keysym
);
}
#else
#error You must choose your operating system here
#endif
/* vi: set ts=4 sw=4 expandtab: */
src/video/svga/SDL_svgaevents_c.h
deleted
100644 → 0
View file @
75ed99ed
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 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_svgavideo.h"
/* Variables and functions exported by SDL_sysevents.c to other parts
of the native video subsystem (SDL_sysvideo.c)
*/
extern
int
SVGA_initkeymaps
(
int
fd
);
extern
void
SVGA_mousecallback
(
int
button
,
int
dx
,
int
dy
,
int
u1
,
int
u2
,
int
u3
,
int
u4
);
extern
void
SVGA_keyboardcallback
(
int
scancode
,
int
pressed
);
extern
void
SVGA_InitOSKeymap
(
_THIS
);
extern
void
SVGA_PumpEvents
(
_THIS
);
/* vi: set ts=4 sw=4 expandtab: */
src/video/svga/SDL_svgamouse.c
deleted
100644 → 0
View file @
75ed99ed
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 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_svgavideo.h"
#include "SDL_svgamouse_c.h"
/* The implementation dependent data for the window manager cursor */
struct
WMcursor
{
int
unused
;
};
/* vi: set ts=4 sw=4 expandtab: */
src/video/svga/SDL_svgamouse_c.h
deleted
100644 → 0
View file @
75ed99ed
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 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_svgavideo.h"
/* Functions to be exported */
/* vi: set ts=4 sw=4 expandtab: */
src/video/svga/SDL_svgavideo.c
deleted
100644 → 0
View file @
75ed99ed
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 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"
/* SVGAlib based SDL video driver implementation.
*/
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#if defined(__LINUX__)
#include <linux/vt.h>
#elif defined(__FREEBSD__)
#include <sys/consio.h>
#else
#error You must choose your operating system here
#endif
#include <vga.h>
#include <vgamouse.h>
#include <vgakeyboard.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_svgavideo.h"
#include "SDL_svgaevents_c.h"
#include "SDL_svgamouse_c.h"
/* Initialization/Query functions */
static
int
SVGA_VideoInit
(
_THIS
,
SDL_PixelFormat
*
vformat
);
static
SDL_Rect
**
SVGA_ListModes
(
_THIS
,
SDL_PixelFormat
*
format
,
Uint32
flags
);
static
SDL_Surface
*
SVGA_SetVideoMode
(
_THIS
,
SDL_Surface
*
current
,
int
width
,
int
height
,
int
bpp
,
Uint32
flags
);
static
int
SVGA_SetColors
(
_THIS
,
int
firstcolor
,
int
ncolors
,
SDL_Color
*
colors
);
static
void
SVGA_VideoQuit
(
_THIS
);
/* Hardware surface functions */
static
int
SVGA_AllocHWSurface
(
_THIS
,
SDL_Surface
*
surface
);
static
int
SVGA_LockHWSurface
(
_THIS
,
SDL_Surface
*
surface
);
static
int
SVGA_FlipHWSurface
(
_THIS
,
SDL_Surface
*
surface
);
static
void
SVGA_UnlockHWSurface
(
_THIS
,
SDL_Surface
*
surface
);
static
void
SVGA_FreeHWSurface
(
_THIS
,
SDL_Surface
*
surface
);
/* SVGAlib driver bootstrap functions */
static
int
SVGA_Available
(
void
)
{
/* Check to see if we are root and stdin is a virtual console */
int
console
;
/* SVGALib 1.9.x+ doesn't require root (via /dev/svga) */
int
svgalib2
=
-
1
;
/* See if we are connected to a virtual terminal */
console
=
STDIN_FILENO
;
#if 0 /* This is no longer needed, SVGAlib can switch consoles for us */
if (console >= 0) {
struct stat sb;
struct vt_mode dummy;
if ((fstat(console, &sb) < 0) ||
(ioctl(console, VT_GETMODE, &dummy) < 0)) {
console = -1;
}
}
#endif /* 0 */
/* See if SVGAlib 2.0 is available */
svgalib2
=
open
(
"/dev/svga"
,
O_RDONLY
);
if
(
svgalib2
!=
-
1
)
{
close
(
svgalib2
);
}
return
(((
svgalib2
!=
-
1
)
||
(
geteuid
()
==
0
))
&&
(
console
>=
0
));
}
static
void
SVGA_DeleteDevice
(
SDL_VideoDevice
*
device
)
{
SDL_free
(
device
->
hidden
);
SDL_free
(
device
);
}
static
SDL_VideoDevice
*
SVGA_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
));
}
if
((
device
==
NULL
)
||
(
device
->
hidden
==
NULL
))
{
SDL_OutOfMemory
();
if
(
device
)
{
SDL_free
(
device
);
}
return
(
0
);
}
SDL_memset
(
device
->
hidden
,
0
,
(
sizeof
*
device
->
hidden
));
/* Set the function pointers */
device
->
VideoInit
=
SVGA_VideoInit
;
device
->
ListModes
=
SVGA_ListModes
;
device
->
SetVideoMode
=
SVGA_SetVideoMode
;
device
->
SetColors
=
SVGA_SetColors
;
device
->
UpdateRects
=
NULL
;
device
->
VideoQuit
=
SVGA_VideoQuit
;
device
->
AllocHWSurface
=
SVGA_AllocHWSurface
;
device
->
CheckHWBlit
=
NULL
;
device
->
FillHWRect
=
NULL
;
device
->
SetHWColorKey
=
NULL
;
device
->
SetHWAlpha
=
NULL
;
device
->
LockHWSurface
=
SVGA_LockHWSurface
;
device
->
UnlockHWSurface
=
SVGA_UnlockHWSurface
;
device
->
FlipHWSurface
=
SVGA_FlipHWSurface
;
device
->
FreeHWSurface
=
SVGA_FreeHWSurface
;
device
->
SetCaption
=
NULL
;
device
->
SetIcon
=
NULL
;
device
->
IconifyWindow
=
NULL
;
device
->
GrabInput
=
NULL
;
device
->
GetWMInfo
=
NULL
;
device
->
InitOSKeymap
=
SVGA_InitOSKeymap
;
device
->
PumpEvents
=
SVGA_PumpEvents
;
device
->
free
=
SVGA_DeleteDevice
;
return
device
;
}
VideoBootStrap
SVGALIB_bootstrap
=
{
"svgalib"
,
"SVGAlib"
,
SVGA_Available
,
SVGA_CreateDevice
};
static
int
SVGA_AddMode
(
_THIS
,
int
mode
,
int
actually_add
)
{
int
i
,
j
;
vga_modeinfo
*
modeinfo
;
modeinfo
=
vga_getmodeinfo
(
mode
);
i
=
modeinfo
->
bytesperpixel
-
1
;
if
(
i
<
0
)
{
return
0
;
}
if
(
actually_add
)
{
SDL_Rect
saved_rect
[
2
];
int
saved_mode
[
2
];
int
b
;
/* Add the mode, sorted largest to smallest */
b
=
0
;
j
=
0
;
while
((
SDL_modelist
[
i
][
j
]
->
w
>
modeinfo
->
width
)
||
(
SDL_modelist
[
i
][
j
]
->
h
>
modeinfo
->
height
))
{
++
j
;
}
/* Skip modes that are already in our list */
if
((
SDL_modelist
[
i
][
j
]
->
w
==
modeinfo
->
width
)
&&
(
SDL_modelist
[
i
][
j
]
->
h
==
modeinfo
->
height
))
{
return
(
0
);
}
/* Insert the new mode */
saved_rect
[
b
]
=
*
SDL_modelist
[
i
][
j
];
saved_mode
[
b
]
=
SDL_vgamode
[
i
][
j
];
SDL_modelist
[
i
][
j
]
->
w
=
modeinfo
->
width
;
SDL_modelist
[
i
][
j
]
->
h
=
modeinfo
->
height
;
SDL_vgamode
[
i
][
j
]
=
mode
;
/* Everybody scoot down! */
if
(
saved_rect
[
b
].
w
&&
saved_rect
[
b
].
h
)
{
for
(
++
j
;
SDL_modelist
[
i
][
j
]
->
w
;
++
j
)
{
saved_rect
[
!
b
]
=
*
SDL_modelist
[
i
][
j
];
saved_mode
[
!
b
]
=
SDL_vgamode
[
i
][
j
];
*
SDL_modelist
[
i
][
j
]
=
saved_rect
[
b
];
SDL_vgamode
[
i
][
j
]
=
saved_mode
[
b
];
b
=
!
b
;
}
*
SDL_modelist
[
i
][
j
]
=
saved_rect
[
b
];
SDL_vgamode
[
i
][
j
]
=
saved_mode
[
b
];
}
}
else
{
++
SDL_nummodes
[
i
];
}
return
(
1
);
}
static
void
SVGA_UpdateVideoInfo
(
_THIS
)
{
vga_modeinfo
*
modeinfo
;
this
->
info
.
wm_available
=
0
;
this
->
info
.
hw_available
=
(
banked
?
0
:
1
);
modeinfo
=
vga_getmodeinfo
(
vga_getcurrentmode
());
this
->
info
.
video_mem
=
modeinfo
->
memory
;
/* FIXME: Add hardware accelerated blit information */
#ifdef SVGALIB_DEBUG
printf
(
"Hardware accelerated blit: %savailable
\n
"
,
modeinfo
->
haveblit
?
""
:
"not "
);
#endif
}
int
SVGA_VideoInit
(
_THIS
,
SDL_PixelFormat
*
vformat
)
{
int
keyboard
;
int
i
,
j
;
int
mode
,
total_modes
;
/* Initialize all variables that we clean on shutdown */
for
(
i
=
0
;
i
<
NUM_MODELISTS
;
++
i
)
{
SDL_nummodes
[
i
]
=
0
;
SDL_modelist
[
i
]
=
NULL
;
SDL_vgamode
[
i
]
=
NULL
;
}
/* Initialize the library */
vga_disabledriverreport
();
if
(
vga_init
()
<
0
)
{
SDL_SetError
(
"Unable to initialize SVGAlib"
);
return
(
-
1
);
}
vga_setmode
(
TEXT
);
/* Enable mouse and keyboard support */
vga_setmousesupport
(
1
);
keyboard
=
keyboard_init_return_fd
();
if
(
keyboard
<
0
)
{
SDL_SetError
(
"Unable to initialize keyboard"
);
return
(
-
1
);
}
if
(
SVGA_initkeymaps
(
keyboard
)
<
0
)
{
return
(
-
1
);
}
keyboard_seteventhandler
(
SVGA_keyboardcallback
);
/* Determine the current screen size */
this
->
info
.
current_w
=
0
;
this
->
info
.
current_h
=
0
;
/* Determine the screen depth (use default 8-bit depth) */
vformat
->
BitsPerPixel
=
8
;
/* Enumerate the available fullscreen modes */
total_modes
=
0
;
for
(
mode
=
vga_lastmodenumber
();
mode
;
--
mode
)
{
if
(
vga_hasmode
(
mode
))
{
if
(
SVGA_AddMode
(
this
,
mode
,
0
))
{
++
total_modes
;
}
}
}
if
(
SVGA_AddMode
(
this
,
G320x200x256
,
0
))
++
total_modes
;
if
(
total_modes
==
0
)
{
SDL_SetError
(
"No linear video modes available"
);
return
(
-
1
);
}
for
(
i
=
0
;
i
<
NUM_MODELISTS
;
++
i
)
{
SDL_vgamode
[
i
]
=
(
int
*
)
SDL_malloc
(
SDL_nummodes
[
i
]
*
sizeof
(
int
));
if
(
SDL_vgamode
[
i
]
==
NULL
)
{
SDL_OutOfMemory
();
return
(
-
1
);
}
SDL_modelist
[
i
]
=
(
SDL_Rect
**
)
SDL_malloc
((
SDL_nummodes
[
i
]
+
1
)
*
sizeof
(
SDL_Rect
*
));
if
(
SDL_modelist
[
i
]
==
NULL
)
{
SDL_OutOfMemory
();
return
(
-
1
);
}
for
(
j
=
0
;
j
<
SDL_nummodes
[
i
];
++
j
)
{
SDL_modelist
[
i
][
j
]
=
(
SDL_Rect
*
)
SDL_malloc
(
sizeof
(
SDL_Rect
));
if
(
SDL_modelist
[
i
][
j
]
==
NULL
)
{
SDL_OutOfMemory
();
return
(
-
1
);
}
SDL_memset
(
SDL_modelist
[
i
][
j
],
0
,
sizeof
(
SDL_Rect
));
}
SDL_modelist
[
i
][
j
]
=
NULL
;
}
for
(
mode
=
vga_lastmodenumber
();
mode
;
--
mode
)
{
if
(
vga_hasmode
(
mode
))
{
SVGA_AddMode
(
this
,
mode
,
1
);
}
}
SVGA_AddMode
(
this
,
G320x200x256
,
1
);
/* Free extra (duplicated) modes */
for
(
i
=
0
;
i
<
NUM_MODELISTS
;
++
i
)
{
j
=
0
;
while
(
SDL_modelist
[
i
][
j
]
&&
SDL_modelist
[
i
][
j
]
->
w
)
{
j
++
;
}
while
(
SDL_modelist
[
i
][
j
])
{
SDL_free
(
SDL_modelist
[
i
][
j
]);
SDL_modelist
[
i
][
j
]
=
NULL
;
j
++
;
}
}
/* Fill in our hardware acceleration capabilities */
SVGA_UpdateVideoInfo
(
this
);
/* We're done! */
return
(
0
);
}
SDL_Rect
**
SVGA_ListModes
(
_THIS
,
SDL_PixelFormat
*
format
,
Uint32
flags
)
{
return
(
SDL_modelist
[((
format
->
BitsPerPixel
+
7
)
/
8
)
-
1
]);
}
/* Various screen update functions available */
static
void
SVGA_DirectUpdate
(
_THIS
,
int
numrects
,
SDL_Rect
*
rects
);
static
void
SVGA_BankedUpdate
(
_THIS
,
int
numrects
,
SDL_Rect
*
rects
);
SDL_Surface
*
SVGA_SetVideoMode
(
_THIS
,
SDL_Surface
*
current
,
int
width
,
int
height
,
int
bpp
,
Uint32
flags
)
{
int
mode
;
int
vgamode
;
vga_modeinfo
*
modeinfo
;
int
screenpage_len
;
/* Free old pixels if we were in banked mode */
if
(
banked
&&
current
->
pixels
)
{
free
(
current
->
pixels
);
current
->
pixels
=
NULL
;
}
/* Try to set the requested linear video mode */
bpp
=
(
bpp
+
7
)
/
8
-
1
;
for
(
mode
=
0
;
SDL_modelist
[
bpp
][
mode
];
++
mode
)
{
if
((
SDL_modelist
[
bpp
][
mode
]
->
w
==
width
)
&&
(
SDL_modelist
[
bpp
][
mode
]
->
h
==
height
))
{
break
;
}
}
if
(
SDL_modelist
[
bpp
][
mode
]
==
NULL
)
{
SDL_SetError
(
"Couldn't find requested mode in list"
);
return
(
NULL
);
}
vgamode
=
SDL_vgamode
[
bpp
][
mode
];
vga_setmode
(
vgamode
);
vga_setpage
(
0
);
if
((
vga_setlinearaddressing
()
<
0
)
&&
(
vgamode
!=
G320x200x256
))
{
banked
=
1
;
}
else
{
banked
=
0
;
}
modeinfo
=
vga_getmodeinfo
(
SDL_vgamode
[
bpp
][
mode
]);
/* Update hardware acceleration info */
SVGA_UpdateVideoInfo
(
this
);
/* Allocate the new pixel format for the screen */
bpp
=
(
bpp
+
1
)
*
8
;
if
((
bpp
==
16
)
&&
(
modeinfo
->
colors
==
32768
))
{
bpp
=
15
;
}
if
(
!
SDL_ReallocFormat
(
current
,
bpp
,
0
,
0
,
0
,
0
))
{
return
(
NULL
);
}
/* Set up the new mode framebuffer */
current
->
flags
=
SDL_FULLSCREEN
;
if
(
!
banked
)
{
current
->
flags
|=
SDL_HWSURFACE
;
}
if
(
bpp
==
8
)
{
/* FIXME: What about DirectColor? */
current
->
flags
|=
SDL_HWPALETTE
;
}
current
->
w
=
width
;
current
->
h
=
height
;
current
->
pitch
=
modeinfo
->
linewidth
;
if
(
banked
)
{
current
->
pixels
=
SDL_malloc
(
current
->
h
*
current
->
pitch
);
if
(
!
current
->
pixels
)
{
SDL_OutOfMemory
();
return
(
NULL
);
}
}
else
{
current
->
pixels
=
vga_getgraphmem
();
}
/* set double-buffering */
if
((
flags
&
SDL_DOUBLEBUF
)
&&
!
banked
)
{
/* length of one screen page in bytes */
screenpage_len
=
current
->
h
*
modeinfo
->
linewidth
;
/* if start address should be aligned */
if
(
modeinfo
->
linewidth_unit
)
{
if
(
screenpage_len
%
modeinfo
->
linewidth_unit
)
{
screenpage_len
+=
modeinfo
->
linewidth_unit
-
(
screenpage_len
%
modeinfo
->
linewidth_unit
);
}
}
/* if we heve enough videomemory = ak je dost videopamete */
if
(
modeinfo
->
memory
>
(
screenpage_len
*
2
/
1024
))
{
current
->
flags
|=
SDL_DOUBLEBUF
;
flip_page
=
0
;
flip_offset
[
0
]
=
0
;
flip_offset
[
1
]
=
screenpage_len
;
flip_address
[
0
]
=
vga_getgraphmem
();
flip_address
[
1
]
=
flip_address
[
0
]
+
screenpage_len
;
SVGA_FlipHWSurface
(
this
,
current
);
}
}
/* Set the blit function */
if
(
banked
)
{
this
->
UpdateRects
=
SVGA_BankedUpdate
;
}
else
{
this
->
UpdateRects
=
SVGA_DirectUpdate
;
}
/* Set up the mouse handler again (buggy SVGAlib 1.40) */
mouse_seteventhandler
(
SVGA_mousecallback
);
/* We're done */
return
(
current
);
}
/* We don't actually allow hardware surfaces other than the main one */
static
int
SVGA_AllocHWSurface
(
_THIS
,
SDL_Surface
*
surface
)
{
return
(
-
1
);
}
static
void
SVGA_FreeHWSurface
(
_THIS
,
SDL_Surface
*
surface
)
{
return
;
}
/* We need to wait for vertical retrace on page flipped displays */
static
int
SVGA_LockHWSurface
(
_THIS
,
SDL_Surface
*
surface
)
{
/* The waiting is done in SVGA_FlipHWSurface() */
return
(
0
);
}
static
void
SVGA_UnlockHWSurface
(
_THIS
,
SDL_Surface
*
surface
)
{
return
;
}
static
int
SVGA_FlipHWSurface
(
_THIS
,
SDL_Surface
*
surface
)
{
if
(
!
banked
)
{
vga_setdisplaystart
(
flip_offset
[
flip_page
]);
flip_page
=
!
flip_page
;
surface
->
pixels
=
flip_address
[
flip_page
];
vga_waitretrace
();
}
return
(
0
);
}
static
void
SVGA_DirectUpdate
(
_THIS
,
int
numrects
,
SDL_Rect
*
rects
)
{
return
;
}
static
void
SVGA_BankedUpdate
(
_THIS
,
int
numrects
,
SDL_Rect
*
rects
)
{
int
i
,
j
;
SDL_Rect
*
rect
;
int
page
,
vp
;
int
x
,
y
,
w
,
h
;
unsigned
char
*
src
;
unsigned
char
*
dst
;
int
bpp
=
this
->
screen
->
format
->
BytesPerPixel
;
int
pitch
=
this
->
screen
->
pitch
;
dst
=
vga_getgraphmem
();
for
(
i
=
0
;
i
<
numrects
;
++
i
)
{
rect
=
&
rects
[
i
];
x
=
rect
->
x
;
y
=
rect
->
y
;
w
=
rect
->
w
*
bpp
;
h
=
rect
->
h
;
vp
=
y
*
pitch
+
x
*
bpp
;
src
=
(
unsigned
char
*
)
this
->
screen
->
pixels
+
vp
;
page
=
vp
>>
16
;
vp
&=
0xffff
;
vga_setpage
(
page
);
for
(
j
=
0
;
j
<
h
;
j
++
)
{
if
(
vp
+
w
>
0x10000
)
{
if
(
vp
>=
0x10000
)
{
page
++
;
vga_setpage
(
page
);
vp
&=
0xffff
;
}
else
{
SDL_memcpy
(
dst
+
vp
,
src
,
0x10000
-
vp
);
page
++
;
vga_setpage
(
page
);
SDL_memcpy
(
dst
,
src
+
0x10000
-
vp
,
(
vp
+
w
)
&
0xffff
);
vp
=
(
vp
+
pitch
)
&
0xffff
;
src
+=
pitch
;
continue
;
}
}
SDL_memcpy
(
dst
+
vp
,
src
,
w
);
src
+=
pitch
;
vp
+=
pitch
;
}
}
}
int
SVGA_SetColors
(
_THIS
,
int
firstcolor
,
int
ncolors
,
SDL_Color
*
colors
)
{
int
i
;
for
(
i
=
0
;
i
<
ncolors
;
i
++
)
{
vga_setpalette
(
firstcolor
+
i
,
colors
[
i
].
r
>>
2
,
colors
[
i
].
g
>>
2
,
colors
[
i
].
b
>>
2
);
}
return
(
1
);
}
/* Note: If we are terminated, this could be called in the middle of
another SDL video routine -- notably UpdateRects.
*/
void
SVGA_VideoQuit
(
_THIS
)
{
int
i
,
j
;
/* Reset the console video mode */
if
(
this
->
screen
&&
(
this
->
screen
->
w
&&
this
->
screen
->
h
))
{
vga_setmode
(
TEXT
);
}
keyboard_close
();
/* Free video mode lists */
for
(
i
=
0
;
i
<
NUM_MODELISTS
;
++
i
)
{
if
(
SDL_modelist
[
i
]
!=
NULL
)
{
for
(
j
=
0
;
SDL_modelist
[
i
][
j
];
++
j
)
SDL_free
(
SDL_modelist
[
i
][
j
]);
SDL_free
(
SDL_modelist
[
i
]);
SDL_modelist
[
i
]
=
NULL
;
}
if
(
SDL_vgamode
[
i
]
!=
NULL
)
{
SDL_free
(
SDL_vgamode
[
i
]);
SDL_vgamode
[
i
]
=
NULL
;
}
}
if
(
this
->
screen
)
{
if
(
banked
&&
this
->
screen
->
pixels
)
{
SDL_free
(
this
->
screen
->
pixels
);
}
this
->
screen
->
pixels
=
NULL
;
}
}
/* vi: set ts=4 sw=4 expandtab: */
src/video/svga/SDL_svgavideo.h
deleted
100644 → 0
View file @
75ed99ed
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2010 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_svgavideo_h
#define _SDL_svgavideo_h
#include "SDL_mouse.h"
#include "../SDL_sysvideo.h"
/* Hidden "this" pointer for the video functions */
#define _THIS SDL_VideoDevice *this
/* Private display data */
struct
SDL_PrivateVideoData
{
#define NUM_MODELISTS 4
/* 8, 16, 24, and 32 bits-per-pixel */
int
SDL_nummodes
[
NUM_MODELISTS
];
SDL_Rect
**
SDL_modelist
[
NUM_MODELISTS
];
int
*
SDL_vgamode
[
NUM_MODELISTS
];
/* information for double-buffering */
int
flip_page
;
int
flip_offset
[
2
];
Uint8
*
flip_address
[
2
];
/* Set to 1 if we're in banked video mode */
int
banked
;
};
/* Old variable names */
#define SDL_nummodes (this->hidden->SDL_nummodes)
#define SDL_modelist (this->hidden->SDL_modelist)
#define SDL_vgamode (this->hidden->SDL_vgamode)
#define flip_page (this->hidden->flip_page)
#define flip_offset (this->hidden->flip_offset)
#define flip_address (this->hidden->flip_address)
#define banked (this->hidden->banked)
#endif
/* _SDL_svgavideo_h */
/* vi: set ts=4 sw=4 expandtab: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment