Fandom

Wikihack

Source:SLASH'EM 0.0.7E7F2/system.h

2,034pages on
this wiki
Add New Page
Talk0

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Below is the full text to system.h from the source code of SLASH'EM 0.0.7E7F2. To link to a particular line, write [[SLASH'EM 0.0.7E7F2/system.h#line123]], for example.

The latest source code for vanilla NetHack is at Source code.


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

Also on Fandom

Random Wiki