1 /*-
2  * Copyright (c) 2014-2018 Carsten Sonne Larsen <cs@innolan.net>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  *
25  * Project homepage:
26  * https://amath.innolan.net
27  *
28  */
29 
30 #ifndef AMATH_H
31 #define AMATH_H
32 /******************************************************************************/
33 #ifdef  __AMIGA__
34 # ifndef AOS3
35 # define AOS3
36 # endif
37 #endif
38 /******************************************************************************/
39 #ifdef  __AROS__
40 # ifndef AROS
41 # define AROS
42 # endif
43 #endif
44 /******************************************************************************/
45 #ifdef  __MORPHOS__
46 # ifndef MORPHOS
47 # define MORPHOS
48 # endif
49 #endif
50 /******************************************************************************/
51 #ifdef  __amigaos4__
52 # ifndef AOS4
53 # define AOS4
54 # endif
55 #endif
56 /******************************************************************************/
57 #ifdef __HAIKU__
58 # ifndef HAIKU
59 # define HAIKU
60 # endif
61 #endif
62 /******************************************************************************/
63 #ifdef __APPLE__
64 # ifndef APPLE
65 # define APPLE
66 # endif
67 #endif
68 /******************************************************************************/
69 #if defined(_WIN32) || defined(_WIN64)
70 # ifndef WINDOWS
71 # define WINDOWS
72 # endif
73 #endif
74 /******************************************************************************/
75 #if defined(AOS3) || defined(AOS4) || defined(AROS) || defined (MORPHOS)
76 # ifndef AMIGA
77 # define AMIGA
78 # endif
79 #endif
80 /******************************************************************************/
81 #if defined(unix) || defined(__unix__) || defined(__unix)
82 # ifndef UNIX
83 # define UNIX
84 # endif
85 #endif
86 /******************************************************************************/
87 #if defined(HAIKU) || defined(UNIX) || defined(APPLE)
88 # ifndef TERMIOS
89 # define TERMIOS
90 # endif
91 # include <stdint.h>
92 # include <unistd.h>
93 #endif
94 /******************************************************************************/
95 #if defined(WINDOWS)
96 # include <stdint.h>
97 #endif
98 /******************************************************************************/
99 #if defined(AROS) || defined(MORPHOS) || defined(AOS4)
100 # include <stdint.h>
101 # include <sys/types.h>
102 #endif
103 /******************************************************************************/
104 #if defined(AOS3)
105 # include <sys/types.h>
106 # define IPTR      LONG*
107 # define uintptr_t uint32_t
108 typedef u_int8_t   uint8_t;
109 typedef u_int16_t  uint16_t;
110 typedef u_int32_t  uint32_t;
111 typedef u_int64_t  uint64_t;
112 #endif
113 /******************************************************************************/
114 #if (__cplusplus <= 199711L && !defined(WINDOWS)) || !defined(__cplusplus)
115 #ifndef nullptr
116 #define nullptr 0
117 #endif
118 #elif (__cplusplus <= 199711L) && (defined(__GNUC__) || defined(__GNUG__))
119 #ifndef nullptr
120 #define nullptr 0
121 #endif
122 #endif
123 /******************************************************************************/
124 #define assert(x)
125 /******************************************************************************/
126 /* Compilers*/
127 #if defined(__clang__)
128 /* Clang */
129 # if defined(__apple_build_version__)
130 #  define COMP_NAME      "XCode Clang"
131 # else
132 #  define COMP_NAME      "Clang/LLVM"
133 # endif
134 # define str(x)          #x
135 # define CL_VER_STR(x)   str(x)
136 # ifdef __clang_patchlevel__
137 #  define COMP_VERS      CL_VER_STR(__clang_major__) DOT \
138                          CL_VER_STR(__clang_minor__) DOT \
139                          CL_VER_STR(__clang_patchlevel__)
140 # else
141 #  define COMP_VERS      CL_VER_STR(__clang_major__) DOT \
142                          CL_VER_STR(__clang_minor__)
143 # endif
144 
145 /* Intel ICC/ICPC */
146 #elif defined(__ECC) || defined(__ICC) || defined(__INTEL_COMPILER)
147 # define COMP_NAME       "Intel ICC/ICPC"
148 # define COMP_VERS       __VERSION__
149 
150 /* IBM XL C/C++ */
151 #elif defined(__IBMC__) || defined(__IBMCPP__)
152 # define COMP_NAME       "IBM XL"
153 # define COMP_VERS       __xlc__
154 
155 /* Microsoft Visual Studio */
156 #elif defined(_MSC_VER)
157 # define COMP_NAME       "MSVC++"
158 # if (_MSC_VER == 1100)
159 #  define COMP_VERS      "5.0"
160 # elif (_MSC_VER == 1200)
161 #  define COMP_VERS      "6.0"
162 # elif (_MSC_VER == 1300)
163 #  define COMP_VERS      "7.0"
164 # elif (_MSC_VER == 1310)
165 #  define COMP_VERS      "7.1"
166 # elif (_MSC_VER == 1400)
167 #  define COMP_VERS      "8.0"
168 # elif (_MSC_VER == 1500)
169 #  define COMP_VERS      "9.0"
170 # elif (_MSC_VER == 1600)
171 #  define COMP_VERS      "10.0"
172 # elif (_MSC_VER == 1700)
173 #  define COMP_VERS      "11.0"
174 # elif (_MSC_VER == 1800)
175 #  define COMP_VERS      "12.0"
176 # elif (_MSC_VER == 1900)
177 #  define COMP_VERS      "14.0"
178 # elif (_MSC_VER > 1900)
179 #  define COMP_VERS      "15.0+"
180 # else
181 #  define str(x)         #x
182 #  define MSC_VER_STR(x) str(x)
183 #  define COMP_VERS      MSC_VER_STR(_MSC_VER)
184 # endif
185 
186 /* Portland Group PGCC/PGCPP */
187 #elif defined(__PGI)
188 # define COMP_NAME       "PGCC/PGCPP"
189 # define str(x)          #x
190 # define PGCC_VER_STR(x) str(x)
191 # ifdef __PGIC_PATCHLEVEL__
192 #  define COMP_VERS      PGCC_VER_STR(__PGIC__) DOT \
193                          PGCC_VER_STR(__PGIC_MINOR) DOT \
194                          PGCC_VER_STR(__PGIC_PATCHLEVEL__)
195 # else
196 #  define COMP_VERS      PGCC_VER_STR(__PGIC__) DOT \
197                          PGCC_VER_STR(__PGIC_MINOR)
198 # endif
199 
200 /* GNU GCC/G++ */
201 #elif defined(__GNUC__) || defined(__GNUG__)
202 # define COMP_NAME       "GCC"
203 # define str(x)          #x
204 # define GCC_VER_STR(x)  str(x)
205 # ifdef __GNUC_PATCHLEVEL__
206 #  define COMP_VERS      GCC_VER_STR(__GNUC__) DOT GCC_VER_STR(__GNUC_MINOR__) DOT \
207                          GCC_VER_STR(__GNUC_PATCHLEVEL__)
208 # else
209 #  define COMP_VERS      GCC_VER_STR(__GNUC__) DOT GCC_VER_STR(__GNUC_MINOR__)
210 # endif
211 #endif
212 /******************************************************************************/
213 #define EMPTYSTRING ""
214 #define SPACE       " "
215 #define DOT         "."
216 /******************************************************************************/
217 #if defined(WINDOWS)
218 #define NEWLINE     "\r\n"
219 #elif defined(APPLE)
220 #define NEWLINE     "\r"
221 #else
222 #define NEWLINE     "\n"
223 #endif
224 /******************************************************************************/
225 #ifndef __cplusplus
226 typedef int bool;
227 #define true  1
228 #define false 0
229 #endif
230 /******************************************************************************/
231 #define LONG_BIT    32
232 #define wsize       sizeof(unsigned int)
233 #define wmask       (wsize - 1)
234 /******************************************************************************/
235 #if defined(INTELCPU)  || defined(i386)    || defined(i486)  ||  \
236     defined(intel)     || defined(x86)     || defined(i86pc) ||  \
237     defined(__i386__)  || defined(_M_IX86)
238 # ifdef TXTCPU
239 # undef TXTCPU
240 # endif
241 # define TXTCPU          "i386"
242 #endif
243 #if defined(__x86_64__) || defined(_M_AMD64)
244 # define TXTCPU          "amd64"
245 #endif
246 /******************************************************************************/
247 #if defined(__powerpc__) || defined(__powerpc64__)
248 # define TXTCPU          "PowerPC"
249 #endif
250 /******************************************************************************/
251 #if defined(__arm__) || defined(_M_ARM) || defined(__ARM_ARCH_6__)
252 # define TXTCPU          "arm"
253 #endif
254 #if defined(__aarch64__) || defined(_M_ARM64)
255 # define TXTCPU          "arm64"
256 #endif
257 /******************************************************************************/
258 #if defined(m68060) || defined(mc68060)
259 # define TXTCPU          "68060"
260 #elif defined(m68040) || defined(mc68040)
261 # define TXTCPU          "68040"
262 #elif defined(m68030) || defined(mc68030)
263 # define TXTCPU          "68030"
264 #elif defined(m68020) || defined(mc68020)
265 # define TXTCPU          "68020"
266 #elif defined(m68010) || defined(mc68010)
267 # define TXTCPU          "68010"
268 #elif defined(m68000) || defined(mc68000)
269 # define TXTCPU          "68000+"
270 #endif
271 /******************************************************************************/
272 #ifndef TXTCPU
273 //#error what cpu is this ?!
274 # define TXTCPU EMPTYSTRING
275 #endif
276 /******************************************************************************/
277 #if defined(TXTCPU) && defined(__HAVE_68881__)
278 # define TXTFPU SPACE    "FPU"
279 #else
280 # define TXTFPU EMPTYSTRING
281 #endif
282 /******************************************************************************/
283 #define TXTARCH          TXTCPU TXTFPU
284 #define RELDATESTAMP     "(07-08-2018)"
285 #define TXTDOSVERSION    "\0$VER: amath 1.85" SPACE RELDATESTAMP SPACE TXTARCH
286 #define TXTTITLE         "amath version 1.8.5"
287 #define TXTCOPYRIGHT     "(c) 2018 Carsten Sonne Larsen"
288 #define TXTSTARTMSG      TXTTITLE SPACE TXTCOPYRIGHT
289 /******************************************************************************/
290 #define TXTVERSMSG       TXTTITLE SPACE RELDATESTAMP SPACE TXTARCH
291 #define TXTCOMPMSG       "Compiled with " COMP_NAME SPACE COMP_VERS
292 /******************************************************************************/
293 #define CPROCNAME        "amath_console"
294 /******************************************************************************/
295 #if defined(AMIGA)
296 #define AMIGADOS_NAME    "dos.library"
297 #define AMIGADOS_REV     33L
298 #define INTUITION_REV    37L
299 #define INTUITION_NAME   "intuition.library"
300 #define GRAPHICS_REV     37L
301 #define GRAPHICS_NAME    "graphics.library"
302 #define LOCALE_REV       38L
303 #define LOCALE_NAME      "locale.library"
304 #define DEVCONSOLE       "console.device"
305 #define PORTCR           "RKM.console.read"
306 #define PORTCW           "RKM.console.write"
307 #define CATALOG_HELP     "amath-help.catalog"
308 #define CATALOG_IDEN     "amath-ident.catalog"
309 #define CATALOG_TEXT     "amath-text.catalog"
310 #define CATALOG_KEYW     "amath-keyword.catalog"
311 #define CATALOG_DEF      OC_BuiltInLanguage, "english"
312 #endif
313 /******************************************************************************/
314 #endif
315