52 lines
1.3 KiB
C
52 lines
1.3 KiB
C
/*
|
|
con_posix.c - reading from stdin
|
|
Copyright (C) 2024 Flying With Gauss
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program 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 General Public License for more details.
|
|
*/
|
|
|
|
#include "platform/platform.h"
|
|
|
|
#if !XASH_MOBILE_PLATFORM && !XASH_LOW_MEMORY
|
|
// use with caution, running engine in Qt Creator may cause a freeze in read() call
|
|
// I have never encountered this bug anywhere else, so still enable by default
|
|
#include <sys/select.h>
|
|
|
|
char *Posix_Input( void )
|
|
{
|
|
fd_set rfds;
|
|
static char line[1024];
|
|
static int len;
|
|
struct timeval tv = { 0 };
|
|
|
|
if( !Host_IsDedicated( ))
|
|
return NULL;
|
|
|
|
FD_ZERO( &rfds );
|
|
FD_SET( 0, &rfds); // stdin
|
|
while( select( 1, &rfds, NULL, NULL, &tv ) > 0 )
|
|
{
|
|
if( read( 0, &line[len], 1 ) != 1 )
|
|
break;
|
|
if( line[len] == '\n' || len > ( sizeof( line ) - 2 ))
|
|
{
|
|
line[ ++len ] = 0;
|
|
len = 0;
|
|
return line;
|
|
}
|
|
len++;
|
|
tv.tv_sec = 0;
|
|
tv.tv_usec = 0;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
#endif // !XASH_MOBILE_PLATFORM && !XASH_LOW_MEMORY
|