mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-26 05:51:20 +00:00
Rearranged files to avoid usage of symbolic links
This commit is contained in:
parent
ce70a7c66e
commit
8bc890c995
18 changed files with 958 additions and 968 deletions
|
@ -545,19 +545,20 @@ set( PLAT_WIN32_SOURCES
|
|||
win32/i_system.cpp
|
||||
win32/st_start.cpp
|
||||
win32/win32video.cpp )
|
||||
set( PLAT_POSIX_SOURCES
|
||||
posix/i_cd.cpp
|
||||
posix/i_movie.cpp
|
||||
posix/i_system.cpp
|
||||
posix/st_start.cpp )
|
||||
set( PLAT_SDL_SOURCES
|
||||
sdl/crashcatcher.c
|
||||
sdl/hardware.cpp
|
||||
sdl/i_cd.cpp
|
||||
sdl/i_gui.cpp
|
||||
sdl/i_input.cpp
|
||||
sdl/i_joystick.cpp
|
||||
sdl/i_main.cpp
|
||||
sdl/i_movie.cpp
|
||||
sdl/i_system.cpp
|
||||
sdl/i_timer.cpp
|
||||
sdl/sdlvideo.cpp
|
||||
sdl/st_start.cpp )
|
||||
sdl/sdlvideo.cpp )
|
||||
set( PLAT_MAC_SOURCES
|
||||
cocoa/iwadpicker_cocoa.mm )
|
||||
set( PLAT_COCOA_SOURCES
|
||||
|
@ -571,18 +572,14 @@ set( PLAT_COCOA_SOURCES
|
|||
cocoa/hid/ImmrHIDUtilAddOn.c
|
||||
cocoa/critsec.cpp
|
||||
cocoa/i_backend_cocoa.mm
|
||||
cocoa/i_cd.cpp
|
||||
cocoa/i_joystick.cpp
|
||||
cocoa/i_movie.cpp
|
||||
cocoa/i_system.cpp
|
||||
cocoa/i_timer.cpp
|
||||
cocoa/st_start.cpp
|
||||
cocoa/zdoom.icns )
|
||||
|
||||
if( WIN32 )
|
||||
set( SYSTEM_SOURCES_DIR win32 )
|
||||
set( SYSTEM_SOURCES ${PLAT_WIN32_SOURCES} )
|
||||
set( OTHER_SYSTEM_SOURCES ${PLAT_SDL_SOURCES} ${PLAT_MAC_SOURCES} ${PLAT_COCOA_SOURCES} )
|
||||
set( OTHER_SYSTEM_SOURCES ${PLAT_POSIX_SOURCES} ${PLAT_SDL_SOURCES} ${PLAT_MAC_SOURCES} ${PLAT_COCOA_SOURCES} )
|
||||
|
||||
if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE )
|
||||
# CMake is not set up to compile and link rc files with GCC. :(
|
||||
|
@ -595,23 +592,23 @@ if( WIN32 )
|
|||
endif( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE )
|
||||
elseif( APPLE )
|
||||
if( OSX_COCOA_BACKEND )
|
||||
set( SYSTEM_SOURCES_DIR cocoa )
|
||||
set( SYSTEM_SOURCES_DIR posix cocoa )
|
||||
set( SYSTEM_SOURCES ${PLAT_COCOA_SOURCES} )
|
||||
set( OTHER_SYSTEM_SOURCES ${PLAT_WIN32_SOURCES} ${PLAT_SDL_SOURCES} )
|
||||
else( OSX_COCOA_BACKEND )
|
||||
set( SYSTEM_SOURCES_DIR sdl )
|
||||
set( SYSTEM_SOURCES_DIR posix sdl )
|
||||
set( SYSTEM_SOURCES ${PLAT_SDL_SOURCES} )
|
||||
set( PLAT_MAC_SOURCES ${PLAT_MAC_SOURCES} cocoa/i_system_cocoa.mm )
|
||||
set( OTHER_SYSTEM_SOURCES ${PLAT_WIN32_SOURCES} ${PLAT_COCOA_SOURCES} )
|
||||
endif( OSX_COCOA_BACKEND )
|
||||
|
||||
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} ${PLAT_MAC_SOURCES} "${FMOD_LIBRARY}" )
|
||||
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} ${PLAT_POSIX_SOURCES} ${PLAT_MAC_SOURCES} "${FMOD_LIBRARY}" )
|
||||
|
||||
set_source_files_properties( cocoa/zdoom.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources )
|
||||
set_source_files_properties( "${FMOD_LIBRARY}" PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks )
|
||||
else( WIN32 )
|
||||
set( SYSTEM_SOURCES_DIR sdl )
|
||||
set( SYSTEM_SOURCES ${PLAT_SDL_SOURCES} )
|
||||
set( SYSTEM_SOURCES_DIR posix sdl )
|
||||
set( SYSTEM_SOURCES ${PLAT_POSIX_SOURCES} ${PLAT_SDL_SOURCES} )
|
||||
set( OTHER_SYSTEM_SOURCES ${PLAT_WIN32_SOURCES} ${PLAT_MAC_SOURCES} ${PLAT_COCOA_SOURCES} )
|
||||
endif( WIN32 )
|
||||
|
||||
|
@ -672,12 +669,12 @@ if( WIN32 )
|
|||
set( EXTRA_HEADER_DIRS win32/*.h )
|
||||
elseif( APPLE )
|
||||
if( OSX_COCOA_BACKEND )
|
||||
set( EXTRA_HEADER_DIRS cocoa/*.h )
|
||||
set( EXTRA_HEADER_DIRS posix/*.h cocoa/*.h )
|
||||
else( OSX_COCOA_BACKEND )
|
||||
set( EXTRA_HEADER_DIRS sdl/*.h )
|
||||
set( EXTRA_HEADER_DIRS posix/*.h sdl/*.h )
|
||||
endif( OSX_COCOA_BACKEND )
|
||||
else( WIN32 )
|
||||
set( EXTRA_HEADER_DIRS sdl/*.h )
|
||||
set( EXTRA_HEADER_DIRS posix/*.h sdl/*.h )
|
||||
endif( WIN32 )
|
||||
file( GLOB HEADER_FILES
|
||||
${EXTRA_HEADER_DIRS}
|
||||
|
@ -693,6 +690,7 @@ file( GLOB HEADER_FILES
|
|||
menu/*.h
|
||||
oplsynth/*.h
|
||||
oplsynth/dosbox/*.h
|
||||
posix/*.h
|
||||
r_data/*.h
|
||||
resourcefiles/*.h
|
||||
sdl/*.h
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
../sdl/dikeys.h
|
|
@ -1 +0,0 @@
|
|||
../sdl/hardware.h
|
|
@ -1 +0,0 @@
|
|||
../sdl/i_cd.cpp
|
|
@ -1 +0,0 @@
|
|||
../sdl/i_input.h
|
|
@ -1 +0,0 @@
|
|||
../sdl/i_movie.cpp
|
|
@ -1 +0,0 @@
|
|||
../sdl/i_system.cpp
|
|
@ -1 +0,0 @@
|
|||
../sdl/i_system.h
|
|
@ -1 +0,0 @@
|
|||
../sdl/st_start.cpp
|
|
@ -1,155 +1,155 @@
|
|||
// ZDoom bases its keycodes on DirectInput's scan codes
|
||||
// Why? Because it was Win32-only before porting to anything else,
|
||||
// so this made sense. AFAIK, it's primarily used under Win32 now,
|
||||
// so it still makes sense.
|
||||
//
|
||||
// Actually, these key codes may only be used for key bindings now,
|
||||
// in which case they're not really necessary--if we tweaked c_bind.cpp.
|
||||
|
||||
enum
|
||||
{
|
||||
DIK_ESCAPE = 1,
|
||||
DIK_1,
|
||||
DIK_2,
|
||||
DIK_3,
|
||||
DIK_4,
|
||||
DIK_5,
|
||||
DIK_6,
|
||||
DIK_7,
|
||||
DIK_8,
|
||||
DIK_9,
|
||||
DIK_0,
|
||||
DIK_MINUS, /* - on main keyboard */
|
||||
DIK_EQUALS,
|
||||
DIK_BACK, /* backspace */
|
||||
DIK_TAB,
|
||||
DIK_Q,
|
||||
DIK_W,
|
||||
DIK_E,
|
||||
DIK_R,
|
||||
DIK_T,
|
||||
DIK_Y,
|
||||
DIK_U,
|
||||
DIK_I,
|
||||
DIK_O,
|
||||
DIK_P,
|
||||
DIK_LBRACKET,
|
||||
DIK_RBRACKET,
|
||||
DIK_RETURN, /* Enter on main keyboard */
|
||||
DIK_LCONTROL,
|
||||
DIK_A,
|
||||
DIK_S,
|
||||
DIK_D,
|
||||
DIK_F,
|
||||
DIK_G,
|
||||
DIK_H,
|
||||
DIK_J,
|
||||
DIK_K,
|
||||
DIK_L,
|
||||
DIK_SEMICOLON,
|
||||
DIK_APOSTROPHE,
|
||||
DIK_GRAVE, /* accent grave */
|
||||
DIK_LSHIFT,
|
||||
DIK_BACKSLASH,
|
||||
DIK_Z,
|
||||
DIK_X,
|
||||
DIK_C,
|
||||
DIK_V,
|
||||
DIK_B,
|
||||
DIK_N,
|
||||
DIK_M,
|
||||
DIK_COMMA,
|
||||
DIK_PERIOD, /* . on main keyboard */
|
||||
DIK_SLASH, /* / on main keyboard */
|
||||
DIK_RSHIFT,
|
||||
DIK_MULTIPLY, /* * on numeric keypad */
|
||||
DIK_LMENU, /* left Alt */
|
||||
DIK_SPACE,
|
||||
DIK_CAPITAL,
|
||||
DIK_F1,
|
||||
DIK_F2,
|
||||
DIK_F3,
|
||||
DIK_F4,
|
||||
DIK_F5,
|
||||
DIK_F6,
|
||||
DIK_F7,
|
||||
DIK_F8,
|
||||
DIK_F9,
|
||||
DIK_F10,
|
||||
DIK_NUMLOCK,
|
||||
DIK_SCROLL, /* Scroll Lock */
|
||||
DIK_NUMPAD7,
|
||||
DIK_NUMPAD8,
|
||||
DIK_NUMPAD9,
|
||||
DIK_SUBTRACT, /* - on numeric keypad */
|
||||
DIK_NUMPAD4,
|
||||
DIK_NUMPAD5,
|
||||
DIK_NUMPAD6,
|
||||
DIK_ADD, /* + on numeric keypad */
|
||||
DIK_NUMPAD1,
|
||||
DIK_NUMPAD2,
|
||||
DIK_NUMPAD3,
|
||||
DIK_NUMPAD0,
|
||||
DIK_DECIMAL, /* . on numeric keypad */
|
||||
DIK_OEM_102 = 0x56, /* < > | on UK/Germany keyboards */
|
||||
DIK_F11,
|
||||
DIK_F12,
|
||||
DIK_F13 = 0x64, /* (NEC PC98) */
|
||||
DIK_F14, /* (NEC PC98) */
|
||||
DIK_F15, /* (NEC PC98) */
|
||||
DIK_KANA = 0x70, /* (Japanese keyboard) */
|
||||
DIK_ABNT_C1 = 0x73, /* / ? on Portugese (Brazilian) keyboards */
|
||||
DIK_CONVERT = 0x79, /* (Japanese keyboard) */
|
||||
DIK_NOCONVERT = 0x7B, /* (Japanese keyboard) */
|
||||
DIK_YEN = 0x7D, /* (Japanese keyboard) */
|
||||
DIK_ABNT_C2 = 0x7E, /* Numpad . on Portugese (Brazilian) keyboards */
|
||||
DIK_NUMPAD_EQUALS = 0x8D, /* = on numeric keypad (NEC PC98) */
|
||||
DIK_PREVTRACK = 0x90, /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
|
||||
DIK_AT, /* (NEC PC98) */
|
||||
DIK_COLON, /* (NEC PC98) */
|
||||
DIK_UNDERLINE, /* (NEC PC98) */
|
||||
DIK_KANJI, /* (Japanese keyboard) */
|
||||
DIK_STOP, /* (NEC PC98) */
|
||||
DIK_AX, /* (Japan AX) */
|
||||
DIK_UNLABELED, /* (J3100) */
|
||||
DIK_NEXTTRACK = 0x99, /* Next Track */
|
||||
DIK_NUMPADENTER = 0x9C, /* Enter on numeric keypad */
|
||||
DIK_RCONTROL = 0x9D,
|
||||
DIK_MUTE = 0xA0, /* Mute */
|
||||
DIK_CALCULATOR = 0xA1, /* Calculator */
|
||||
DIK_PLAYPAUSE = 0xA2, /* Play / Pause */
|
||||
DIK_MEDIASTOP = 0xA4, /* Media Stop */
|
||||
DIK_VOLUMEDOWN = 0xAE, /* Volume - */
|
||||
DIK_VOLUMEUP = 0xB0, /* Volume + */
|
||||
DIK_WEBHOME = 0xB2, /* Web home */
|
||||
DIK_NUMPADCOMMA = 0xB3, /* , on numeric keypad (NEC PC98) */
|
||||
DIK_DIVIDE = 0xB5, /* / on numeric keypad */
|
||||
DIK_SYSRQ = 0xB7,
|
||||
DIK_RMENU = 0xB8, /* right Alt */
|
||||
DIK_PAUSE = 0xC5, /* Pause */
|
||||
DIK_HOME = 0xC7, /* Home on arrow keypad */
|
||||
DIK_UP = 0xC8, /* UpArrow on arrow keypad */
|
||||
DIK_PRIOR = 0xC9, /* PgUp on arrow keypad */
|
||||
DIK_LEFT = 0xCB, /* LeftArrow on arrow keypad */
|
||||
DIK_RIGHT = 0xCD, /* RightArrow on arrow keypad */
|
||||
DIK_END = 0xCF, /* End on arrow keypad */
|
||||
DIK_DOWN = 0xD0, /* DownArrow on arrow keypad */
|
||||
DIK_NEXT = 0xD1, /* PgDn on arrow keypad */
|
||||
DIK_INSERT = 0xD2, /* Insert on arrow keypad */
|
||||
DIK_DELETE = 0xD3, /* Delete on arrow keypad */
|
||||
DIK_LWIN = 0xDB, /* Left Windows key */
|
||||
DIK_RWIN = 0xDC, /* Right Windows key */
|
||||
DIK_APPS = 0xDD, /* AppMenu key */
|
||||
DIK_POWER = 0xDE, /* System Power */
|
||||
DIK_SLEEP = 0xDF, /* System Sleep */
|
||||
DIK_WAKE = 0xE3, /* System Wake */
|
||||
DIK_WEBSEARCH = 0xE5, /* Web Search */
|
||||
DIK_WEBFAVORITES = 0xE6, /* Web Favorites */
|
||||
DIK_WEBREFRESH = 0xE7, /* Web Refresh */
|
||||
DIK_WEBSTOP = 0xE8, /* Web Stop */
|
||||
DIK_WEBFORWARD = 0xE9, /* Web Forward */
|
||||
DIK_WEBBACK = 0xEA, /* Web Back */
|
||||
DIK_MYCOMPUTER = 0xEB, /* My Computer */
|
||||
DIK_MAIL = 0xEC, /* Mail */
|
||||
DIK_MEDIASELECT = 0xED /* Media Select */
|
||||
};
|
||||
// ZDoom bases its keycodes on DirectInput's scan codes
|
||||
// Why? Because it was Win32-only before porting to anything else,
|
||||
// so this made sense. AFAIK, it's primarily used under Win32 now,
|
||||
// so it still makes sense.
|
||||
//
|
||||
// Actually, these key codes may only be used for key bindings now,
|
||||
// in which case they're not really necessary--if we tweaked c_bind.cpp.
|
||||
|
||||
enum
|
||||
{
|
||||
DIK_ESCAPE = 1,
|
||||
DIK_1,
|
||||
DIK_2,
|
||||
DIK_3,
|
||||
DIK_4,
|
||||
DIK_5,
|
||||
DIK_6,
|
||||
DIK_7,
|
||||
DIK_8,
|
||||
DIK_9,
|
||||
DIK_0,
|
||||
DIK_MINUS, /* - on main keyboard */
|
||||
DIK_EQUALS,
|
||||
DIK_BACK, /* backspace */
|
||||
DIK_TAB,
|
||||
DIK_Q,
|
||||
DIK_W,
|
||||
DIK_E,
|
||||
DIK_R,
|
||||
DIK_T,
|
||||
DIK_Y,
|
||||
DIK_U,
|
||||
DIK_I,
|
||||
DIK_O,
|
||||
DIK_P,
|
||||
DIK_LBRACKET,
|
||||
DIK_RBRACKET,
|
||||
DIK_RETURN, /* Enter on main keyboard */
|
||||
DIK_LCONTROL,
|
||||
DIK_A,
|
||||
DIK_S,
|
||||
DIK_D,
|
||||
DIK_F,
|
||||
DIK_G,
|
||||
DIK_H,
|
||||
DIK_J,
|
||||
DIK_K,
|
||||
DIK_L,
|
||||
DIK_SEMICOLON,
|
||||
DIK_APOSTROPHE,
|
||||
DIK_GRAVE, /* accent grave */
|
||||
DIK_LSHIFT,
|
||||
DIK_BACKSLASH,
|
||||
DIK_Z,
|
||||
DIK_X,
|
||||
DIK_C,
|
||||
DIK_V,
|
||||
DIK_B,
|
||||
DIK_N,
|
||||
DIK_M,
|
||||
DIK_COMMA,
|
||||
DIK_PERIOD, /* . on main keyboard */
|
||||
DIK_SLASH, /* / on main keyboard */
|
||||
DIK_RSHIFT,
|
||||
DIK_MULTIPLY, /* * on numeric keypad */
|
||||
DIK_LMENU, /* left Alt */
|
||||
DIK_SPACE,
|
||||
DIK_CAPITAL,
|
||||
DIK_F1,
|
||||
DIK_F2,
|
||||
DIK_F3,
|
||||
DIK_F4,
|
||||
DIK_F5,
|
||||
DIK_F6,
|
||||
DIK_F7,
|
||||
DIK_F8,
|
||||
DIK_F9,
|
||||
DIK_F10,
|
||||
DIK_NUMLOCK,
|
||||
DIK_SCROLL, /* Scroll Lock */
|
||||
DIK_NUMPAD7,
|
||||
DIK_NUMPAD8,
|
||||
DIK_NUMPAD9,
|
||||
DIK_SUBTRACT, /* - on numeric keypad */
|
||||
DIK_NUMPAD4,
|
||||
DIK_NUMPAD5,
|
||||
DIK_NUMPAD6,
|
||||
DIK_ADD, /* + on numeric keypad */
|
||||
DIK_NUMPAD1,
|
||||
DIK_NUMPAD2,
|
||||
DIK_NUMPAD3,
|
||||
DIK_NUMPAD0,
|
||||
DIK_DECIMAL, /* . on numeric keypad */
|
||||
DIK_OEM_102 = 0x56, /* < > | on UK/Germany keyboards */
|
||||
DIK_F11,
|
||||
DIK_F12,
|
||||
DIK_F13 = 0x64, /* (NEC PC98) */
|
||||
DIK_F14, /* (NEC PC98) */
|
||||
DIK_F15, /* (NEC PC98) */
|
||||
DIK_KANA = 0x70, /* (Japanese keyboard) */
|
||||
DIK_ABNT_C1 = 0x73, /* / ? on Portugese (Brazilian) keyboards */
|
||||
DIK_CONVERT = 0x79, /* (Japanese keyboard) */
|
||||
DIK_NOCONVERT = 0x7B, /* (Japanese keyboard) */
|
||||
DIK_YEN = 0x7D, /* (Japanese keyboard) */
|
||||
DIK_ABNT_C2 = 0x7E, /* Numpad . on Portugese (Brazilian) keyboards */
|
||||
DIK_NUMPAD_EQUALS = 0x8D, /* = on numeric keypad (NEC PC98) */
|
||||
DIK_PREVTRACK = 0x90, /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
|
||||
DIK_AT, /* (NEC PC98) */
|
||||
DIK_COLON, /* (NEC PC98) */
|
||||
DIK_UNDERLINE, /* (NEC PC98) */
|
||||
DIK_KANJI, /* (Japanese keyboard) */
|
||||
DIK_STOP, /* (NEC PC98) */
|
||||
DIK_AX, /* (Japan AX) */
|
||||
DIK_UNLABELED, /* (J3100) */
|
||||
DIK_NEXTTRACK = 0x99, /* Next Track */
|
||||
DIK_NUMPADENTER = 0x9C, /* Enter on numeric keypad */
|
||||
DIK_RCONTROL = 0x9D,
|
||||
DIK_MUTE = 0xA0, /* Mute */
|
||||
DIK_CALCULATOR = 0xA1, /* Calculator */
|
||||
DIK_PLAYPAUSE = 0xA2, /* Play / Pause */
|
||||
DIK_MEDIASTOP = 0xA4, /* Media Stop */
|
||||
DIK_VOLUMEDOWN = 0xAE, /* Volume - */
|
||||
DIK_VOLUMEUP = 0xB0, /* Volume + */
|
||||
DIK_WEBHOME = 0xB2, /* Web home */
|
||||
DIK_NUMPADCOMMA = 0xB3, /* , on numeric keypad (NEC PC98) */
|
||||
DIK_DIVIDE = 0xB5, /* / on numeric keypad */
|
||||
DIK_SYSRQ = 0xB7,
|
||||
DIK_RMENU = 0xB8, /* right Alt */
|
||||
DIK_PAUSE = 0xC5, /* Pause */
|
||||
DIK_HOME = 0xC7, /* Home on arrow keypad */
|
||||
DIK_UP = 0xC8, /* UpArrow on arrow keypad */
|
||||
DIK_PRIOR = 0xC9, /* PgUp on arrow keypad */
|
||||
DIK_LEFT = 0xCB, /* LeftArrow on arrow keypad */
|
||||
DIK_RIGHT = 0xCD, /* RightArrow on arrow keypad */
|
||||
DIK_END = 0xCF, /* End on arrow keypad */
|
||||
DIK_DOWN = 0xD0, /* DownArrow on arrow keypad */
|
||||
DIK_NEXT = 0xD1, /* PgDn on arrow keypad */
|
||||
DIK_INSERT = 0xD2, /* Insert on arrow keypad */
|
||||
DIK_DELETE = 0xD3, /* Delete on arrow keypad */
|
||||
DIK_LWIN = 0xDB, /* Left Windows key */
|
||||
DIK_RWIN = 0xDC, /* Right Windows key */
|
||||
DIK_APPS = 0xDD, /* AppMenu key */
|
||||
DIK_POWER = 0xDE, /* System Power */
|
||||
DIK_SLEEP = 0xDF, /* System Sleep */
|
||||
DIK_WAKE = 0xE3, /* System Wake */
|
||||
DIK_WEBSEARCH = 0xE5, /* Web Search */
|
||||
DIK_WEBFAVORITES = 0xE6, /* Web Favorites */
|
||||
DIK_WEBREFRESH = 0xE7, /* Web Refresh */
|
||||
DIK_WEBSTOP = 0xE8, /* Web Stop */
|
||||
DIK_WEBFORWARD = 0xE9, /* Web Forward */
|
||||
DIK_WEBBACK = 0xEA, /* Web Back */
|
||||
DIK_MYCOMPUTER = 0xEB, /* My Computer */
|
||||
DIK_MAIL = 0xEC, /* Mail */
|
||||
DIK_MEDIASELECT = 0xED /* Media Select */
|
||||
};
|
|
@ -1,96 +1,96 @@
|
|||
/*
|
||||
** hardware.h
|
||||
**
|
||||
**---------------------------------------------------------------------------
|
||||
** Copyright 1998-2006 Randy Heit
|
||||
** All rights reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions
|
||||
** are met:
|
||||
**
|
||||
** 1. Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** 2. Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in the
|
||||
** documentation and/or other materials provided with the distribution.
|
||||
** 3. The name of the author may not be used to endorse or promote products
|
||||
** derived from this software without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
**---------------------------------------------------------------------------
|
||||
**
|
||||
*/
|
||||
|
||||
#ifndef __HARDWARE_H__
|
||||
#define __HARDWARE_H__
|
||||
|
||||
#include "i_video.h"
|
||||
#include "v_video.h"
|
||||
|
||||
// Semaphores
|
||||
#ifdef __APPLE__
|
||||
#include <mach/mach_init.h>
|
||||
#include <mach/semaphore.h>
|
||||
#include <mach/task.h>
|
||||
typedef semaphore_t Semaphore;
|
||||
#define SEMAPHORE_WAIT(sem) \
|
||||
while(semaphore_wait(sem) != KERN_SUCCESS){}
|
||||
#define SEMAPHORE_SIGNAL(sem) \
|
||||
semaphore_signal(sem);
|
||||
#define SEMAPHORE_INIT(sem, shared, value) \
|
||||
semaphore_create(mach_task_self(), &sem, shared, value);
|
||||
#else
|
||||
#include <semaphore.h>
|
||||
typedef sem_t Semaphore;
|
||||
#define SEMAPHORE_WAIT(sem) \
|
||||
do { \
|
||||
while(sem_wait(&sem) != 0); \
|
||||
int semValue; \
|
||||
sem_getvalue(&sem, &semValue); \
|
||||
if(semValue < 1) \
|
||||
break; \
|
||||
} while(true);
|
||||
#define SEMAPHORE_SIGNAL(sem) \
|
||||
sem_post(&sem);
|
||||
#define SEMAPHORE_INIT(sem, shared, value) \
|
||||
sem_init(&sem, shared, value);
|
||||
#endif
|
||||
|
||||
class IVideo
|
||||
{
|
||||
public:
|
||||
virtual ~IVideo () {}
|
||||
|
||||
virtual EDisplayType GetDisplayType () = 0;
|
||||
virtual void SetWindowedScale (float scale) = 0;
|
||||
|
||||
virtual DFrameBuffer *CreateFrameBuffer (int width, int height, bool fs, DFrameBuffer *old) = 0;
|
||||
|
||||
virtual void StartModeIterator (int bits, bool fs) = 0;
|
||||
virtual bool NextMode (int *width, int *height, bool *letterbox) = 0;
|
||||
|
||||
virtual bool SetResolution (int width, int height, int bits);
|
||||
|
||||
virtual void DumpAdapters();
|
||||
};
|
||||
|
||||
void I_InitGraphics ();
|
||||
void I_ShutdownGraphics ();
|
||||
void I_CreateRenderer();
|
||||
|
||||
extern Semaphore FPSLimitSemaphore;
|
||||
void I_SetFPSLimit(int limit);
|
||||
|
||||
extern IVideo *Video;
|
||||
|
||||
#endif // __HARDWARE_H__
|
||||
/*
|
||||
** hardware.h
|
||||
**
|
||||
**---------------------------------------------------------------------------
|
||||
** Copyright 1998-2006 Randy Heit
|
||||
** All rights reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions
|
||||
** are met:
|
||||
**
|
||||
** 1. Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** 2. Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in the
|
||||
** documentation and/or other materials provided with the distribution.
|
||||
** 3. The name of the author may not be used to endorse or promote products
|
||||
** derived from this software without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
**---------------------------------------------------------------------------
|
||||
**
|
||||
*/
|
||||
|
||||
#ifndef __HARDWARE_H__
|
||||
#define __HARDWARE_H__
|
||||
|
||||
#include "i_video.h"
|
||||
#include "v_video.h"
|
||||
|
||||
// Semaphores
|
||||
#ifdef __APPLE__
|
||||
#include <mach/mach_init.h>
|
||||
#include <mach/semaphore.h>
|
||||
#include <mach/task.h>
|
||||
typedef semaphore_t Semaphore;
|
||||
#define SEMAPHORE_WAIT(sem) \
|
||||
while(semaphore_wait(sem) != KERN_SUCCESS){}
|
||||
#define SEMAPHORE_SIGNAL(sem) \
|
||||
semaphore_signal(sem);
|
||||
#define SEMAPHORE_INIT(sem, shared, value) \
|
||||
semaphore_create(mach_task_self(), &sem, shared, value);
|
||||
#else
|
||||
#include <semaphore.h>
|
||||
typedef sem_t Semaphore;
|
||||
#define SEMAPHORE_WAIT(sem) \
|
||||
do { \
|
||||
while(sem_wait(&sem) != 0); \
|
||||
int semValue; \
|
||||
sem_getvalue(&sem, &semValue); \
|
||||
if(semValue < 1) \
|
||||
break; \
|
||||
} while(true);
|
||||
#define SEMAPHORE_SIGNAL(sem) \
|
||||
sem_post(&sem);
|
||||
#define SEMAPHORE_INIT(sem, shared, value) \
|
||||
sem_init(&sem, shared, value);
|
||||
#endif
|
||||
|
||||
class IVideo
|
||||
{
|
||||
public:
|
||||
virtual ~IVideo () {}
|
||||
|
||||
virtual EDisplayType GetDisplayType () = 0;
|
||||
virtual void SetWindowedScale (float scale) = 0;
|
||||
|
||||
virtual DFrameBuffer *CreateFrameBuffer (int width, int height, bool fs, DFrameBuffer *old) = 0;
|
||||
|
||||
virtual void StartModeIterator (int bits, bool fs) = 0;
|
||||
virtual bool NextMode (int *width, int *height, bool *letterbox) = 0;
|
||||
|
||||
virtual bool SetResolution (int width, int height, int bits);
|
||||
|
||||
virtual void DumpAdapters();
|
||||
};
|
||||
|
||||
void I_InitGraphics ();
|
||||
void I_ShutdownGraphics ();
|
||||
void I_CreateRenderer();
|
||||
|
||||
extern Semaphore FPSLimitSemaphore;
|
||||
void I_SetFPSLimit(int limit);
|
||||
|
||||
extern IVideo *Video;
|
||||
|
||||
#endif // __HARDWARE_H__
|
|
@ -1,154 +1,154 @@
|
|||
#include "i_cd.h"
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Init
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_Init ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CD_Init (int device)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_InitID
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_InitID (unsigned int id, int guess)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Close
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_Close ()
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Eject
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_Eject ()
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_UnEject
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_UnEject ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Stop
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_Stop ()
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Play
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_Play (int track, bool looping)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_PlayNoWait
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_PlayNoWait (int track, bool looping)
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_PlayCD
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_PlayCD (bool looping)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_PlayCDNoWait
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_PlayCDNoWait (bool looping)
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Pause
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_Pause ()
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Resume
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_Resume ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_GetMode
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
ECDModes CD_GetMode ()
|
||||
{
|
||||
return CDMode_Unknown;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_CheckTrack
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_CheckTrack (int track)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#include "i_cd.h"
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Init
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_Init ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CD_Init (int device)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_InitID
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_InitID (unsigned int id, int guess)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Close
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_Close ()
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Eject
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_Eject ()
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_UnEject
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_UnEject ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Stop
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_Stop ()
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Play
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_Play (int track, bool looping)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_PlayNoWait
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_PlayNoWait (int track, bool looping)
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_PlayCD
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_PlayCD (bool looping)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_PlayCDNoWait
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_PlayCDNoWait (bool looping)
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Pause
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void CD_Pause ()
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_Resume
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_Resume ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_GetMode
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
ECDModes CD_GetMode ()
|
||||
{
|
||||
return CDMode_Unknown;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CD_CheckTrack
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool CD_CheckTrack (int track)
|
||||
{
|
||||
return false;
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
#ifndef __I_INPUT_H__
|
||||
#define __I_INPUT_H__
|
||||
|
||||
void I_PutInClipboard (const char *str);
|
||||
FString I_GetFromClipboard (bool use_primary_selection);
|
||||
void I_SetMouseCapture();
|
||||
void I_ReleaseMouseCapture();
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef __I_INPUT_H__
|
||||
#define __I_INPUT_H__
|
||||
|
||||
void I_PutInClipboard (const char *str);
|
||||
FString I_GetFromClipboard (bool use_primary_selection);
|
||||
void I_SetMouseCapture();
|
||||
void I_ReleaseMouseCapture();
|
||||
|
||||
#endif
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
#include "i_movie.h"
|
||||
|
||||
int I_PlayMovie (const char *movie)
|
||||
{
|
||||
return MOVIE_Failed;
|
||||
}
|
||||
|
||||
#include "i_movie.h"
|
||||
|
||||
int I_PlayMovie (const char *movie)
|
||||
{
|
||||
return MOVIE_Failed;
|
||||
}
|
||||
|
|
@ -1,166 +1,166 @@
|
|||
// Emacs style mode select -*- C++ -*-
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Id:$
|
||||
//
|
||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||
//
|
||||
// This source is available for distribution and/or modification
|
||||
// only under the terms of the DOOM Source Code License as
|
||||
// published by id Software. All rights reserved.
|
||||
//
|
||||
// The source is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
|
||||
// for more details.
|
||||
//
|
||||
// DESCRIPTION:
|
||||
// System specific interface stuff.
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
#ifndef __I_SYSTEM__
|
||||
#define __I_SYSTEM__
|
||||
|
||||
#include <dirent.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "doomtype.h"
|
||||
|
||||
struct ticcmd_t;
|
||||
struct WadStuff;
|
||||
|
||||
#ifndef SHARE_DIR
|
||||
#define SHARE_DIR "/usr/local/share/"
|
||||
#endif
|
||||
|
||||
// Index values into the LanguageIDs array
|
||||
enum
|
||||
{
|
||||
LANGIDX_UserPreferred,
|
||||
LANGIDX_UserDefault,
|
||||
LANGIDX_SysPreferred,
|
||||
LANGIDX_SysDefault
|
||||
};
|
||||
extern DWORD LanguageIDs[4];
|
||||
extern void SetLanguageIDs ();
|
||||
|
||||
// Called by DoomMain.
|
||||
void I_Init (void);
|
||||
|
||||
// Called by D_DoomLoop,
|
||||
// returns current time in tics.
|
||||
extern int (*I_GetTime) (bool saveMS);
|
||||
|
||||
// like I_GetTime, except it waits for a new tic before returning
|
||||
extern int (*I_WaitForTic) (int);
|
||||
|
||||
// Freezes tic counting temporarily. While frozen, calls to I_GetTime()
|
||||
// will always return the same value. This does not affect I_MSTime().
|
||||
// You must also not call I_WaitForTic() while freezing time, since the
|
||||
// tic will never arrive (unless it's the current one).
|
||||
extern void (*I_FreezeTime) (bool frozen);
|
||||
|
||||
fixed_t I_GetTimeFrac (uint32 *ms);
|
||||
|
||||
// Return a seed value for the RNG.
|
||||
unsigned int I_MakeRNGSeed();
|
||||
|
||||
|
||||
//
|
||||
// Called by D_DoomLoop,
|
||||
// called before processing any tics in a frame
|
||||
// (just after displaying a frame).
|
||||
// Time consuming syncronous operations
|
||||
// are performed here (joystick reading).
|
||||
// Can call D_PostEvent.
|
||||
//
|
||||
void I_StartFrame (void);
|
||||
|
||||
|
||||
//
|
||||
// Called by D_DoomLoop,
|
||||
// called before processing each tic in a frame.
|
||||
// Quick syncronous operations are performed here.
|
||||
// Can call D_PostEvent.
|
||||
void I_StartTic (void);
|
||||
|
||||
// Asynchronous interrupt functions should maintain private queues
|
||||
// that are read by the synchronous functions
|
||||
// to be converted into events.
|
||||
|
||||
// Either returns a null ticcmd,
|
||||
// or calls a loadable driver to build it.
|
||||
// This ticcmd will then be modified by the gameloop
|
||||
// for normal input.
|
||||
ticcmd_t *I_BaseTiccmd (void);
|
||||
|
||||
|
||||
// Called by M_Responder when quit is selected.
|
||||
// Clean exit, displays sell blurb.
|
||||
void I_Quit (void);
|
||||
|
||||
|
||||
void I_Tactile (int on, int off, int total);
|
||||
|
||||
void STACK_ARGS I_Error (const char *error, ...) GCCPRINTF(1,2);
|
||||
void STACK_ARGS I_FatalError (const char *error, ...) GCCPRINTF(1,2);
|
||||
|
||||
void addterm (void (*func)(void), const char *name);
|
||||
#define atterm(t) addterm (t, #t)
|
||||
void popterm ();
|
||||
|
||||
// Print a console string
|
||||
void I_PrintStr (const char *str);
|
||||
|
||||
// Set the title string of the startup window
|
||||
void I_SetIWADInfo ();
|
||||
|
||||
// Pick from multiple IWADs to use
|
||||
int I_PickIWad (WadStuff *wads, int numwads, bool queryiwad, int defaultiwad);
|
||||
|
||||
// The ini could not be saved at exit
|
||||
bool I_WriteIniFailed ();
|
||||
|
||||
// [RH] Returns millisecond-accurate time
|
||||
unsigned int I_MSTime (void);
|
||||
unsigned int I_FPSTime();
|
||||
|
||||
class FTexture;
|
||||
bool I_SetCursor(FTexture *);
|
||||
|
||||
// Directory searching routines
|
||||
|
||||
struct findstate_t
|
||||
{
|
||||
int count;
|
||||
struct dirent **namelist;
|
||||
int current;
|
||||
};
|
||||
|
||||
void *I_FindFirst (const char *filespec, findstate_t *fileinfo);
|
||||
int I_FindNext (void *handle, findstate_t *fileinfo);
|
||||
int I_FindClose (void *handle);
|
||||
int I_FindAttr (findstate_t *fileinfo);
|
||||
|
||||
#define I_FindName(a) ((a)->namelist[(a)->current]->d_name)
|
||||
|
||||
#define FA_RDONLY 1
|
||||
#define FA_HIDDEN 2
|
||||
#define FA_SYSTEM 4
|
||||
#define FA_DIREC 8
|
||||
#define FA_ARCH 16
|
||||
|
||||
static inline char *strlwr(char *str)
|
||||
{
|
||||
char *ptr = str;
|
||||
while(*ptr)
|
||||
{
|
||||
*ptr = tolower(*ptr);
|
||||
++ptr;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
#endif
|
||||
// Emacs style mode select -*- C++ -*-
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Id:$
|
||||
//
|
||||
// Copyright (C) 1993-1996 by id Software, Inc.
|
||||
//
|
||||
// This source is available for distribution and/or modification
|
||||
// only under the terms of the DOOM Source Code License as
|
||||
// published by id Software. All rights reserved.
|
||||
//
|
||||
// The source is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
|
||||
// for more details.
|
||||
//
|
||||
// DESCRIPTION:
|
||||
// System specific interface stuff.
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
#ifndef __I_SYSTEM__
|
||||
#define __I_SYSTEM__
|
||||
|
||||
#include <dirent.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "doomtype.h"
|
||||
|
||||
struct ticcmd_t;
|
||||
struct WadStuff;
|
||||
|
||||
#ifndef SHARE_DIR
|
||||
#define SHARE_DIR "/usr/local/share/"
|
||||
#endif
|
||||
|
||||
// Index values into the LanguageIDs array
|
||||
enum
|
||||
{
|
||||
LANGIDX_UserPreferred,
|
||||
LANGIDX_UserDefault,
|
||||
LANGIDX_SysPreferred,
|
||||
LANGIDX_SysDefault
|
||||
};
|
||||
extern DWORD LanguageIDs[4];
|
||||
extern void SetLanguageIDs ();
|
||||
|
||||
// Called by DoomMain.
|
||||
void I_Init (void);
|
||||
|
||||
// Called by D_DoomLoop,
|
||||
// returns current time in tics.
|
||||
extern int (*I_GetTime) (bool saveMS);
|
||||
|
||||
// like I_GetTime, except it waits for a new tic before returning
|
||||
extern int (*I_WaitForTic) (int);
|
||||
|
||||
// Freezes tic counting temporarily. While frozen, calls to I_GetTime()
|
||||
// will always return the same value. This does not affect I_MSTime().
|
||||
// You must also not call I_WaitForTic() while freezing time, since the
|
||||
// tic will never arrive (unless it's the current one).
|
||||
extern void (*I_FreezeTime) (bool frozen);
|
||||
|
||||
fixed_t I_GetTimeFrac (uint32 *ms);
|
||||
|
||||
// Return a seed value for the RNG.
|
||||
unsigned int I_MakeRNGSeed();
|
||||
|
||||
|
||||
//
|
||||
// Called by D_DoomLoop,
|
||||
// called before processing any tics in a frame
|
||||
// (just after displaying a frame).
|
||||
// Time consuming syncronous operations
|
||||
// are performed here (joystick reading).
|
||||
// Can call D_PostEvent.
|
||||
//
|
||||
void I_StartFrame (void);
|
||||
|
||||
|
||||
//
|
||||
// Called by D_DoomLoop,
|
||||
// called before processing each tic in a frame.
|
||||
// Quick syncronous operations are performed here.
|
||||
// Can call D_PostEvent.
|
||||
void I_StartTic (void);
|
||||
|
||||
// Asynchronous interrupt functions should maintain private queues
|
||||
// that are read by the synchronous functions
|
||||
// to be converted into events.
|
||||
|
||||
// Either returns a null ticcmd,
|
||||
// or calls a loadable driver to build it.
|
||||
// This ticcmd will then be modified by the gameloop
|
||||
// for normal input.
|
||||
ticcmd_t *I_BaseTiccmd (void);
|
||||
|
||||
|
||||
// Called by M_Responder when quit is selected.
|
||||
// Clean exit, displays sell blurb.
|
||||
void I_Quit (void);
|
||||
|
||||
|
||||
void I_Tactile (int on, int off, int total);
|
||||
|
||||
void STACK_ARGS I_Error (const char *error, ...) GCCPRINTF(1,2);
|
||||
void STACK_ARGS I_FatalError (const char *error, ...) GCCPRINTF(1,2);
|
||||
|
||||
void addterm (void (*func)(void), const char *name);
|
||||
#define atterm(t) addterm (t, #t)
|
||||
void popterm ();
|
||||
|
||||
// Print a console string
|
||||
void I_PrintStr (const char *str);
|
||||
|
||||
// Set the title string of the startup window
|
||||
void I_SetIWADInfo ();
|
||||
|
||||
// Pick from multiple IWADs to use
|
||||
int I_PickIWad (WadStuff *wads, int numwads, bool queryiwad, int defaultiwad);
|
||||
|
||||
// The ini could not be saved at exit
|
||||
bool I_WriteIniFailed ();
|
||||
|
||||
// [RH] Returns millisecond-accurate time
|
||||
unsigned int I_MSTime (void);
|
||||
unsigned int I_FPSTime();
|
||||
|
||||
class FTexture;
|
||||
bool I_SetCursor(FTexture *);
|
||||
|
||||
// Directory searching routines
|
||||
|
||||
struct findstate_t
|
||||
{
|
||||
int count;
|
||||
struct dirent **namelist;
|
||||
int current;
|
||||
};
|
||||
|
||||
void *I_FindFirst (const char *filespec, findstate_t *fileinfo);
|
||||
int I_FindNext (void *handle, findstate_t *fileinfo);
|
||||
int I_FindClose (void *handle);
|
||||
int I_FindAttr (findstate_t *fileinfo);
|
||||
|
||||
#define I_FindName(a) ((a)->namelist[(a)->current]->d_name)
|
||||
|
||||
#define FA_RDONLY 1
|
||||
#define FA_HIDDEN 2
|
||||
#define FA_SYSTEM 4
|
||||
#define FA_DIREC 8
|
||||
#define FA_ARCH 16
|
||||
|
||||
static inline char *strlwr(char *str)
|
||||
{
|
||||
char *ptr = str;
|
||||
while(*ptr)
|
||||
{
|
||||
*ptr = tolower(*ptr);
|
||||
++ptr;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,354 +1,354 @@
|
|||
/*
|
||||
** st_start.cpp
|
||||
** Handles the startup screen.
|
||||
**
|
||||
**---------------------------------------------------------------------------
|
||||
** Copyright 2006-2007 Randy Heit
|
||||
** All rights reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions
|
||||
** are met:
|
||||
**
|
||||
** 1. Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** 2. Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in the
|
||||
** documentation and/or other materials provided with the distribution.
|
||||
** 3. The name of the author may not be used to endorse or promote products
|
||||
** derived from this software without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
**---------------------------------------------------------------------------
|
||||
**
|
||||
*/
|
||||
|
||||
// HEADER FILES ------------------------------------------------------------
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <termios.h>
|
||||
|
||||
#include "st_start.h"
|
||||
#include "doomdef.h"
|
||||
#include "i_system.h"
|
||||
#include "c_cvars.h"
|
||||
|
||||
// MACROS ------------------------------------------------------------------
|
||||
|
||||
// TYPES -------------------------------------------------------------------
|
||||
|
||||
class FTTYStartupScreen : public FStartupScreen
|
||||
{
|
||||
public:
|
||||
FTTYStartupScreen(int max_progress);
|
||||
~FTTYStartupScreen();
|
||||
|
||||
void Progress();
|
||||
void NetInit(const char *message, int num_players);
|
||||
void NetProgress(int count);
|
||||
void NetMessage(const char *format, ...); // cover for printf
|
||||
void NetDone();
|
||||
bool NetLoop(bool (*timer_callback)(void *), void *userdata);
|
||||
protected:
|
||||
bool DidNetInit;
|
||||
int NetMaxPos, NetCurPos;
|
||||
const char *TheNetMessage;
|
||||
termios OldTermIOS;
|
||||
};
|
||||
|
||||
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
||||
|
||||
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
||||
|
||||
void I_ShutdownJoysticks();
|
||||
|
||||
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
|
||||
|
||||
static void DeleteStartupScreen();
|
||||
|
||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||
|
||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||
|
||||
FStartupScreen *StartScreen;
|
||||
|
||||
CUSTOM_CVAR(Int, showendoom, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||
{
|
||||
if (self < 0) self = 0;
|
||||
else if (self > 2) self=2;
|
||||
}
|
||||
|
||||
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
||||
|
||||
static const char SpinnyProgressChars[4] = { '|', '/', '-', '\\' };
|
||||
|
||||
// CODE --------------------------------------------------------------------
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// FStartupScreen :: CreateInstance
|
||||
//
|
||||
// Initializes the startup screen for the detected game.
|
||||
// Sets the size of the progress bar and displays the startup screen.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
FStartupScreen *FStartupScreen::CreateInstance(int max_progress)
|
||||
{
|
||||
atterm(DeleteStartupScreen);
|
||||
return new FTTYStartupScreen(max_progress);
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// DeleteStartupScreen
|
||||
//
|
||||
// Makes sure the startup screen has been deleted before quitting.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void DeleteStartupScreen()
|
||||
{
|
||||
if (StartScreen != NULL)
|
||||
{
|
||||
delete StartScreen;
|
||||
StartScreen = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen Constructor
|
||||
//
|
||||
// Sets the size of the progress bar and displays the startup screen.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
FTTYStartupScreen::FTTYStartupScreen(int max_progress)
|
||||
: FStartupScreen(max_progress)
|
||||
{
|
||||
DidNetInit = false;
|
||||
NetMaxPos = 0;
|
||||
NetCurPos = 0;
|
||||
TheNetMessage = NULL;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen Destructor
|
||||
//
|
||||
// Called just before entering graphics mode to deconstruct the startup
|
||||
// screen.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
FTTYStartupScreen::~FTTYStartupScreen()
|
||||
{
|
||||
NetDone(); // Just in case it wasn't called yet and needs to be.
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: Progress
|
||||
//
|
||||
// If there was a progress bar, this would move it. But the basic TTY
|
||||
// startup screen doesn't have one, so this function does nothing.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::Progress()
|
||||
{
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetInit
|
||||
//
|
||||
// Sets stdin for unbuffered I/O, displays the given message, and shows
|
||||
// a progress meter.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::NetInit(const char *message, int numplayers)
|
||||
{
|
||||
if (!DidNetInit)
|
||||
{
|
||||
termios rawtermios;
|
||||
|
||||
fprintf (stderr, "Press 'Q' to abort network game synchronization.");
|
||||
// Set stdin to raw mode so we can get keypresses in ST_CheckNetAbort()
|
||||
// immediately without waiting for an EOL.
|
||||
tcgetattr (STDIN_FILENO, &OldTermIOS);
|
||||
rawtermios = OldTermIOS;
|
||||
rawtermios.c_lflag &= ~(ICANON | ECHO);
|
||||
tcsetattr (STDIN_FILENO, TCSANOW, &rawtermios);
|
||||
DidNetInit = true;
|
||||
}
|
||||
if (numplayers == 1)
|
||||
{
|
||||
// Status message without any real progress info.
|
||||
fprintf (stderr, "\n%s.", message);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "\n%s: ", message);
|
||||
}
|
||||
fflush (stderr);
|
||||
TheNetMessage = message;
|
||||
NetMaxPos = numplayers;
|
||||
NetCurPos = 0;
|
||||
NetProgress(1); // You always know about yourself
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetDone
|
||||
//
|
||||
// Restores the old stdin tty settings.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::NetDone()
|
||||
{
|
||||
// Restore stdin settings
|
||||
if (DidNetInit)
|
||||
{
|
||||
tcsetattr (STDIN_FILENO, TCSANOW, &OldTermIOS);
|
||||
printf ("\n");
|
||||
DidNetInit = false;
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetMessage
|
||||
//
|
||||
// Call this between NetInit() and NetDone() instead of Printf() to
|
||||
// display messages, because the progress meter is mixed in the same output
|
||||
// stream as normal messages.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::NetMessage(const char *format, ...)
|
||||
{
|
||||
FString str;
|
||||
va_list argptr;
|
||||
|
||||
va_start (argptr, format);
|
||||
str.VFormat (format, argptr);
|
||||
va_end (argptr);
|
||||
fprintf (stderr, "\r%-40s\n", str.GetChars());
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetProgress
|
||||
//
|
||||
// Sets the network progress meter. If count is 0, it gets bumped by 1.
|
||||
// Otherwise, it is set to count.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::NetProgress(int count)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (count == 0)
|
||||
{
|
||||
NetCurPos++;
|
||||
}
|
||||
else if (count > 0)
|
||||
{
|
||||
NetCurPos = count;
|
||||
}
|
||||
if (NetMaxPos == 0)
|
||||
{
|
||||
// Spinny-type progress meter, because we're a guest waiting for the host.
|
||||
fprintf (stderr, "\r%s: %c", TheNetMessage, SpinnyProgressChars[NetCurPos & 3]);
|
||||
fflush (stderr);
|
||||
}
|
||||
else if (NetMaxPos > 1)
|
||||
{
|
||||
// Dotty-type progress meter.
|
||||
fprintf (stderr, "\r%s: ", TheNetMessage);
|
||||
for (i = 0; i < NetCurPos; ++i)
|
||||
{
|
||||
fputc ('.', stderr);
|
||||
}
|
||||
fprintf (stderr, "%*c[%2d/%2d]", NetMaxPos + 1 - NetCurPos, ' ', NetCurPos, NetMaxPos);
|
||||
fflush (stderr);
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetLoop
|
||||
//
|
||||
// The timer_callback function is called at least two times per second
|
||||
// and passed the userdata value. It should return true to stop the loop and
|
||||
// return control to the caller or false to continue the loop.
|
||||
//
|
||||
// ST_NetLoop will return true if the loop was halted by the callback and
|
||||
// false if the loop was halted because the user wants to abort the
|
||||
// network synchronization.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
bool FTTYStartupScreen::NetLoop(bool (*timer_callback)(void *), void *userdata)
|
||||
{
|
||||
fd_set rfds;
|
||||
struct timeval tv;
|
||||
int retval;
|
||||
char k;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
// Don't flood the network with packets on startup.
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 500000;
|
||||
|
||||
FD_ZERO (&rfds);
|
||||
FD_SET (STDIN_FILENO, &rfds);
|
||||
|
||||
retval = select (1, &rfds, NULL, NULL, &tv);
|
||||
|
||||
if (retval == -1)
|
||||
{
|
||||
// Error
|
||||
}
|
||||
else if (retval == 0)
|
||||
{
|
||||
if (timer_callback (userdata))
|
||||
{
|
||||
fputc ('\n', stderr);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (read (STDIN_FILENO, &k, 1) == 1)
|
||||
{
|
||||
// Check input on stdin
|
||||
if (k == 'q' || k == 'Q')
|
||||
{
|
||||
fprintf (stderr, "\nNetwork game synchronization aborted.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ST_Endoom()
|
||||
{
|
||||
I_ShutdownJoysticks();
|
||||
exit(0);
|
||||
}
|
||||
/*
|
||||
** st_start.cpp
|
||||
** Handles the startup screen.
|
||||
**
|
||||
**---------------------------------------------------------------------------
|
||||
** Copyright 2006-2007 Randy Heit
|
||||
** All rights reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions
|
||||
** are met:
|
||||
**
|
||||
** 1. Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** 2. Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in the
|
||||
** documentation and/or other materials provided with the distribution.
|
||||
** 3. The name of the author may not be used to endorse or promote products
|
||||
** derived from this software without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
**---------------------------------------------------------------------------
|
||||
**
|
||||
*/
|
||||
|
||||
// HEADER FILES ------------------------------------------------------------
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <termios.h>
|
||||
|
||||
#include "st_start.h"
|
||||
#include "doomdef.h"
|
||||
#include "i_system.h"
|
||||
#include "c_cvars.h"
|
||||
|
||||
// MACROS ------------------------------------------------------------------
|
||||
|
||||
// TYPES -------------------------------------------------------------------
|
||||
|
||||
class FTTYStartupScreen : public FStartupScreen
|
||||
{
|
||||
public:
|
||||
FTTYStartupScreen(int max_progress);
|
||||
~FTTYStartupScreen();
|
||||
|
||||
void Progress();
|
||||
void NetInit(const char *message, int num_players);
|
||||
void NetProgress(int count);
|
||||
void NetMessage(const char *format, ...); // cover for printf
|
||||
void NetDone();
|
||||
bool NetLoop(bool (*timer_callback)(void *), void *userdata);
|
||||
protected:
|
||||
bool DidNetInit;
|
||||
int NetMaxPos, NetCurPos;
|
||||
const char *TheNetMessage;
|
||||
termios OldTermIOS;
|
||||
};
|
||||
|
||||
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
||||
|
||||
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
||||
|
||||
void I_ShutdownJoysticks();
|
||||
|
||||
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
|
||||
|
||||
static void DeleteStartupScreen();
|
||||
|
||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||
|
||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||
|
||||
FStartupScreen *StartScreen;
|
||||
|
||||
CUSTOM_CVAR(Int, showendoom, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||
{
|
||||
if (self < 0) self = 0;
|
||||
else if (self > 2) self=2;
|
||||
}
|
||||
|
||||
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
||||
|
||||
static const char SpinnyProgressChars[4] = { '|', '/', '-', '\\' };
|
||||
|
||||
// CODE --------------------------------------------------------------------
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// FStartupScreen :: CreateInstance
|
||||
//
|
||||
// Initializes the startup screen for the detected game.
|
||||
// Sets the size of the progress bar and displays the startup screen.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
FStartupScreen *FStartupScreen::CreateInstance(int max_progress)
|
||||
{
|
||||
atterm(DeleteStartupScreen);
|
||||
return new FTTYStartupScreen(max_progress);
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// DeleteStartupScreen
|
||||
//
|
||||
// Makes sure the startup screen has been deleted before quitting.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void DeleteStartupScreen()
|
||||
{
|
||||
if (StartScreen != NULL)
|
||||
{
|
||||
delete StartScreen;
|
||||
StartScreen = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen Constructor
|
||||
//
|
||||
// Sets the size of the progress bar and displays the startup screen.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
FTTYStartupScreen::FTTYStartupScreen(int max_progress)
|
||||
: FStartupScreen(max_progress)
|
||||
{
|
||||
DidNetInit = false;
|
||||
NetMaxPos = 0;
|
||||
NetCurPos = 0;
|
||||
TheNetMessage = NULL;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen Destructor
|
||||
//
|
||||
// Called just before entering graphics mode to deconstruct the startup
|
||||
// screen.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
FTTYStartupScreen::~FTTYStartupScreen()
|
||||
{
|
||||
NetDone(); // Just in case it wasn't called yet and needs to be.
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: Progress
|
||||
//
|
||||
// If there was a progress bar, this would move it. But the basic TTY
|
||||
// startup screen doesn't have one, so this function does nothing.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::Progress()
|
||||
{
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetInit
|
||||
//
|
||||
// Sets stdin for unbuffered I/O, displays the given message, and shows
|
||||
// a progress meter.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::NetInit(const char *message, int numplayers)
|
||||
{
|
||||
if (!DidNetInit)
|
||||
{
|
||||
termios rawtermios;
|
||||
|
||||
fprintf (stderr, "Press 'Q' to abort network game synchronization.");
|
||||
// Set stdin to raw mode so we can get keypresses in ST_CheckNetAbort()
|
||||
// immediately without waiting for an EOL.
|
||||
tcgetattr (STDIN_FILENO, &OldTermIOS);
|
||||
rawtermios = OldTermIOS;
|
||||
rawtermios.c_lflag &= ~(ICANON | ECHO);
|
||||
tcsetattr (STDIN_FILENO, TCSANOW, &rawtermios);
|
||||
DidNetInit = true;
|
||||
}
|
||||
if (numplayers == 1)
|
||||
{
|
||||
// Status message without any real progress info.
|
||||
fprintf (stderr, "\n%s.", message);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "\n%s: ", message);
|
||||
}
|
||||
fflush (stderr);
|
||||
TheNetMessage = message;
|
||||
NetMaxPos = numplayers;
|
||||
NetCurPos = 0;
|
||||
NetProgress(1); // You always know about yourself
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetDone
|
||||
//
|
||||
// Restores the old stdin tty settings.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::NetDone()
|
||||
{
|
||||
// Restore stdin settings
|
||||
if (DidNetInit)
|
||||
{
|
||||
tcsetattr (STDIN_FILENO, TCSANOW, &OldTermIOS);
|
||||
printf ("\n");
|
||||
DidNetInit = false;
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetMessage
|
||||
//
|
||||
// Call this between NetInit() and NetDone() instead of Printf() to
|
||||
// display messages, because the progress meter is mixed in the same output
|
||||
// stream as normal messages.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::NetMessage(const char *format, ...)
|
||||
{
|
||||
FString str;
|
||||
va_list argptr;
|
||||
|
||||
va_start (argptr, format);
|
||||
str.VFormat (format, argptr);
|
||||
va_end (argptr);
|
||||
fprintf (stderr, "\r%-40s\n", str.GetChars());
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetProgress
|
||||
//
|
||||
// Sets the network progress meter. If count is 0, it gets bumped by 1.
|
||||
// Otherwise, it is set to count.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void FTTYStartupScreen::NetProgress(int count)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (count == 0)
|
||||
{
|
||||
NetCurPos++;
|
||||
}
|
||||
else if (count > 0)
|
||||
{
|
||||
NetCurPos = count;
|
||||
}
|
||||
if (NetMaxPos == 0)
|
||||
{
|
||||
// Spinny-type progress meter, because we're a guest waiting for the host.
|
||||
fprintf (stderr, "\r%s: %c", TheNetMessage, SpinnyProgressChars[NetCurPos & 3]);
|
||||
fflush (stderr);
|
||||
}
|
||||
else if (NetMaxPos > 1)
|
||||
{
|
||||
// Dotty-type progress meter.
|
||||
fprintf (stderr, "\r%s: ", TheNetMessage);
|
||||
for (i = 0; i < NetCurPos; ++i)
|
||||
{
|
||||
fputc ('.', stderr);
|
||||
}
|
||||
fprintf (stderr, "%*c[%2d/%2d]", NetMaxPos + 1 - NetCurPos, ' ', NetCurPos, NetMaxPos);
|
||||
fflush (stderr);
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// FTTYStartupScreen :: NetLoop
|
||||
//
|
||||
// The timer_callback function is called at least two times per second
|
||||
// and passed the userdata value. It should return true to stop the loop and
|
||||
// return control to the caller or false to continue the loop.
|
||||
//
|
||||
// ST_NetLoop will return true if the loop was halted by the callback and
|
||||
// false if the loop was halted because the user wants to abort the
|
||||
// network synchronization.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
bool FTTYStartupScreen::NetLoop(bool (*timer_callback)(void *), void *userdata)
|
||||
{
|
||||
fd_set rfds;
|
||||
struct timeval tv;
|
||||
int retval;
|
||||
char k;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
// Don't flood the network with packets on startup.
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 500000;
|
||||
|
||||
FD_ZERO (&rfds);
|
||||
FD_SET (STDIN_FILENO, &rfds);
|
||||
|
||||
retval = select (1, &rfds, NULL, NULL, &tv);
|
||||
|
||||
if (retval == -1)
|
||||
{
|
||||
// Error
|
||||
}
|
||||
else if (retval == 0)
|
||||
{
|
||||
if (timer_callback (userdata))
|
||||
{
|
||||
fputc ('\n', stderr);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (read (STDIN_FILENO, &k, 1) == 1)
|
||||
{
|
||||
// Check input on stdin
|
||||
if (k == 'q' || k == 'Q')
|
||||
{
|
||||
fprintf (stderr, "\nNetwork game synchronization aborted.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ST_Endoom()
|
||||
{
|
||||
I_ShutdownJoysticks();
|
||||
exit(0);
|
||||
}
|
Loading…
Reference in a new issue