1/* Copyright (C) 2001 by Alex Kompel <shurikk@pacbell.net> */
2/* Copyright (c) NetHack PC Development Team 1993, 1994.  */
3/* NetHack may be freely redistributed.  See license for details. */
4
5#ifndef WCECONF_H
6#define WCECONF_H
7
8#pragma warning(disable:4142) /* benign redefinition of type */
9
10#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
11
12#include <windows.h>
13
14/* Detect the targe device */
15#if defined(WIN32_PLATFORM_PSPC)
16#	if _WIN32_WCE >= 300
17#		define WIN_CE_POCKETPC
18#	else
19#		define WIN_CE_PS2xx
20#	endif
21#elif defined(WIN32_PLATFORM_HPCPRO)
22#	define WIN_CE_HPCPRO
23#elif defined(WIN32_PLATFORM_WFSP)
24#	define WIN_CE_SMARTPHONE
25#else
26#	error "Unsupported Windows CE platform"
27#endif
28
29/* #define SHELL	/* nt use of pcsys routines caused a hang */
30
31#define RANDOM		/* have Berkeley random(3) */
32#define TEXTCOLOR	/* Color text */
33
34#define EXEPATH			/* Allow .exe location to be used as HACKDIR */
35#define TRADITIONAL_GLYPHMAP	/* Store glyph mappings at level change time */
36
37#define PC_LOCKING		/* Prevent overwrites of aborted or in-progress games */
38				/* without first receiving confirmation. */
39
40#define SELF_RECOVER		/* Allow the game itself to recover from an aborted game */
41
42#define NOTSTDC		/* no strerror() */
43
44#define USER_SOUNDS
45
46#define AUTOPICKUP_EXCEPTIONS
47
48/*
49 * -----------------------------------------------------------------
50 *  The remaining code shouldn't need modification.
51 * -----------------------------------------------------------------
52 */
53/* #define SHORT_FILENAMES	/* All NT filesystems support long names now */
54
55#ifdef MICRO
56#undef MICRO			/* never define this! */
57#endif
58
59#define NOCWD_ASSUMPTIONS	/* Always define this. There are assumptions that
60                                   it is defined for WIN32.
61				   Allow paths to be specified for HACKDIR,
62				   LEVELDIR, SAVEDIR, BONESDIR, DATADIR,
63				   SCOREDIR, LOCKDIR, CONFIGDIR, and TROUBLEDIR */
64#define NO_TERMS
65#define ASCIIGRAPH
66
67#ifdef OPTIONS_USED
68#undef OPTIONS_USED
69#endif
70#ifdef MSWIN_GRAPHICS
71#define OPTIONS_USED	"guioptions"
72#else
73#define OPTIONS_USED	"ttyoptions"
74#endif
75#define OPTIONS_FILE OPTIONS_USED
76
77#define PORT_HELP	"porthelp"
78
79#if defined(WIN_CE_POCKETPC)
80#	define PORT_CE_PLATFORM "Pocket PC"
81#elif defined(WIN_CE_PS2xx)
82#	define PORT_CE_PLATFORM "Palm-size PC 2.11"
83#elif defined(WIN_CE_HPCPRO)
84#	define PORT_CE_PLATFORM "H/PC Pro 2.11"
85#elif defined(WIN_CE_SMARTPHONE)
86#	define PORT_CE_PLATFORM "Smartphone 2002"
87#endif
88
89#if defined(ARM)
90#	define PORT_CE_CPU "ARM"
91#elif defined(PPC)
92#	define PORT_CE_CPU "PPC"
93#elif defined(ALPHA)
94#	define PORT_CE_CPU "ALPHA"
95#elif defined(SH3)
96#	define PORT_CE_CPU "SH3"
97#elif defined(SH4)
98#	define PORT_CE_CPU "SH4"
99#elif defined(MIPS)
100#	define PORT_CE_CPU "MIPS"
101#elif defined(X86) || defined(_X86_)
102#	define PORT_CE_CPU "X86"
103#else
104#	error Only ARM, PPC, ALPHA, SH3, SH4, MIPS and X86 supported
105#endif
106
107#define RUNTIME_PORT_ID	/* trigger run-time port identification since
108			   Makedefs is bootstrapped on a cross-platform. */
109
110#include <string.h>	/* Provides prototypes of strncmpi(), etc.     */
111#ifdef STRNCMPI
112#define strncmpi(a,b,c) _strnicmp(a,b,c)
113#endif
114
115#ifdef STRCMPI
116#define strcmpi(a,b) _stricmp(a,b)
117#define stricmp(a,b) _stricmp(a,b)
118#endif
119
120#include <stdlib.h>
121
122#define PATHLEN		BUFSZ /* maximum pathlength */
123#define FILENAME	BUFSZ /* maximum filename length (conservative) */
124
125#if defined(_MAX_PATH) && defined(_MAX_FNAME)
126# if (_MAX_PATH < BUFSZ) && (_MAX_FNAME < BUFSZ)
127#undef PATHLEN
128#undef FILENAME
129#define PATHLEN		_MAX_PATH
130#define FILENAME	_MAX_FNAME
131# endif
132#endif
133
134
135#define NO_SIGNAL
136#define index	strchr
137#define rindex	strrchr
138#define USE_STDARG
139#ifdef RANDOM
140/* Use the high quality random number routines. */
141#define Rand()	random()
142#else
143#define Rand()	rand()
144#endif
145
146#define FCMASK	0660	/* file creation mask */
147#define regularize	nt_regularize
148#define HLOCK "NHPERM"
149
150#ifndef M
151#define M(c)		((char) (0x80 | (c)))
152/* #define M(c)		((c) - 128) */
153#endif
154
155#ifndef C
156#define C(c)		(0x1f & (c))
157#endif
158
159#if defined(DLB)
160#define FILENAME_CMP  _stricmp		      /* case insensitive */
161#endif
162
163#if 0
164extern char levels[], bones[], permbones[],
165#endif /* 0 */
166
167/* this was part of the MICRO stuff in the past */
168extern const char *alllevels, *allbones;
169extern char hackdir[];
170#define ABORT C('a')
171#define getuid() 1
172#define getlogin() ((char *)0)
173extern void NDECL(win32_abort);
174#ifdef WIN32CON
175extern void FDECL(nttty_preference_update, (const char *));
176extern void NDECL(toggle_mouse_support);
177#endif
178
179#ifndef alloca
180#define ALLOCA_HACK	/* used in util/panic.c */
181#endif
182
183#ifndef REDO
184#undef	Getchar
185#define Getchar nhgetch
186#endif
187
188#ifdef _MSC_VER
189#if 0
190#pragma warning(disable:4018)	/* signed/unsigned mismatch */
191#pragma warning(disable:4305)	/* init, conv from 'const int' to 'char' */
192#endif
193#pragma warning(disable:4761)	/* integral size mismatch in arg; conv supp*/
194#ifdef YYPREFIX
195#pragma warning(disable:4102)	/* unreferenced label */
196#endif
197#endif
198
199/* UNICODE stuff */
200#define NHSTR_BUFSIZE	255
201#ifdef UNICODE
202	#define NH_W2A(w, a, cb)     ( WideCharToMultiByte(                              \
203												   CP_ACP,                      \
204												   0,                           \
205												   (w),                           \
206												   -1,                          \
207												   (a),                           \
208												   (cb),                          \
209												   NULL,                        \
210												   NULL), (a) )
211
212	#define NH_A2W(a, w, cb)     ( MultiByteToWideChar(                              \
213												   CP_ACP,                      \
214												   0,                           \
215												   (a),                           \
216												   -1,                          \
217												   (w),                           \
218												   (cb)), (w) )
219#else
220	#define NH_W2A(w, a, cb)     (strncpy((a), (w), (cb)))
221
222	#define NH_A2W(a, w, cb)     (strncpy((w), (a), (cb)))
223#endif
224
225extern int FDECL(set_win32_option, (const char *, const char *));
226
227/*
228 * 3.4.3 addition - Stuff to help the user with some common, yet significant errors
229 * Let's make it NOP for now
230 */
231#define interject_assistance(_1,_2,_3,_4)
232#define interject(_1)
233
234/* Missing definitions */
235extern int		mswin_have_input();
236#define kbhit	mswin_have_input
237
238#define getenv(a) ((char*)NULL)
239
240/* __stdio.h__ */
241#define perror(a)
242#define freopen(a, b, c) fopen(a, b)
243extern int isatty(int);
244
245/* __time.h___ */
246#ifndef _TIME_T_DEFINED
247typedef __int64 time_t;        /* time value */
248#define _TIME_T_DEFINED     /* avoid multiple def's of time_t */
249#endif
250
251#ifndef _TM_DEFINED
252struct tm {
253        int tm_sec;     /* seconds after the minute - [0,59] */
254        int tm_min;     /* minutes after the hour - [0,59] */
255        int tm_hour;    /* hours since midnight - [0,23] */
256        int tm_mday;    /* day of the month - [1,31] */
257        int tm_mon;     /* months since January - [0,11] */
258        int tm_year;    /* years since 1900 */
259        int tm_wday;    /* days since Sunday - [0,6] */
260        int tm_yday;    /* days since January 1 - [0,365] */
261        int tm_isdst;   /* daylight savings time flag - - NOT IMPLEMENTED */
262        };
263#define _TM_DEFINED
264#endif
265
266extern struct tm * __cdecl localtime(const time_t *);
267extern time_t __cdecl time(time_t *);
268
269/* __stdio.h__ */
270#ifndef BUFSIZ
271#define BUFSIZ 255
272#endif
273
274#define rewind(stream) (void)fseek( stream, 0L, SEEK_SET )
275
276/* __io.h__ */
277typedef long off_t;
278
279extern int __cdecl close(int);
280extern int __cdecl creat(const char *, int);
281extern int __cdecl eof(int);
282extern long __cdecl lseek(int, long, int);
283extern int __cdecl open(const char *, int, ...);
284extern int __cdecl read(int, void *, unsigned int);
285extern int __cdecl unlink(const char *);
286extern int __cdecl write(int, const void *, unsigned int);
287extern int __cdecl rename(const char *, const char *);
288extern int __cdecl access(const char *, int);
289
290#ifdef DeleteFile
291#undef DeleteFile
292#endif
293#define DeleteFile(a) unlink(a)
294
295int chdir( const char *dirname );
296extern char *getcwd( char *buffer, int maxlen );
297
298/* __stdlib.h__ */
299#define abort()  (void)TerminateProcess(GetCurrentProcess(), 0)
300#ifndef strdup
301#define strdup _strdup
302#endif
303
304/* sys/stat.h */
305#define S_IWRITE  GENERIC_WRITE
306#define S_IREAD   GENERIC_READ
307
308
309/* CE 2.xx is missing even more stuff */
310#if defined(WIN_CE_PS2xx) || defined(WIN32_PLATFORM_HPCPRO)
311#define ZeroMemory(p, s)         memset((p), 0, (s))
312
313extern int __cdecl isupper(int c);
314extern int __cdecl isdigit(int c);
315extern int __cdecl isspace(int c);
316extern int __cdecl isprint(int c);
317
318extern char* __cdecl _strdup(const char* s);
319extern char* __cdecl strrchr( const char *string, int c );
320extern int   __cdecl _stricmp(const char* a, const char* b);
321
322extern FILE * __cdecl fopen(const char* filename, const char *mode);
323extern int    __cdecl fscanf(FILE *f , const char *format, ...);
324extern int __cdecl fprintf(FILE *f , const char *format, ...);
325extern int    __cdecl vfprintf(FILE* f, const char *format, va_list args);
326extern int __cdecl fgetc(FILE * f);
327extern char * __cdecl fgets(char *s, int size, FILE *f);
328extern int    __cdecl printf(const char *format, ...);
329extern int    __cdecl vprintf(const char *format, va_list args);
330extern int    __cdecl puts(const char * s);
331extern FILE*  __cdecl _getstdfilex(int desc);
332extern int __cdecl fclose(FILE * f);
333extern size_t __cdecl fread(void *p, size_t size, size_t count, FILE *f);
334extern size_t __cdecl fwrite(const void *p, size_t size, size_t count, FILE * f);
335extern int    __cdecl fflush(FILE *f);
336extern int    __cdecl feof(FILE *f);
337extern int    __cdecl fseek(FILE *f, long offset, int from);
338extern long   __cdecl ftell(FILE * f);
339
340#endif
341
342/* ARM - the processor; avoids conflict with ARM in hack.h */
343# ifdef ARM
344# undef ARM
345# endif
346
347/* leave - Windows CE defines leave as part of exception handling (__leave)
348   It confilicts with existing sources and since we don't use exceptions it is safe
349   to undefine it */
350# ifdef leave
351# undef leave
352# endif
353
354#endif /* WCECONF_H */
355