CFx SDK Documentation  2022 SP0
OdPlatform.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2017, Open Design Alliance (the "Alliance").
3 // All rights reserved.
4 //
5 // This software and its documentation and related materials are owned by
6 // the Alliance. The software may only be incorporated into application
7 // programs owned by members of the Alliance, subject to a signed
8 // Membership Agreement and Supplemental Software License Agreement with the
9 // Alliance. The structure and organization of this software are the valuable
10 // trade secrets of the Alliance and its suppliers. The software is also
11 // protected by copyright law and international treaty provisions. Application
12 // programs incorporating this software must include the following statement
13 // with their copyright notices:
14 //
15 // This application incorporates Teigha(R) software pursuant to a license
16 // agreement with Open Design Alliance.
17 // Teigha(R) Copyright (C) 2002-2017 by Open Design Alliance.
18 // All rights reserved.
19 //
20 // By use of this software, its documentation or related materials, you
21 // acknowledge and accept the above terms.
23 
24 
25 
26 
27 #ifndef _OD_PLATFORM_H_
28 #define _OD_PLATFORM_H_
29 
30 
31 #include "OdPlatformSettings.h"
32 #include "OdGUID.h"
33 // Moved from OdaCommon.h, to be used in string functions
34 #define odmin(X,Y) ((X) < (Y) ? (X) : (Y))
35 #define odmax(X,Y) ((X) > (Y) ? (X) : (Y))
36 
37 
38 #if defined(ODA_WINDOWS)
39 #include <math.h>
40 #include <float.h>
41 #define Odisnan ::_isnan
42 #define Odfinite ::_finite
43 #ifndef OD_USE_EXTENDED_FUNCTIONS
44 #define GETSS(s,n) ::gets(s)
45 #define OdWprintf wprintf
46 #define OdPrintf printf
47 #else
48 #define GETSS(s,n) ::gets_s(s,n)
49 #define OdWprintf _wprintf_p
50 #define OdPrintf _printf_p
51 #endif
52 
53 #ifdef ODA_WINDOWS_GCC
54 #include <ctype.h>
55 #endif
56 
57 #if defined(_MSC_VER) && (_MSC_VER < 1400)
58 #ifndef GET_X_LPARAM
59 #define GET_X_LPARAM(lParam) ((int)(short)LOWORD(lParam))
60 #endif
61 #ifndef GET_Y_LPARAM
62 #define GET_Y_LPARAM(lParam) ((int)(short)HIWORD(lParam))
63 #endif
64 #endif
65 
66 #else
67 #include <stdio.h>
68 #include <limits.h>
69 #define GETSS(s, n) gets(s)
70 
71 #ifndef MAX_PATH
72 #define MAX_PATH PATH_MAX
73 #endif
74 
75 #define OdWprintf wprintf
76 #define OdPrintf printf
77 
78 #if defined(__APPLE__) || defined(__GNUC__) && ( __GNUC__>=5 || __GNUC__==4 && __GNUC_MINOR__>=9 )
79 #include <math.h>
80 #define Odisnan std::isnan
81 #define Odfinite std::isfinite
82 #else
83 #include <math.h>
84 #define Odisnan isnan
85 #define Odfinite finite
86 #endif
87 #endif
88 
89 #ifdef ANDROID
90  //r9d have disabled acosl function
91  #ifndef acosl
92  #define acosl acos
93  #endif
94 #endif
95 
96 #ifdef ANDROID_WCHAR
97 #include "../../ThirdParty/wchar/stdlib_.h"
98 #include "../../ThirdParty/wchar/wchar_.h"
99 #define Od_atof Citrus::atof
100 #define Od_abs Citrus::abs
101 #define Od_labs Citrus::labs
102 #define Od_llabs Citrus::llabs
103 #define Od_srand Citrus::srand
104 #define Od_rand Citrus::rand
105 #define Od_wcstombs Citrus::wcstombs
106 #define Od_wcscpy Citrus::wcscpy
107 #define Od_wcscmp Citrus::wcscmp
108 #define Od_wcscat Citrus::wcscat
109 #define Od_wcschr Citrus::wcschr
110 #define Od_wcscpy Citrus::wcscpy
111 #define Od_wcslen Citrus::wcslen
112 #define Od_wcsncpy Citrus::wcsncpy
113 #else
114 
115 #if defined(_MSC_VER) && (_MSC_VER < 1600)
116 #include <stdlib.h>
117 #else
118 #include <cstdlib>
119 #include <cmath>
120 #endif
121 
122 #if defined(__BCPLUSPLUS__) || defined(__BORLANDC__) || defined(__sun)
123 inline long Od_abs(OdInt64 val) { return std::labs(val); }
124 inline int Od_abs(OdInt32 val) { return std::abs(val); }
125 #if OD_SIZEOF_LONG == 4
126 inline int Od_abs(int val) { return std::abs(val); }
127 #endif
128 inline double Od_abs(double val) { return std::fabs(val); }
129 #else
130 #define Od_abs std::abs
131 #endif
132 
133 #define Od_atof atof
134 #define Od_labs std::labs
135 #define Od_llabs std::llabs
136 #define Od_srand srand
137 #define Od_rand rand
138 #define Od_wcstombs wcstombs
139 #define Od_wcscpy wcscpy
140 #define Od_wcscmp wcscmp
141 #define Od_wcscat wcscat
142 #define Od_wcschr wcschr
143 #define Od_wcscpy wcscpy
144 #define Od_wcslen wcslen
145 #define Od_wcsncpy wcsncpy
146 #endif
147 
148 #ifndef odStrChr
149 #define odStrChr(str, ch) strchr(str, ch)
150 #endif
151 
152 #ifndef odWStrChr
153 #define odWStrChr(str, ch) Od_wcschr(str, ch)
154 #endif
155 
156 #ifdef OD_STRING_FNS
157 
158 
159 FIRSTDLL_EXPORT extern int Od_stricmp(const OdChar*str, const OdChar* str2);
160 FIRSTDLL_EXPORT extern int Od_strnicmp(const OdChar *s1, const OdChar *s2, int len);
161 FIRSTDLL_EXPORT extern OdChar* Od_strupr(OdChar* str);
162 FIRSTDLL_EXPORT extern OdChar* Od_strlwr(OdChar* str);
163 FIRSTDLL_EXPORT extern OdChar* Od_strrev(OdChar* str);
164 FIRSTDLL_EXPORT extern int Od_strnicmpA(const char *s1, const char *s2, int len);
165 FIRSTDLL_EXPORT extern int Od_stricmpA(const char* str, const char* str2);
166 FIRSTDLL_EXPORT extern char* Od_struprA(char* str);
167 FIRSTDLL_EXPORT extern char* Od_strlwrA(char* str);
168 FIRSTDLL_EXPORT extern char* Od_strrevA(char* str);
169 
170 #if !defined(_WIN32_WCE)
171 #define odStrUpr(str) Od_strupr(str)
172 #define odStrLwr(str) Od_strlwr(str)
173 #define odStrRev(str) Od_strrev(str)
174 #endif
175 #if !defined(__linux__) && !defined(_WIN32_WCE)
176 
177 #define odStrICmp(str, str2) Od_stricmp(str, str2)
178 #define odStrnICmp(str, str2, n) Od_strnicmp(str, str2, n)
179 #define odStrnICmpA Od_strnicmpA
180 #define odStrICmpA(str, str2) Od_stricmpA(str, str2)
181 #define odStrUprA(str) Od_struprA(str)
182 #define odStrLwrA(str) Od_strlwrA(str)
183 #define odStrRevA(str) Od_strrevA(str)
184 
185 #endif // !defined(__linux__)
186 
187 #endif /* OD_STRING_FNS */
188 
189 /* strings functions */
190 
191 #if defined(ANDROID_WCHAR)
192  #include <string>
193  #if !defined(OD_WSTRING_DEFINED) && (!defined(_STRINGFWD_H) || !defined(_GLIBCXX_USE_WCHAR_T))
194  #define OD_WSTRING_DEFINED
195  #include <bits/basic_string.h>
196  //#include <iosfwd>
197  namespace std
198  {
199  typedef basic_string<wchar_t> wstring;
200  typedef basic_istringstream<wchar_t> wistringstream;
201  typedef basic_stringstream<wchar_t> wstringstream;
202  }
203  #endif
204  #include "../../ThirdParty/wchar/wchar_.h" // #include <wchar_.h>
205 
206  #define odStrLen(str) Citrus::wcslen(str)
207  #define odStrCmp(str, str2) Citrus::wcscmp(str, str2)
208  inline long Od_strtoint(const OdChar* str)
209  {
210  return Citrus::wcstol((const wchar_t*)str, 0, 10);
211  }
212  #define odStrToInt(str) Od_strtoint(str)
213 
214  #pragma MARKMESSAGE("DNA: odStrToInt() looses highest bit of UInt32: FFFFFFFF -> 7FFFFFFF (at least on WIN64)")
215  #define odStrToUInt(str) (unsigned long)(Od_strtoint(str))
216  // TODO
217  //inline unsigned long Od_strtouint(const OdChar* str)
218  //{
219  // return Citrus::wcstoul((const wchar_t*)str, 0, 10);
220  //}
221  //#define odStrToUInt(str) Od_strtouint(str)
222 
223  // #define odSScanf Citrus::swscanf
224  // #define odSprintf Citrus::swprintf
225  inline double Od_wtof(const wchar_t* str)
226  {
227  wchar_t *endptr = 0;
228  return Citrus::wcstold(str, &endptr);
229  }
230  #define odStrToF Od_wtof
231  #define odStrStr Citrus::wcsstr
232  // see OdDToStr.h and TD/Source/fltcvt/OdGdtoa.cpp for odDToStr and odStrToD
233  #define wcsicmp Citrus::wcscasecmp
234  #define wcsnicmp Citrus::wcsncasecmp
235 #else
236  #include <wchar.h>
237 #endif
238 
239 #ifndef odStrLen
240 #define odStrLen(str) wcslen(str)
241 #endif
242 
243 #ifndef odStrLenA
244 #define odStrLenA(str) strlen(str)
245 #endif
246 
247 #ifndef odStrCmp
248 #define odStrCmp(str, str2) wcscmp(str, str2)
249 #endif
250 
251 #ifndef odStrCmpA
252 #define odStrCmpA(str, str2) strcmp(str, str2)
253 #endif
254 
255 #if defined(ODA_WINDOWS)
256 #include <Windows.h>
257 #endif
258 
259 #if defined( ANDROID ) || defined ( _WIN32_WCE ) || (defined (_MSC_VER) && _MSC_VER < 1400) || defined(_WINRT)
260  #define FSEEK fseek
261  #define FTELL ftell
262  #define FOPEN fopen
263  #define OFFSETTYPE(offset) (long)offset
264 
265 #elif defined(__APPLE__) || defined( __hpux )
266  #define FSEEK fseeko
267  #define FTELL ftello
268  #define FOPEN fopen
269  #define OFFSETTYPE(offset) offset
270 #else
271  #define FSEEK fseeko64
272  #define FTELL ftello64
273  #define FOPEN fopen64
274  #define OFFSETTYPE(offset) offset
275 #endif
276 
277 #if defined(__linux__) || defined(EMCC)
278 
279 #include <wctype.h> // towlower, towupper
280 #if !defined(EMCC) && !defined(__clang__)
281 #include <bits/stl_algobase.h> // For std::swap (gcc 3.3 and 3.4)
282 #endif
283 #include <utility> // std::swap
284 
285 #ifndef wcsicmp
286 #define wcsicmp wcscasecmp
287 #endif
288 
289 #ifndef wcsnicmp
290 #define wcsnicmp wcsncasecmp
291 #endif
292 
293 #ifndef wcsupr
294 inline wchar_t* wcsupr(wchar_t* s)
295 {
296  if(!s)
297  return 0;
298  for(wchar_t* p = s; *p; ++p)
299  *p = towupper(*p);
300  return s;
301 }
302 #endif
303 
304 #ifndef wcslwr
305 inline wchar_t* wcslwr(wchar_t* s)
306 {
307  if(!s)
308  return 0;
309  for(wchar_t* p = s; *p; ++p)
310  *p = towlower(*p);
311  return s;
312 }
313 #endif
314 #ifndef wcsrev
315 inline wchar_t* wcsrev(wchar_t* s)
316 {
317  if(!s)
318  return 0;
319  wchar_t* e = s + wcslen(s) - 1;
320  wchar_t* s_ = s;
321  while(s < e)
322  {
323  std::swap(*s, *e);
324  ++s;
325  --e;
326  }
327  return s_;
328 }
329 #endif
330 
331 #ifdef OD_STRING_FNS
332 
333 #ifndef stricmp
334 #define stricmp Od_stricmpA
335 #endif
336 
337 #ifndef strupr
338 #define strupr Od_struprA
339 #endif
340 
341 #ifndef strlwr
342 #define strlwr Od_strlwrA
343 #endif
344 
345 #ifndef strrev
346 #define strrev Od_strrevA
347 #endif
348 
349 #ifndef strnicmp
350 #define strnicmp Od_strnicmpA
351 #endif
352 
353 #endif //OD_STRING_FNS
354 
355 #endif //defined(__linux__) || defined(EMCC)
356 
357 #ifndef odStrICmp
358 
359 #if defined(_WINRT)
360 #include <WinNls.h>
361 inline int Od_stricmpW(const OdChar* str, const OdChar* str2){ return CompareStringEx( LOCALE_NAME_INVARIANT, NORM_IGNORECASE, (const wchar_t*)str, -1, (const wchar_t*)str2, -1, NULL, NULL, 0) - 2; }
362 #elif defined(_WIN32) ||defined(_WIN64) || defined(_WIN32_WCE)
363 inline int Od_stricmpW(const OdChar* str, const OdChar* str2){ return CompareStringW( LOCALE_NEUTRAL, NORM_IGNORECASE, (const wchar_t*)str, -1, (const wchar_t*)str2, -1) - 2; }
364 #elif (defined ( __BORLANDC__ ) && (__BORLANDC__) >= 0x530) ||(defined(_MSC_VER) && _MSC_VER > 1200)
365 inline int Od_stricmpW(const OdChar* str, const OdChar* str2){ return _wcsicmp(str, str2); }
366 #else
367 inline int Od_stricmpW(const OdChar* str, const OdChar* str2){ return wcsicmp(str, str2); }
368 #endif
369 #define odStrICmp Od_stricmpW
370 #endif
371 
372 #ifndef odStrICmpA
373 #if defined(_WINRT) || defined(_WIN32_WCE)
374 #define odStrICmpA(str, str2) _stricmp(str, str2)
375 #else
376 #define odStrICmpA(str, str2) stricmp(str, str2)
377 #endif
378 #endif
379 
380 #ifndef odStrnICmp
381 #if defined(_WINRT)
382 #include <WinNls.h>
383 inline int Od_stricmpW(const OdChar* str, const OdChar* str2, size_t n){ return CompareStringEx( LOCALE_NAME_INVARIANT, NORM_IGNORECASE, (const wchar_t*)str, (int)odmin(wcslen((const wchar_t*)str), n), (const wchar_t*)str2, (int)odmin(wcslen((const wchar_t*)str), n), NULL, NULL, 0) - 2; }
384 #elif defined(_WIN32) ||defined(_WIN64) || defined(_WIN32_WCE)
385 inline int Od_stricmpW(const OdChar* str, const OdChar* str2, size_t n){ return CompareStringW( LOCALE_NEUTRAL, NORM_IGNORECASE, (const wchar_t*)str, (int)odmin(wcslen((const wchar_t*)str), n), (const wchar_t*)str2, (int)odmin(wcslen((const wchar_t*)str2), n))-2;}
386 #elif (defined ( __BORLANDC__ ) && (__BORLANDC__) >= 0x530) || (defined(_MSC_VER) && _MSC_VER > 1200)
387 inline int Od_stricmpW(const OdChar* str, const OdChar* str2, size_t n){ return _wcsnicmp(str, str2, n);}
388 #else
389 inline int Od_stricmpW(const OdChar* str, const OdChar* str2, size_t n){ return wcsnicmp(str, str2, n);}
390 #endif
391 #define odStrnICmp Od_stricmpW
392 #endif
393 
394 #ifndef odStrnICmpA
395 #if defined(_WIN32_WCE)
396 #define odStrnICmpA(str, str2, n) _strnicmp(str, str2, n)
397 #else
398 #define odStrnICmpA(str, str2, n) strnicmp(str, str2, n)
399 #endif
400 #endif
401 
402 
403 #ifndef odStrUpr
404 #if defined(ODA_WINDOWS) && !defined(_WINRT)
405 inline OdChar* Od_struprW(OdChar* str){return (OdChar*)CharUpperW((wchar_t*)str);}
406 #elif defined(_WINRT)
407 inline OdChar* Od_struprW(OdChar* str){return (OdChar*)_wcsupr((wchar_t*)str);}
408 #else
409 inline OdChar* Od_struprW(OdChar* str){return (OdChar*)wcsupr((OdChar*)str);}
410 #endif
411 #define odStrUpr(str) Od_struprW(str)
412 #endif
413 
414 #ifndef odStrUprA
415 #if defined(_WIN32_WCE)
416 #define odStrUprA(str) _strupr(str)
417 #else
418 #define odStrUprA(str) strupr(str)
419 #endif
420 #endif
421 
422 #ifndef odStrLwr
423 #if defined(ODA_WINDOWS) && !defined(_WINRT) && !defined(_WIN32_WCE)
424 inline OdChar* Od_strlwrW(OdChar* str){return (OdChar*)CharLowerW((wchar_t*)str);}
425 #elif defined (_WINRT) || defined(_WIN32_WCE)
426 inline OdChar* Od_strlwrW(OdChar* str){return (OdChar*)_wcslwr((wchar_t*)str);}
427 #else
428 inline OdChar* Od_strlwrW(OdChar* str){return (OdChar*)wcslwr((OdChar*)str);}
429 #endif
430 #define odStrLwr(str) Od_strlwrW(str)
431 #endif
432 
433 #ifndef odStrLwrA
434 #if defined(_WIN32_WCE)
435 #define odStrLwrA(str) _strlwr(str)
436 #else
437 #define odStrLwrA(str) strlwr(str)
438 #endif
439 #endif
440 
441 #ifndef odStrRev
442 #if defined(ODA_WINDOWS)
443 inline OdChar* Od_strrevW(OdChar* str) {return (OdChar*)_wcsrev((wchar_t*)str);}
444 #else
445 inline OdChar* Od_strrevW(OdChar* str) {return (OdChar*)wcsrev((wchar_t*)str);}
446 #endif
447 #define odStrRev(str) Od_strrevW(str)
448 #endif
449 
450 #ifndef odStrRevA
451 #if defined(_WIN32_WCE)
452 #define odStrRevA(str) _strrev(str)
453 #else
454 #define odStrRevA(str) strrev(str)
455 #endif
456 #endif
457 
458 #ifndef odStrToInt
459 inline long Od_strtoint(const OdChar* str){ return wcstol((const wchar_t*)str, 0, 10);}
460 #define odStrToInt(str) Od_strtoint(str)
461 #endif
462 
463 #ifndef odStrToUInt
464 inline long Od_strtouint(const OdChar* str){ return wcstoul((const wchar_t*)str, 0, 10);}
465 #define odStrToUInt(str) Od_strtouint(str)
466 #endif
467 
468 #ifndef Od_isspace
469 #define Od_isspace(ch) isspace(ch)
470 #endif
471 
472 #ifndef Od_iswspace
473 #if defined(_MSC_VER) && (_MSC_VER <= 1310)
474  #define Od_iswspace(ch) iswctype(ch,_SPACE)
475 #else
476  #define Od_iswspace(ch) iswspace(ch)
477 #endif
478 #endif
479 
480 #ifndef Od_isdigit
481 #define Od_isdigit(ch) isdigit(ch)
482 #endif
483 
484 #ifndef Od_iswdigit
485 #if defined(_MSC_VER) && (_MSC_VER <= 1310)
486  #define Od_iswdigit(ch) iswctype(ch,_DIGIT)
487 #else
488  #define Od_iswdigit(ch) iswdigit(ch)
489 #endif
490 #endif
491 
492 
493 #if (defined(sgi) || defined(_AIX) || defined(sparc)) && !defined(__GNUC__)
494 #define TD_NEED_SWFNS
495 #endif
496 #if defined(TD_NEED_SWFNS) || defined(__APPLE__) || defined(EMCC)// #7324
497 #define TD_NEED_SWFNS_SCANF
498 #endif
499 #if defined(TD_NEED_SWFNS) || defined(__APPLE__) || defined(__hpux) || defined(ANDROID) || defined(EMCC) || defined(ODA_WINDOWS_GCC) // #7324 & #8357 & #9786
500 #define TD_NEED_SWFNS_PRINTF
501 #endif
502 
503 #ifndef odSScanf
504  #if defined(TD_NEED_SWFNS_SCANF)
505  #ifdef ANDROID_WCHAR
506  #include "../../ThirdParty/wchar/wchar_.h"
507  #else
508  #include <wchar.h>
509  #endif
510  #include <stdio.h>
511  #include <stdarg.h>
512  #include <string>
513  FIRSTDLL_EXPORT int Od_vswscanfV(const wchar_t* buffer, const wchar_t* lpszFormat, va_list argList);
514  inline int ddswscanf(const wchar_t* buffer, const wchar_t* format, ...)
515  {
516  va_list argList;
517  va_start(argList, format);
518  int count = Od_vswscanfV(buffer, format, argList);
519  va_end(argList);
520  return count;
521  }
522  #define odSScanf ddswscanf
523  #else
524  #if defined(_WINRT)
525  #define odSScanf swscanf_s
526  #else
527  #define odSScanf swscanf
528  #endif
529  #endif
530 #endif
531 
532 #ifndef odSprintf
533  #if defined(ODA_WINDOWS)
534  #define odSprintf _snwprintf
535  #elif defined(TD_NEED_SWFNS_PRINTF)
536  #include <stdio.h>
537  #include <stdarg.h>
538  #include <string>
539  FIRSTDLL_EXPORT extern std::wstring Od_vswprintfV(const wchar_t* lpszFormat, va_list argList);
540  inline int ddswprintf(wchar_t *buffer, size_t count, const wchar_t *format, ...)
541  {
542  va_list argList;
543  va_start(argList, format);
544  std::wstring ws = Od_vswprintfV(format, argList);
545  va_end(argList);
546  int toCopy = ws.length() < count - 1 ? ws.length() : count - 1;
547  Od_wcsncpy(buffer, ws.c_str(), toCopy);
548  buffer[toCopy] = '\0';
549  return 0;
550  }
551  #define odSprintf ddswprintf
552  #else
553  #define odSprintf swprintf
554  #endif
555 #endif
556 
557 #ifndef odSprintfA
558  #if defined(ODA_WINDOWS)
559  #define odSprintfA _snprintf
560  #else
561  #define odSprintfA snprintf
562  #endif
563 #endif
564 
565 #ifndef odStrToF
566 #if defined (ODA_WINDOWS) && !defined(_WIN32_WCE)
567 #define odStrToF _wtof
568 #else
569 #include <wchar.h>
570 inline double Od_wtof(const wchar_t* str)
571 {
572  wchar_t *endptr = 0;
573  return wcstod(str, &endptr);
574 }
575 #define odStrToF Od_wtof
576 #endif
577 #endif
578 
579 
580 #ifndef OD_TYPENAME
581 #define OD_TYPENAME
582 #endif
583 
584 #ifndef OD_TYPENAME2
585 #define OD_TYPENAME2
586 #endif
587 
588 #ifndef OD_TYPENAME3
589 #define OD_TYPENAME3
590 #endif
591 
592 #ifndef OD_BSEARCH
593 #define OD_BSEARCH ::bsearch
594 #endif
595 
596 #ifndef TD_USING
597 #define TD_USING(a) using a
598 #endif
599 
600 #ifndef OD_LINKEDARRAY_SCOPE
601 #define OD_LINKEDARRAY_SCOPE
602 #endif
603 
604 #ifndef odStrStr
605  #ifdef TD_NEED_WCSSTR
606  // This is missing on some older HP compiler versions.
607  extern wchar_t *wcsstr(const wchar_t* wcs1, const wchar_t* wcs2);
608  #endif
609  #define odStrStr ::wcsstr
610 #endif
611 
613 #define OD_MAKEWORD(a, b) ((OdUInt16)(((OdUInt8)(a)) | ((OdUInt16)((OdUInt8)(b))) << 8))
614 #define OD_MAKELONG(a, b) ((OdInt32)(((OdUInt16)(a)) | ((OdUInt32)((OdUInt16)(b))) << 16))
615 #define OD_LOWORD(l) ((OdUInt16)(l))
616 #define OD_HIWORD(l) ((OdUInt16)(((OdUInt32)(l) >> 16) & 0xFFFF))
617 #define OD_LOBYTE(w) ((OdUInt8)(w))
618 #define OD_HIBYTE(w) ((OdUInt8)(((OdUInt16)(w) >> 8) & 0xFF))
619 
620 inline void odSwapBytes(OdUInt8& xX, OdUInt8& yY) { xX ^= yY; yY ^= xX; xX ^= yY; }
621 inline void odSwapWords(OdUInt16& xX, OdUInt16& yY) { xX ^= yY; yY ^= xX; xX ^= yY; }
622 
623 #ifdef ODA_BIGENDIAN
624 
625 inline void odSwap2BytesNumber(OdUInt16& W)
626 {
627  odSwapBytes(((OdUInt8*)&(W))[0], ((OdUInt8*)&(W))[1]);
628 }
629 
630 inline void odSwap2BytesNumber(OdInt16& W)
631 {
632  odSwapBytes(((OdUInt8*)&(W))[0], ((OdUInt8*)&(W))[1]);
633 }
634 
635 inline void odSwap4BytesNumber(OdUInt32& DW)
636 {
637  odSwapWords(((OdUInt16*)&(DW))[0], ((OdUInt16*)&(DW))[1]);
638  odSwapBytes(((OdUInt8*)&(DW))[0], ((OdUInt8*)&(DW))[1]);
639  odSwapBytes(((OdUInt8*)&(DW))[2], ((OdUInt8*)&(DW))[3]);
640 }
641 
642 inline void odSwap4BytesNumber(OdInt32& DW)
643 {
644  // NOTE: Using above unsigned version on AIX results in runtime errors.
645  // Macro version also causes errors on AIX.
646  OdInt8* p = (OdInt8*)&DW;
647  OdInt8 tmp;
648  tmp = p[0]; p[0] = p[3]; p[3] = tmp;
649  tmp = p[1]; p[1] = p[2]; p[2] = tmp;
650 }
651 
652 #if OD_SIZEOF_LONG == 4
653 inline void odSwap4BytesNumber(unsigned int& DW)
654 {
655  odSwapWords(((OdUInt16*)&(DW))[0], ((OdUInt16*)&(DW))[1]);
656  odSwapBytes(((OdUInt8*)&(DW))[0], ((OdUInt8*)&(DW))[1]);
657  odSwapBytes(((OdUInt8*)&(DW))[2], ((OdUInt8*)&(DW))[3]);
658 }
659 #endif
660 
661 inline void odSwap8Bytes(void* pBytes)
662 {
663  odSwapBytes(((OdUInt8*)(pBytes))[0], ((OdUInt8*)(pBytes))[7]);
664  odSwapBytes(((OdUInt8*)(pBytes))[1], ((OdUInt8*)(pBytes))[6]);
665  odSwapBytes(((OdUInt8*)(pBytes))[2], ((OdUInt8*)(pBytes))[5]);
666  odSwapBytes(((OdUInt8*)(pBytes))[3], ((OdUInt8*)(pBytes))[4]);
667 }
668 
669 inline void odSwap4Bytes(void* pBytes)
670 {
671  odSwapBytes(((OdUInt8*)(pBytes))[0], ((OdUInt8*)(pBytes))[3]);
672  odSwapBytes(((OdUInt8*)(pBytes))[1], ((OdUInt8*)(pBytes))[2]);
673 }
674 
675 #define odSwapInt64(n)
676 
677 #else
678 
679 #define odSwap2BytesNumber(n)
680 #define odSwap4BytesNumber(n)
681 #define odSwap8Bytes(bytes)
682 #define odSwap4Bytes(bytes)
683 
684 inline void odSwapInt64(void* pBytes)
685 {
686  odSwapBytes(((OdUInt8*)(pBytes))[0], ((OdUInt8*)(pBytes))[7]);
687  odSwapBytes(((OdUInt8*)(pBytes))[1], ((OdUInt8*)(pBytes))[6]);
688  odSwapBytes(((OdUInt8*)(pBytes))[2], ((OdUInt8*)(pBytes))[5]);
689  odSwapBytes(((OdUInt8*)(pBytes))[3], ((OdUInt8*)(pBytes))[4]);
690 }
691 
692 #endif // ODA_BIGENDIAN
693 
698 inline bool isValidNonZeroIEEEDouble(const OdUInt8 * buf)
699 {
700 #ifdef ODA_BIGENDIAN
701  int nExponent = (buf[0] & 0x7F) << 4 | (buf[1] & 0xF0) >> 4;
702 #else
703  int nExponent = (buf[7] & 0x7F) << 4 | (buf[6] & 0xF0) >> 4;
704 #endif
705  switch (nExponent)
706  {
707  case 0: // The value is zero or possibly denormalized
708  case 2047: // -INF, +INF or Nan
709  return false;
710  }
711  return true;
712 }
713 
714 inline void fixDouble(double * pD)
715 {
716  ODA_ASSUME(sizeof(double) == 8)
717  odSwap8Bytes(pD);
718  if (!isValidNonZeroIEEEDouble((OdUInt8 *)pD))
719  { // if unnormalized or NaN or infinity, set it to 0.0
720  //*pD = 0.;
721  ::memset((void*)pD, 0, sizeof(double)); // Support TD_STRICT_ALIGNMENT (#8352)
722  }
723 }
724 
725 
726 #define OD_INT8_FROM_BUFFPTR(pBuffPtr) *(pBuffPtr++)
727 
728 inline OdUInt64 OD_INT64_FROM_BUFFPTR(const OdUInt8 *pBuffPtr)
729 {
730  OdUInt32 low(*pBuffPtr++);
731  low |= ((OdUInt32)*pBuffPtr++) << 8;
732  low |= ((OdUInt32)*pBuffPtr++) << 16;
733  low |= ((OdUInt32)*pBuffPtr++) << 24;
734 
735  OdUInt32 high(*pBuffPtr++);
736  high |= ((OdUInt32)*pBuffPtr++) << 8;
737  high |= ((OdUInt32)*pBuffPtr++) << 16;
738  high |= ((OdUInt32)*pBuffPtr++) << 24;
739 
740  OdUInt64 res(high);
741  res <<= 32;
742  res |= low;
743  return res;
744 }
745 
746 #define OD_BYTES_FROM_BUFFPTR(pBuffPtr, ResBuff, nCount) (pBuffPtr+=nCount, ::memcpy(ResBuff, pBuffPtr-nCount, nCount))
747 
748 #define OD_INT8_TO_BUFFPTR(pBuffPtr, val) (++pBuffPtr, pBuffPtr[-1] = OdUInt8(val))
749 #define OD_BYTES_TO_BUFFPTR(pBuffPtr, FromBuff, nCount) (pBuffPtr+=nCount, ::memcpy(pBuffPtr-nCount, FromBuff, nCount))
750 
751 
752 
753 #ifndef ODA_BIGENDIAN
754 
755 #ifdef TD_STRICT_ALIGNMENT
756 
757 #if defined(_WIN32_WCE) || defined FX_TOUCH_VERSION // FELIX_CHANGE
758 #define VISIBILITY_ATTR FIRSTDLL_EXPORT
759 FIRSTDLL_EXPORT void *bsearch(const void *key, const void *base, size_t numeles, size_t widthele, int(__cdecl *cfunc)(const void *elem1, const void *elem2));
760 #else
761 #define VISIBILITY_ATTR extern
762 #endif
763 
764 VISIBILITY_ATTR double getStrictDouble(OdUInt8** ppBuff);
765 VISIBILITY_ATTR void setStrictDouble(OdUInt8** ppBuff, double d);
766 VISIBILITY_ATTR void setStrictInt16(OdUInt8** ppBuff, OdInt16 val);
767 VISIBILITY_ATTR void setStrictInt32(OdUInt8** ppBuff, OdInt32 val);
768 VISIBILITY_ATTR void setStrictInt64(OdUInt8** ppBuff, OdInt64 val);
769 
770 #define OD_INT16_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 2, (OdInt16)( *(pBuffPtr - 2) \
771  | (*(pBuffPtr - 1) << 8)))
772 #define OD_INT32_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 4, (OdInt32)( *(pBuffPtr - 4) \
773  | (*(pBuffPtr - 3) << 8) \
774  | (*(pBuffPtr - 2) << 16) \
775  | (*(pBuffPtr - 1) << 24)))
776 
777 #define OD_INT64_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 8, (OdInt64)( *(pBuffPtr - 8) \
778  | (OdInt64(*(pBuffPtr - 7)) << 8) \
779  | (OdInt64(*(pBuffPtr - 6)) << 16) \
780  | (OdInt64(*(pBuffPtr - 5)) << 24) \
781  | (OdInt64(*(pBuffPtr - 4)) << 32) \
782  | (OdInt64(*(pBuffPtr - 3)) << 40) \
783  | (OdInt64(*(pBuffPtr - 2)) << 48) \
784  | (OdInt64(*(pBuffPtr - 1)) << 56)))
785 
786 #define OD_DOUBLE_FROM_BUFFPTR(pBuffPtr) getStrictDouble(&pBuffPtr)
787 
788 #define OD_INT16_TO_BUFFPTR(pBuffPtr, val) setStrictInt16(&pBuffPtr, val)
789 #define OD_INT32_TO_BUFFPTR(pBuffPtr, val) setStrictInt32(&pBuffPtr, val)
790 #define OD_INT64_TO_BUFFPTR(pBuffPtr, val) setStrictInt64(&pBuffPtr, val)
791 
792 #define OD_DOUBLE_TO_BUFFPTR(pBuffPtr, val) setStrictDouble(&pBuffPtr, val)
793 
794 
795 #else
796 
797 inline double getValidDouble(OdUInt8** ppBuff)
798 {
799  double d = isValidNonZeroIEEEDouble(*ppBuff) ? *((double*)(*ppBuff)) : 0.0;
800  *ppBuff+=8;
801  return d;
802 }
803 
804 #define OD_INT16_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 2, *((OdInt16*)(pBuffPtr - 2)))
805 #define OD_INT32_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 4, *((OdInt32*)(pBuffPtr - 4)))
806 #define OD_INT64_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 8, *((OdInt64*)(pBuffPtr - 8)))
807 
808 #define OD_DOUBLE_FROM_BUFFPTR(pBuffPtr) getValidDouble(&pBuffPtr)
809 //#define OD_POINT3D_FROM_BUFFPTR(pBuffPtr) (pBuffPtr+=24, *((OdGePoint3d*)(pBuffPtr-24)))
810 
811 #define OD_INT16_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=2, *((OdInt16*)(pBuffPtr-2)) = OdInt16(val))
812 #define OD_INT32_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=4, *((OdInt32*)(pBuffPtr-4)) = OdInt32(val))
813 #define OD_INT64_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=8, *((OdInt64*)(pBuffPtr-8)) = OdInt64(val))
814 
815 #define OD_DOUBLE_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=8, *((double*)(pBuffPtr-8)) = double(val))
816 //#define OD_POINT3D_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=24, *((OdGePoint3d*)(pBuffPtr-24)) = val)
817 
818 #endif // TD_STRICT_ALIGNMENT
819 
820 
821 #else
822 
823 
824 extern double getBeDouble(OdUInt8** ppBuff);
825 //extern OdGePoint3d getBePnt3d(OdUInt8** ppBuff);
826 extern void setStrictInt16(OdUInt8** ppBuff, OdInt16 val);
827 extern void setStrictInt32(OdUInt8** ppBuff, OdInt32 val);
828 extern void setStrictInt64(OdUInt8** ppBuff, OdInt64 val);
829 extern void setBeDouble(OdUInt8** ppBuff, double d);
830 //extern void setBePnt3(OdUInt8** ppBuff, const OdGePoint3d& p);
831 
832 
833 // SGI doesn't like these versions.
834 //#define OD_INT16_FROM_BUFFPTR(pBuffPtr) ((OdInt16)(*pBuffPtr++ | (*pBuffPtr++ << 8)))
835 //#define OD_INT32_FROM_BUFFPTR(pBuffPtr) ((OdInt32)(*pBuffPtr++ | (*pBuffPtr++ << 8) | (*pBuffPtr++ << 16) | (*pBuffPtr++ << 24)))
836 // So use these instead
837 #define OD_INT16_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 2, (OdInt16)( *(pBuffPtr - 2) \
838  | (*(pBuffPtr - 1) << 8)))
839 #define OD_INT32_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 4, (OdInt32)( *(pBuffPtr - 4) \
840  | (*(pBuffPtr - 3) << 8) \
841  | (*(pBuffPtr - 2) << 16) \
842  | (*(pBuffPtr - 1) << 24)))
843 #define OD_INT64_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 8, (OdInt64)( *(pBuffPtr - 8) \
844  | (((OdInt64)(*(pBuffPtr - 7))) << 8) \
845  | (((OdInt64)(*(pBuffPtr - 6))) << 16) \
846  | (((OdInt64)(*(pBuffPtr - 5))) << 24) \
847  | (((OdInt64)(*(pBuffPtr - 4))) << 32) \
848  | (((OdInt64)(*(pBuffPtr - 3))) << 40) \
849  | (((OdInt64)(*(pBuffPtr - 2))) << 48) \
850  | (((OdInt64)(*(pBuffPtr - 1))) << 56)))
851 
852 #define OD_DOUBLE_FROM_BUFFPTR(pBuffPtr) getBeDouble(&pBuffPtr)
853 //#define OD_POINT3D_FROM_BUFFPTR(pBuffPtr) getBePnt3d(&pBuffPtr)
854 
855 #define OD_INT16_TO_BUFFPTR(pBuffPtr, val) setStrictInt16(&pBuffPtr, val)
856 #define OD_INT32_TO_BUFFPTR(pBuffPtr, val) setStrictInt32(&pBuffPtr, val)
857 #define OD_INT64_TO_BUFFPTR(pBuffPtr, val) setStrictInt64(&pBuffPtr, val)
858 
859 #define OD_DOUBLE_TO_BUFFPTR(pBuffPtr, val) setBeDouble(&pBuffPtr, val)
860 //#define OD_POINT3D_TO_BUFFPTR(pBuffPtr, val) setBePnt3(&pBuffPtr, val)
861 
862 #endif // ODA_BIGENDIAN
863 
864 
865 #if defined(ODA_WINDOWS)
866 #include "WINDOWS.H"
867 #include "WINGDI.H"
868 #endif
869 
870 #if defined(_WIN32) && !defined(WIN64) && !defined(_WINRT)
871 // COLORREF on WIN64 is 8 bytes
872 #define ODCOLORREF COLORREF
873 #define ODRGB(r,g,b) RGB(r,g,b)
874 #define ODRGBA(r,g,b,a) (((ODCOLORREF)ODRGB(r,g,b))|(((DWORD)(BYTE)(a))<<24))
875 #define ODGETRED(rgb) GetRValue(rgb)
876 #define ODGETGREEN(rgb) GetGValue(rgb)
877 #define ODGETBLUE(rgb) GetBValue(rgb)
878 #define ODGETALPHA(rgba) ((BYTE)((rgba)>>24))
879 #define ODRECT RECT
880 
881 #else //#ifdef _WIN32
882 
883 #define ODCOLORREF OdUInt32
884 #define ODRGB(r,g,b) ((ODCOLORREF)(((OdUInt8)(r)|((OdUInt16)((OdUInt8)(g))<<8))|(((OdUInt32)(OdUInt8)(b))<<16)))
885 #define ODRGBA(r,g,b,a) (((ODCOLORREF)ODRGB(r,g,b))|(((OdUInt32)(OdUInt8)(a))<<24))
886 
887 #define ODGETRED(rgb) ((OdUInt8)(rgb))
888 #define ODGETGREEN(rgb) ((OdUInt8)(((OdUInt16)(rgb)) >> 8))
889 #define ODGETBLUE(rgb) ((OdUInt8)((rgb)>>16))
890 #define ODGETALPHA(rgba) ((OdUInt8)((rgba)>>24))
891 
892 typedef struct OdTagRECT{
898 
899 #if (!defined(WIN64) && !defined(ODA_WINDOWS_GCC)) || defined(_WINRT)
900 
901 #if !defined(_WINRT)
902 #ifndef RGBQUAD_DEFINED
903 #define RGBQUAD_DEFINED
904 #if defined(__sun)
905 #pragma pack(2)
906 #else
907 #pragma pack(push,2)
908 #endif
912  typedef struct tagRGBQUAD
913 {
919 #if defined(__sun)
920 #pragma pack()
921 #else
922 #pragma pack(pop)
923 #endif
924 #endif
925 
926 #ifndef BITMAPINFOHEADER_DEFINED
927 #define BITMAPINFOHEADER_DEFINED
931 #if defined(__sun)
932 #pragma pack(2)
933 #else
934 #pragma pack(push,2)
935 #endif
936 
937 typedef struct tagBITMAPINFOHEADER {
950 
951 //FELIX_CHANGE_BEGIN
953 
954 typedef struct tagCIEXYZ
955 {
960 
961 typedef struct tagICEXYZTRIPLE
962 {
967 
968 typedef struct tagBITMAPV4HEADER {
990 //FELIX_CHANGE_BEGIN
991 
992 #if defined(__sun)
993 #pragma pack()
994 #else
995 #pragma pack(pop)
996 #endif
997 
998 #endif
999 
1000 #ifndef BITMAPINFO_DEFINED
1001 #define BITMAPINFO_DEFINED
1002 typedef struct tagBITMAPINFO {
1006 
1007 #endif //BITMAPINFO_DEFINED
1008 
1009 #endif //_WINRT
1010 #ifndef BITMAPFILEHEADER_DEFINED
1011 #define BITMAPFILEHEADER_DEFINED
1012 #if defined(__sun)
1013 #pragma pack(2)
1014 #else
1015 #pragma pack(push,2)
1016 #endif
1020  typedef struct tagBITMAPFILEHEADER
1021 {
1028 #if defined(__sun)
1029 #pragma pack()
1030 #else
1031 #pragma pack(pop)
1032 #endif
1033 #endif
1034 
1035 #endif //#ifndef WIN64
1036 #endif //#ifdef _WIN32
1037 
1038 #ifndef ODA_WINDOWS
1039 #ifndef CLSID
1040 #define CLSID OdGUID
1041 #endif
1042 #endif
1043 
1044 #define ODTOCMCOLOR(colorref) OdCmEntityColor( ODGETRED(colorref), ODGETGREEN(colorref), ODGETBLUE(colorref) )
1045 #define ODTOCOLORREF(cmColor) ODRGB( cmColor.red(), cmColor.green(), cmColor.blue() )
1046 
1048 // IR.111706. MacOS X dynamic library loading.
1049 // Some code taken from Dlcompat open source library.
1050 // www.opendarwin.org/projects/dlcompat/
1051 
1052 #if defined(_TOOLKIT_IN_DLL_) && defined(__GNUC__) && defined(__APPLE__) // GNU compiler MacOS X
1053 
1054 #include <mach-o/dyld.h>
1055 
1056 # ifndef RTLD_LAZY
1057 # define RTLD_LAZY 0x1
1058 # endif
1059 # ifndef RTLD_NOW
1060 # define RTLD_NOW 0x2
1061 # endif
1062 # ifndef RTLD_LOCAL
1063 # define RTLD_LOCAL 0x4
1064 # endif
1065 # ifndef RTLD_GLOBAL
1066 # define RTLD_GLOBAL 0x8
1067 # endif
1068 # ifndef RTLD_NOLOAD
1069 # define RTLD_NOLOAD 0x10
1070 # endif
1071 # ifndef RTLD_NODELETE
1072 # define RTLD_NODELETE 0x80
1073 # endif
1074 
1075 class OdString;
1076 void* LoadSharedLibrary(const OdString& path, int mode = 2);
1077 void *GetFunction(void *handle, char *symbol);
1078 bool FreeSharedLibrary(void *handle);
1079 
1080 #endif //defined(__GNUC__) && defined(__APPLE__) // GNU compiler MacOS X
1081 
1082 #if defined(_TOOLKIT_IN_DLL_) && defined(__GNUC__) && !defined(__APPLE__) // GNU compiler Linux
1083 
1084 #include <dlfcn.h>
1085 
1086 #endif // defined(_TOOLKIT_IN_DLL_) && defined(__GNUC__) && !defined(__APPLE__) // GNU compiler Linux
1087 
1088 #include <time.h>
1089 
1090 size_t od_strftime(char *s, size_t maxsize, const char *format, const struct tm *t);
1091 
1092 
1094 
1095 #endif // _OD_PLATFORM_H_
1096 
tm
Definition: DimVarDefs.h:2122
#define NULL
Definition: GsProperties.h:177
double Od_wtof(const wchar_t *str)
Definition: OdPlatform.h:570
struct tagBITMAPINFOHEADER * PBITMAPINFOHEADER
struct tagBITMAPFILEHEADER BITMAPFILEHEADER
#define odSwap4BytesNumber(n)
Definition: OdPlatform.h:680
bool isValidNonZeroIEEEDouble(const OdUInt8 *buf)
Definition: OdPlatform.h:698
#define Od_abs
Definition: OdPlatform.h:130
void odSwapBytes(OdUInt8 &xX, OdUInt8 &yY)
Definition: OdPlatform.h:620
OdChar * Od_strlwrW(OdChar *str)
Definition: OdPlatform.h:428
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
struct OdTagRECT ODRECT
struct tagRGBQUAD RGBQUAD
double getValidDouble(OdUInt8 **ppBuff)
Definition: OdPlatform.h:797
long Od_strtouint(const OdChar *str)
Definition: OdPlatform.h:464
#define odSwap4Bytes(bytes)
Definition: OdPlatform.h:682
OdChar * Od_strrevW(OdChar *str)
Definition: OdPlatform.h:445
struct tagICEXYZTRIPLE CIEXYZTRIPLE
#define odmin(X, Y)
Definition: OdPlatform.h:34
int Od_stricmpW(const OdChar *str, const OdChar *str2)
Definition: OdPlatform.h:367
void fixDouble(double *pD)
Definition: OdPlatform.h:714
OdInt32 FXPT2DOT30
Definition: OdPlatform.h:952
struct tagRGBQUAD * LPRGBQUAD
void odSwapInt64(void *pBytes)
Definition: OdPlatform.h:684
struct tagBITMAPINFO * PBITMAPINFO
struct tagBITMAPV4HEADER * PBITMAPV4HEADER
struct tagBITMAPV4HEADER BITMAPV4HEADER
long Od_strtoint(const OdChar *str)
Definition: OdPlatform.h:459
OdChar * Od_struprW(OdChar *str)
Definition: OdPlatform.h:409
struct tagBITMAPINFO BITMAPINFO
#define odSwap8Bytes(bytes)
Definition: OdPlatform.h:681
#define OD_INT64_FROM_BUFFPTR(pBuffPtr)
Definition: OdPlatform.h:806
#define Od_wcsncpy
Definition: OdPlatform.h:145
struct tagBITMAPFILEHEADER * PBITMAPFILEHEADER
struct tagCIEXYZ CIEXYZ
size_t od_strftime(char *s, size_t maxsize, const char *format, const struct tm *t)
#define odSwap2BytesNumber(n)
Definition: OdPlatform.h:679
void odSwapWords(OdUInt16 &xX, OdUInt16 &yY)
Definition: OdPlatform.h:621
unsigned int OdUInt32
short OdInt16
signed char OdInt8
unsigned short OdUInt16
int OdInt32
unsigned char OdUInt8
wchar_t OdChar
#define FIRSTDLL_EXPORT
Definition: RootExport.h:39
ODA_ASSUME(sizeof(OdRxValue)==32)
Definition: Int64.h:43
GLuint buffer
Definition: gles2_ext.h:178
GLsizei GLsizei * count
Definition: gles2_ext.h:276
GLint GLint GLint GLsizei GLsizei GLenum format
Definition: gles2_ext.h:111
void swap(signal< Handler, SignalTraits, Allocator > &lhs, signal< Handler, SignalTraits, Allocator > &rhs)
OdInt32 bottom
Definition: OdPlatform.h:896
OdInt32 top
Definition: OdPlatform.h:894
OdInt32 right
Definition: OdPlatform.h:895
OdInt32 left
Definition: OdPlatform.h:893
OdUInt32 biCompression
Definition: OdPlatform.h:943
OdUInt32 biSizeImage
Definition: OdPlatform.h:944
OdInt32 biXPelsPerMeter
Definition: OdPlatform.h:945
OdInt32 biYPelsPerMeter
Definition: OdPlatform.h:946
OdUInt32 biClrImportant
Definition: OdPlatform.h:948
BITMAPINFOHEADER bmiHeader
Definition: OdPlatform.h:1003
RGBQUAD bmiColors[1]
Definition: OdPlatform.h:1004
OdUInt32 bV4ClrUsed
Definition: OdPlatform.h:978
OdUInt32 bV4ClrImportant
Definition: OdPlatform.h:979
OdUInt32 bV4Size
Definition: OdPlatform.h:969
OdUInt16 bV4Planes
Definition: OdPlatform.h:972
OdUInt32 bV4AlphaMask
Definition: OdPlatform.h:983
OdUInt32 bV4SizeImage
Definition: OdPlatform.h:975
OdUInt16 bV4BitCount
Definition: OdPlatform.h:973
OdInt32 bV4XPelsPerMeter
Definition: OdPlatform.h:976
OdUInt32 bV4RedMask
Definition: OdPlatform.h:980
OdUInt32 bV4GreenMask
Definition: OdPlatform.h:981
OdUInt32 bV4GammaRed
Definition: OdPlatform.h:986
OdUInt32 bV4V4Compression
Definition: OdPlatform.h:974
CIEXYZTRIPLE bV4Endpoints
Definition: OdPlatform.h:985
OdUInt32 bV4BlueMask
Definition: OdPlatform.h:982
OdUInt32 bV4CSType
Definition: OdPlatform.h:984
OdInt32 bV4YPelsPerMeter
Definition: OdPlatform.h:977
OdUInt32 bV4GammaGreen
Definition: OdPlatform.h:987
OdUInt32 bV4GammaBlue
Definition: OdPlatform.h:988
FXPT2DOT30 ciexyzZ
Definition: OdPlatform.h:958
FXPT2DOT30 ciexyzX
Definition: OdPlatform.h:956
FXPT2DOT30 ciexyzY
Definition: OdPlatform.h:957
CIEXYZ ciexyzGreen
Definition: OdPlatform.h:964
CIEXYZ ciexyzRed
Definition: OdPlatform.h:963
CIEXYZ ciexyzBlue
Definition: OdPlatform.h:965
OdUInt8 rgbBlue
Definition: OdPlatform.h:914
OdUInt8 rgbGreen
Definition: OdPlatform.h:915
OdUInt8 rgbReserved
Definition: OdPlatform.h:917
OdUInt8 rgbRed
Definition: OdPlatform.h:916