1/*      Netrek Configuration file       -              by Kurt Siegl
2 *
3 */
4
5#ifndef __CONFIG_H
6#define __CONFIG_H
7
8/*
9################################################################################
10	All The fun defines
11################################################################################
12*/
13
14/*
15   Defines
16      Some possible values:
17   NOTE: Only NON-system specific defines belong here
18*/
19
20/*
21   ------------------------------------------------------------
22	 	Common defines
23   ------------------------------------------------------------
24*/
25
26
27#define RCD                     /* RCD             - Support Reciever variable
28                                                     distresses */
29
30                                /* PING            - Ping statistics */
31#define PING
32
33                                /* SHORT_PACKETS   - Reduce Network load */
34#define SHORT_PACKETS
35
36                                /* SPEEDUP         - Misc improvements to make
37                                                     the code faster */
38#define SPEEDUP
39
40                                /* FEATURE_PACKETS - feature packets */
41#define FEATURE_PACKETS
42                                /* UDP_PORTSWAP - Allow the client to
43                                initiate the UDP connection first if it so
44                                chooses.  This allows UDP connections through
45                                some packet filtering firewalls.
46                                */
47#define UDP_PORTSWAP
48
49				/* DEBUG   	   - Various useful debugging
50						     stuff.  No signal trap */
51#undef  DEBUG
52
53/*
54   ------------------------------------------------------------
55	 	COW only defines
56   ------------------------------------------------------------
57*/
58
59/*	NBT 			- Nick trown's macro code			*/
60#define NBT
61
62/*	MAXPLAYER		- Maximal number of players + observers 	*/
63#define MAXPLAYER 36
64
65/*	CORRUPTED_PACKETS 	- prevents some seg faults but verbose output	*/
66#define CORRUPTED_PACKETS
67
68/*	EXPIRE=#      		- number of days this version will work for	*/
69#if 0 /* ndef STABLE  expire function removed */
70#define EXPIRE 365
71#endif
72
73/*	ARMY_SLIDER   		- some sort of funky status window thing	*/
74#define ARMY_SLIDER
75
76/*	META          		- show active servers via metaserver - NBT	*/
77#define META
78
79/*	PACKET_LOG    		- log packets to stdout (for bandwith measurement) */
80#define PACKET_LOG
81
82/*	NEWMACRO 		- newmacro language				*/
83#define NEWMACRO
84
85/*	SMARTMACRO 		- macro extension (needs NEWMACRO)		*/
86#define SMARTMACRO
87
88/*	MULTILINE_MACROS	- enables multiline macros			*/
89#define MULTILINE_MACROS
90
91/*	XTREKRC_HELP 		- Hadley's xtrekrc window (stolden by KP)	*/
92#define XTREKRC_HELP
93
94/*	TOOLS			- Various tools, like shell escape, ...		*/
95#define TOOLS
96
97/*	SOUND			- support of external sound players		*/
98
99/* Autodetect may discover sound releated problems like cygwin has no shm */
100#undef SKIP_SOUND
101#ifndef SKIP_SOUND
102#define SOUND
103#endif
104
105/*      HOCKEY_LINES            - allow showing of hockey lines			*/
106#define HOCKEY_LINES
107
108/*	BEEPLITE		- player and planets highlighting		*/
109#define BEEPLITE
110
111/*	VSHIELD_BITMAPS		- damage dependent shields (hull)		*/
112#define VSHIELD_BITMAPS
113#define VARY_HULL
114
115/*      WARP_DEAD		- Use death detection
116*/
117#undef  WARP_DEAD
118
119/*    RCM                     	- Receiver configurable Server messages 	*/
120#define RCM
121
122/* 	RACE_COLORS		- additional bitplane for race colors		*/
123#define RACE_COLORS
124
125/* XTRA_MESSAGE_UI  - Show message being typed on the local display */
126#define  XTRA_MESSAGE_UI
127
128/* SYSTEM_DEFAULTFILE		- Points to a system wide .xtrekrc file */
129#define SYSTEM_DEFAULTFILE "/etc/netrek-client-cow/netrekrc"
130
131/* WINDOWMAKER			- WindowMaker Docking support */
132#ifdef linux
133#define WINDOWMAKER
134#endif
135
136#define PLIST1
137#define PLIST
138#define CONTROL_KEY
139#define DOC_WIN
140#define ROTATERACE
141#define FUNCTION_KEYS
142
143/* client options */
144#define IGNORE_SIGNALS_SEGV_BUS
145#define MOUSE_AS_SHIFT
146#define SHIFTED_MOUSE
147#define TNG_FED_BITMAPS
148#define MOTION_MOUSE
149#define DIST_KEY_NAME
150#define PHASER_STATS
151#define RECORDGAME
152
153#define CAMERA
154#define FULLSCREEN
155
156/*
157##############################################################################
158       All system dependencies should be defined here
159##############################################################################
160*/
161
162#define NEED_EXIT
163
164/* Automatic generated system dependend defines 			*/
165
166#undef HAVE_MATH_H
167#undef HAVE_STDLIB_H
168#undef _ALL_SOURCES
169#undef HAVE_SYS_SIGNAL_H
170#undef BSD_SIGNALS
171#undef SYSV_SIGNALS
172#undef POSIX_SIGNALS
173#undef RESTARTABLE_SYSCALLS
174#undef NEED_MEMORY_H
175#define STDC_HEADERS 1 		/* 13/01/94 omit hosed index [007] */
176#undef HAVE_WAIT3
177#undef NEED_SYS_SELECT_H
178#undef NO_FD_SET		/* Guess we suck badly if that happens :( */
179#undef HAVE_UNISTD_H
180#undef HAVE_SYS_TIMEB_H
181#undef TM_IN_SYS_TIME
182#undef TIME_WITH_SYS_TIME
183#undef NEED_SYS_TIME_H
184#undef HAVE_SYS_PTYIO_H
185#undef HAVE_SYS_FCNTL_H
186#undef HAVE_FCNTL_H
187#undef HAVE_CTYPE_H
188#undef HAVE_MACHINE_ENDIAN_H
189#undef HAVE_SYS_RESOURCE_H
190#undef HAVE_SYS_WAIT_H
191#undef HAVE_NETINET_IN_H
192#undef HAVE_NETINET_TCP_H
193#undef HAVE_SYS_FILIO_H		/* Needed for Solaris 2.5.1 */
194#undef HAVE_GMP2_H
195#undef NO_U_INT
196#undef SIZEOF_LONG
197#undef HAVE_USLEEP
198#undef HAVE_SETSTATE
199#undef HAVE_RANDOM
200#undef HAVE_STRFTIME
201#undef HAVE_FTIME
202#undef HAVE_STRCMPI
203#undef HAVE_STRNCMPI
204#undef HAVE_NINT
205#undef NEED_RINT_DEC
206#undef RETSIGTYPE
207#undef pid_t
208#undef uid_t
209#undef gid_t
210#undef size_t
211#undef vfork
212#if (defined(sparc) && defined(sun))
213#define vfork fork
214#endif
215#undef NO_PATH_MAX
216#undef inline
217
218#undef HAVE_X11
219#undef HAVE_WIN32
220#undef HAVE_XPM
221#undef HAVE_X11_XPM_H
222
223/* System dependend macros						*/
224
225/* SYSV signal handling */
226#ifdef SYSV_SIGNALS
227#include <signal.h>
228#define SIGNAL(x,y)   sigset(x,y)
229#define PAUSE(x)      sigpause(x)
230#define SIGSETMASK(x) { }
231#else
232#define SIGNAL(x,y)   signal(x,y)
233#define PAUSE(x)      pause()
234#define SIGSETMASK(x) sigsetmask(x)
235#endif
236
237#ifdef POSIX_SIGNALS
238#define HANDLE_SIG(s,h)	signal(s,h)
239#define setjmp(x) sigsetjmp(x,1)
240#define longjmp(x,y) siglongjmp(x,y)
241#else
242#define HANDLE_SIG(s,h) {}
243#endif
244
245#ifdef STDC_HEADERS
246#define INC_STRINGS	<string.h>
247#else
248#define INC_STRINGS	<strings.h>
249#endif
250
251#ifdef STDC_HEADERS
252#define MCMP(x,y,z)     memcmp(x,y,z)
253#define MCOPY(b1,b2,l)  memcpy(b2,b1,l)
254#define MZERO(b1,l)     memset(b1,0,l)
255#define INDEX(s,c)      strchr(s,c)
256#define RINDEX(s,c)     strrchr(s,c)
257#else
258#define INDEX(s,c)	index(s,c)
259#define RINDEX(s,c)	rindex(s,c)
260#define MCMP(x,y,z)     bcmp(x,y,z)
261#define MCOPY(b1,b2,l)  bcopy(b1,b2,l)
262#define MZERO(b1,l)     bzero(b1,l)
263#endif
264
265#ifdef SPEEDUP          /* strncpy is terrible slow */
266#ifdef NEED_MEMORY_H
267#include <memory.h>
268#else
269#include <string.h>
270#endif
271/* #define STRNCPY(x,y,z)	memcpy(x,y,z) */
272#define STRNCPY(x,y,z)  memccpy(x,y,'\0',z)
273#else
274#define STRNCPY(x,y,z)	strncpy(x,y,z)
275#endif
276
277#ifndef HAVE_WAIT3
278#define WAIT3(x,y,z)  waitpid(-1, x, y )
279#else
280#define WAIT3(x,y,z)  wait3(x, y, z)
281#endif
282
283#if (defined(HAVE_RANDOM) && defined(HAVE_SETSTATE)) || !defined(HAVE_RANDOM)
284#define RANDOM()        random()
285#define SRANDOM(x)      srandom(x)
286#else
287#define RANDOM()        rrandom()
288#define SRANDOM(x)      ssrandom(x)
289extern void ssrandom ();
290extern long rrandom ();
291#endif
292
293#if !defined(HAVE_RANDOM)
294extern void srandom ();
295extern long random ();
296#endif
297
298#if (SIZEOF_LONG == 8)
299#define _64BIT
300#define LONG int
301#define U_LONG u_int
302#else
303#define LONG long
304#define U_LONG u_long
305#endif
306
307/*  System dependend Include files */
308
309#define NULLFILE        	"null"
310
311#ifdef NEED_SYS_SELECT_H
312#define INC_SYS_SELECT <sys/select.h>
313#else
314#define INC_SYS_SELECT NULLFILE
315#endif
316#define SELECT select
317
318#ifdef HAVE_UNISTD_H
319#define INC_UNISTD      <unistd.h>
320#else
321#define INC_UNISTD      NULLFILE
322#endif
323
324#ifdef HAVE_SYS_SIGNAL_H
325#define INC_SYS_SIGNAL   <sys/signal.h>
326#else
327#define INC_SYS_SIGNAL   NULLFILE
328#endif
329
330#ifdef HAVE_SYS_FCNTL_H
331#define INC_SYS_FCNTL   <sys/fcntl.h>
332#else
333#define INC_SYS_FCNTL   NULLFILE
334#endif
335
336#ifdef HAVE_FCNTL_H
337#define INC_FCNTL       <fcntl.h>
338#else
339#define INC_FCNTL       NULLFILE
340#endif
341
342/* Some systems don't include <sys/time.h> in <time.h>  */
343#if defined(TM_IN_SYS_TIME) || defined(NEED_SYS_TIME_H)
344#define INC_SYS_TIME <sys/time.h>
345#else
346#define INC_SYS_TIME NULLFILE
347#endif
348
349#ifdef HAVE_SYS_PTYIO_H
350#define INC_SYS_PTYIO <sys/ptyio.h>
351#else
352#define INC_SYS_PTYIO NULLFILE
353#endif
354
355#ifdef HAVE_CTYPE_H
356#define INC_CTYPE	<ctype.h>
357#else
358#define INC_CTYPE 	NULLFILE
359#endif
360
361#ifdef HAVE_MACHINE_ENDIAN_H
362#define INC_MACHINE_ENDIAN <machine/endian.h>
363#else
364#define INC_MACHINE_ENDIAN NULLFILE
365#endif
366
367#ifdef HAVE_SYS_RESOURCE_H
368#define INC_SYS_RESOURCE <sys/resource.h>
369#else
370#define INC_SYS_RESOURCE NULLFILE
371#endif
372
373#ifdef HAVE_SYS_WAIT_H
374#define INC_SYS_WAIT 	<sys/wait.h>
375#else
376#define INC_SYS_WAIT 	NULLFILE
377#endif
378
379#ifdef HAVE_NETINET_IN_H
380#define INC_NETINET_IN 	<netinet/in.h>
381#else
382#define INC_NETINET_IN 	NULLFILE
383#endif
384
385#ifdef HAVE_NETINET_TCP_H
386#define INC_NETINET_TCP  <netinet/tcp.h>
387#else
388#define INC_NETINET_TCP  NULLFILE
389#endif
390
391/* Replace outdated ftime with gettimeofday */
392#if defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME)
393#define INC_SYS_TIMEB   <sys/timeb.h>
394#else
395#define NOTIMEB
396#define INC_SYS_TIMEB   <sys/time.h>
397#endif
398
399#ifdef HAVE_GMP2_H
400#define INC_MP <gmp.h>
401#define MPTYPEDEF typedef mpz_t MPTYPE;
402
403#define assignItom(x,i) {mpz_init(x); mpz_set_ui(x,i);}
404#define madd(x, y, z) mpz_add(z, x, y)
405#define msub(x, y, z) mpz_sub(z, x, y)
406#define mult(x, y, z) mpz_mul(z, x, y)
407#define mdiv(n, d, q, r) mpz_fdiv_qr(q, r, n, d)
408#define sdiv(n, d, q, r) *r = mpz_fdiv_q_ui(q, n, d)
409#define msqrt(x, y, z) mpz_sqrt(z, x, y)
410#define mp_pow(x, y, z, a) mpz_powm(a, x, y, z)
411#define gcd(x, y, z) mpz_gcd(z, x, y)
412#define mcmp(x, y) mpz_cmp(x, y)
413#define min(x) mpz_min(x)
414#define mout(x) mpz_mout(x)
415#define mfree(x) mpz_clear(x)
416
417#else
418#define MPTYPEDEF typedef MINT *MPTYPE;
419#define assignItom(x,i) x= itom(i)
420#define mp_pow(x, y, z, a) pow(x, y, z, a)
421#define INC_MP <mp.h>
422#endif
423
424#ifdef NO_PATH_MAX
425#define PATH_MAX 255
426#define INC_LIMITS	NULLFILE
427#else
428#define INC_LIMITS	<limits.h>
429#endif
430
431#ifdef HAVE_XPM
432#ifdef HAVE_X11_XPM_H
433#define INC_XPM <X11/xpm.h>
434#else
435#define INC_XPM <xpm.h>
436#endif
437#else
438#define INC_XPM NULLFILE
439#endif
440
441/* Unchecked machine dependencies */
442
443#ifdef linux
444#define SHMFLAG         sizeof(struct memory)
445#else
446#define SHMFLAG         0
447#endif
448
449#if defined(sun3)
450#define INC_STDLIB 	NULLFILE
451#else
452#define INC_STDLIB	<stdlib.h>
453#endif
454
455#ifndef sun4
456#if defined(HAVE_NINT) && defined(HAVE_MATH_H)
457#define INC_MATH	<math.h>
458#else
459#if defined(NEED_RINT_DEC)
460extern double rint(double);
461#define INC_MATH        NULLFILE
462#else
463#define INC_MATH        <math.h>
464#endif
465#define  nint(x) ((int) rint(x))
466#endif
467#endif
468
469/*
470   Some systems, most notably SunOS 4.1.3, don't include function definitions
471   in the libraries.  This results in some warning we don't want.
472   This header defines the type for all these functions.
473*/
474
475#ifdef sun4
476#include <stdio.h>
477#include <sys/types.h>
478#include <sys/socket.h>
479
480int close(int);
481int connect(int, struct sockaddr *, int);
482int fprintf(FILE *, const char *, ...);
483int fputs(char *, FILE *);
484char *memccpy(char *, char *, int, int);
485int perror(char *);
486int socket(int, int, int);
487int sscanf(char *, char *, ...);
488char *strdup(char *arg);
489
490char _filbuf(FILE *);
491int _flsbuf(unsigned char, FILE *);
492
493#endif /* defined sun4 */
494
495#ifdef WIN32
496typedef unsigned short int ushort;
497#define strncasecmp strncmp
498#ifdef THREADED
499#define THREAD(fn) { DWORD junk; CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)f
500#define ENDTHREAD ExitThread(0);
501typedef unsigned long int SEMAPHORE;
502#define CREATE_SEMAPHORE(initstate) CreateEvent(NULL, 1, initstate, NULL)
503#define SET_SEMAPHORE(sem) SetEvent((HANDLE)sem)
504#define RESET_SEMAPHORE(sem) ResetEvent((HANDLE)sem)
505#endif
506#endif
507
508#ifdef _MSC_VER
509#define INC_STRINGS     <ntstring.h>
510#define INC_IO     <ntio.h>
511#else
512#define INC_IO       NULLFILE
513#endif
514
515	/* Solaris specific stuff */
516
517#if defined(HAVE_SYS_FILIO_H)
518#define INC_SYS_FILIO <sys/filio.h>
519#else
520#define INC_SYS_FILIO NULLFILE
521#endif
522
523/* define this if you have the SDL library (checked by configure.in) */
524#undef HAVE_SDL
525
526#endif  /* __CONFIG_H */
527