]> Creatis software - bbtk.git/blob - kernel/src/bbtkSystem.h
no message
[bbtk.git] / kernel / src / bbtkSystem.h
1 /*=========================================================================                                                                               
2   Program:   bbtk
3   Module:    $RCSfile: bbtkSystem.h,v $
4   Language:  C++
5   Date:      $Date: 2009/06/08 14:50:04 $
6   Version:   $Revision: 1.14 $
7 =========================================================================*/
8
9 /* ---------------------------------------------------------------------
10
11 * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
12 * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
13 *
14 *  This software is governed by the CeCILL-B license under French law and 
15 *  abiding by the rules of distribution of free software. You can  use, 
16 *  modify and/ or redistribute the software under the terms of the CeCILL-B 
17 *  license as circulated by CEA, CNRS and INRIA at the following URL 
18 *  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
19 *  or in the file LICENSE.txt.
20 *
21 *  As a counterpart to the access to the source code and  rights to copy,
22 *  modify and redistribute granted by the license, users are provided only
23 *  with a limited warranty  and the software's author,  the holder of the
24 *  economic rights,  and the successive licensors  have only  limited
25 *  liability. 
26 *
27 *  The fact that you are presently reading this means that you have had
28 *  knowledge of the CeCILL-B license and that you accept its terms.
29 * ------------------------------------------------------------------------ */                                                                         
30
31
32 /**
33  *\file
34  *\brief contains all the OS depending stuff
35  */
36 #ifndef __bbtkSystem_h__
37 #define __bbtkSystem_h__
38
39 #include "bbtkConfigure.h"
40
41 // We try for Visual 6..????
42 //#pragma warning( disable : 4786)
43
44
45
46 //-----------------------------------------------------------------------------
47 //This is needed when compiling in debug mode
48 #ifdef _MSC_VER
49 // 'identifier' : class 'type' needs to have dll-interface to be used by
50 // clients of class 'type2'
51 #pragma warning ( disable : 4251 )
52 // non dll-interface class 'type' used as base for dll-interface class 'type2'
53 #pragma warning ( disable : 4275 )
54 // 'identifier' : identifier was truncated to 'number' characters in the
55 // debug information
56 #pragma warning ( disable : 4786 )
57 //'identifier' : decorated name length exceeded, name was truncated
58 #pragma warning ( disable : 4503 )
59 // C++ exception specification ignored except to indicate a 
60 // function is not __declspec(nothrow)
61 #pragma warning ( disable : 4290 )
62 // signed/unsigned mismatch
63 #pragma warning ( disable : 4018 )
64 // return type for 'identifier' is '' (ie; not a UDT or reference to UDT. Will
65 // produce errors if applied using infix notation
66 #pragma warning ( disable : 4284 )
67 // 'type' : forcing value to bool 'true' or 'false' (performance warning)
68 // Has revealed a real error !
69 //  bbSignalOutputModification(bool) called rather than 
70 //  bbSignalOutputModification(const std::string&, bool = true)
71 //  when invoking bbSignalOutputModification("Out") 
72 // KEEP IT !  
73 // //#pragma warning ( disable : 4800 )
74 // To avoid warning :
75 // 'PACKAGE_NAMEGetPackage' has C-linkage specified, but returns UDT 'boost::shared_ptr<T>' which is incompatible with C
76 #pragma warning ( disable : 4190 )
77
78
79 #endif //_MSC_VER
80
81
82 #include <stdio.h>  // for printf, ...
83 #include <iostream> // for cout, endl, ...
84
85 #ifdef _MSC_VER
86 // Micro$oft related stuff
87 #pragma once
88 #include <conio.h>
89 #include <tchar.h>
90 #else
91 //#include  <curses.h> // for getch
92 #endif //_MSC_VER
93
94 //-----------------------------------------------------------------------------
95 // Micro$oft shared library related stuff
96 //
97 // all the classes that must be visible outside the bbtk library 
98 // should be defined as :
99 // class BBTK_EXPORT ClassName 
100 // instead of :
101 // class ClassName
102
103
104 #if defined(_WIN32) 
105   // IF NOT DEF THEN INTERNAL COMPILER ERROR WITH BOOST 1.37 ON VISUAL C++ 
106   #define BOOST_SP_NO_SP_CONVERTIBLE
107 #endif
108
109 #if defined(_WIN32) 
110 //&& defined(BUILD_SHARED_LIBS)
111 //#include "WWW.h"
112   #ifdef BBTK_EXPORT_SYMBOLS
113     #define BBTK_EXPORT __declspec( dllexport )
114 #else
115     #define BBTK_EXPORT __declspec( dllimport )
116   #endif
117   #define BBTK_CDECL __cdecl
118 #else
119   #define BBTK_EXPORT
120   #define BBTK_CDECL
121 #endif // defined(_WIN32) && defined(BUILD_SHARED_LIBS)
122
123
124
125 #ifdef __BORLANDC__
126 #include <mem.h>
127 #endif //__BORLANDC__
128
129
130
131
132
133 //-----------------------------------------------------------------------------
134 // Version
135 #include <string.h>
136
137 namespace bbtk
138 {
139 #define BBTK_STRINGIFY(A) #A
140 #define BBTK_STRINGIFY_SYMBOL(A) BBTK_STRINGIFY(A)
141
142   extern "C" 
143   {
144     BBTK_EXPORT inline const std::string& BBTK_CDECL GetVersion() 
145     {
146       static const std::string v(BBTK_STRINGIFY_SYMBOL(BBTK_VERSION));
147       return v;
148     }
149   }
150
151 }
152 //-----------------------------------------------------------------------------
153
154
155
156
157 //-----------------------------------------------------------------------------
158 /*
159 #ifdef _WIN32
160 typedef  signed char         int8_t;
161 typedef  signed short        int16_t;
162 typedef  signed int          int32_t;
163 typedef  unsigned char       uint8_t;
164 typedef  unsigned short      uint16_t;
165 typedef  unsigned int        uint32_t;
166 #else 
167 #include <stdint.h>
168 #include <inttypes.h> 
169 #endif
170 */
171
172 #ifdef CMAKE_HAVE_STDINT_H
173    #include <stdint.h>
174 #else
175 #ifdef CMAKE_HAVE_INTTYPES_H
176    // Old system only have this
177    #include <inttypes.h>   // For uint8_t uint16_t and uint32_t
178 #else
179    //#include "XXX.h"
180 // Broken plateforms do not respect C99 and do not provide those typedef
181 // Special case for recent Borland compiler, comes with stdint.h
182 #if defined(_MSC_VER) || defined(__BORLANDC__) && (__BORLANDC__ < 0x0560)  \
183                       || defined(__MINGW32__)
184 typedef  signed char         int8_t;
185 typedef  signed short        int16_t;
186 typedef  signed int          int32_t;
187 typedef  unsigned char       uint8_t;
188 typedef  unsigned short      uint16_t;
189 typedef  unsigned int        uint32_t;
190
191 /// \todo Find a clever way to deal with int64_t, uint64_t
192
193 #else
194 #error "Sorry your plateform is not supported"
195 #endif // defined(_MSC_VER) || defined(__BORLANDC__) && (__BORLANDC__ < 0x0560)  || defined(__MINGW32__)
196 #endif // CMAKE_HAVE_INTTYPES_H
197 #endif // CMAKE_HAVE_STDINT_H
198
199 // Basically for VS6 and bcc 5.5.1:
200 #ifndef UINT32_MAX
201 #define UINT32_MAX    (4294967295U)
202 #endif
203
204
205
206 //-----------------------------------------------------------------------------
207
208
209 //-----------------------------------------------------------------------------
210 namespace bbtk
211 {
212  
213   /// System related stuff
214   struct System
215   {
216     /// returns true iff the program has a tty
217     static int HasTTY(); 
218   };
219
220 } // namespace bbtk
221 //-----------------------------------------------------------------------------
222
223     // file separator
224 #if defined(_WIN32)
225 #define VALID_FILE_SEPARATOR "\\"
226 #define INVALID_FILE_SEPARATOR "/"
227 #define VALID_FILE_SEPARATOR_CHAR '\\'
228 #define INVALID_FILE_SEPARATOR_CHAR '/'
229 #else
230 #define INVALID_FILE_SEPARATOR "\\"
231 #define VALID_FILE_SEPARATOR "/"
232 #define INVALID_FILE_SEPARATOR_CHAR '\\'
233 #define VALID_FILE_SEPARATOR_CHAR '/'
234 #endif
235
236 #endif
237
238
239 //----------------------------
240 #ifndef _WIN32
241 #include <unistd.h> //for access, unlink
242 #else
243 #include <io.h> //for _access on Win32
244 #endif
245
246 #ifdef _MSC_VER
247 # define access _access
248 #endif
249
250
251
252
253 //===========================================================
254 // Define the groups (modules) for doxygen documentation
255 /**
256  * \defgroup box Black boxes related classes
257  * \defgroup interface Graphical User Interface components
258  * \defgroup data Data
259 */