home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / graphics / sprtools_1 / h / io < prev    next >
Text File  |  1998-04-07  |  5KB  |  150 lines

  1. /****************************************************************************
  2.  *                                                                          *
  3.  * io.h                                                                     *
  4.  * ====                                                                     *
  5.  *                                                                          *
  6.  * I/O routines for image conversion programs                               *
  7.  *                                                                          *
  8.  * Version 1.00 (13-Aug-1993)                                               *
  9.  *         1.10 (20-Aug-1993) read_struct & write_struct added              *
  10.  *         1.20 (22-Aug-1993) new endian routines added                     *
  11.  *         1.30 (23-Aug-1993) progess function added                        *
  12.  *         1.42 (12-Oct-1993) progess start & finish functions added        *
  13.  *         1.43 (06-Apr-1998) endian_w macro corrected                        *
  14.  *                                                                          *
  15.  * (C) 1998 DEEJ Technology PLC                                             *
  16.  *                                                                          *
  17.  ****************************************************************************/
  18.  
  19. #ifndef __io_h
  20. #define __io_h
  21.  
  22. #define uchar  unsigned char
  23. #define ushort unsigned short
  24. #define uint   unsigned int
  25.  
  26. #ifndef BYTE
  27. #define BYTE  unsigned char
  28. #define WORD  unsigned short
  29. #define DWORD unsigned int
  30. #endif
  31.  
  32. /* endian type definititions */
  33.  
  34. #define LITTLE_ENDIAN   0
  35. #define BIG_ENDIAN      1
  36. #define LE              LITTLE_ENDIAN
  37. #define BE              BIG_ENDIAN
  38.  
  39. /**** machine configuration ****/
  40.  
  41. #ifdef RISCOS
  42. #define ENDIAN_TYPE     LITTLE_ENDIAN
  43. #define ALIGN_WORD      2
  44. #define ALIGN_DWORD     4
  45. #define ENDIAN_MACROS
  46. #endif
  47.  
  48. #ifdef M68K
  49. /* 68000 based */
  50. #define ENDIAN_TYPE     BIG_ENDIAN
  51. #define ALIGN_WORD      2
  52. #define ALIGN_DWORD     2
  53. #endif
  54.  
  55. #ifdef SPARC
  56. #define ENDIAN_TYPE     BIG_ENDIAN
  57. #define ALIGN_WORD      2
  58. #define ALIGN_DWORD     4
  59. #endif
  60.  
  61. #ifdef PA_RISC
  62. #define ENDIAN_TYPE     BIG_ENDIAN
  63. #define ALIGN_WORD      2
  64. #define ALIGN_DWORD     4
  65. #endif
  66.  
  67. #ifdef WIN32
  68. #define ENDIAN_TYPE     LITTLE_ENDIAN
  69. #define ALIGN_WORD      2
  70. #define ALIGN_DWORD     4
  71. #endif
  72.  
  73. /* add new machine definitions here */
  74.  
  75. #ifndef ENDIAN_TYPE
  76. /* comment follow line if compiler does not support it */
  77. #error "io.h: Not setup for this machine"
  78. #endif
  79.  
  80. #ifndef TRUE
  81. #define TRUE 1
  82. #define FALSE 0
  83. #endif
  84. #ifndef BOOL
  85. #define BOOL int
  86. #endif
  87.  
  88. /* macros */
  89.  
  90. #ifdef ENDIAN_MACROS
  91.  
  92. #define swap_endian(dword) ( ((dword & 0xff000000)>>24) | \
  93.                          ((dword & 0x00ff0000)>>8)  | \
  94.                          ((dword & 0x0000ff00)<<8)  | \
  95.                          ((dword & 0x000000ff)<<24) )
  96.  
  97. #define swap_endian_word(word) ( ((ushort)(word & 0xff00)>>8) | \
  98.                                  ((ushort)(word & 0x00ff)<<8) )
  99.  
  100. #define endian(type,dword)  ((type!=ENDIAN_TYPE) ? swap_endian(dword) : dword)
  101. #define endian_w(type,word) ((type!=ENDIAN_TYPE) ? swap_endian_word(word) : word)
  102.  
  103. #define bit_swap(byte) ( ((byte & 0x80)>>7) | \
  104.                          ((byte & 0x40)>>5) | \
  105.                          ((byte & 0x20)>>3) | \
  106.                          ((byte & 0x10)>>1) | \
  107.                          ((byte & 0x08)<<1) | \
  108.                          ((byte & 0x04)<<3) | \
  109.                          ((byte & 0x02)<<5) | \
  110.                          ((byte & 0x01)<<7) )
  111.  
  112. #define bit2_swap(byte) ( ((byte & 0xC0)>>6) | \
  113.                           ((byte & 0x30)>>2) | \
  114.                           ((byte & 0x0C)<<2) | \
  115.                           ((byte & 0x03)<<6) )
  116.  
  117. #define bit4_swap(byte) ( ((byte & 0xF0)>>4) | \
  118.                           ((byte & 0x0F)<<4) )
  119.  
  120. #else
  121.  
  122. extern uint   bit_swap(uint);
  123. extern uint   bit2_swap(uint);
  124. extern uint   bit4_swap(uint);
  125. extern uint   swap_endian(uint);
  126. extern ushort swap_endian_word(ushort);
  127. extern uint   endian(int, uint);
  128. extern ushort endian_w(int, ushort);
  129.  
  130. #endif
  131.  
  132. /* function prototypes */
  133.  
  134. extern void   fputwLE(WORD, FILE*);
  135. extern ushort fgetwLE(FILE*);
  136. extern void   fputwBE(WORD, FILE*);
  137. extern ushort fgetwBE(FILE*);
  138. extern void   fputdLE(DWORD, FILE*);
  139. extern uint   fgetdLE(FILE*);
  140. extern void   fputdBE(DWORD, FILE*);
  141. extern uint   fgetdBE(FILE*);
  142. extern void   file_args(int, char**, FILE**, FILE**, FILE**);
  143. extern void   read_struct(int, BYTE*, int*, FILE*);
  144. extern void   write_struct(int, BYTE*, int*, FILE*);
  145. extern void   progress_start(char*);
  146. extern void   progress(int, int);
  147. extern void   progress_finish(void);
  148.  
  149. #endif
  150.