aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/alan2/sysdep.h
blob: 5e562cd68f46ae8b16c3dff9e6eb9782e978d2f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * 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 2
 * 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef GLK_ALAN2_SYSDEP
#define GLK_ALAN2_SYSDEP

/* System dependencies file for Alan Adventure Language system
 *
 * N.B.The test for symbols used here should really be of three types
 * - processor name(like PC, x86, ...)
 * - os name(DOS, WIN32, Solaris2, ...)
 * - compiler name andversion(DJGPP, CYGWIN, GCC271, THINK-C, ...)
 *
 * The set symbols should indicate if a feature is on or off like the GNU
 * AUTOCONFIG package does.
 *
 * This is not completely done yet!
 */

#include "common/scummsys.h"
#include "common/stream.h"

namespace Glk {
namespace Alan2 {

#define GLK
#define _PROTOTYPES_
#define __win__

#ifdef GLK
#undef isdigit
#define isdigit Common::isDigit
#undef stricmp
#define stricmp scumm_stricmp
#undef strdup
#define strdup scumm_strdup
#undef rand
#define rand() g_vm->getRandomNumber(0x7fffffff)
#undef fprintf
extern void fprintf(Common::WriteStream *ws, const char *fmt, ...);
#endif

/* Place definitions of OS and compiler here if necessary */
#ifdef AZTEC_C
#define __amiga__
#endif

#ifndef __sun__
#ifdef sun
#define __sun__
#endif
#endif

#ifdef _INCLUDE_HPUX_SOURCE
#define __hp__
#endif

#ifndef __unix__
#ifdef unix
#define __unix__
#endif
#endif

#ifdef vax
#define __vms__
#endif

#ifdef THINK_C
#define __mac__
#endif

#ifdef __MWERKS__
#ifdef macintosh
#define __mac__
#else
#define __dos__
#endif
#endif

#ifdef DOS
#define __dos__
#endif

#ifdef __BORLANDC__
#define __dos__
#endif

#ifdef __CYGWIN__
#define __win__
#endif

#ifdef __MINGW32__
#define __win__
#endif

#ifdef __PACIFIC__
#define  __dos__
#define HAVE_SHORT_FILENAMES
#endif


/*----------------------------------------------------------------------

  Below follows OS and compiler dependent settings. They should not be
  changed except for introducing new sections when porting to new
  environments.

 */

/************/
/* Includes */
/************/

#ifndef GLK
#include <stdio.h>
#include <ctype.h>
#endif

#ifdef __STDC__
#define _PROTOTYPES_
#include <stdlib.h>
#include <string.h>
#endif

#ifdef __vms__
/* Our VAXC doesn't define __STDC__ */
#define _PROTOTYPES_
#include <stdlib.h>
#include <string.h>
#endif


#ifdef __mac__
#define _PROTOTYPES_
#include <stdlib.h>
#include <string.h>
#include <unix.h>
#endif

#ifdef __MWERKS__
#define strdup _strdup
#endif

/***********************/
/* ISO character sets? */
/***********************/

/* Common case first */
#define ISO 1
#define NATIVECHARSET 0

#ifdef GLK
#undef ISO
#define ISO 1
#undef NATIVECHARSET
#define NATIVECHARSET 0
#else	/* Glk is ISO, no matter what the OS */

#ifdef __dos__
#undef ISO
#define ISO 0
#undef NATIVECHARSET
#define NATIVECHARSET 2
#endif

#ifdef __win__
#undef ISO
#define ISO 1
#undef NATIVECHARSET
#define NATIVECHARSET 2
#endif

#ifdef __mac__
#undef ISO
#define ISO 0
#undef NATIVECHARSET
#define NATIVECHARSET 1
#endif

#endif

/**************************/
/* Strings for file modes */
/**************************/
#define READ_MODE "r"
#define WRITE_MODE "w"

#ifdef __mac__
/* File open mode (binary) */
#undef READ_MODE
#define READ_MODE "rb"
#undef WRITE_MODE
#define WRITE_MODE "wb"
#endif

#ifdef __dos__
/* File open mode (binary) */
#undef READ_MODE
#define READ_MODE "rb"
#undef WRITE_MODE
#define WRITE_MODE "wb"
#endif

#ifdef __win__
/* File open mode (binary) */
#undef READ_MODE
#define READ_MODE "rb"
#undef WRITE_MODE
#define WRITE_MODE "wb"
#endif

/*****************/
/* Byte ordering */
/*****************/

#ifdef __dos__
#define REVERSED
#endif

#ifdef __vms__
#define REVERSED
#endif

#ifdef __win__
#ifndef REVERSED
#define REVERSED
#endif
#endif


/****************************/
/* Allocates cleared bytes? */
/****************************/

#ifdef __CYGWIN__
#define NOTCALLOC
#endif

#ifdef __MINGW32__
#define NOTCALLOC
#endif

#ifdef __unix__
#define NOTCALLOC
#endif


/****************/
/* Have termio? */
/****************/

#ifdef GLK
/* don't need TERMIO */
#else

#ifdef __CYGWIN__
#define HAVE_TERMIO
#endif

#ifdef __unix__
#define HAVE_TERMIO
#endif

#endif

/*******************************/
/* Is ANSI control available? */
/*******************************/

#ifdef GLK
/* don't need ANSI */
#else

#ifdef __CYGWIN__
#define HAVE_ANSI
#endif

#endif

/******************************/
/* Use the READLINE function? */
/******************************/

#ifdef GLK
/* Glk always uses readline(), no matter what the OS */
#define USE_READLINE
#else

#ifdef __unix__
#define USE_READLINE
#endif

#ifdef x__dos__
#define USE_READLINE
#endif

#ifdef __win__
#define USE_READLINE
#endif

#endif

/* Special cases and definition overrides */
#ifdef __unix__
#define MULTI
#endif




#ifdef __vms__

#define MULTI

extern char *strdup(char str[]);

/* Cheat implementation of strftime */
extern size_t strftime (char *, size_t, const char *, const struct tm *);

#endif

#ifdef __mac__

extern char *strdup(char *str);

#endif


#ifdef __dos__

/* Return codes */
#define EXIT_SUCCESS 0
#define EXIT_FAILURE  1

#endif


#ifdef _PROTOTYPES_

/* Native character functions */
extern int isSpace(int c);      /* IN - Native character to test */
extern int isLower(int c);      /* IN - Native character to test */
extern int isUpper(int c);      /* IN - Native character to test */
extern int isLetter(int c);     /* IN - Native character to test */
extern int toLower(int c);      /* IN - Native character to convert */
extern int toUpper(int c);      /* IN - Native character to convert */
extern char *strlow(char str[]); /* INOUT - Native string to convert */
extern char *strupp(char str[]); /* INOUT - Native string to convert */

/* ISO character functions */
extern int isISOLetter(int c);  /* IN - ISO character to test */
extern char toLowerCase(int c); /* IN - ISO character to convert */
extern char toUpperCase(int c); /* IN - ISO character to convert */
extern char *stringLower(char str[]); /* INOUT - ISO string to convert */
extern char *stringUpper(char str[]); /* INOUT - ISO string to convert */

/* ISO string conversion functions */
extern void toIso(char copy[],  /* OUT - Mapped string */
		  char original[], /* IN - string to convert */
		  int charset);	/* IN - The current character set */

extern void fromIso(char copy[], /* OUT - Mapped string */
		    char original[]); /* IN - string to convert */

extern void toNative(char copy[], /* OUT - Mapped string */
		     char original[], /* IN - string to convert */
		     int charset); /* IN - current character set */
#else
extern int isSpace();
extern int isLower();
extern int isUpper();
extern int isLetter();
extern int toLower();
extern int toUpper();
extern char *strlow();
extern char *strupp();

extern int isISOLetter();
extern char toLowerCase();
extern char toUpperCase();
extern char *stringLower();
extern char *stringUpper();

extern void toIso();
extern void fromIso();
#endif

} // End of namespace Alan2
} // End of namespace Glk

#endif