From: cloudwalk Date: Sat, 4 Jul 2020 14:09:35 +0000 (+0000) Subject: Rename sys_linux.c to sys_unix.c, which is more accurate. X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=62d48f29bb1ae6d13983bc0c324a700e4ac28dec;p=xonotic%2Fdarkplaces.git Rename sys_linux.c to sys_unix.c, which is more accurate. git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@12783 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/makefile.inc b/makefile.inc index 8aedf07a..d35e6bdc 100644 --- a/makefile.inc +++ b/makefile.inc @@ -179,7 +179,7 @@ OBJ_MENU= \ # note that builddate.c is very intentionally not compiled to a .o before # being linked, because it should be recompiled every time an executable is # built to give the executable a proper date string -OBJ_SV= builddate.c sys_linux.o vid_null.o thread_null.o $(OBJ_SND_NULL) $(OBJ_COMMON) +OBJ_SV= builddate.c sys_unix.o vid_null.o thread_null.o $(OBJ_SND_NULL) $(OBJ_COMMON) OBJ_SDL= builddate.c sys_sdl.o vid_sdl.o thread_sdl.o $(OBJ_MENU) $(OBJ_SND_COMMON) $(OBJ_SND_XMP) snd_sdl.o $(OBJ_VIDEO_CAPTURE) $(OBJ_COMMON) diff --git a/sys_linux.c b/sys_linux.c deleted file mode 100644 index 24ea6482..00000000 --- a/sys_linux.c +++ /dev/null @@ -1,175 +0,0 @@ - -#ifdef WIN32 -#include -#include -#include -#include "conio.h" -#else -#include -#include -#include -#endif - -#include - -#include "quakedef.h" - -sys_t sys; - -// ======================================================================= -// General routines -// ======================================================================= -void Sys_Shutdown (void) -{ - fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~O_NDELAY); - fflush(stdout); -} - -void Sys_Error (const char *error, ...) -{ - va_list argptr; - char string[MAX_INPUTLINE]; - -// change stdin to non blocking - fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~O_NDELAY); - - va_start (argptr,error); - dpvsnprintf (string, sizeof (string), error, argptr); - va_end (argptr); - - Con_Printf(CON_ERROR "Engine Error: %s\n", string); - - Host_Shutdown (); - exit (1); -} - -void Sys_PrintToTerminal(const char *text) -{ - if(sys.outfd < 0) - return; - // BUG: for some reason, NDELAY also affects stdout (1) when used on stdin (0). - // this is because both go to /dev/tty by default! - { - int origflags = fcntl (sys.outfd, F_GETFL, 0); - fcntl (sys.outfd, F_SETFL, origflags & ~O_NDELAY); -#ifdef WIN32 -#define write _write -#endif - while(*text) - { - fs_offset_t written = (fs_offset_t)write(sys.outfd, text, (int)strlen(text)); - if(written <= 0) - break; // sorry, I cannot do anything about this error - without an output - text += written; - } - fcntl (sys.outfd, F_SETFL, origflags); - } - //fprintf(stdout, "%s", text); -} - -char *Sys_ConsoleInput(void) -{ - //if (cls.state == ca_dedicated) - { - static char text[MAX_INPUTLINE]; - static unsigned int len = 0; -#ifdef WIN32 - int c; - - // read a line out - while (_kbhit ()) - { - c = _getch (); - if (c == '\r') - { - text[len] = '\0'; - _putch ('\n'); - len = 0; - return text; - } - if (c == '\b') - { - if (len) - { - _putch (c); - _putch (' '); - _putch (c); - len--; - } - continue; - } - if (len < sizeof (text) - 1) - { - _putch (c); - text[len] = c; - len++; - } - } -#else - fd_set fdset; - struct timeval timeout; - FD_ZERO(&fdset); - FD_SET(0, &fdset); // stdin - timeout.tv_sec = 0; - timeout.tv_usec = 0; - if (select (1, &fdset, NULL, NULL, &timeout) != -1 && FD_ISSET(0, &fdset)) - { - len = read (0, text, sizeof(text) - 1); - if (len >= 1) - { - // rip off the \n and terminate - // div0: WHY? console code can deal with \n just fine - // this caused problems with pasting stuff into a terminal window - // so, not ripping off the \n, but STILL keeping a NUL terminator - text[len] = 0; - return text; - } - } -#endif - } - return NULL; -} - -char *Sys_GetClipboardData (void) -{ - return NULL; -} - -void Sys_InitConsole (void) -{ -} - -int main (int argc, char **argv) -{ - signal(SIGFPE, SIG_IGN); - sys.selffd = -1; - sys.argc = argc; - sys.argv = (const char **)argv; - Sys_ProvideSelfFD(); - - // COMMANDLINEOPTION: sdl: -noterminal disables console output on stdout - if(COM_CheckParm("-noterminal")) - sys.outfd = -1; - // COMMANDLINEOPTION: sdl: -stderr moves console output to stderr - else if(COM_CheckParm("-stderr")) - sys.outfd = 2; - else - sys.outfd = 1; - - fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | O_NDELAY); - - Host_Main(); - - return 0; -} - -qboolean sys_supportsdlgetticks = false; -unsigned int Sys_SDL_GetTicks (void) -{ - Sys_Error("Called Sys_SDL_GetTicks on non-SDL target"); - return 0; -} -void Sys_SDL_Delay (unsigned int milliseconds) -{ - Sys_Error("Called Sys_SDL_Delay on non-SDL target"); -} diff --git a/sys_unix.c b/sys_unix.c new file mode 100644 index 00000000..24ea6482 --- /dev/null +++ b/sys_unix.c @@ -0,0 +1,175 @@ + +#ifdef WIN32 +#include +#include +#include +#include "conio.h" +#else +#include +#include +#include +#endif + +#include + +#include "quakedef.h" + +sys_t sys; + +// ======================================================================= +// General routines +// ======================================================================= +void Sys_Shutdown (void) +{ + fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~O_NDELAY); + fflush(stdout); +} + +void Sys_Error (const char *error, ...) +{ + va_list argptr; + char string[MAX_INPUTLINE]; + +// change stdin to non blocking + fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~O_NDELAY); + + va_start (argptr,error); + dpvsnprintf (string, sizeof (string), error, argptr); + va_end (argptr); + + Con_Printf(CON_ERROR "Engine Error: %s\n", string); + + Host_Shutdown (); + exit (1); +} + +void Sys_PrintToTerminal(const char *text) +{ + if(sys.outfd < 0) + return; + // BUG: for some reason, NDELAY also affects stdout (1) when used on stdin (0). + // this is because both go to /dev/tty by default! + { + int origflags = fcntl (sys.outfd, F_GETFL, 0); + fcntl (sys.outfd, F_SETFL, origflags & ~O_NDELAY); +#ifdef WIN32 +#define write _write +#endif + while(*text) + { + fs_offset_t written = (fs_offset_t)write(sys.outfd, text, (int)strlen(text)); + if(written <= 0) + break; // sorry, I cannot do anything about this error - without an output + text += written; + } + fcntl (sys.outfd, F_SETFL, origflags); + } + //fprintf(stdout, "%s", text); +} + +char *Sys_ConsoleInput(void) +{ + //if (cls.state == ca_dedicated) + { + static char text[MAX_INPUTLINE]; + static unsigned int len = 0; +#ifdef WIN32 + int c; + + // read a line out + while (_kbhit ()) + { + c = _getch (); + if (c == '\r') + { + text[len] = '\0'; + _putch ('\n'); + len = 0; + return text; + } + if (c == '\b') + { + if (len) + { + _putch (c); + _putch (' '); + _putch (c); + len--; + } + continue; + } + if (len < sizeof (text) - 1) + { + _putch (c); + text[len] = c; + len++; + } + } +#else + fd_set fdset; + struct timeval timeout; + FD_ZERO(&fdset); + FD_SET(0, &fdset); // stdin + timeout.tv_sec = 0; + timeout.tv_usec = 0; + if (select (1, &fdset, NULL, NULL, &timeout) != -1 && FD_ISSET(0, &fdset)) + { + len = read (0, text, sizeof(text) - 1); + if (len >= 1) + { + // rip off the \n and terminate + // div0: WHY? console code can deal with \n just fine + // this caused problems with pasting stuff into a terminal window + // so, not ripping off the \n, but STILL keeping a NUL terminator + text[len] = 0; + return text; + } + } +#endif + } + return NULL; +} + +char *Sys_GetClipboardData (void) +{ + return NULL; +} + +void Sys_InitConsole (void) +{ +} + +int main (int argc, char **argv) +{ + signal(SIGFPE, SIG_IGN); + sys.selffd = -1; + sys.argc = argc; + sys.argv = (const char **)argv; + Sys_ProvideSelfFD(); + + // COMMANDLINEOPTION: sdl: -noterminal disables console output on stdout + if(COM_CheckParm("-noterminal")) + sys.outfd = -1; + // COMMANDLINEOPTION: sdl: -stderr moves console output to stderr + else if(COM_CheckParm("-stderr")) + sys.outfd = 2; + else + sys.outfd = 1; + + fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | O_NDELAY); + + Host_Main(); + + return 0; +} + +qboolean sys_supportsdlgetticks = false; +unsigned int Sys_SDL_GetTicks (void) +{ + Sys_Error("Called Sys_SDL_GetTicks on non-SDL target"); + return 0; +} +void Sys_SDL_Delay (unsigned int milliseconds) +{ + Sys_Error("Called Sys_SDL_Delay on non-SDL target"); +}