dtc.h

Go to the documentation of this file.
00001 
00006 /*
00007  * Copyright (C) 2004-2006 Mike Frysinger <vapier@gmail.com>
00008  * Released under the BSD license.  For more information,
00009  * please see: http://opensource.org/licenses/bsd-license.php
00010  *
00011  * $Header: /cvsroot/freestdf/libstdf/src/dtc.h,v 1.14 2005/12/08 04:05:10 vapier Exp $
00012  */
00013 
00014 #ifndef _LIBSTDF_DTC_H
00015 #define _LIBSTDF_DTC_H
00016 
00017 #include <libstdf.h>
00018 
00019 extern void __byte_order_change(int, int, byte_t*, int) attribute_hidden;
00020 #define __byte_order_to_host(b,p,l) __byte_order_change(b, __STDF_HOST_BYTE_ORDER, p, l)
00021 #define __byte_order_to_src(b,p,l) __byte_order_change(__STDF_HOST_BYTE_ORDER, b, p, l)
00022 #define _stdf_byte_order_to_host(f,v,l) __byte_order_to_host(f->byte_order, (byte_t*)(v), l)
00023 #define _stdf_byte_order_to_src(f,v,l) __byte_order_to_src(f->byte_order, (byte_t*)(v), l)
00024 
00025 #ifdef  STDF_VER3
00026 extern void _stdf_read_dtc_Cx(stdf_file*, dtc_Cn*, int) attribute_hidden;
00027 #endif
00028 extern void _stdf_read_dtc_Cn(stdf_file*, dtc_Cn*) attribute_hidden;
00029 extern void _stdf_read_dtc_Bn(stdf_file*, dtc_Bn*) attribute_hidden;
00030 extern void _stdf_read_dtc_Dn(stdf_file*, dtc_Dn*) attribute_hidden;
00031 
00032 extern void _stdf_read_dtc_C1(stdf_file*, dtc_C1*) attribute_hidden;
00033 extern void _stdf_read_dtc_B1(stdf_file*, dtc_B1*) attribute_hidden;
00034 extern void _stdf_read_dtc_N1(stdf_file*, dtc_N1*) attribute_hidden;
00035 extern void _stdf_read_dtc_U1(stdf_file*, dtc_U1*) attribute_hidden;
00036 extern void _stdf_read_dtc_U2(stdf_file*, dtc_U2*) attribute_hidden;
00037 extern void _stdf_read_dtc_U4(stdf_file*, dtc_U4*) attribute_hidden;
00038 extern void _stdf_read_dtc_I1(stdf_file*, dtc_I1*) attribute_hidden;
00039 extern void _stdf_read_dtc_I2(stdf_file*, dtc_I2*) attribute_hidden;
00040 extern void _stdf_read_dtc_I4(stdf_file*, dtc_I4*) attribute_hidden;
00041 extern void _stdf_read_dtc_R4(stdf_file*, dtc_R4*) attribute_hidden;
00042 extern void _stdf_read_dtc_R8(stdf_file*, dtc_R8*) attribute_hidden;
00043 
00044 extern void _stdf_read_dtc_xN1(stdf_file*, dtc_xN1*, dtc_U2) attribute_hidden;
00045 extern void _stdf_read_dtc_xU1(stdf_file*, dtc_xU1*, dtc_U2) attribute_hidden;
00046 extern void _stdf_read_dtc_xU2(stdf_file*, dtc_xU2*, dtc_U2) attribute_hidden;
00047 extern void _stdf_read_dtc_xR4(stdf_file*, dtc_xR4*, dtc_U2) attribute_hidden;
00048 #define free_x(x) if (x) free(x)
00049 #define free_xU1(x) free_x(x)
00050 #define free_xU2(x) free_x(x)
00051 #define free_xR4(x) free_x(x)
00052 
00053 extern void _stdf_read_dtc_xCn(stdf_file*, dtc_xCn*, dtc_U2) attribute_hidden;
00054 extern void free_xCn(dtc_xCn, dtc_U2) attribute_hidden;
00055 
00056 extern void _stdf_read_dtc_Vn(stdf_file*, dtc_Vn*, dtc_U2) attribute_hidden;
00057 extern void free_Vn(dtc_Vn, dtc_U2) attribute_hidden;
00058 
00059 #define _stdf_write_byte(file, byte) \
00060     *file->_write_pos++ = byte
00061 #define _stdf_write_nbytes(file, inbuf, cnt) \
00062     do { \
00063         memcpy(file->_write_pos, inbuf, cnt); \
00064         file->_write_pos += cnt; \
00065     } while (0)
00066 #define _stdf_write_cnt_nbytes(file, inbuf, cnt) \
00067     do { \
00068         _stdf_write_byte(file, cnt); \
00069         if (cnt) _stdf_write_nbytes(file, inbuf, cnt); \
00070     } while (0)
00071 
00072 #define __stdf_write_even_bytes(type, file, bytes, even) \
00073     do { \
00074         type mapme = bytes; \
00075         _stdf_byte_order_to_src(file, &mapme, even); \
00076         uchar *map = (uchar*)&mapme; \
00077         _stdf_write_nbytes(file, map, even); \
00078     } while (0)
00079 #define _stdf_write_2bytes(file, bytes)       __stdf_write_even_bytes(uint16_t, file, bytes, 2)
00080 #define _stdf_write_4bytes(file, bytes)       __stdf_write_even_bytes(uint32_t, file, bytes, 4)
00081 #define _stdf_write_4bytes_float(file, bytes) __stdf_write_even_bytes(float, file, bytes, 4)
00082 #define _stdf_write_8bytes_float(file, bytes) __stdf_write_even_bytes(double, file, bytes, 8)
00083 
00084 #define _stdf_write_dtc_C1(file, C1) _stdf_write_byte(file, C1)
00085 #define _stdf_write_dtc_B1(file, B1) _stdf_write_byte(file, B1)
00086 #define _stdf_write_dtc_N1(file, N1) _stdf_write_byte(file, N1)
00087 #define _stdf_write_dtc_U1(file, U1) _stdf_write_byte(file, U1)
00088 #define _stdf_write_dtc_I1(file, I1) _stdf_write_byte(file, I1)
00089 
00090 #define _stdf_write_dtc_U2(file, U2) _stdf_write_2bytes(file, U2)
00091 #define _stdf_write_dtc_I2(file, I2) _stdf_write_2bytes(file, I2)
00092 
00093 #define _stdf_write_dtc_U4(file, U4) _stdf_write_4bytes(file, U4)
00094 #define _stdf_write_dtc_I4(file, I4) _stdf_write_4bytes(file, I4)
00095 #define _stdf_write_dtc_R4(file, R4) _stdf_write_4bytes_float(file, R4)
00096 
00097 #define _stdf_write_dtc_R8(file, R8) _stdf_write_8bytes_float(file, R8)
00098 
00099 #define _stdf_qwrite_dtc_header(file, REC_LEN, REC_TYP, REC_SUB) \
00100     do { \
00101         _stdf_write_dtc_U2(file, REC_LEN); \
00102         _stdf_write_dtc_U1(file, REC_TYP); \
00103         _stdf_write_dtc_U1(file, REC_SUB); \
00104     } while (0)
00105 #define _stdf_write_dtc_header(file, header) \
00106     _stdf_qwrite_dtc_header(file, (header)->REC_LEN, (header)->REC_TYP, (header)->REC_SUB)
00107 
00108 #define _stdf_write_dtc_Cn(file, Cn) _stdf_write_cnt_nbytes(file, Cn+1, (Cn ? *Cn : 0))
00109 #define _stdf_write_dtc_Bn(file, Bn) _stdf_write_dtc_Cn(file, Bn)
00110 #define _stdf_write_dtc_Dn(file, Dn) \
00111     do { \
00112         if (Dn) { \
00113             dtc_U2 cnt = *((dtc_U2*)Dn); \
00114             _stdf_write_dtc_U2(file, cnt); \
00115             _stdf_write_nbytes(file, Dn+2, cnt); \
00116         } \
00117     } while (0)
00118 
00119 #define _stdf_write_dtc_Vn(file, Vn, cnt) warnf("writing dtc_Vn is not implemented")
00120 
00121 #define _stdf_write_dtc_x(file, x, cnt, func) \
00122     do { \
00123         dtc_U2 i; \
00124         for (i=0; i<cnt; ++i) \
00125             func(file, x[i]); \
00126     } while (0)
00127 
00128 #define _stdf_write_dtc_xU1(file, xU1, cnt) _stdf_write_nbytes(file, xU1, cnt)
00129 #define _stdf_write_dtc_xU2(file, xU2, cnt) _stdf_write_dtc_x(file, xU2, cnt, _stdf_write_dtc_U2)
00130 #define _stdf_write_dtc_xN1(file, xN1, cnt) _stdf_write_nbytes(file, xN1, ((cnt/2)+(cnt%2)))
00131 #define _stdf_write_dtc_xR4(file, xR4, cnt) _stdf_write_dtc_x(file, xR4, cnt, _stdf_write_dtc_R4)
00132 #define _stdf_write_dtc_xCn(file, xCn, cnt) _stdf_write_dtc_x(file, xCn, cnt, _stdf_write_dtc_Cn)
00133 #define _stdf_write_dtc_xBn(file, xBn, cnt) _stdf_write_dtc_xCn(file, xBn, cnt)
00134 
00135 #ifdef STDF_VER3
00136 #define _stdf_write_dtc_Cx(file, Cx, cnt) warnf("writing dtc_Cx is not implemented");
00137 #endif
00138 
00139 #endif /* _LIBSTDF_DTC_H */

Generated on Thu Jun 8 14:05:35 2006 for libstdf by  doxygen 1.4.6