FEDRA emulsion software from the OPERA Collaboration
Milos.h
Go to the documentation of this file.
1 /************************************************************************/
2 /*
3 *
4 * Filename : MILOS.H
5 * Owner : Matrox Imaging dept.
6 * Content : This file contains the defines necessary to use the
7 * Matrox Imaging Library (MIL 4.0 and up) "C" user interface.
8 * under different operating systems
9 * Comments : This file has first become necessary to support the unicode
10 * strings under Windows CE.
11 *
12 * COPYRIGHT (c) Matrox Electronic Systems Ltd.
13 * All Rights Reserved
14 *************************************************************************/
15 
16 #ifndef __MILOS_H
17 #define __MILOS_H
18 
19 /************************************************************************/
20 /* Note that this header file might be included as a stand alone version*/
21 /************************************************************************/
22 #ifndef M_MIL_USE_OS
23 #define M_MIL_USE_WINDOWS 1
24 #endif
25 
26 // Set tiff optimisation define in PPC
27 #if M_MIL_USE_PPC
28  #ifndef M_MIL_USE_TIFF_OPTIMISATION
29  #define M_MIL_USE_TIFF_OPTIMISATION M_MIL_USE_PPC
30  #endif
31 #endif
32 
33 
34 /************************************************************************/
35 /* Include string.h */
36 /************************************************************************/
37 #include <string.h>
38 
39 #if M_MIL_USE_PPC
40  #include <ctype.h>
41  #include <wchar.h>
42  #include <stdarg.h>
43  #ifdef __cplusplus
44  extern "C"
45  {
46  #endif
47  int PPCFileFuncI(...);
48  long PPCFileFuncL(...);
49  void PPCFileFuncV(...);
50  double PPCFileFuncD(...);
51  char *PPCFileFuncC(char *string,...);
52  #ifdef __cplusplus
53  }
54  #endif
55  #if M_MIL_USE_ODYSSEY
56  #define IM_PTYPE
57  #endif
58 #endif
59 
60 /************************************************************************/
61 /* STRINGS RELATED DEFINITIONS */
62 /************************************************************************/
63 #if M_MIL_USE_CE
64  #define MIL_TEXT(quote) L##quote
65  #define MT(quote) L##quote
66  typedef unsigned short MILTCHAR; //obsolete
67  typedef unsigned short * LPMILSTR; //obsolete
68  typedef unsigned short MIL_TEXT_CHAR;
69  typedef unsigned short * MIL_TEXT_PTR;
70  typedef const unsigned short * LPCMILSTR;
71  typedef long MIL_INTADDR;
72  typedef unsigned long MIL_UINTADDR;
73 #elif M_MIL_USE_WINDOWS || M_MIL_USE_PPC || M_MIL_USE_LINUX
74  #if M_MIL_USE_WIN64
75  #define MIL_TEXT(quote) quote
76  #define MT(quote) quote
77  typedef char MILTCHAR; //obsolete
78  typedef char * LPMILSTR; //obsolete
79  typedef char MIL_TEXT_CHAR;
80  typedef char * MIL_TEXT_PTR;
81  typedef const char * LPCMILSTR;
82  typedef __int64 MIL_INTADDR;
83  typedef unsigned __int64 MIL_UINTADDR;
84  #else
85  #define MIL_TEXT(quote) quote
86  #define MT(quote) quote
87  typedef char MILTCHAR; //obsolete
88  typedef char * LPMILSTR; //obsolete
89  typedef char MIL_TEXT_CHAR;
90  typedef char * MIL_TEXT_PTR;
91  typedef const char * LPCMILSTR;
92  typedef long MIL_INTADDR;
93  typedef unsigned long MIL_UINTADDR;
94  #endif
95 #else
96  #error Operating system not supported in Milos.h!
97 #endif
98 
99 // Regular string functions' definition
100 #if M_MIL_USE_CE
101  #define MOs_ltoa _ltow
102  #define MOs_itoa _itow
103  #define MOs_ultoa _ultow
104  #define MOs_atoi _wtoi
105  #define MOs_atol _wtol
106  #define MOs_strcpy wcscpy
107  #define MOs_strncpy wcsncpy
108  #define MOs_strcmp wcscmp
109  #define MOs_stricmp wcsicmp
110  #define MOs_strncmp wcsncmp
111  #define MOs_strnicmp wcsnicmp
112  #define MOs_strcat wcscat
113  #define MOs_strncat wcsncat
114  #define MOs_strchr wcschr
115  #define MOs_ANSIstrchr strchr
116  #define MOs_strlen wcslen
117  #define MOs_ANSIstrlen strlen
118  #define MOs_sprintf swprintf
119  #define MOs_strstr wcsstr
120  #define MOs_sscanf swscanf
121  #define MOs_fprintf fwprintf
122  #define MOs_strtod wcstod
123  #define MOs_strupr wcsupr
124  //In CE, because of the memory allocation/deallocation, wcsdup must not be used.
125  #ifdef __cplusplus
126  inline unsigned short * MOs_strdup(const unsigned short * wcsSource)
127  {
128  unsigned short * wcsCopy = (unsigned short *)malloc(sizeof(unsigned short)*(wcslen(wcsSource) + 1));
129  if(wcsCopy)
130  wcscpy(wcsCopy, wcsSource);
131  return wcsCopy;
132  }
133  #else //__cplusplus
134  #define MOs_strdup(wcsSource) (wcscpy(malloc(sizeof(unsigned short)*(wcslen(wcsSource) + 1))),wcsSource)
135  #endif //__cplusplus
136  #define MOs_strlwr wcslwr
137  #define MOs_printf wprintf
138  #define MOs_fputs fputws
139  #define MOs_strtok wcstok
140  #define MOs_ungetc ungetwc
141  #define MOs_tolower towlower
142  #define MOs_toupper towupper
143  #define MOs_strcspn wcscspn
144  #define MOs_asctime _wasctime
145 #elif (M_MIL_USE_WINDOWS || M_MIL_USE_PPC)
146  #define MOs_ltoa _ltoa
147  #define MOs_itoa _itoa
148  #define MOs_ultoa _ultoa
149  #define MOs_atoi atoi
150  #define MOs_atol atol
151  #define MOs_strcpy strcpy
152  #define MOs_strncpy strncpy
153  #define MOs_strcmp strcmp
154  #define MOs_stricmp stricmp
155  #define MOs_strncmp strncmp
156  #define MOs_strnicmp strnicmp
157  #define MOs_strcat strcat
158  #define MOs_strncat strncat
159  #define MOs_strchr strchr
160  #define MOs_ANSIstrchr strchr
161  #if M_MIL_USE_WIN64
162  #define MOs_strlen (long)(strlen) //size_t is an __int64 under Win64,
163  #else
164  #define MOs_strlen strlen
165  #endif
166  #if M_MIL_USE_WIN64
167  #define MOs_ANSIstrlen (long)(strlen) //size_t is an __int64 under Win64,
168  #else
169  #define MOs_ANSIstrlen strlen
170  #endif
171  #if M_MIL_USE_PPC
172  #define MOs_fprintf PPCFileFuncI
173  #define MOs_printf PPCFileFuncI
174  #else
175  #define MOs_fprintf fprintf
176  #define MOs_printf printf
177  #endif
178  #define MOs_sprintf sprintf
179  #define MOs_strstr strstr
180  #define MOs_sscanf sscanf
181  #define MOs_strtod strtod
182  #define MOs_strupr strupr
183 #if M_MIL_USE_WINDOWS
184  #define MOs_strdup _strdup
185 #else
186  #define MOs_strdup strdup
187 #endif
188  #define MOs_strlwr strlwr
189  #define MOs_strtok strtok
190  #define MOs_ungetc ungetc
191  #define MOs_tolower tolower
192  #define MOs_tcscpy _tcscpy
193  #define MOs_tcslen _tcslen
194  #define MOs_tcsncpy _tcsncpy
195  #define MOs_toupper toupper
196  #define MOs_strcspn strcspn
197  #define MOs_asctime asctime
198 #elif M_MIL_USE_LINUX
199  #define MOs_ltoa // use sprintf instead
200  #define MOs_itoa // use sprintf instead
201  #define MOs_ultoa // use sprintf instead
202  #define MOs_atoi atoi
203  #define MOs_atol atol
204  #define MOs_strcpy strcpy
205  #define MOs_strncpy strncpy
206  #define MOs_strcmp strcmp
207  #define MOs_stricmp strcasecmp
208  #define MOs_strncmp strncmp
209  #define MOs_strnicmp strncasecmp
210  #define MOs_strcat strcat
211  #define MOs_strncat strncat
212  #define MOs_strchr strchr
213  #define MOs_ANSIstrchr strchr
214  #define MOs_strlen strlen
215  #define MOs_ANSIstrlen strlen
216  #define MOs_fprintf fprintf
217  #define MOs_printf printf
218  #define MOs_sprintf sprintf
219  #define MOs_strstr strstr
220  #define MOs_sscanf sscanf
221  #define MOs_strtod strtod
222  #define MOs_strupr strupr
223  #define MOs_strdup strdup
224  #define MOs_strlwr strlwr
225  #define MOs_strtok strtok
226  #define MOs_ungetc ungetc
227  #define MOs_tolower tolower
228  #define MOs_tcscpy
229  #define MOs_tcslen
230  #define MOs_tcsncpy
231  #define MOs_toupper toupper
232  #define MOs_strcspn strcspn
233  #define MOs_asctime asctime
234 #else
235  #error Operating system not supported in Milos.h!
236 #endif
237 
238 /**********************************************************************/
239 /* int64 related defines */
240 /**********************************************************************/
241 #if M_MIL_USE_WINDOWS
242  // Windows defines
243  typedef __int64 MILINT64; //obsolete
244  typedef const __int64 MILCINT64; //obsolete
245  typedef unsigned __int64 MILUINT64; //obsolete
246  typedef const unsigned __int64 MILCUINT64; //obsolete
247  typedef unsigned short MILWCHAR;
248 
249  typedef __int64 MIL_INT64;
250  typedef const __int64 MIL_CINT64;
251  typedef unsigned __int64 MIL_UINT64;
252  typedef const unsigned __int64 MIL_CUINT64;
253  typedef unsigned short MIL_WCHAR;
254 
255 #elif M_MIL_USE_PPC || M_MIL_USE_LINUX
256  // PPC defines
257  typedef long long MILINT64; //obsolete
258  typedef const long long MILCINT64; //obsolete
259  typedef unsigned long long MILUINT64; //obsolete
260  typedef const unsigned long long MILCUINT64; //obsolete
261  typedef unsigned short MILWCHAR;
262 
263  typedef long long MIL_INT64;
264  typedef const long long MIL_CINT64;
265  typedef unsigned long long MIL_UINT64;
266  typedef const unsigned long long MIL_CUINT64;
267  typedef unsigned short MIL_WCHAR;
268 
269 
270 #else
271  #error "Compilation model not supported"
272 #endif
273 
274 /************************************************************************/
275 /* FILES RELATED DEFINITIONS */
276 /************************************************************************/
277 
278 #include <stdio.h> /* required for definition of file */
279 
280 #if M_MIL_USE_WINDOWS || !M_MIL_USE_TIFF_OPTIMISATION
281  typedef FILE* MIL_FILE;
282 #elif M_MIL_USE_PPC
283  class CFileMemExchange;
284 
285  struct FilePtr
286  {
287  CFileMemExchange* FileStream;
288  FILE* DirectFilePtr;
289  };
290 
291  typedef FilePtr* MIL_FILE;
292 #endif
293 typedef unsigned int MIL_SIZE_T;
294 
295 #if M_MIL_USE_CE
296  #include "mil.h"
297  #define MOs_hypot _hypot
298 
299 /* C++ directive if needed */
300 #ifdef __cplusplus
301 extern "C"
302 {
303 #endif
304  MFTYPE32 MIL_TEXT_PTR MFTYPE MOs_getenv(LPCMILSTR VarName);
305  MFTYPE32 int MFTYPE MOs_putenv(LPCMILSTR VarName);
306 /* C++ directive if needed */
307 #ifdef __cplusplus
308 }
309 #endif
310 
311  #define MOs_fopen _wfopen
312  #define MOs_fclose fclose
313  #define MOs_fwrite fwrite
314  #define MOs_fread fread
315  #define MOs_fseek fseek
316  #define MOs_ftell ftell
317  #define MOs_feof feof
318  #define MOs_ferror ferror
319  #define MOs_fflush fflush
320  #define MOs_fgetc fgetc
321  #define MOs_fgets fgetws
322  #define MOs_clearerr clearerr
323  #define MOs_remove(n) DeleteFile(n) ? 0 : 1
324  #define MOs_rename(n,m) MoveFile(n,m) ? 0 : -1
325 #elif (M_MIL_USE_WINDOWS) || (!M_MIL_USE_TIFF_OPTIMISATION)
326  #define MOs_fopen fopen
327  #define MOs_fclose fclose
328  #define MOs_fwrite fwrite
329  #define MOs_fread fread
330  #define MOs_fseek fseek
331  #define MOs_ftell ftell
332  #define MOs_feof feof
333  #define MOs_ferror ferror
334  #define MOs_fflush fflush
335  #define MOs_fgetc fgetc
336  #define MOs_fgets fgets
337  #define MOs_clearerr clearerr
338  #define MOs_remove remove
339  #define MOs_rename rename
340  #define MOs_hypot hypot
341  #define MOs_getenv getenv
342  #define MOs_putenv putenv
343  #define MOs_fputs fputs
344 #elif M_MIL_USE_PPC
345  // Prototypes
346  MIL_FILE MStream_fopen(LPCMILSTR FileName, LPCMILSTR Mode);
347  int MStream_fclose(MIL_FILE File);
348  MIL_SIZE_T MStream_fwrite( const void *Buffer, MIL_SIZE_T Size, MIL_SIZE_T Count, MIL_FILE File);
349  MIL_SIZE_T MStream_fread( void *Buffer, MIL_SIZE_T Size, MIL_SIZE_T Count, MIL_FILE File);
350  int MStream_fseek(MIL_FILE File, long Offset, int Origin);
351  long MStream_ftell(MIL_FILE File);
352  int MStream_feof(MIL_FILE File);
353  int MStream_ferror(MIL_FILE File);
354  int MStream_fflush(MIL_FILE File);
355  int MStream_fgetc(MIL_FILE File);
356  char* MStream_fgets(char* String, int N, MIL_FILE File);
357  void MStream_clearerr(MIL_FILE File);
358  int MStream_fputs(const char* String, MIL_FILE File);
359 
360  #define MOs_fopen MStream_fopen
361  #define MOs_fclose MStream_fclose
362  #define MOs_fwrite MStream_fwrite
363  #define MOs_fread MStream_fread
364  #define MOs_fseek MStream_fseek
365  #define MOs_ftell MStream_ftell
366  #define MOs_feof MStream_feof
367  #define MOs_ferror MStream_ferror
368  #define MOs_fflush MStream_fflush
369  #define MOs_fgetc MStream_fgetc
370  #define MOs_fgets MStream_fgets
371  #define MOs_clearerr MStream_clearerr
372  #define MOs_remove PPCFileFuncV
373  #define MOs_rename PPCFileFuncV
374  #define MOs_fputs MStream_fputs
375 
376  #define MOS_GENERIC_READ (0x80000000L)
377  #define MOS_GENERIC_WRITE (0x40000000L)
378 
379  #define MOS_CREATE_NEW 1
380  #define MOS_CREATE_ALWAYS 2
381  #define MOS_OPEN_EXISTING 3
382  #define MOS_OPEN_ALWAYS 4
383  #define MOS_TRUNCATE_EXISTING 5
384 #elif M_MIL_USE_LINUX
385  #define MOs_fopen fopen
386  #define MOs_fclose fclose
387  #define MOs_fwrite fwrite
388  #define MOs_fread fread
389  #define MOs_fseek fseek
390  #define MOs_ftell ftell
391  #define MOs_feof feof
392  #define MOs_ferror ferror
393  #define MOs_fflush fflush
394  #define MOs_fgetc fgetc
395  #define MOs_fgets fgets
396  #define MOs_clearerr clearerr
397  #define MOs_remove remove
398  #define MOs_rename rename
399  #define MOs_hypot hypot
400  #define MOs_getenv getenv
401  #define MOs_putenv putenv
402  #define MOs_fputs fputs
403 #else
404  #error Operating system not supported in Milos.h!
405 #endif
406 
407 // Host System Buffers RAM limit of pointer
408 /*----------------------------------------------------------------------*/
409 /* Max far access! Will return the number of bytes that can be accessed */
410 /* of the passed pointer. Then, we can safely increment this pointer in */
411 /* far mode until this limit. After, we need to increment in huge! */
412 /*----------------------------------------------------------------------*/
413 /* This is for the 32 bits RAM limit of pointer */
414 #if (M_MIL_USE_WINDOWS || M_MIL_USE_PPC || M_MIL_USE_LINUX)
415  #define M_RAM_HOST_LIMIT 0x40000000L // 1073741824 (1G)
416 
417  /* This version of macro will take the 32 bits offset and substract it */
418  /* from the maximum in 32 bits: 1G! */
419  /* Note 1G is for a) bit 31 reserved for sign in long result */
420  /* b) bit 30 reserved for substract result always > 0 */
421  #define M_MaxFarAccess(p) ( M_RAM_HOST_LIMIT - ((long)(p)&0x3FFFFFFFL) )
422 #else
423  #error Operating system not supported in Milos.h!
424 #endif
425 
426 // Host System Buffers defines and tile limits
427 #define M_COPY_DIRECT_FLAG_HOST !NULL
428 #define M_RAM_TILE_SIZE_HOST(x) ((long)(M_RAM_HOST_LIMIT-16L)/(sizeof(x)))
429 #define M_RAM_TILE_SIZE_X_HOST(x) M_RAM_TILE_SIZE_HOST(x)
430 #define M_RAM_TILE_SIZE_Y_HOST(x) M_RAM_TILE_SIZE_HOST(x)
431 #define M_HOST_RAM_TILE_SIZE_HOST(x) M_RAM_TILE_SIZE_HOST(x)
432 #define M_HOST_RAM_TILE_SIZE_X_HOST(x) M_RAM_TILE_SIZE_HOST(x)
433 #define M_HOST_RAM_TILE_SIZE_Y_HOST(x) M_RAM_TILE_SIZE_HOST(x)
434 #define M_HOST_RAM_TILE_REST_HOST M_RESTRICT_NONE
435 
436 
437 /************************************************************************/
438 /* C++ EXCEPTIONS SUPPORT */
439 /************************************************************************/
440 
441 #if (M_MIL_USE_WINDOWS) && !(M_MIL_USE_CE) && !(M_MIL_USE_PPC)
442  #define MOs_try try
443  #define MOs_catch(x) catch(x)
444  //TBA MOs_throw
445 #else
446  #define MOs_try if (true) // Execute try block
447  #define MOs_catch(x) else if (false) // Do not execute catch block
448  //TBA MOs_throw
449 #endif
450 
451 
452 #endif /* #ifndef __MILOS_H */
unsigned short MIL_WCHAR
Definition: Milos.h:253
const char * LPCMILSTR
Definition: Milos.h:91
unsigned short MILWCHAR
Definition: Milos.h:247
const __int64 MIL_CINT64
Definition: Milos.h:250
long MIL_INTADDR
Definition: Milos.h:92
FILE * MIL_FILE
Definition: Milos.h:281
char * LPMILSTR
Definition: Milos.h:88
unsigned __int64 MILUINT64
Definition: Milos.h:245
char * MIL_TEXT_PTR
Definition: Milos.h:90
#define MOs_putenv
Definition: Milos.h:342
unsigned int MIL_SIZE_T
Definition: Milos.h:293
const unsigned __int64 MIL_CUINT64
Definition: Milos.h:252
unsigned __int64 MIL_UINT64
Definition: Milos.h:251
__int64 MILINT64
Definition: Milos.h:243
char MIL_TEXT_CHAR
Definition: Milos.h:89
const __int64 MILCINT64
Definition: Milos.h:244
#define MOs_strdup
Definition: Milos.h:184
char MILTCHAR
Definition: Milos.h:87
#define MOs_getenv
Definition: Milos.h:341
const unsigned __int64 MILCUINT64
Definition: Milos.h:246
__int64 MIL_INT64
Definition: Milos.h:249
unsigned long MIL_UINTADDR
Definition: Milos.h:93
MFTYPE32 char * String
Definition: milocr.h:33
Definition: tlg2pattern.C:52
UInt_t Count
Definition: tlg2pattern.C:102