OSDN Git Service

Initial Import
[nethackexpress/trunk.git] / include / system.h
1 /*      SCCS Id: @(#)system.h   3.4     2001/12/07      */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /* NetHack may be freely redistributed.  See license for details. */
4
5 #ifndef SYSTEM_H
6 #define SYSTEM_H
7
8 #if !defined(__cplusplus) && !defined(__GO32__)
9
10 #define E extern
11
12 /* some old <sys/types.h> may not define off_t and size_t; if your system is
13  * one of these, define them by hand below
14  */
15 #if (defined(VMS) && !defined(__GNUC__)) || defined(MAC)
16 #include <types.h>
17 #else
18 # ifndef AMIGA
19 #include <sys/types.h>
20 # endif
21 #endif
22
23 #if (defined(MICRO) && !defined(TOS)) || defined(ANCIENT_VAXC)
24 # if !defined(_SIZE_T) && !defined(__size_t) /* __size_t for CSet/2 */
25 #  define _SIZE_T
26 #  if !((defined(MSDOS) || defined(OS2)) && defined(_SIZE_T_DEFINED)) /* MSC 5.1 */
27 #   if !(defined(__GNUC__) && defined(AMIGA))
28 typedef unsigned int    size_t;
29 #   endif
30 #  endif
31 # endif
32 #endif  /* MICRO && !TOS */
33
34 #if defined(__TURBOC__) || defined(MAC)
35 #include <time.h>       /* time_t is not in <sys/types.h> */
36 #endif
37 #if defined(ULTRIX) && !(defined(ULTRIX_PROTO) || defined(NHSTDC))
38 /* The Ultrix v3.0 <sys/types.h> seems to be very wrong. */
39 # define time_t long
40 #endif
41
42 #if defined(ULTRIX) || defined(VMS)
43 # define off_t long
44 #endif
45 #if defined(AZTEC) || defined(THINKC4) || defined(__TURBOC__)
46 typedef long    off_t;
47 #endif
48
49 #endif /* !__cplusplus && !__GO32__ */
50
51 /* You may want to change this to fit your system, as this is almost
52  * impossible to get right automatically.
53  * This is the type of signal handling functions.
54  */
55 #if !defined(OS2) && (defined(_MSC_VER) || defined(__TURBOC__) || defined(__SC__) || defined(WIN32))
56 # define SIG_RET_TYPE void (__cdecl *)(int)
57 #endif
58 #ifndef SIG_RET_TYPE
59 # if defined(NHSTDC) || defined(POSIX_TYPES) || defined(OS2) || defined(__DECC)
60 #  define SIG_RET_TYPE void (*)()
61 # endif
62 #endif
63 #ifndef SIG_RET_TYPE
64 # if defined(ULTRIX) || defined(SUNOS4) || defined(SVR3) || defined(SVR4)
65         /* SVR3 is defined automatically by some systems */
66 #  define SIG_RET_TYPE void (*)()
67 # endif
68 #endif
69 #ifndef SIG_RET_TYPE    /* BSD, SIII, SVR2 and earlier, Sun3.5 and earlier */
70 # define SIG_RET_TYPE int (*)()
71 #endif
72
73 #if !defined(__cplusplus) && !defined(__GO32__)
74
75 #if defined(BSD) || defined(ULTRIX) || defined(RANDOM)
76 # ifdef random
77 # undef random
78 # endif
79 # if !defined(__SC__) && !defined(LINUX)
80 E  long NDECL(random);
81 # endif
82 # if (!defined(SUNOS4) && !defined(bsdi) && !defined(__FreeBSD__)) || defined(RANDOM)
83 E void FDECL(srandom, (unsigned int));
84 # else
85 #  if !defined(bsdi) && !defined(__FreeBSD__)
86 E int FDECL(srandom, (unsigned int));
87 #  endif
88 # endif
89 #else
90 E long lrand48();
91 E void srand48();
92 #endif /* BSD || ULTRIX || RANDOM */
93
94 #if !defined(BSD) || defined(ultrix)
95                         /* real BSD wants all these to return int */
96 # ifndef MICRO
97 E void FDECL(exit, (int));
98 # endif /* MICRO */
99 /* compensate for some CSet/2 bogosities */
100 # if defined(OS2_CSET2) && defined(OS2_CSET2_VER_2)
101 #  define open    _open
102 #  define close   _close
103 #  define read    _read
104 #  define write   _write
105 #  define lseek   _lseek
106 #  define chdir   _chdir
107 #  define getcwd  _getcwd
108 #  define setmode _setmode
109 # endif /* OS2_CSET2 && OS2_CSET2_VER_2 */
110 /* If flex thinks that we're not __STDC__ it declares free() to return
111    int and we die.  We must use __STDC__ instead of NHSTDC because
112    the former is naturally what flex tests for. */
113 # if defined(__STDC__) || !defined(FLEX_SCANNER)
114 #  ifndef OS2_CSET2
115 #   ifndef MONITOR_HEAP
116 E void FDECL(free, (genericptr_t));
117 #   endif
118 #  endif
119 # endif
120 #if !defined(__SASC_60) && !defined(_DCC) && !defined(__SC__)
121 # if defined(AMIGA) && !defined(AZTEC_50) && !defined(__GNUC__)
122 E int FDECL(perror, (const char *));
123 # else
124 #  if !(defined(ULTRIX_PROTO) && defined(__GNUC__))
125 E void FDECL(perror, (const char *));
126 #  endif
127 # endif
128 #endif
129 #endif
130 #ifndef NeXT
131 #ifdef POSIX_TYPES
132 E void FDECL(qsort, (genericptr_t,size_t,size_t,
133                      int(*)(const genericptr,const genericptr)));
134 #else
135 # if defined(BSD) || defined(ULTRIX)
136 E  int qsort();
137 # else
138 #  if !defined(LATTICE) && !defined(AZTEC_50)
139 E   void FDECL(qsort, (genericptr_t,size_t,size_t,
140                        int(*)(const genericptr,const genericptr)));
141 #  endif
142 # endif
143 #endif
144 #endif /* NeXT */
145
146 #ifndef __SASC_60
147 #if !defined(AZTEC_50) && !defined(__GNUC__)
148 /* may already be defined */
149
150 # ifdef ULTRIX
151 #  ifdef ULTRIX_PROTO
152 E int FDECL(lseek, (int,off_t,int));
153 #  else
154 E long FDECL(lseek, (int,off_t,int));
155 #  endif
156   /* Ultrix 3.0 man page mistakenly says it returns an int. */
157 E int FDECL(write, (int,char *,int));
158 E int FDECL(link, (const char *, const char*));
159 # else
160 # ifndef bsdi
161 E long FDECL(lseek, (int,long,int));
162 # endif
163 #  if defined(POSIX_TYPES) || defined(__TURBOC__)
164 #   ifndef bsdi
165 E int FDECL(write, (int, const void *,unsigned));
166 #   endif
167 #  else
168 #   ifndef __MWERKS__   /* metrowerks defines write via universal headers */
169 E int FDECL(write, (int,genericptr_t,unsigned));
170 #   endif
171 #  endif
172 # endif /* ULTRIX */
173
174 # ifdef OS2_CSET2       /* IBM CSet/2 */
175 #  ifdef OS2_CSET2_VER_1
176 E int FDECL(unlink, (char *));
177 #  else
178 E int FDECL(unlink, (const char *)); /* prototype is ok in ver >= 2 */
179 #  endif
180 # else
181 #  ifndef __SC__
182 E int FDECL(unlink, (const char *));
183 #  endif
184 # endif
185
186 #endif /* AZTEC_50 && __GNUC__ */
187
188 #ifdef MAC
189 #ifndef __CONDITIONALMACROS__   /* universal headers */
190 E int FDECL(close, (int));              /* unistd.h */
191 E int FDECL(read, (int, char *, int));  /* unistd.h */
192 E int FDECL(chdir, (const char *));     /* unistd.h */
193 E char *FDECL(getcwd, (char *,int));    /* unistd.h */
194 #endif
195
196 E int FDECL(open, (const char *,int));
197 #endif
198
199 #if defined(MICRO)
200 E int FDECL(close, (int));
201 #ifndef __EMX__
202 E int FDECL(read, (int,genericptr_t,unsigned int));
203 #endif
204 E int FDECL(open, (const char *,int,...));
205 E int FDECL(dup2, (int, int));
206 E int FDECL(setmode, (int,int));
207 E int NDECL(kbhit);
208 # if !defined(_DCC)
209 #  if defined(__TURBOC__)
210 E int FDECL(chdir, (const char *));
211 #  else
212 #   ifndef __EMX__
213 E int FDECL(chdir, (char *));
214 #   endif
215 #  endif
216 #  ifndef __EMX__
217 E char *FDECL(getcwd, (char *,int));
218 #  endif
219 # endif /* !_DCC */
220 #endif
221
222 #ifdef ULTRIX
223 E int FDECL(close, (int));
224 E int FDECL(atoi, (const char *));
225 E int FDECL(chdir, (const char *));
226 # if !defined(ULTRIX_CC20) && !defined(__GNUC__)
227 E int FDECL(chmod, (const char *,int));
228 E mode_t FDECL(umask, (int));
229 # endif
230 E int FDECL(read, (int,genericptr_t,unsigned));
231 /* these aren't quite right, but this saves including lots of system files */
232 E int FDECL(stty, (int,genericptr_t));
233 E int FDECL(gtty, (int,genericptr_t));
234 E int FDECL(ioctl, (int, int, char*));
235 E int FDECL(isatty, (int));     /* 1==yes, 0==no, -1==error */
236 #include <sys/file.h>
237 # if defined(ULTRIX_PROTO) || defined(__GNUC__)
238 E int NDECL(fork);
239 # else
240 E long NDECL(fork);
241 # endif
242 #endif /* ULTRIX */
243
244 #ifdef VMS
245 # ifndef abs
246 E int FDECL(abs, (int));
247 # endif
248 E int FDECL(atexit, (void (*)(void)));
249 E int FDECL(atoi, (const char *));
250 E int FDECL(chdir, (const char *));
251 E int FDECL(chown, (const char *,unsigned,unsigned));
252 # ifdef __DECC_VER
253 E int FDECL(chmod, (const char *,mode_t));
254 E mode_t FDECL(umask, (mode_t));
255 # else
256 E int FDECL(chmod, (const char *,int));
257 E int FDECL(umask, (int));
258 # endif
259 /* #include <unixio.h> */
260 E int FDECL(close, (int));
261 E int VDECL(creat, (const char *,unsigned,...));
262 E int FDECL(delete, (const char *));
263 E int FDECL(fstat, ( /*_ int, stat_t * _*/ ));
264 E int FDECL(isatty, (int));     /* 1==yes, 0==no, -1==error */
265 E long FDECL(lseek, (int,long,int));
266 E int VDECL(open, (const char *,int,unsigned,...));
267 E int FDECL(read, (int,genericptr_t,unsigned));
268 E int FDECL(rename, (const char *,const char *));
269 E int FDECL(stat, ( /*_ const char *,stat_t * _*/ ));
270 E int FDECL(write, (int,const genericptr,unsigned));
271 #endif
272
273 #endif  /* __SASC_60 */
274
275 /* both old & new versions of Ultrix want these, but real BSD does not */
276 #ifdef ultrix
277 E void abort();
278 E void bcopy();
279 # ifdef ULTRIX
280 E int FDECL(system, (const char *));
281 #  ifndef _UNISTD_H_
282 E int FDECL(execl, (const char *, ...));
283 #  endif
284 # endif
285 #endif
286 #ifdef MICRO
287 E void NDECL(abort);
288 E void FDECL(_exit, (int));
289 E int FDECL(system, (const char *));
290 #endif
291 #if defined(HPUX) && !defined(_POSIX_SOURCE)
292 E long NDECL(fork);
293 #endif
294
295 #ifdef POSIX_TYPES
296 /* The POSIX string.h is required to define all the mem* and str* functions */
297 #include <string.h>
298 #else
299 #if defined(SYSV) || defined(VMS) || defined(MAC) || defined(SUNOS4)
300 # if defined(NHSTDC) || (defined(VMS) && !defined(ANCIENT_VAXC))
301 #  if !defined(_AIX32) && !(defined(SUNOS4) && defined(__STDC__))
302                                 /* Solaris unbundled cc (acc) */
303 E int FDECL(memcmp, (const void *,const void *,size_t));
304 E void *FDECL(memcpy, (void *, const void *, size_t));
305 E void *FDECL(memset, (void *, int, size_t));
306 #  endif
307 # else
308 #  ifndef memcmp        /* some systems seem to macro these back to b*() */
309 E int memcmp();
310 #  endif
311 #  ifndef memcpy
312 E char *memcpy();
313 #  endif
314 #  ifndef memset
315 E char *memset();
316 #  endif
317 # endif
318 #else
319 # ifdef HPUX
320 E int FDECL(memcmp, (char *,char *,int));
321 E void *FDECL(memcpy, (char *,char *,int));
322 E void *FDECL(memset, (char*,int,int));
323 # endif
324 #endif
325 #endif /* POSIX_TYPES */
326
327 #if defined(MICRO) && !defined(LATTICE)
328 # if defined(TOS) && defined(__GNUC__)
329 E int FDECL(memcmp, (const void *,const void *,size_t));
330 E void *FDECL(memcpy, (void *,const void *,size_t));
331 E void *FDECL(memset, (void *,int,size_t));
332 # else
333 #  if defined(AZTEC_50) || defined(NHSTDC) || defined(WIN32)
334 E int  FDECL(memcmp, (const void *, const void *, size_t));
335 E void *FDECL(memcpy, (void *, const void *, size_t));
336 E void *FDECL(memset, (void *, int, size_t));
337 #  else
338 E int FDECL(memcmp, (char *,char *,unsigned int));
339 E char *FDECL(memcpy, (char *,char *,unsigned int));
340 E char *FDECL(memset, (char*,int,int));
341 #  endif /* AZTEC_50 || NHSTDC */
342 # endif /* TOS */
343 #endif /* MICRO */
344
345 #if defined(BSD) && defined(ultrix)     /* i.e., old versions of Ultrix */
346 E void sleep();
347 #endif
348 #if defined(ULTRIX) || defined(SYSV)
349 E unsigned sleep();
350 #endif
351 #if defined(HPUX)
352 E unsigned int FDECL(sleep, (unsigned int));
353 #endif
354 #ifdef VMS
355 E int FDECL(sleep, (unsigned));
356 #endif
357
358 E char *FDECL(getenv, (const char *));
359 E char *getlogin();
360 #if defined(HPUX) && !defined(_POSIX_SOURCE)
361 E long NDECL(getuid);
362 E long NDECL(getgid);
363 E long NDECL(getpid);
364 #else
365 # ifdef POSIX_TYPES
366 E pid_t NDECL(getpid);
367 E uid_t NDECL(getuid);
368 E gid_t NDECL(getgid);
369 #  ifdef VMS
370 E pid_t NDECL(getppid);
371 #  endif
372 # else  /*!POSIX_TYPES*/
373 #  ifndef getpid                /* Borland C defines getpid() as a macro */
374 E int NDECL(getpid);
375 #  endif
376 #  ifdef VMS
377 E int NDECL(getppid);
378 E unsigned NDECL(getuid);
379 E unsigned NDECL(getgid);
380 #  endif
381 #  if defined(ULTRIX) && !defined(_UNISTD_H_)
382 E unsigned NDECL(getuid);
383 E unsigned NDECL(getgid);
384 E int FDECL(setgid, (int));
385 E int FDECL(setuid, (int));
386 #  endif
387 # endif /*?POSIX_TYPES*/
388 #endif  /*?(HPUX && !_POSIX_SOURCE)*/
389
390 /* add more architectures as needed */
391 #if defined(HPUX)
392 #define seteuid(x) setreuid(-1, (x));
393 #endif
394
395 /*# string(s).h #*/
396 #if !defined(_XtIntrinsic_h) && !defined(POSIX_TYPES)
397 /* <X11/Intrinsic.h> #includes <string[s].h>; so does defining POSIX_TYPES */
398
399 #if (defined(ULTRIX) || defined(NeXT)) && defined(__GNUC__)
400 #include <strings.h>
401 #else
402 E char  *FDECL(strcpy, (char *,const char *));
403 E char  *FDECL(strncpy, (char *,const char *,size_t));
404 E char  *FDECL(strcat, (char *,const char *));
405 E char  *FDECL(strncat, (char *,const char *,size_t));
406 E char  *FDECL(strpbrk, (const char *,const char *));
407
408 # if defined(SYSV) || defined(MICRO) || defined(MAC) || defined(VMS) || defined(HPUX)
409 E char  *FDECL(strchr, (const char *,int));
410 E char  *FDECL(strrchr, (const char *,int));
411 # else /* BSD */
412 E char  *FDECL(index, (const char *,int));
413 E char  *FDECL(rindex, (const char *,int));
414 # endif
415
416 E int   FDECL(strcmp, (const char *,const char *));
417 E int   FDECL(strncmp, (const char *,const char *,size_t));
418 # if defined(MICRO) || defined(MAC) || defined(VMS)
419 E size_t FDECL(strlen, (const char *));
420 # else
421 # ifdef HPUX
422 E unsigned int  FDECL(strlen, (char *));
423 #  else
424 #   if !(defined(ULTRIX_PROTO) && defined(__GNUC__))
425 E int   FDECL(strlen, (const char *));
426 #   endif
427 #  endif /* HPUX */
428 # endif /* MICRO */
429 #endif /* ULTRIX */
430
431 #endif  /* !_XtIntrinsic_h_ && !POSIX_TYPES */
432
433 #if defined(ULTRIX) && defined(__GNUC__)
434 E char  *FDECL(index, (const char *,int));
435 E char  *FDECL(rindex, (const char *,int));
436 #endif
437
438 /* Old varieties of BSD have char *sprintf().
439  * Newer varieties of BSD have int sprintf() but allow for the old char *.
440  * Several varieties of SYSV and PC systems also have int sprintf().
441  * If your system doesn't agree with this breakdown, you may want to change
442  * this declaration, especially if your machine treats the types differently.
443  * If your system defines sprintf, et al, in stdio.h, add to the initial
444  * #if.
445  */
446 #if defined(ULTRIX) || defined(__DECC) || defined(__SASC_60) || defined(WIN32)
447 #define SPRINTF_PROTO
448 #endif
449 #if (defined(SUNOS4) && defined(__STDC__)) || defined(_AIX32)
450 #define SPRINTF_PROTO
451 #endif
452 #if defined(TOS) || defined(AZTEC_50) || defined(__sgi) || defined(__GNUC__)
453         /* problem with prototype mismatches */
454 #define SPRINTF_PROTO
455 #endif
456 #if defined(__MWERKS__) || defined(__SC__)
457         /* Metrowerks already has a prototype for sprintf() */
458 # define SPRINTF_PROTO
459 #endif
460
461 #ifndef SPRINTF_PROTO
462 # if defined(POSIX_TYPES) || defined(DGUX) || defined(NeXT) || !defined(BSD)
463 E  int FDECL(sprintf, (char *,const char *,...));
464 # else
465 #  define OLD_SPRINTF
466 E  char *sprintf();
467 # endif
468 #endif
469 #ifdef SPRINTF_PROTO
470 # undef SPRINTF_PROTO
471 #endif
472
473 #ifndef __SASC_60
474 #ifdef NEED_VARARGS
475 # if defined(USE_STDARG) || defined(USE_VARARGS)
476 #  if !defined(SVR4) && !defined(apollo)
477 #   if !(defined(ULTRIX_PROTO) && defined(__GNUC__))
478 #    if !(defined(SUNOS4) && defined(__STDC__)) /* Solaris unbundled cc (acc) */
479 E int FDECL(vsprintf, (char *, const char *, va_list));
480 E int FDECL(vfprintf, (FILE *, const char *, va_list));
481 E int FDECL(vprintf, (const char *, va_list));
482 #    endif
483 #   endif
484 #  endif
485 # else
486 #  define vprintf       printf
487 #  define vfprintf      fprintf
488 #  define vsprintf      sprintf
489 # endif
490 #endif /* NEED_VARARGS */
491 #endif
492
493
494 #ifdef MICRO
495 E int FDECL(tgetent, (const char *,const char *));
496 E void FDECL(tputs, (const char *,int,int (*)()));
497 E int FDECL(tgetnum, (const char *));
498 E int FDECL(tgetflag, (const char *));
499 E char *FDECL(tgetstr, (const char *,char **));
500 E char *FDECL(tgoto, (const char *,int,int));
501 #else
502 # if ! (defined(HPUX) && defined(_POSIX_SOURCE))
503 E int FDECL(tgetent, (char *,const char *));
504 E void FDECL(tputs, (const char *,int,int (*)()));
505 # endif
506 E int FDECL(tgetnum, (const char *));
507 E int FDECL(tgetflag, (const char *));
508 E char *FDECL(tgetstr, (const char *,char **));
509 E char *FDECL(tgoto, (const char *,int,int));
510 #endif
511
512 #ifdef ALLOC_C
513 E genericptr_t FDECL(malloc, (size_t));
514 #endif
515
516 /* time functions */
517
518 # ifndef LATTICE
519 #  if !(defined(ULTRIX_PROTO) && defined(__GNUC__))
520 E struct tm *FDECL(localtime, (const time_t *));
521 #  endif
522 # endif
523
524 # if defined(ULTRIX) || (defined(BSD) && defined(POSIX_TYPES)) || defined(SYSV) || defined(MICRO) || defined(VMS) || defined(MAC) || (defined(HPUX) && defined(_POSIX_SOURCE))
525 E time_t FDECL(time, (time_t *));
526 # else
527 E long FDECL(time, (time_t *));
528 # endif /* ULTRIX */
529
530 #ifdef VMS
531         /* used in makedefs.c, but missing from gcc-vms's <time.h> */
532 E char *FDECL(ctime, (const time_t *));
533 #endif
534
535
536 #ifdef MICRO
537 # ifdef abs
538 # undef abs
539 # endif
540 E int FDECL(abs, (int));
541 # ifdef atoi
542 # undef atoi
543 # endif
544 E int FDECL(atoi, (const char *));
545 #endif
546
547 #undef E
548
549 #endif /*  !__cplusplus && !__GO32__ */
550
551 #endif /* SYSTEM_H */