00001
00006 #ifndef GALE_TYPES_H
00007 #define GALE_TYPES_H
00008
00009 #include <stddef.h>
00010 #include <sys/time.h>
00011 #include <sys/types.h>
00012 #include <netinet/in.h>
00013 #include "gale/compat.h"
00014 #include "gale/config.h"
00015
00016
00017 #if SIZEOF_INT == 4
00018 typedef unsigned int u32;
00019 typedef signed int s32;
00020 #elif SIZEOF_LONG == 4
00021 typedef unsigned long u32;
00022 typedef signed long s32;
00023 #elif SIZEOF_SHORT == 4
00024 typedef unsigned short u32;
00025 typedef signed short s32;
00026 #elif DOXYGEN_ONLY
00027
00028 typedef unsigned int u32;
00030 typedef signed int s32;
00031 #else
00032 #error Cannot find 32-bit data type!
00033 #endif
00034
00035 #if SIZEOF_INT == 2
00036 typedef unsigned int u16;
00037 #elif SIZEOF_LONG == 2
00038 typedef unsigned long u16;
00039 #elif SIZEOF_SHORT == 2
00040 typedef unsigned short u16;
00041 #elif DOXYGEN_ONLY
00042
00043 typedef unsigned short u16;
00044 #else
00045 #error Cannot find 16-bit data type!
00046 #endif
00047
00049 typedef unsigned char u8;
00050
00052 typedef u8 byte;
00053
00055 typedef wchar_t wch;
00056
00058 struct gale_data {
00060 byte *p;
00062 size_t l;
00063 };
00064
00066 struct gale_text {
00068 const wch *p;
00070 size_t l;
00071 };
00072
00076 struct gale_time {
00079 s32 sec_high;
00081 u32 sec_low;
00084 u32 frac_high;
00087 u32 frac_low;
00088 };
00089
00090 struct gale_fragment;
00091
00093 struct gale_group {
00095 const struct gale_fragment *list;
00097 size_t len;
00099 const struct gale_group *next;
00100 };
00101
00103 enum gale_fragment_type {
00104 frag_text, frag_data, frag_time, frag_number, frag_group
00105 };
00106
00108 struct gale_fragment {
00110 struct gale_text name;
00112 enum gale_fragment_type type;
00115 union {
00116 struct gale_text text;
00117 struct gale_data data;
00118 struct gale_time time;
00119 struct gale_group group;
00120 s32 number;
00121 } value;
00122 };
00123
00124 #endif