intcvt.h
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:3k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)intcvt.h 1.1 99/10/18 Copyright 1986 J. Schilling */
  2. /*
  3.  * Definitions for conversion to/from integer data types of various size.
  4.  *
  5.  * Copyright (c) 1986 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #ifndef _INTCVT_H
  23. #define _INTCVT_H
  24. #define i_to_2_byte(a, i) (((Uchar *)(a))[0] = ((i) >> 8) & 0xFF,
  25.  ((Uchar *)(a))[1] = (i) & 0xFF)
  26. #define i_to_3_byte(a, i) (((Uchar *)(a))[0] = ((i) >> 16)& 0xFF,
  27.  ((Uchar *)(a))[1] = ((i) >> 8) & 0xFF,
  28.  ((Uchar *)(a))[2] = (i) & 0xFF)
  29. #define i_to_4_byte(a, i) (((Uchar *)(a))[0] = ((i) >> 24)& 0xFF,
  30.  ((Uchar *)(a))[1] = ((i) >> 16)& 0xFF,
  31.  ((Uchar *)(a))[2] = ((i) >> 8) & 0xFF,
  32.  ((Uchar *)(a))[3] = (i) & 0xFF)
  33. #define a_to_byte(a) (((Int8_t*) a)[0])
  34. #define a_to_u_byte(a) ((UInt8_t) 
  35. (((Uchar*) a)[0]       & 0xFF))
  36. #define a_to_u_2_byte(a) ((UInt16_t) 
  37. ((((Uchar*) a)[1]       & 0xFF) | 
  38.  (((Uchar*) a)[0] << 8  & 0xFF00)))
  39. #define a_to_2_byte(a) (int)(Int16_t)a_to_u_2_byte(a)
  40. #define a_to_u_3_byte(a) ((Ulong) 
  41. ((((Uchar*) a)[2]       & 0xFF) | 
  42.  (((Uchar*) a)[1] << 8  & 0xFF00) | 
  43.  (((Uchar*) a)[0] << 16 & 0xFF0000)))
  44. #define a_to_3_byte(a) a_to_u_3_byte(a) /* XXX Is there a signed version ? */
  45. #ifdef __STDC__
  46. # define __TOP_4BYTE 0xFF000000UL
  47. #else
  48. # define __TOP_4BYTE 0xFF000000
  49. #endif
  50. #define a_to_u_4_byte(a) ((Ulong) 
  51. ((((Uchar*) a)[3]       & 0xFF) | 
  52.  (((Uchar*) a)[2] << 8  & 0xFF00) | 
  53.  (((Uchar*) a)[1] << 16 & 0xFF0000) | 
  54.  (((Uchar*) a)[0] << 24 & __TOP_4BYTE)))
  55. #define a_to_4_byte(a) (long)(Int32_t)a_to_u_4_byte(a)
  56. #define la_to_u_2_byte(a) ((UInt16_t) 
  57. ((((Uchar*) a)[0]       & 0xFF) | 
  58.  (((Uchar*) a)[1] << 8  & 0xFF00)))
  59. #define la_to_2_byte(a) (int)(Int16_t)la_to_u_2_byte(a)
  60. #define la_to_u_3_byte(a) ((Ulong) 
  61. ((((Uchar*) a)[0]       & 0xFF) | 
  62.  (((Uchar*) a)[1] << 8  & 0xFF00) | 
  63.  (((Uchar*) a)[2] << 16 & 0xFF0000)))
  64. #define la_to_3_byte(a) la_to_u_3_byte(a) /* XXX Is there a signed version ? */
  65. #define la_to_u_4_byte(a) ((Ulong) 
  66. ((((Uchar*) a)[0]       & 0xFF) | 
  67.  (((Uchar*) a)[1] << 8  & 0xFF00) | 
  68.  (((Uchar*) a)[2] << 16 & 0xFF0000) | 
  69.  (((Uchar*) a)[3] << 24 & __TOP_4BYTE)))
  70. #define la_to_4_byte(a) (long)(Int32_t)la_to_u_4_byte(a)
  71. #endif /* _INTCVT_H */