Mac OS 9
Endian.h
Go to the documentation of this file.
1 
19 #ifndef __ENDIAN__
20 #define __ENDIAN__
21 
22 #ifndef __CONDITIONALMACROS__
23 #include <ConditionalMacros.h>
24 #endif
25 
26 #ifndef __MACTYPES__
27 #include <MacTypes.h>
28 #endif
29 
30 #if PRAGMA_ONCE
31 #pragma once
32 #endif
33 
34 #ifdef __cplusplus
35 extern "C"
36 {
37 #endif
38 
39 #if PRAGMA_IMPORT
40 #pragma import on
41 #endif
42 
43 #if PRAGMA_STRUCT_ALIGN
44 #pragma options align = mac68k
45 #elif PRAGMA_STRUCT_PACKPUSH
46 #pragma pack(push, 2)
47 #elif PRAGMA_STRUCT_PACK
48 #pragma pack(2)
49 #endif
50 
94 #if CALL_NOT_IN_CARBON
103  SInt16
104  EndianS16_BtoN(SInt16 value);
105 
114  SInt16
115  EndianS16_NtoB(SInt16 value);
116 
125  SInt16
126  EndianS16_LtoN(SInt16 value);
127 
136  SInt16
137  EndianS16_NtoL(SInt16 value);
138 
147  SInt16
148  EndianS16_LtoB(SInt16 value);
149 
158  SInt16
159  EndianS16_BtoL(SInt16 value);
160 
169  UInt16
170  EndianU16_BtoN(UInt16 value);
171 
180  UInt16
181  EndianU16_NtoB(UInt16 value);
182 
191  UInt16
192  EndianU16_LtoN(UInt16 value);
193 
202  UInt16
203  EndianU16_NtoL(UInt16 value);
204 
213  UInt16
214  EndianU16_LtoB(UInt16 value);
215 
224  UInt16
225  EndianU16_BtoL(UInt16 value);
226 
235  SInt32
236  EndianS32_BtoN(SInt32 value);
237 
246  SInt32
247  EndianS32_NtoB(SInt32 value);
248 
257  SInt32
258  EndianS32_LtoN(SInt32 value);
259 
268  SInt32
269  EndianS32_NtoL(SInt32 value);
270 
279  SInt32
280  EndianS32_LtoB(SInt32 value);
281 
290  SInt32
291  EndianS32_BtoL(SInt32 value);
292 
301  UInt32
302  EndianU32_BtoN(UInt32 value);
303 
312  UInt32
313  EndianU32_NtoB(UInt32 value);
314 
323  UInt32
324  EndianU32_LtoN(UInt32 value);
325 
334  UInt32
335  EndianU32_NtoL(UInt32 value);
336 
345  UInt32
346  EndianU32_LtoB(UInt32 value);
347 
356  UInt32
357  EndianU32_BtoL(UInt32 value);
358 
359 #endif
361 #if !TYPE_LONGLONG
367 #if CALL_NOT_IN_CARBON
376  SInt64
378 
387  SInt64
389 
398  SInt64
400 
409  SInt64
411 
420  SInt64
422 
431  SInt64
433 
442  UInt64
444 
453  UInt64
455 
464  UInt64
466 
475  UInt64
477 
486  UInt64
488 
497  UInt64
499 
500 #endif
502 #endif
511 #if TARGET_RT_LITTLE_ENDIAN
512  struct BigEndianLong
513  {
514  long bigEndianValue;
515  };
516  typedef struct BigEndianLong BigEndianLong;
517  struct BigEndianUnsignedLong
518  {
519  unsigned long bigEndianValue;
520  };
521  typedef struct BigEndianUnsignedLong BigEndianUnsignedLong;
522  struct BigEndianShort
523  {
524  short bigEndianValue;
525  };
526  typedef struct BigEndianShort BigEndianShort;
527  struct BigEndianUnsignedShort
528  {
529  unsigned short bigEndianValue;
530  };
531  typedef struct BigEndianUnsignedShort BigEndianUnsignedShort;
532  struct BigEndianFixed
533  {
534  Fixed bigEndianValue;
535  };
536  typedef struct BigEndianFixed BigEndianFixed;
537  struct BigEndianUnsignedFixed
538  {
539  UnsignedFixed bigEndianValue;
540  };
541  typedef struct BigEndianUnsignedFixed BigEndianUnsignedFixed;
542  struct BigEndianOSType
543  {
544  OSType bigEndianValue;
545  };
546  typedef struct BigEndianOSType BigEndianOSType;
547 #else
548 
549 typedef long BigEndianLong;
550 typedef unsigned long BigEndianUnsignedLong;
551 typedef short BigEndianShort;
552 typedef unsigned short BigEndianUnsignedShort;
553 typedef Fixed BigEndianFixed;
554 typedef UnsignedFixed BigEndianUnsignedFixed;
555 typedef OSType BigEndianOSType;
556 #endif
561 #if TARGET_RT_BIG_ENDIAN
562 #define EndianS16_BtoN(value) (value)
563 #define EndianS16_NtoB(value) (value)
564 #define EndianU16_BtoN(value) (value)
565 #define EndianU16_NtoB(value) (value)
566 #define EndianS32_BtoN(value) (value)
567 #define EndianS32_NtoB(value) (value)
568 #define EndianU32_BtoN(value) (value)
569 #define EndianU32_NtoB(value) (value)
570 #define EndianS64_BtoN(value) (value)
571 #define EndianS64_NtoB(value) (value)
572 #define EndianU64_BtoN(value) (value)
573 #define EndianU64_NtoB(value) (value)
574 #else
575 #define EndianS16_LtoN(value) (value)
576 #define EndianS16_NtoL(value) (value)
577 #define EndianU16_LtoN(value) (value)
578 #define EndianU16_NtoL(value) (value)
579 #define EndianS32_LtoN(value) (value)
580 #define EndianS32_NtoL(value) (value)
581 #define EndianU32_LtoN(value) (value)
582 #define EndianU32_NtoL(value) (value)
583 #define EndianS64_LtoN(value) (value)
584 #define EndianS64_NtoL(value) (value)
585 #define EndianU64_LtoN(value) (value)
586 #define EndianU64_NtoL(value) (value)
587 #endif
588 
592 #if TARGET_RT_BIG_ENDIAN
593 #define EndianS16_LtoN(value) EndianS16_LtoB(value)
594 #define EndianS16_NtoL(value) EndianS16_BtoL(value)
595 #define EndianU16_LtoN(value) EndianU16_LtoB(value)
596 #define EndianU16_NtoL(value) EndianU16_BtoL(value)
597 #define EndianS32_LtoN(value) EndianS32_LtoB(value)
598 #define EndianS32_NtoL(value) EndianS32_BtoL(value)
599 #define EndianU32_LtoN(value) EndianU32_LtoB(value)
600 #define EndianU32_NtoL(value) EndianU32_BtoL(value)
601 #define EndianS64_LtoN(value) EndianS64_LtoB(value)
602 #define EndianS64_NtoL(value) EndianS64_BtoL(value)
603 #define EndianU64_LtoN(value) EndianU64_LtoB(value)
604 #define EndianU64_NtoL(value) EndianU64_BtoL(value)
605 #else
606 #define EndianS16_BtoN(value) EndianS16_BtoL(value)
607 #define EndianS16_NtoB(value) EndianS16_LtoB(value)
608 #define EndianU16_BtoN(value) EndianU16_BtoL(value)
609 #define EndianU16_NtoB(value) EndianU16_LtoB(value)
610 #define EndianS32_BtoN(value) EndianS32_BtoL(value)
611 #define EndianS32_NtoB(value) EndianS32_LtoB(value)
612 #define EndianU32_BtoN(value) EndianU32_BtoL(value)
613 #define EndianU32_NtoB(value) EndianU32_LtoB(value)
614 #define EndianS64_BtoN(value) EndianS64_BtoL(value)
615 #define EndianS64_NtoB(value) EndianS64_LtoB(value)
616 #define EndianU64_BtoN(value) EndianU64_BtoL(value)
617 #define EndianU64_NtoB(value) EndianU64_LtoB(value)
618 #endif
619 
623 #define EndianS16_LtoB(value) ((SInt16)Endian16_Swap(value))
624 #define EndianS16_BtoL(value) ((SInt16)Endian16_Swap(value))
625 #define EndianU16_LtoB(value) ((UInt16)Endian16_Swap(value))
626 #define EndianU16_BtoL(value) ((UInt16)Endian16_Swap(value))
627 #define EndianS32_LtoB(value) ((SInt32)Endian32_Swap(value))
628 #define EndianS32_BtoL(value) ((SInt32)Endian32_Swap(value))
629 #define EndianU32_LtoB(value) ((UInt32)Endian32_Swap(value))
630 #define EndianU32_BtoL(value) ((UInt32)Endian32_Swap(value))
631 #define EndianS64_LtoB(value) ((SInt64)Endian64_Swap((UInt64)value))
632 #define EndianS64_BtoL(value) ((SInt64)Endian64_Swap((UInt64)value))
633 #define EndianU64_LtoB(value) ((UInt64)Endian64_Swap(value))
634 #define EndianU64_BtoL(value) ((UInt64)Endian64_Swap(value))
635 
647 #if CALL_NOT_IN_CARBON
656 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
657 #pragma parameter __D0 Endian16_Swap(__D0)
658 #endif
659  UInt16
660  Endian16_Swap(UInt16 value);
661 
670 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
671 #pragma parameter __D0 Endian32_Swap(__D0)
672 #endif
673  UInt32
674  Endian32_Swap(UInt32 value);
675 
676 #endif
679 #define Endian16_Swap(value) \
680  (((((UInt16)value) << 8) & 0xFF00) | ((((UInt16)value) >> 8) & 0x00FF))
681 
682 #define Endian32_Swap(value) \
683  (((((UInt32)value) << 24) & 0xFF000000) | \
684  ((((UInt32)value) << 8) & 0x00FF0000) | \
685  ((((UInt32)value) >> 8) & 0x0000FF00) | \
686  ((((UInt32)value) >> 24) & 0x000000FF))
687 
688 #if TYPE_LONGLONG
689 #if TARGET_OS_WIN32
691  extern UInt64 Endian64_Swap(UInt64 value);
692 #elif defined(__MWERKS__) && (__MWERKS__ < 0x1800)
694 #define Endian64_Swap(value) \
695  (((((UInt64)value) << 56) & 0xFF00000000000000) | \
696  ((((UInt64)value) << 40) & 0x00FF000000000000) | \
697  ((((UInt64)value) << 24) & 0x0000FF0000000000) | \
698  ((((UInt64)value) << 8) & 0x000000FF00000000) | \
699  ((((UInt64)value) >> 8) & 0x00000000FF000000) | \
700  ((((UInt64)value) >> 24) & 0x0000000000FF0000) | \
701  ((((UInt64)value) >> 40) & 0x000000000000FF00) | \
702  ((((UInt64)value) >> 56) & 0x00000000000000FF))
703 #else
704 #define Endian64_Swap(value) \
705  (((((UInt64)value) << 56) & 0xFF00000000000000ULL) | \
706  ((((UInt64)value) << 40) & 0x00FF000000000000ULL) | \
707  ((((UInt64)value) << 24) & 0x0000FF0000000000ULL) | \
708  ((((UInt64)value) << 8) & 0x000000FF00000000ULL) | \
709  ((((UInt64)value) >> 8) & 0x00000000FF000000ULL) | \
710  ((((UInt64)value) >> 24) & 0x0000000000FF0000ULL) | \
711  ((((UInt64)value) >> 40) & 0x000000000000FF00ULL) | \
712  ((((UInt64)value) >> 56) & 0x00000000000000FFULL))
713 #endif
714 #else
719 #ifdef __cplusplus
720 inline static UInt64 Endian64_Swap(UInt64 value)
721 {
722  UInt64 temp;
723  ((UnsignedWide *)&temp)->lo = Endian32_Swap(((UnsignedWide *)&value)->hi);
724  ((UnsignedWide *)&temp)->hi = Endian32_Swap(((UnsignedWide *)&value)->lo);
725  return temp;
726 }
727 #else
728 #if CALL_NOT_IN_CARBON
737 UInt64
739 
740 #endif
742 #endif
743 #endif
745 #if PRAGMA_STRUCT_ALIGN
746 #pragma options align = reset
747 #elif PRAGMA_STRUCT_PACKPUSH
748 #pragma pack(pop)
749 #elif PRAGMA_STRUCT_PACK
750 #pragma pack()
751 #endif
752 
753 #ifdef PRAGMA_IMPORT_OFF
754 #pragma import off
755 #elif PRAGMA_IMPORT
756 #pragma import reset
757 #endif
758 
759 #ifdef __cplusplus
760 }
761 #endif
762 
763 #endif
Set up for compiler independent conditionals.
SInt32 EndianS32_NtoB(SInt32 value)
UInt64 EndianU64_BtoL(UInt64 value)
SInt64 EndianS64_NtoL(SInt64 value)
SInt16 EndianS16_BtoL(SInt16 value)
SInt64 EndianS64_LtoN(SInt64 value)
#define EndianS16_LtoB(value)
Definition: Endian.h:623
#define EndianS16_LtoN(value)
Definition: Endian.h:575
SInt64 EndianS64_BtoL(SInt64 value)
UInt16 EndianU16_BtoN(UInt16 value)
UInt32 EndianU32_LtoB(UInt32 value)
UInt16 EndianU16_BtoL(UInt16 value)
UInt64 EndianU64_NtoB(UInt64 value)
UInt16 EndianU16_LtoN(UInt16 value)
SInt64 EndianS64_NtoB(SInt64 value)
SInt32 EndianS32_NtoL(SInt32 value)
UInt64 Endian64_Swap(UInt64 value)
SInt64 EndianS64_BtoN(SInt64 value)
UInt32 EndianU32_LtoN(UInt32 value)
SInt32 EndianS32_BtoN(SInt32 value)
SInt32 EndianS32_LtoN(SInt32 value)
UInt32 EndianU32_NtoB(UInt32 value)
UInt64 EndianU64_LtoB(UInt64 value)
UInt16 EndianU16_NtoL(UInt16 value)
UInt64 EndianU64_NtoL(UInt64 value)
UInt32 Endian32_Swap(UInt32 value)
UInt32 EndianU32_NtoL(UInt32 value)
#define EndianS16_BtoN(value)
Definition: Endian.h:606
SInt32 EndianS32_LtoB(SInt32 value)
long BigEndianLong
Definition: Endian.h:549
UInt16 EndianU16_NtoB(UInt16 value)
SInt32 EndianS32_BtoL(SInt32 value)
UInt64 EndianU64_LtoN(UInt64 value)
SInt16 EndianS16_NtoL(SInt16 value)
UInt32 EndianU32_BtoN(UInt32 value)
#define Endian16_Swap(value)
Definition: Endian.h:679
UInt16 EndianU16_LtoB(UInt16 value)
UInt64 EndianU64_BtoN(UInt64 value)
SInt16 EndianS16_NtoB(SInt16 value)
UInt32 EndianU32_BtoL(UInt32 value)
SInt64 EndianS64_LtoB(SInt64 value)
Basic Macintosh data types.
long Fixed
Definition: MacTypes.h:153
Definition: MacTypes.h:110
Definition: MacTypes.h:104