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