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
293typedef 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
301extern "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: tlg2couples.C:51
UInt_t Count
Definition: tlg2couples.C:101