source: cpp/common/nonstd.h @ 250

Last change on this file since 250 was 247, checked in by Maciej Komosinski, 10 years ago

Sources support both 32-bit and 64-bit, and more compilers

  • Property svn:eol-style set to native
File size: 3.6 KB
Line 
1// This file is a part of the Framsticks GDK.
2// Copyright (C) 1999-2014  Maciej Komosinski and Szymon Ulatowski.  See LICENSE.txt for details.
3// Refer to http://www.framsticks.com/ for further information.
4
5#ifndef _NONSTD_H_
6#define _NONSTD_H_
7
8#define SAFEDELETE(p) {if (p) {delete p; p=NULL;}}
9#define SAFEDELETEARRAY(p) {if (p) {delete[] p; p=NULL;}}
10
11#define roundToInt(x) ((int)(floor((x)+0.5)))
12
13
14#define CPP_STR(s) CPP_XSTR(s)
15#define CPP_XSTR(s) #s
16
17
18#define DB(x) //output debug info. If needed, use #define DB(x) x
19//#define DB(x) x
20
21
22// ms visual c++
23#ifdef _MSC_VER
24 #include <stdio.h> //this #include must be present before two #defines below can be used, otherwise one will see: '_vsnprintf': attributes inconsistent with previous declaration, stdio.h:358
25 #define vsnprintf _vsnprintf
26 #define snprintf _snprintf
27#endif
28
29#ifdef MOBILE2D
30 #define strdup _strdup
31#endif
32
33/////////////////////////////////////////////////////// 64-bit int type and other macros
34#ifdef _WIN32
35        typedef __int64 LONGLONG;
36        #define PATH_SEPARATOR_CHAR '\\'
37        #define PATH_SEPARATOR_STRING "\\"
38        #define FPU_THROWS_EXCEPTIONS
39#else
40        #define LONGLONG long long int
41        #define PATH_SEPARATOR_CHAR '/'
42        #define PATH_SEPARATOR_STRING "/"
43#endif
44
45#define FOPEN_READ_BINARY "rb"
46// no FOPEN_READ_TEXT
47#define FOPEN_WRITE_BINARY "wb"
48#define FOPEN_APPEND_BINARY "ab"
49#define FOPEN_WRITE_TEXT "wt"
50#define FOPEN_APPEND_TEXT "at"
51
52#ifdef LINUX
53 #include <strings.h>
54 #ifndef __CYGWIN__
55  #define stricmp(a,b) strcasecmp(a,b)
56 #endif
57#endif
58
59#if defined MACOS || defined __ANDROID__ || defined IPHONE
60 #define stricmp(a,b) strcasecmp(a,b)
61#endif
62
63#ifdef IPHONE
64 #include <string>
65 std::string getAppHome();
66 std::string getAppResources();
67 #define GET_APP_HOME getAppHome()
68 #define GET_APP_RESOURCES getAppResources()
69#endif
70
71#ifdef SHP
72 #define GET_APP_HOME "/Home/"
73 #define GET_APP_RESOURCES "/Res/"
74#endif
75
76#ifdef TIZEN
77 #define GET_APP_HOME "/data/"
78 #define GET_APP_RESOURCES "/res/"
79#endif
80
81#ifdef __ANDROID__
82 #define GET_APP_HOME getAppHome()
83 #define GET_APP_RESOURCES "/resrc/" //inside APK, resources are kept in the "assets" subdirectory (in the "res" subdirectory there is no support for subdirectories nor accessing files by name). The prefix /resrc/ is just an indication that lets mfile easily discriminate between HOME (r/w) and RESOURCES (r) locations
84#endif
85
86#ifdef LINUX
87 #define GET_APP_HOME "./"
88 #define GET_APP_RESOURCES "./"
89#endif
90
91#ifdef MACOS
92#ifdef MACOS_APP_DIR //separate home/resources
93 #include <string>
94 std::string getAppHome();
95 #define GET_APP_HOME getAppHome()
96#else //old style
97 #define GET_APP_HOME "./"
98#endif
99 #define GET_APP_RESOURCES "./"
100#endif
101
102#if defined(_WIN32) && !defined(SHP)
103    #define GET_APP_HOME ".\\"
104    #define GET_APP_RESOURCES ".\\"
105#endif
106
107#ifdef INITIAL_DIR_IS_HOME
108 #include "cwd.h"
109 #ifdef GET_APP_HOME
110  #undef GET_APP_HOME
111 #endif
112 #define GET_APP_HOME getAppHome()
113#endif
114
115#ifdef INITIAL_DIR_IS_RES
116 #include "cwd.h"
117 #ifdef GET_APP_RESOURCES
118  #undef GET_APP_RESOURCES
119 #endif
120 #define GET_APP_RESOURCES getAppResources()
121#endif
122
123//typedef unsigned char boolean; //niestety nie mozna uzyc 'bool' bo VC w rpcndr.h wlasnie tak definiuje booleana, jako unsigned char
124//typedef char byte; //rozne srodowiska c++ definiuja byte jako unsigned char! w javie jest inaczej -> trzeba i tak zmienic w portowanych zrodlach byte na char.
125
126//vsnprintf implementations support different standards, some only return -1 instead of the required number of characters
127//these definitions are used by stl-util.cpp/ssprintf_va and SString::sprintf
128#ifdef LINUX
129#define VSNPRINTF_RETURNS_REQUIRED_SIZE
130#endif
131#if defined _WIN32 && !defined __BORLANDC__
132#define USE_VSCPRINTF
133#endif
134
135
136#endif
137
Note: See TracBrowser for help on using the repository browser.