1 #if !defined(WINCOMPAT_INCLUDED) && !defined(PLATFORM_WINDOWS) && !defined(WIN32) && !defined(WINDOWS) && !defined(__WIN32__)
2 #define WINCOMPAT_INCLUDED
3
4 /**
5 *
6 * Author: Magnus Naeslund (mag@fbab.net, mag@bahnhof.se)
7 * (c) 2000 Magnus Naeslund, all rights reserved
8 *
9 */
10
11 #include <sys/time.h>
12 #include <sys/types.h>
13 #include <unistd.h>
14 #include <termios.h>
15 #include <stdio.h>
16 #include <stdlib.h>
17
18 #ifndef TRUE
19 #define TRUE 1
20 #endif
21 #ifndef FALSE
22 #define FALSE 0
23 #endif
24
25 #define _kbhit kbhit
26 #define stricmp strcasecmp
27 #define strnicmp strncasecmp
28
29 #define Sleep(x) usleep((x)*1000)
30
31 static int inited=0;
32 static struct termios ori;
33
tcatexit()34 static void tcatexit(){
35 tcsetattr(0,0,&ori);
36 }
37
init_terminal()38 static void init_terminal(){
39 struct termios t;
40 tcgetattr(0,&t);
41 tcgetattr(0,&ori);
42 t.c_lflag &= ~(ICANON);
43 tcsetattr(0,0,&t);
44 atexit(tcatexit);
45 }
46
kbhit()47 static inline int kbhit(){
48 fd_set rfds;
49 struct timeval tv;
50
51 if (!inited){
52 inited=1;
53 init_terminal();
54 }
55
56 FD_ZERO(&rfds);
57 FD_SET(0, &rfds);
58 tv.tv_sec = 0;
59 tv.tv_usec = 10*1000;
60 return select(1, &rfds, NULL, NULL, &tv)>0;
61 }
62 /*
63 static inline int getch(){
64 fd_set rfds;
65
66 if (!inited){
67 inited=1;
68 init_terminal();
69 }
70
71 FD_ZERO(&rfds);
72 FD_SET(0, &rfds);
73 if (select(1, &rfds, NULL, NULL, NULL)>0)
74 return getchar();
75 else{
76 printf("wincompat.h: select() on fd 0 failed\n");
77 return 0xDeadBeef;
78 }
79 }
80 */
81 #endif
82