From: <enl...@li...> - 2002-09-14 09:22:39
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src Modified Files: Tag: SPLIT Eet.h eet_data.c eet_main.c Log Message: eet... jpeg in eet handling (load/save) jpeg +alpha in eet handling (load/save) lossless compression (with alpha) handling (load/save) uncompressed lossless (with alpha) handling (load.save) data struct encoding (load/save) =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/src/Attic/Eet.h,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -3 -r1.1.2.3 -r1.1.2.4 --- Eet.h 4 Aug 2002 09:06:24 -0000 1.1.2.3 +++ Eet.h 14 Sep 2002 09:22:07 -0000 1.1.2.4 @@ -21,7 +21,29 @@ extern "C" { #endif - +/***************************************************************************/ + +#define EET_T_UNKNOW 0 +#define EET_T_CHAR 1 +#define EET_T_SHORT 2 +#define EET_T_INT 3 +#define EET_T_LONG_LONG 4 +#define EET_T_FLOAT 5 +#define EET_T_DOUBLE 6 +#define EET_T_UCHAR 7 +#define EET_T_USHORT 8 +#define EET_T_UINT 9 +#define EET_T_ULONG_LONG 10 +#define EET_T_STRING 11 +#define EET_T_LAST 12 + +#define EET_G_UNKNOWN 100 +#define EET_G_ARRAY 101 +#define EET_G_VAR_ARRAY 102 +#define EET_G_LIST 103 +#define EET_G_HASH 104 +#define EET_G_LAST 105 + /***************************************************************************/ enum _Eet_File_Mode @@ -33,6 +55,8 @@ typedef enum _Eet_File_Mode Eet_File_Mode; typedef struct _Eet_File Eet_File; + typedef struct _Eet_Data_Descriptor Eet_Data_Descriptor; + /***************************************************************************/ @@ -126,16 +150,49 @@ */ char **eet_list (Eet_File *ef, char *glob, int *count_ret); - /* TBD +/***************************************************************************/ + + /* To Be Documented * */ - void *eet_data_image_read(Eet_File *ef, char *name, - int *w, int *h, int *alpha, - int *compress, int *quality, int *lossy); - int eet_data_image_write(Eet_File *ef, char *name, - void *data, int w, int h, int alpha, - int compression, int quality, int lossy); - + void *eet_data_image_read(Eet_File *ef, char *name, int *w, int *h, int *alpha, int *compress, int *quality, int *lossy); + int eet_data_image_write(Eet_File *ef, char *name, void *data, int w, int h, int alpha, int compression, int quality, int lossy); + +/***************************************************************************/ + + Eet_Data_Descriptor *eet_data_descriptor_new(char *name, int size, void *(*func_list_next) (void *l), void *(*func_list_append) (void *l, void *d), void *(*func_list_data) (void *l), void (*func_hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt), void *(*func_hash_add) (void *h, const char *k, void *d)); + void eet_data_descriptor_free(Eet_Data_Descriptor *edd); + + void eet_data_descriptor_element_add(Eet_Data_Descriptor *edd, char *name, int type, int group_type, int offset, int count, char *counter_name, Eet_Data_Descriptor *subtype); + + void *eet_data_descriptor_decode(Eet_Data_Descriptor *edd, void *data_in, int size_in); + void *eet_data_descriptor_encode(Eet_Data_Descriptor *edd, void *data_in, int *size_ret); + +#define EET_DATA_DESCRIPTOR_ADD_BASIC(edd, struct_type, name, member, type) \ + { \ + struct_type ___ett; \ + \ + eet_data_descriptor_element_add(edd, name, type, EET_G_UNKNOWN, \ + (char *)(&(___ett.member)) - (char *)(&(___ett)), \ + 0, NULL, NULL); \ + } +#define EET_DATA_DESCRIPTOR_ADD_SUB(edd, struct_type, name, member, subtype) \ + { \ + struct_type ___ett; \ + \ + eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_UNKNOWN, \ + (char *)(&(___ett.member)) - (char *)(&(___ett)), \ + 0, NULL, subtype); \ + } +#define EET_DATA_DESCRIPTOR_ADD_LIST(edd, struct_type, name, member, subtype) \ + { \ + struct_type ___ett; \ + \ + eet_data_descriptor_element_add(edd, name, EET_T_UNKNOW, EET_G_LIST, \ + (char *)(&(___ett.member)) - (char *)(&(___ett)), \ + 0, NULL, subtype); \ + } + /***************************************************************************/ #ifdef __cplusplus } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/src/Attic/eet_data.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -3 -r1.1.2.1 -r1.1.2.2 --- eet_data.c 4 Aug 2002 09:06:24 -0000 1.1.2.1 +++ eet_data.c 14 Sep 2002 09:22:07 -0000 1.1.2.2 @@ -14,21 +14,199 @@ #include <jpeglib.h> #include <setjmp.h> #include <zlib.h> +#include <locale.h> -#define SWAP32(x) (x) = \ - ((((x) & 0x000000ff ) << 24) |\ - (((x) & 0x0000ff00 ) << 8) |\ - (((x) & 0x00ff0000 ) >> 8) |\ - (((x) & 0xff000000 ) >> 24)) + +/* + * rotuines for doing data -> struct and struct -> data conversion + * + * types: + * + * basic types: + * a sequence of... + * + * char + * short + * int + * long long + * float + * double + * unsigned char + * unsigned short + * unsigned int + * unsgined long long + * string + * + * groupings: + * multiple entries ordered as... + * + * fixed size array [ of basic types ] + * variable size array [ of basic types ] + * linked list [ of basic types ] + * hash table [ of basic types ] + * + * need to provide builder/accessor funcs for: + * + * list_next + * list_append + * + * hash_foreach + * hash_add + * + */ + +/*---*/ + +typedef struct _Eet_Data_Element Eet_Data_Element; +typedef struct _Eet_Data_Basic_Type_Decoder Eet_Data_Basic_Type_Decoder; +typedef struct _Eet_Data_Chunk Eet_Data_Chunk; +typedef struct _Eet_Data_Stream Eet_Data_Stream; +typedef struct _JPEG_error_mgr *emptr; + +/*---*/ + +struct _Eet_Data_Basic_Type_Decoder +{ + int size; + int (*get) (void *src, void *src_end, void *dest); + void *(*put) (void *src, int *size_ret); +}; + +struct _Eet_Data_Chunk +{ + char *name; + int size; + void *data; +}; + +struct _Eet_Data_Stream +{ + void *data; + int size; + int pos; +}; + +struct _Eet_Data_Descriptor +{ + char *name; + int size; + struct { + void *(*list_next) (void *l); + void *(*list_append) (void *l, void *d); + void *(*list_data) (void *l); + void (*hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt); + void *(*hash_add) (void *h, const char *k, void *d); + } func; + struct { + int num; + Eet_Data_Element *set; + } elements; +}; + +struct _Eet_Data_Element +{ + char *name; + int type; + int group_type; + int offset; + int count; + char *counter_name; + Eet_Data_Descriptor *subtype; +}; struct _JPEG_error_mgr { struct jpeg_error_mgr pub; jmp_buf setjmp_buffer; }; -typedef struct _JPEG_error_mgr *emptr; + +/*---*/ static void _JPEGFatalErrorHandler(j_common_ptr cinfo); +static void _JPEGErrorHandler(j_common_ptr cinfo); +static void _JPEGErrorHandler2(j_common_ptr cinfo, int msg_level); + +static void *eet_data_image_jpeg_rgb_decode(void *data, int size, int *w, int *h); +static void *eet_data_image_jpeg_alpha_decode(void *data, int size, unsigned int *d, int *w, int *h); +static void *eet_data_image_lossless_convert(int *size, void *data, int w, int h, int alpha); +static void *eet_data_image_lossless_compressed_convert(int *size, void *data, int w, int h, int alpha, int compression); +static void *eet_data_image_jpeg_convert(int *size, void *data, int w, int h, int alpha, int quality); +static void *eet_data_image_jpeg_alpha_convert(int *size, void *data, int w, int h, int alpha, int quality); + +static int eet_data_get_char(void *src, void *src_end, void *dest); +static void *eet_data_put_char(void *src, int *size_ret); +static int eet_data_get_short(void *src, void *src_end, void *dest); +static void *eet_data_put_short(void *src, int *size_ret); +static int eet_data_get_int(void *src, void *src_end, void *dest); +static void *eet_data_put_int(void *src, int *size_ret); +static int eet_data_get_long_long(void *src, void *src_end, void *dest); +static void *eet_data_put_long_long(void *src, int *size_ret); +static int eet_data_get_float(void *src, void *src_end, void *dest); +static void *eet_data_put_float(void *src, int *size_ret); +static int eet_data_get_double(void *src, void *src_end, void *dest); +static void *eet_data_put_double(void *src, int *size_ret); +static int eet_data_get_string(void *src, void *src_end, void *dest); +static void *eet_data_put_string(void *src, int *size_ret); + +static int eet_data_get_type(int type, void *src, void *src_end, void *dest); +static void *eet_data_put_type(int type, void *src, int *size_ret); + +static Eet_Data_Chunk *eet_data_chunk_get(void *src, int size); +static Eet_Data_Chunk *eet_data_chunk_new(void *data, int size, char *name); +static void eet_data_chunk_free(Eet_Data_Chunk *chnk); + +static Eet_Data_Stream *eet_data_stream_new(void); +static void eet_data_stream_write(Eet_Data_Stream *ds, void *data, int size); +static void eet_data_stream_free(Eet_Data_Stream *ds); + +static void eet_data_chunk_put(Eet_Data_Chunk *chnk, Eet_Data_Stream *ds); + +/*---*/ + +const Eet_Data_Basic_Type_Decoder eet_coder[] = +{ + {sizeof(char), eet_data_get_char, eet_data_put_char }, + {sizeof(short), eet_data_get_short, eet_data_put_short }, + {sizeof(int), eet_data_get_int, eet_data_put_int }, + {sizeof(long long), eet_data_get_long_long, eet_data_put_long_long}, + {sizeof(float), eet_data_get_float, eet_data_put_float }, + {sizeof(double), eet_data_get_double, eet_data_put_double }, + {sizeof(char), eet_data_get_char, eet_data_put_char }, + {sizeof(short), eet_data_get_short, eet_data_put_short }, + {sizeof(int), eet_data_get_int, eet_data_put_int }, + {sizeof(long long), eet_data_get_long_long, eet_data_put_long_long}, + {sizeof(char *), eet_data_get_string, eet_data_put_string } +}; + +static int words_bigendian = -1; + +/*---*/ + +#define SWAP64(x) (x) = \ + ((((x) & 0x00000000000000ff ) << 56) |\ + (((x) & 0x000000000000ff00 ) << 40) |\ + (((x) & 0x0000000000ff0000 ) << 24) |\ + (((x) & 0x00000000ff000000 ) << 8) |\ + (((x) & 0x000000ff00000000 ) >> 8) |\ + (((x) & 0x0000ff0000000000 ) >> 24) |\ + (((x) & 0x00ff000000000000 ) >> 40) |\ + (((x) & 0xff00000000000000 ) >> 56)) +#define SWAP32(x) (x) = \ + ((((x) & 0x000000ff ) << 24) |\ + (((x) & 0x0000ff00 ) << 8) |\ + (((x) & 0x00ff0000 ) >> 8) |\ + (((x) & 0xff000000 ) >> 24)) +#define SWAP16(x) (x) = \ + ((((x) & 0x00ff ) << 8) |\ + (((x) & 0xff00 ) >> 8)) + +#define CONV8(x) +#define CONV16(x) {if (words_bigendian) SWAP16(x);} +#define CONV32(x) {if (words_bigendian) SWAP32(x);} +#define CONV64(x) {if (words_bigendian) SWAP64(x);} + +/*---*/ + static void _JPEGFatalErrorHandler(j_common_ptr cinfo) { @@ -40,7 +218,6 @@ return; } -static void _JPEGErrorHandler(j_common_ptr cinfo); static void _JPEGErrorHandler(j_common_ptr cinfo) { @@ -52,7 +229,6 @@ return; } -static void _JPEGErrorHandler2(j_common_ptr cinfo, int msg_level); static void _JPEGErrorHandler2(j_common_ptr cinfo, int msg_level) { @@ -295,12 +471,14 @@ static void * eet_data_image_lossless_convert(int *size, void *data, int w, int h, int alpha) { - unsigned long int v; - int words_bigendian = 0; - - v = htonl(0x12345678); - if (v == 0x12345678) words_bigendian = 1; - + if (words_bigendian == -1) + { + unsigned long int v; + + v = htonl(0x12345678); + if (v == 0x12345678) words_bigendian = 1; + else words_bigendian = 0; + } { unsigned char *d; int *header; @@ -329,11 +507,14 @@ static void * eet_data_image_lossless_compressed_convert(int *size, void *data, int w, int h, int alpha, int compression) { - unsigned long int v; - int words_bigendian = 0; - - v = htonl(0x12345678); - if (v == 0x12345678) words_bigendian = 1; + if (words_bigendian == -1) + { + unsigned long int v; + + v = htonl(0x12345678); + if (v == 0x12345678) words_bigendian = 1; + else words_bigendian = 0; + } { unsigned char *d; @@ -456,15 +637,19 @@ static void * eet_data_image_jpeg_alpha_convert(int *size, void *data, int w, int h, int alpha, int quality) { - unsigned long int v; - int words_bigendian = 0; unsigned char *d1, *d2; unsigned char *d; int *header; int sz1, sz2; - v = htonl(0x12345678); - if (v == 0x12345678) words_bigendian = 1; + if (words_bigendian == -1) + { + unsigned long int v; + + v = htonl(0x12345678); + if (v == 0x12345678) words_bigendian = 1; + else words_bigendian = 0; + } { int *ptr; @@ -632,6 +817,422 @@ return d; } + +/* CHAR TYPE */ +static int +eet_data_get_char(void *src, void *src_end, void *dst) +{ + char *s, *d; + + if ((src + sizeof(char)) > src_end) return -1; + s = (char *)src; + d = (char *)dst; + *s = *d; + CONV8(*s); + return sizeof(char); +} + +static void * +eet_data_put_char(void *src, int *size_ret) +{ + char *s, *d; + + d = (char *)malloc(sizeof(char)); + if (!d) return NULL; + s = (char *)src; + *d = *s; + CONV8(*d); + *size_ret = sizeof(char); + return d; +} + +/* SHORT TYPE */ +static int +eet_data_get_short(void *src, void *src_end, void *dst) +{ + short *s, *d; + short tmp; + + if ((src + sizeof(short)) > src_end) return -1; + s = (short *)src; + d = (short *)dst; + /* alignment fixup */ + if ((int)s & (sizeof(short) - 1)) + { + memcpy(&tmp, s, sizeof(short)); + s = &tmp; + } + *d = *s; + CONV16(*d); + return sizeof(short); +} + +static void * +eet_data_put_short(void *src, int *size_ret) +{ + short *s, *d; + + d = (short *)malloc(sizeof(short)); + if (!d) return NULL; + s = (short *)src; + *d = *s; + CONV16(*d); + *size_ret = sizeof(short); + return d; +} + +/* INT TYPE */ +static int +eet_data_get_int(void *src, void *src_end, void *dst) +{ + int *s, *d; + int tmp; + + if ((src + sizeof(int)) > src_end) return -1; + s = (int *)src; + d = (int *)dst; + /* alignment fixup */ + if ((int)s & (sizeof(int) - 1)) + { + memcpy(&tmp, s, sizeof(int)); + s = &tmp; + } + *d = *s; + CONV32(*d); + return sizeof(int); +} + +static void * +eet_data_put_int(void *src, int *size_ret) +{ + int *s, *d; + + d = (int *)malloc(sizeof(int)); + if (!d) return NULL; + s = (int *)src; + *d = *s; + CONV32(*d); + *size_ret = sizeof(int); + return d; +} + +/* LONG LONG TYPE */ +static int +eet_data_get_long_long(void *src, void *src_end, void *dst) +{ + long long *s, *d; + long long tmp; + + if ((src + sizeof(long long)) > src_end) return -1; + s = (long long *)src; + d = (long long *)dst; + /* alignment fixup */ + if ((int)s & (sizeof(long long) - 1)) + { + memcpy(&tmp, s, sizeof(long long)); + s = &tmp; + } + *d = *s; + CONV64(*d); + return sizeof(long long); +} + +static void * +eet_data_put_long_long(void *src, int *size_ret) +{ + long long *s, *d; + + d = (long long *)malloc(sizeof(long long)); + if (!d) return NULL; + s = (long long *)src; + *d = *s; + CONV64(*d); + *size_ret = sizeof(long long); + return d; +} + +/* STRING TYPE */ +static int +eet_data_get_string(void *src, void *src_end, void *dst) +{ + char *s, **d, *p; + int len; + + s = (char *)src; + d = (char **)dst; + p = s; + len = 0; + while ((p < (char *)src_end) && (*p != 0)) {len++; p++;} + *d = malloc(len + 1); + if (!(*d)) return -1; + memcpy(*d, s, len); + (*d)[len] = 0; + return len + 1; +} + +static void * +eet_data_put_string(void *src, int *size_ret) +{ + char *s, *d; + int len; + + if (!src) src = ""; + s = (char *)(*((char **)src)); + len = strlen(s); + d = malloc(len + 1); + if (!d) return NULL; + strcpy(d, s); + *size_ret = len + 1; + return d; +} + +/* FLOAT TYPE */ +static int +eet_data_get_float(void *src, void *src_end, void *dst) +{ + float *d; + char *s, *str, *p, *prev_locale; + int len; + + s = (char *)src; + d = (float *)dst; + p = s; + len = 0; + while ((p < (char *)src_end) && (*p != 0)) {len++; p++;} + str = malloc(len + 1); + if (!str) return -1; + memcpy(str, s, len); + str[len] = 0; + + prev_locale = setlocale(LC_NUMERIC, "C"); + *d = (float)atof(str); + if (prev_locale) setlocale(LC_NUMERIC, prev_locale); + + free(str); + return len + 1; +} + +static void * +eet_data_put_float(void *src, int *size_ret) +{ + float *s; + char *d, buf[64], *prev_locale; + int len; + + s = (float *)src; + prev_locale = setlocale(LC_NUMERIC, "C"); + snprintf(buf, sizeof(buf), "%16.16f", (double)(*s)); + if (prev_locale) setlocale(LC_NUMERIC, prev_locale); + len = strlen(buf); + d = malloc(len + 1); + if (!d) return NULL; + strcpy(d, buf); + *size_ret = len + 1; + return d; +} + +/* DOUBLE TYPE */ +static int +eet_data_get_double(void *src, void *src_end, void *dst) +{ + double *d; + char *s, *str, *p, *prev_locale; + int len; + + s = (char *)src; + d = (double *)dst; + p = s; + len = 0; + while ((p < (char *)src_end) && (*p != 0)) {len++; p++;} + str = malloc(len + 1); + if (!str) return -1; + memcpy(str, s, len); + str[len] = 0; + + prev_locale = setlocale(LC_NUMERIC, "C"); + *d = (double)atof(str); + if (prev_locale) setlocale(LC_NUMERIC, prev_locale); + + free(str); + return len + 1; +} + +static void * +eet_data_put_double(void *src, int *size_ret) +{ + double *s; + char *d, buf[128], *prev_locale; + int len; + + s = (double *)src; + prev_locale = setlocale(LC_NUMERIC, "C"); + snprintf(buf, sizeof(buf), "%32.32f", (double)(*s)); + if (prev_locale) setlocale(LC_NUMERIC, prev_locale); + len = strlen(buf); + d = malloc(len + 1); + if (!d) return NULL; + strcpy(d, buf); + *size_ret = len + 1; + return d; +} + +static int +eet_data_get_type(int type, void *src, void *src_end, void *dest) +{ + int ret; + + ret = eet_coder[type - 1].get(src, src_end, dest); + return ret; +} + +static void * +eet_data_put_type(int type, void *src, int *size_ret) +{ + void *ret; + + ret = eet_coder[type - 1].put(src, size_ret); + return ret; +} + +/* chunk format... + * + * char[4] = "CHnK"; + * int = chunk size (including magic string); + * char[] = chuck magic/name string (0 byte terminated); + * ... sub-chunks (a chunk can contain chuncks recusrively) ... + * or + * ... payload data ... + * + */ + +static Eet_Data_Chunk * +eet_data_chunk_get(void *src, int size) +{ + Eet_Data_Chunk *chnk; + char *s; + int ret1, ret2; + + if (!src) return NULL; + if (size <= 8) return NULL; + + chnk = calloc(1, sizeof(Eet_Data_Chunk)); + if (!chnk) return NULL; + + s = src; + if ((s[0] != 'C') || (s[1] != 'H') || (s[2] != 'n') || (s[3] != 'K')) + { + free(chnk); + return NULL; + } + ret1 = eet_data_get_type(EET_T_INT, (void *)(s + 4), (void *)(s + size), &(chnk->size)); + if (ret1 <= 0) + { + free(chnk); + return NULL; + } + if ((chnk->size < 0) || ((chnk->size + 8) > size)) + { + free(chnk); + return NULL; + } + ret2 = eet_data_get_type(EET_T_STRING, (void *)(s + 8), (void *)(s + size), &(chnk->name)); + if (ret2 <= 0) + { + free(chnk); + return NULL; + } + chnk->data = src + 4 + ret1 + ret2; + chnk->size -= ret2; + return chnk; +} + +static Eet_Data_Chunk * +eet_data_chunk_new(void *data, int size, char *name) +{ + Eet_Data_Chunk *chnk; + + if (!name) return NULL; + chnk = calloc(1, sizeof(Eet_Data_Chunk)); + if (!chnk) return NULL; + + chnk->name = strdup(name); + chnk->size = size; + chnk->data = data; + + return chnk; +} + +static void +eet_data_chunk_free(Eet_Data_Chunk *chnk) +{ + if (chnk->name) free(chnk->name); + free(chnk); +} + +static Eet_Data_Stream * +eet_data_stream_new(void) +{ + Eet_Data_Stream *ds; + + ds = calloc(1, sizeof(Eet_Data_Stream)); + if (!ds) return NULL; + return ds; +} + +static void +eet_data_stream_free(Eet_Data_Stream *ds) +{ + if (ds->data) free(ds->data); + free(ds); +} + +static void +eet_data_stream_write(Eet_Data_Stream *ds, void *data, int size) +{ + char *p; + + if ((ds->pos + size) > ds->size) + { + ds->data = realloc(ds->data, ds->size + size + 256); + if (!ds->data) + { + ds->pos = 0; + ds->size = 0; + return; + } + ds->size = ds->size + size + 256; + } + p = ds->data; + memcpy(p + ds->pos, data, size); + ds->pos += size; +} + +static void +eet_data_chunk_put(Eet_Data_Chunk *chnk, Eet_Data_Stream *ds) +{ + int *size; + int s; + int size_ret; + + if (!chnk->data) return; + /* chunk head */ + eet_data_stream_write(ds, "CHnK", 4); + /* size of chunk payload data + name */ + s = strlen(chnk->name) + 1 + chnk->size; + size = eet_data_put_int(&s, &size_ret); + if (size) + { + eet_data_stream_write(ds, size, size_ret); + free(size); + } + /* write chunk name */ + eet_data_stream_write(ds, chnk->name, strlen(chnk->name) + 1); + /* write payload */ + eet_data_stream_write(ds, chnk->data, chnk->size); +} + +/*---*/ + int eet_data_image_write(Eet_File *ef, char *name, void *data, int w, int h, int alpha, @@ -674,11 +1275,15 @@ int size; unsigned int *d = NULL; int header[8]; - unsigned long int v; - int words_bigendian = 0; - v = htonl(0x12345678); - if (v == 0x12345678) words_bigendian = 1; + if (words_bigendian == -1) + { + unsigned long int v; + + v = htonl(0x12345678); + if (v == 0x12345678) words_bigendian = 1; + else words_bigendian = 0; + } data = eet_read(ef, name, &size); if (!data) return NULL; @@ -797,4 +1402,330 @@ } free(data); return d; +} + +Eet_Data_Descriptor * +eet_data_descriptor_new(char *name, + int size, + void *(*func_list_next) (void *l), + void *(*func_list_append) (void *l, void *d), + void *(*func_list_data) (void *l), + void (*func_hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt), + void *(*func_hash_add) (void *h, const char *k, void *d)) +{ + Eet_Data_Descriptor *edd; + + edd = calloc(1, sizeof(Eet_Data_Descriptor)); + edd->name = strdup(name); + edd->size = size; + edd->func.list_next = func_list_next; + edd->func.list_append = func_list_append; + edd->func.list_data = func_list_data; + edd->func.hash_foreach = func_hash_foreach; + edd->func.hash_add = func_hash_add; + return edd; +} + +void +eet_data_descriptor_free(Eet_Data_Descriptor *edd) +{ + int i; + + if (edd->name) free(edd->name); + for (i = 0; i < edd->elements.num; i++) + { + if (edd->elements.set[i].name) free(edd->elements.set[i].name); + if (edd->elements.set[i].counter_name) free(edd->elements.set[i].counter_name); + } + if (edd->elements.set) free(edd->elements.set); + free(edd); +} + +void +eet_data_descriptor_element_add(Eet_Data_Descriptor *edd, char *name, int type, + int group_type, + int offset, + int count, char *counter_name, + Eet_Data_Descriptor *subtype) +{ + Eet_Data_Element *ede; + + edd->elements.num++; + edd->elements.set = realloc(edd->elements.set, edd->elements.num * sizeof(Eet_Data_Element)); + if (!edd->elements.set) return; + ede = &(edd->elements.set[edd->elements.num - 1]); + ede->name = strdup(name); + ede->type = type; + ede->group_type = group_type; + ede->offset = offset; + ede->count = count; + if (counter_name) + ede->counter_name = strdup(counter_name); + else ede->counter_name = NULL; + ede->subtype = subtype; +} + +void * +eet_data_descriptor_decode(Eet_Data_Descriptor *edd, + void *data_in, + int size_in) +{ + void *data; + char *p; + int size; + Eet_Data_Chunk *chnk; + + if (words_bigendian == -1) + { + unsigned long int v; + + v = htonl(0x12345678); + if (v == 0x12345678) words_bigendian = 1; + else words_bigendian = 0; + } + + data = calloc(1, edd->size); + if (!data) return NULL; + chnk = eet_data_chunk_get(data_in, size_in); + if (!chnk) + { + free(data); + return NULL; + } + if (strcmp(chnk->name, edd->name)) + { + eet_data_chunk_free(chnk); + free(data); + return NULL; + } + p = chnk->data; + size = size_in - (4 + 4 + strlen(chnk->name) + 1); + while (size > 0) + { + Eet_Data_Chunk *echnk; + int i; + + /* get next data chunk */ + echnk = eet_data_chunk_get(p, size); + if (!echnk) + { + /* FIXME: partially built data struct - leak!!!! */ + free(data); + eet_data_chunk_free(chnk); + return NULL; + } + for (i = 0; i < edd->elements.num; i++) + { + Eet_Data_Element *ede; + + ede = &(edd->elements.set[i]); + if (!strcmp(echnk->name, ede->name)) + { + if (ede->group_type == EET_G_UNKNOWN) + { + int ret; + void *data_ret; + + if ((ede->type >= EET_T_CHAR) && + (ede->type <= EET_T_STRING)) + { + ret = eet_data_get_type(ede->type, + echnk->data, + ((char *)echnk->data) + echnk->size, + ((char *)data) + ede->offset); + } + else if (ede->subtype) + { + void **ptr; + + data_ret = eet_data_descriptor_decode(ede->subtype, + echnk->data, + echnk->size); + ptr = (void **)(((char *)data) + ede->offset); + *ptr = (void *)data_ret; + } + } + else + { + switch (ede->group_type) + { + case EET_G_ARRAY: + case EET_G_VAR_ARRAY: + { + printf("ARRAY TYPE NOT IMPLIMENTED YET!!!\n"); + } + break; + case EET_G_LIST: + { + int ret; + void *list = NULL; + void **ptr; + void *data_ret; + + ptr = (void **)(((char *)data) + ede->offset); + list = *ptr; + data_ret = NULL; + if ((ede->type >= EET_T_CHAR) && + (ede->type <= EET_T_STRING)) + { + data_ret = calloc(1, eet_coder[ede->type].size); + if (data_ret) + { + ret = eet_data_get_type(ede->type, + echnk->data, + ((char *)echnk->data) + echnk->size, + data_ret); + if (ret <= 0) + { + free(data_ret); + data_ret = NULL; + } + } + } + else if (ede->subtype) + { + data_ret = eet_data_descriptor_decode(ede->subtype, + echnk->data, + echnk->size); + } + if (data_ret) + { + list = edd->func.list_append(list, data_ret); + *ptr = list; + } + } + break; + case EET_G_HASH: + printf("HASH TYPE NOT IMPLIMENTED YET!!!\n"); + break; + default: + break; + } + } + break; + } + } + /* advance to next chunk */ + p += (4 + 4 + strlen(echnk->name) + 1 + echnk->size); + size -= (4 + 4 + strlen(echnk->name) + 1 + echnk->size); + eet_data_chunk_free(echnk); + } + eet_data_chunk_free(chnk); + return data; +} + +void * +eet_data_descriptor_encode(Eet_Data_Descriptor *edd, + void *data_in, + int *size_ret) +{ + Eet_Data_Chunk *chnk; + Eet_Data_Stream *ds; + int i; + void *cdata; + int csize; + + if (words_bigendian == -1) + { + unsigned long int v; + + v = htonl(0x12345678); + if (v == 0x12345678) words_bigendian = 1; + else words_bigendian = 0; + } + + ds = eet_data_stream_new(); + for (i = 0; i < edd->elements.num; i++) + { + Eet_Data_Element *ede; + Eet_Data_Chunk *echnk; + void *data; + int size; + + ede = &(edd->elements.set[i]); + data = NULL; + if (ede->group_type == EET_G_UNKNOWN) + { + if ((ede->type >= EET_T_CHAR) && + (ede->type <= EET_T_STRING)) + data = eet_data_put_type(ede->type, + ((char *)data_in) + ede->offset, + &size); + else if (ede->subtype) + data = eet_data_descriptor_encode(ede->subtype, + *((char **)(((char *)data_in) + ede->offset)), + &size); + if (data) + { + echnk = eet_data_chunk_new(data, size, ede->name); + eet_data_chunk_put(echnk, ds); + eet_data_chunk_free(echnk); + free(data); + data = NULL; + } + } + else + { + switch (ede->group_type) + { + case EET_G_ARRAY: + case EET_G_VAR_ARRAY: + { + printf("ARRAY TYPE NOT IMPLIMENTED YET!!!\n"); + } + break; + case EET_G_LIST: + { + void *l; + + l = *((void **)(((char *)data_in) + ede->offset)); + for (; l; l = edd->func.list_next(l)) + { + if ((ede->type >= EET_T_CHAR) && + (ede->type <= EET_T_STRING)) + data = eet_data_put_type(ede->type, + edd->func.list_data(l), + &size); + else if (ede->subtype) + data = eet_data_descriptor_encode(ede->subtype, + edd->func.list_data(l), + &size); + if (data) + { + echnk = eet_data_chunk_new(data, size, ede->name); + eet_data_chunk_put(echnk, ds); + eet_data_chunk_free(echnk); + free(data); + data = NULL; + } + } + } + break; + case EET_G_HASH: + { + printf("HASH TYPE NOT IMPLIMENTED YET!!!\n"); + } + break; + default: + break; + } + } + } + chnk = eet_data_chunk_new(ds->data, ds->pos, edd->name); + ds->data = NULL; + ds->size = 0; + eet_data_stream_free(ds); + + ds = eet_data_stream_new(); + eet_data_chunk_put(chnk, ds); + cdata = ds->data; + csize = ds->pos; + + ds->data = NULL; + ds->size = 0; + eet_data_stream_free(ds); + *size_ret = csize; + eet_data_chunk_free(chnk); + + return cdata; } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/src/Attic/eet_main.c,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -3 -r1.1.2.5 -r1.1.2.6 --- eet_main.c 10 May 2002 00:09:16 -0000 1.1.2.5 +++ eet_main.c 14 Sep 2002 09:22:07 -0000 1.1.2.6 @@ -10,6 +10,139 @@ #include <limits.h> #include <fnmatch.h> +/* just some sample code on how to use encoder/decoders */ +#if 0 +#include <Evas.h> + +typedef struct _blah2 +{ + char *string; +} +Blah2; + +typedef struct _blah3 +{ + char *string; +} +Blah3; + +typedef struct _blah +{ + char character; + short sixteen; + int integer; + long long lots; + float floating; + double floating_lots; + char *string; + Blah2 *blah2; + Evas_List *blah3; +} +Blah; + +void +encdectest(void) +{ + Blah blah; + Blah2 blah2; + Blah3 blah3; + Eet_Data_Descriptor *edd, *edd2, *edd3; + void *data; + int size; + FILE *f; + Blah *blah_in; + + edd3 = eet_data_descriptor_new("blah3", sizeof(Blah3), + evas_list_next, + evas_list_append, + evas_list_data, + evas_hash_foreach, + evas_hash_add); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd3, Blah3, "string3", string, EET_T_STRING); + + edd2 = eet_data_descriptor_new("blah2", sizeof(Blah2), + evas_list_next, + evas_list_append, + evas_list_data, + evas_hash_foreach, + evas_hash_add); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd2, Blah2, "string2", string, EET_T_STRING); + + edd = eet_data_descriptor_new("blah", sizeof(Blah), + evas_list_next, + evas_list_append, + evas_list_data, + evas_hash_foreach, + evas_hash_add); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "character", character, EET_T_CHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "sixteen", sixteen, EET_T_SHORT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "integer", integer, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "lots", lots, EET_T_LONG_LONG); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "floating", floating, EET_T_FLOAT); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "floating_lots", floating_lots, EET_T_DOUBLE); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Blah, "string", string, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_SUB (edd, Blah, "blah2", blah2, edd2); + EET_DATA_DESCRIPTOR_ADD_LIST (edd, Blah, "blah3", blah3, edd3); + + blah3.string="PANTS"; + + blah2.string="subtype string here!"; + + blah.character='7'; + blah.sixteen=0x7777; + blah.integer=0xc0def00d; + blah.lots=0xdeadbeef31337777; + blah.floating=3.141592654; + blah.floating_lots=0.777777777777777; + blah.string="bite me like a turnip"; + blah.blah2 = &blah2; + blah.blah3 = evas_list_append(NULL, &blah3); + blah.blah3 = evas_list_append(blah.blah3, &blah3); + blah.blah3 = evas_list_append(blah.blah3, &blah3); + blah.blah3 = evas_list_append(blah.blah3, &blah3); + blah.blah3 = evas_list_append(blah.blah3, &blah3); + blah.blah3 = evas_list_append(blah.blah3, &blah3); + blah.blah3 = evas_list_append(blah.blah3, &blah3); + + data = eet_data_descriptor_encode(edd, &blah, &size); + f = fopen("out", "w"); + if (f) + { + fwrite(data, size, 1, f); + fclose(f); + } + printf("-----DECODING\n"); + blah_in = eet_data_descriptor_decode(edd, data, size); + printf("-----DECODED!\n"); + printf("%c\n", blah_in->character); + printf("%x\n", (int)blah_in->sixteen); + printf("%x\n", blah_in->integer); + printf("%lx\n", blah_in->lots); + printf("%f\n", (double)blah_in->floating); + printf("%f\n", (double)blah_in->floating_lots); + printf("%s\n", blah_in->string); + printf("%p\n", blah_in->blah2); + printf(" %s\n", blah_in->blah2->string); + { + Evas_List *l; + + for (l = blah_in->blah3; l; l = l->next) + { + Blah3 *blah3_in; + + blah3_in = l->data; + printf("%p\n", blah3_in); + printf(" %s\n", blah3_in->string); + } + } + eet_data_descriptor_free(edd); + eet_data_descriptor_free(edd2); + eet_data_descriptor_free(edd3); + + exit(0); +} +#endif + int eet_mkdir(char *dir); void eet_mkdirs(char *s); @@ -222,10 +355,9 @@ eet_close(ef); } - int main(int argc, char **argv) -{ +{ if (argc == 3) { if (!strcmp(argv[1], "-d")) |
From: <enl...@li...> - 2002-09-14 09:27:14
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src Modified Files: Tag: SPLIT Eet.h eet_data.c Log Message: and convenience functions! :) =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/src/Attic/Eet.h,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -3 -r1.1.2.4 -r1.1.2.5 --- Eet.h 14 Sep 2002 09:22:07 -0000 1.1.2.4 +++ Eet.h 14 Sep 2002 09:27:13 -0000 1.1.2.5 @@ -165,6 +165,9 @@ void eet_data_descriptor_element_add(Eet_Data_Descriptor *edd, char *name, int type, int group_type, int offset, int count, char *counter_name, Eet_Data_Descriptor *subtype); + void *eet_data_read(Eet_File *ef, Eet_Data_Descriptor *edd, char *name); + int eet_data_write(Eet_File *ef, Eet_Data_Descriptor *edd, char *name, void *data, int compress); + void *eet_data_descriptor_decode(Eet_Data_Descriptor *edd, void *data_in, int size_in); void *eet_data_descriptor_encode(Eet_Data_Descriptor *edd, void *data_in, int *size_ret); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/src/Attic/eet_data.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -3 -r1.1.2.2 -r1.1.2.3 --- eet_data.c 14 Sep 2002 09:22:07 -0000 1.1.2.2 +++ eet_data.c 14 Sep 2002 09:27:13 -0000 1.1.2.3 @@ -1466,6 +1466,34 @@ } void * +eet_data_read(Eet_File *ef, Eet_Data_Descriptor *edd, char *name) +{ + void *data_dec; + void *data; + int size; + + data = eet_read(ef, name, &size); + if (!data) return NULL; + data_dec = eet_data_descriptor_decode(edd, data, size); + free(data); + return data_dec; +} + +int +eet_data_write(Eet_File *ef, Eet_Data_Descriptor *edd, char *name, void *data, int compress) +{ + void *data_enc; + int size; + int val; + + data_enc = eet_data_descriptor_encode(edd, data, &size); + if (!data_enc) return 0; + val = eet_write(ef, name, data_enc, size, compress); + free(data_enc); + return val; +} + +void * eet_data_descriptor_decode(Eet_Data_Descriptor *edd, void *data_in, int size_in) |
From: <enl...@li...> - 2002-09-15 23:44:55
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src Modified Files: Tag: SPLIT Eet.h eet_data.c Log Message: some documentation... more coming. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/src/Attic/Eet.h,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -3 -r1.1.2.5 -r1.1.2.6 --- Eet.h 14 Sep 2002 09:27:13 -0000 1.1.2.5 +++ Eet.h 15 Sep 2002 23:44:52 -0000 1.1.2.6 @@ -86,7 +86,7 @@ */ void eet_close (Eet_File *ef); /* eet_read - Read a specified entry from an eet file and return data - * @ef: A valid eet file handle. + * @ef: A valid eet file handle opened for reading. * @name: Name of the entry. eg: "/base/file_i_want". * @size_ret: Number of bytes read from entry and returned. * @@ -152,14 +152,73 @@ /***************************************************************************/ - /* To Be Documented - * + /* eet_data_image_read - Read image data from the named key in the eet file. + * @ef: A valid eet file handle opened for reading. + * @name: Name of the entry. eg: "/base/file_i_want". + * @w: A pointer to the int to hold the width in pixels. + * @h: A pointer to the int to hold the height in pixels. + * @alpha: A pointer to the int to hold the alpha flag. + * @compress: A pointer to the int to hold the compression amount. + * @quality: A pointer to the int to hold the quality amount. + * @lossy: A pointer to the int to hold the lossiness flag. + * + * This function reads an image from an eet file stored under the named + * key in the eet file and return a pointer to the decompressed pixel data. + * + * The other parameters of the image (width, height etc.) are placed into + * the values pointed to (they must be supplied). The pixel data is a linear + * array of pixels starting from the top-left of the image scanning row by + * row from left to right. Each piel is a 32bit value, with the high byte + * being the alpha channel, the next being red, then green, and the low byte + * being blue. The width and height are measured in pixels and will be + * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes + * that the alpha channel is not used. 1 denoties that it is significant. + * Compress is fiulled with the compression value/amount the image was + * stored with. The quality value si fileld with the quality encoding of + * the image file (0 - 100). The lossy flags is either 0 or 1 as to if + * the image was encoded lossily or not. + * + * On success the function returns a pointer to the image data decoded. The + * calling application is responsible for calling free() on the image data + * when it is done with it. On failure NULL is returned and the parameter + * values may not contain any sensible data. */ void *eet_data_image_read(Eet_File *ef, char *name, int *w, int *h, int *alpha, int *compress, int *quality, int *lossy); - int eet_data_image_write(Eet_File *ef, char *name, void *data, int w, int h, int alpha, int compression, int quality, int lossy); + /* eet_data_image_write - Write image data to the named key in an eet file. + * @ef: A valid eet file handle opened for writing. + * @name: Name of the entry. eg: "/base/file_i_want". + * @data: A pointer to the image pixel data. + * @w: The width of the image in pixels. + * @h: The height of the image in pixels. + * @alpha: The alpha channel flag. + * @compress: The compression amount. + * @quality: The quality encoding amount. + * @lossy: The lossiness flag. + * + * This function dates image pixel data and encodes it in an eet file + * stored under the supplied name key, and returns how many bytes were + * actually written to encode the image data. + * + * The data expected is the same format as returned by eet_data_image_read. + * If this is not the case wierd things may happen. Width and height must + * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning + * the alpha values are not useful and 1 meaning they are). Compress can + * be from 0 to 9 (0 meaning no compression, 9 meaning full compression). + * This is only used if the image is not lossily encoded. Quality is used on + * lossy compression and shoudl be a value from 0 to 100. The lossy flag + * can be 0 or 1. 0 means encode losslessly and 1 means to encode with + * image quality loss (but then have a much smaller encoding). + * + * On success this function rtuens the numebr fo bytes that were required + * to encode the image data, or on failure it returns 0. + */ + int eet_data_image_write(Eet_File *ef, char *name, void *data, int w, int h, int alpha, int compress, int quality, int lossy); /***************************************************************************/ + /* To Be Documented + * + */ Eet_Data_Descriptor *eet_data_descriptor_new(char *name, int size, void *(*func_list_next) (void *l), void *(*func_list_append) (void *l, void *d), void *(*func_list_data) (void *l), void (*func_hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt), void *(*func_hash_add) (void *h, const char *k, void *d)); void eet_data_descriptor_free(Eet_Data_Descriptor *edd); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/src/Attic/eet_data.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -3 -r1.1.2.3 -r1.1.2.4 --- eet_data.c 14 Sep 2002 09:27:13 -0000 1.1.2.3 +++ eet_data.c 15 Sep 2002 23:44:52 -0000 1.1.2.4 @@ -1236,17 +1236,17 @@ int eet_data_image_write(Eet_File *ef, char *name, void *data, int w, int h, int alpha, - int compression, int quality, int lossy) + int compress, int quality, int lossy) { void *d = NULL; int size = 0; if (lossy == 0) { - if (compression <= 0) + if (compress <= 0) d = eet_data_image_lossless_convert(&size, data, w, h, alpha); else - d = eet_data_image_lossless_compressed_convert(&size, data, w, h, alpha, compression); + d = eet_data_image_lossless_compressed_convert(&size, data, w, h, alpha, compress); } else { |
From: <enl...@li...> - 2002-11-29 05:51:51
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Log Message: Directory /cvsroot/enlightenment/e17/libs/eet/src/lib added to the repository --> Using per-directory sticky tag `SPLIT' |
From: <enl...@li...> - 2002-11-29 05:51:51
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src/bin Log Message: Directory /cvsroot/enlightenment/e17/libs/eet/src/bin added to the repository --> Using per-directory sticky tag `SPLIT' |
From: <enl...@li...> - 2002-11-29 06:12:57
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Added Files: Tag: SPLIT Eet.h Makefile.am eet_data.c eet_lib.c Log Message: aaah bugger it.. here comes auto* |
From: <enl...@li...> - 2002-11-29 06:12:57
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src/bin Added Files: Tag: SPLIT Makefile.am eet_main.c Log Message: aaah bugger it.. here comes auto* |
From: <enl...@li...> - 2002-11-29 06:12:57
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet Added Files: Tag: SPLIT ChangeLog INSTALL Makefile.am NEWS acconfig.h autogen.sh configure.ac configure.in eet-config.in Removed Files: Tag: SPLIT AUTHORS COPYING README configure eet.spec Log Message: aaah bugger it.. here comes auto* |
From: <enl...@li...> - 2002-11-29 06:12:57
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src Added Files: Tag: SPLIT Makefile.am Removed Files: Tag: SPLIT Eet.h eet-config.in eet_data.c eet_lib.c eet_main.c Log Message: aaah bugger it.. here comes auto* |
From: <enl...@li...> - 2002-11-29 06:21:22
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet Added Files: Tag: SPLIT eet.spec Log Message: spec file in |
From: <enl...@li...> - 2002-12-02 23:39:28
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Added Files: .cvsignore Eet.h Makefile.am eet_data.c eet_lib.c Log Message: move eet to HEAD |
From: <enl...@li...> - 2002-12-02 23:39:57
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/debian Added Files: .cvsignore changelog control copyright eet-config.1 eet.1 libeet0-dev.files libeet0.files rules Log Message: move eet to HEAD |
From: <enl...@li...> - 2002-12-02 23:39:57
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src/bin Added Files: .cvsignore Makefile.am eet_main.c Log Message: move eet to HEAD |
From: <enl...@li...> - 2002-12-02 23:39:57
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet Added Files: .cvsignore ChangeLog INSTALL Makefile.am NEWS acconfig.h autogen.sh configure.ac configure.in eet-config.in eet.spec Log Message: move eet to HEAD |
From: <enl...@li...> - 2002-12-02 23:39:57
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src Added Files: .cvsignore Makefile.am Log Message: move eet to HEAD |
From: <enl...@li...> - 2002-12-02 23:56:56
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/doc Log Message: Directory /cvsroot/enlightenment/e17/libs/eet/doc added to the repository |
From: <enl...@li...> - 2002-12-03 00:14:29
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/doc/img Log Message: Directory /cvsroot/enlightenment/e17/libs/eet/doc/img added to the repository |
From: <enl...@li...> - 2002-12-03 00:26:34
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/doc Added Files: eet.css foot.html head.html Log Message: and toss in all the doc stuff... still need to document the data munging calls though... |
From: <enl...@li...> - 2002-12-03 00:26:35
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/doc/img Added Files: eet.png eet_big.png eet_small.png Log Message: and toss in all the doc stuff... still need to document the data munging calls though... |
From: <enl...@li...> - 2002-12-03 00:26:35
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: Eet.h Log Message: and toss in all the doc stuff... still need to document the data munging calls though... =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/Eet.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- Eet.h 2 Dec 2002 23:39:26 -0000 1.2 +++ Eet.h 3 Dec 2002 00:26:34 -0000 1.3 @@ -60,9 +60,11 @@ /***************************************************************************/ - /* eet_open - Open an eet file on disk, and returns a handle to it. - * @file: The file path to the eet file. eg: "/tmp/file.eet". - * @mode: The mode for opening. Either EET_FILE_MODE_READ or EET_FILE_MODE_WRITE, but not both. + /** + * Open an eet file on disk, and returns a handle to it. + * @param file The file path to the eet file. eg: "/tmp/file.eet". + * @param mode The mode for opening. Either EET_FILE_MODE_READ or EET_FILE_MODE_WRITE, but not both. + * @return An opened eet file handle. * * This function will open an exiting eet file for reading, and build * the directory table in memory and return a handle to the file, if it @@ -75,8 +77,9 @@ * writing or a memory error occurs, NULL is returned. */ Eet_File *eet_open (char *file, Eet_File_Mode mode); - /* eet_close - Close an eet file handle and flush and writes pending. - * @ef: A valid eet file handle. + /** + * Close an eet file handle and flush and writes pending. + * @param ef A valid eet file handle. * * This function will flush any pending writes to disk if the eet file * was opened for write, and free all data associated with the file handle @@ -85,10 +88,12 @@ * If the eet file handle is not valid nothing will be done. */ void eet_close (Eet_File *ef); - /* eet_read - Read a specified entry from an eet file and return data - * @ef: A valid eet file handle opened for reading. - * @name: Name of the entry. eg: "/base/file_i_want". - * @size_ret: Number of bytes read from entry and returned. + /** + * Read a specified entry from an eet file and return data + * @param ef A valid eet file handle opened for reading. + * @param name Name of the entry. eg: "/base/file_i_want". + * @param size_ret Number of bytes read from entry and returned. + * @return The data stored in that entry in the eet file. * * This function finds an entry in the eet file that is stored under the * name specified, and returns that data, decompressed, if successfule. @@ -101,12 +106,14 @@ * filled with 0. */ void *eet_read (Eet_File *ef, char *name, int *size_ret); - /* eet_write - Write a specified entry to an eet file handle - * @ef: A valid eet file handle opened for writing. - * @name: Name of the entry. eg: "/base/file_i_want". - * @data: Pointer to the data to be stored. - * @size: Length in bytes in the data to be stored. - * @compress: Compression flags (1 == compress, 0 = don't compress). + /** + * Write a specified entry to an eet file handle + * @param ef A valid eet file handle opened for writing. + * @param name Name of the entry. eg: "/base/file_i_want". + * @param data Pointer to the data to be stored. + * @param size Length in bytes in the data to be stored. + * @param compress Compression flags (1 == compress, 0 = don't compress). + * @retrun Success or failure of the write. * * This function will write the specified chunk of data to the eet file * and return 1 on success. 0 will be returned on failure. @@ -123,10 +130,12 @@ * closed though). */ int eet_write (Eet_File *ef, char *name, void *data, int size, int compress); - /* eet_list - List all entries in eet file matching shell glob. - * @ef: A valid eet file handle. - * @glob: A shell glob to match against. - * @count_ret: number of entries foudn to match. + /** + * List all entries in eet file matching shell glob. + * @param ef A valid eet file handle. + * @param glob A shell glob to match against. + * @param count_ret Number of entries foudn to match. + * @return Pointer to an array of strings. * * This function will list all entries in the eet file matching the * supplied shell glob and return an allocated list of their names, if @@ -151,16 +160,18 @@ char **eet_list (Eet_File *ef, char *glob, int *count_ret); /***************************************************************************/ - - /* eet_data_image_read - Read image data from the named key in the eet file. - * @ef: A valid eet file handle opened for reading. - * @name: Name of the entry. eg: "/base/file_i_want". - * @w: A pointer to the int to hold the width in pixels. - * @h: A pointer to the int to hold the height in pixels. - * @alpha: A pointer to the int to hold the alpha flag. - * @compress: A pointer to the int to hold the compression amount. - * @quality: A pointer to the int to hold the quality amount. - * @lossy: A pointer to the int to hold the lossiness flag. + + /** + * Read image data from the named key in the eet file. + * @param ef A valid eet file handle opened for reading. + * @param name Name of the entry. eg: "/base/file_i_want". + * @param w A pointer to the int to hold the width in pixels. + * @param h A pointer to the int to hold the height in pixels. + * @param alpha A pointer to the int to hold the alpha flag. + * @param compress A pointer to the int to hold the compression amount. + * @param quality A pointer to the int to hold the quality amount. + * @param lossy A pointer to the int to hold the lossiness flag. + * @return The image pixel data decoded * * This function reads an image from an eet file stored under the named * key in the eet file and return a pointer to the decompressed pixel data. @@ -184,18 +195,20 @@ * values may not contain any sensible data. */ void *eet_data_image_read(Eet_File *ef, char *name, int *w, int *h, int *alpha, int *compress, int *quality, int *lossy); - /* eet_data_image_write - Write image data to the named key in an eet file. - * @ef: A valid eet file handle opened for writing. - * @name: Name of the entry. eg: "/base/file_i_want". - * @data: A pointer to the image pixel data. - * @w: The width of the image in pixels. - * @h: The height of the image in pixels. - * @alpha: The alpha channel flag. - * @compress: The compression amount. - * @quality: The quality encoding amount. - * @lossy: The lossiness flag. + /** + * Write image data to the named key in an eet file. + * @param ef A valid eet file handle opened for writing. + * @param name Name of the entry. eg: "/base/file_i_want". + * @param data A pointer to the image pixel data. + * @param w The width of the image in pixels. + * @param h The height of the image in pixels. + * @param alpha The alpha channel flag. + * @param compress The compression amount. + * @param quality The quality encoding amount. + * @param lossy The lossiness flag. + * @return Success if the data was encoded and written or not. * - * This function dates image pixel data and encodes it in an eet file + * This function takes image pixel data and encodes it in an eet file * stored under the supplied name key, and returns how many bytes were * actually written to encode the image data. * @@ -213,16 +226,74 @@ * to encode the image data, or on failure it returns 0. */ int eet_data_image_write(Eet_File *ef, char *name, void *data, int w, int h, int alpha, int compress, int quality, int lossy); - - /* To Be Documented + /** + * Decode Image data into pixel data. + * @param data The encoded pixel data. + * @param size The size, in bytes, of the encoded pixel data. + * @param w A pointer to the int to hold the width in pixels. + * @param h A pointer to the int to hold the height in pixels. + * @param alpha A pointer to the int to hold the alpha flag. + * @param compress A pointer to the int to hold the compression amount. + * @param quality A pointer to the int to hold the quality amount. + * @param lossy A pointer to the int to hold the lossiness flag. + * @return The image pixel data decoded + * + * This function takes encoded pixel data and decodes it into raw RGBA + * pixels on success. + * + * The other parameters of the image (width, height etc.) are placed into + * the values pointed to (they must be supplied). The pixel data is a linear + * array of pixels starting from the top-left of the image scanning row by + * row from left to right. Each piel is a 32bit value, with the high byte + * being the alpha channel, the next being red, then green, and the low byte + * being blue. The width and height are measured in pixels and will be + * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes + * that the alpha channel is not used. 1 denoties that it is significant. + * Compress is fiulled with the compression value/amount the image was + * stored with. The quality value si fileld with the quality encoding of + * the image file (0 - 100). The lossy flags is either 0 or 1 as to if + * the image was encoded lossily or not. * + * On success the function returns a pointer to the image data decoded. The + * calling application is responsible for calling free() on the image data + * when it is done with it. On failure NULL is returned and the parameter + * values may not contain any sensible data. */ - void *eet_data_image_encode(void *data, int *size_ret, int w, int h, int alpha, int compress, int quality, int lossy); void *eet_data_image_decode(void *data, int size, int *w, int *h, int *alpha, int *compress, int *quality, int *lossy); + /** + * Encode image data for sotrage or transmission. + * @param data A pointer to the image pixel data. + * @param size_ret A pointer to an int to hold the size of the returned data. + * @param w The width of the image in pixels. + * @param h The height of the image in pixels. + * @param alpha The alpha channel flag. + * @param compress The compression amount. + * @param quality The quality encoding amount. + * @param lossy The lossiness flag. + * @return The encoded image data. + * + * This function stakes image pixel data and encodes it with compression and + * possible loss of quality (as a trade off for size) for sotrage or + * transmision to another system. + * + * The data expected is the same format as returned by eet_data_image_read. + * If this is not the case wierd things may happen. Width and height must + * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning + * the alpha values are not useful and 1 meaning they are). Compress can + * be from 0 to 9 (0 meaning no compression, 9 meaning full compression). + * This is only used if the image is not lossily encoded. Quality is used on + * lossy compression and shoudl be a value from 0 to 100. The lossy flag + * can be 0 or 1. 0 means encode losslessly and 1 means to encode with + * image quality loss (but then have a much smaller encoding). + * + * On success this function returns a pointer to the encoded data that you + * can free with free() wehn no longer needed. + */ + void *eet_data_image_encode(void *data, int *size_ret, int w, int h, int alpha, int compress, int quality, int lossy); /***************************************************************************/ - /* To Be Documented - * + /* + * To Be Documented */ Eet_Data_Descriptor *eet_data_descriptor_new(char *name, int size, void *(*func_list_next) (void *l), void *(*func_list_append) (void *l, void *d), void *(*func_list_data) (void *l), void (*func_hash_foreach) (void *h, int (*func) (void *h, const char *k, void *dt, void *fdt), void *fdt), void *(*func_hash_add) (void *h, const char *k, void *d)); void eet_data_descriptor_free(Eet_Data_Descriptor *edd); |
From: <enl...@li...> - 2002-12-03 00:27:05
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet Modified Files: Makefile.am configure.in Added Files: Doxyfile eet.c.in gendoc Log Message: and toss in all the doc stuff... still need to document the data munging calls though... =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- Makefile.am 2 Dec 2002 23:39:25 -0000 1.2 +++ Makefile.am 3 Dec 2002 00:26:34 -0000 1.3 @@ -1,10 +1,18 @@ ## Process this file with automake to produce Makefile.in -SUBDIRS = src +SUBDIRS = src doc MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess \ config.h.in config.sub configure install-sh \ ltconfig ltmain.sh missing mkinstalldirs \ - stamp-h.in + stamp-h.in eet_docs.tar eet_docs.tar.gz eet.c -EXTRA_DIST = README AUTHORS COPYING eet.spec +dist-hook: + ./gendoc; \ + tar cvf eet_docs.tar doc; \ + rm -f eet_docs.tar.gz; \ + gzip -9 eet_docs.tar; \ + +bin_SCRIPTS = eet-config + +EXTRA_DIST = README AUTHORS COPYING eet.spec eet.c.in gendoc Doxyfile eet_docs.tar.gz =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/configure.in,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- configure.in 2 Dec 2002 23:39:25 -0000 1.2 +++ configure.in 3 Dec 2002 00:26:34 -0000 1.3 @@ -70,6 +70,12 @@ AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}") AC_OUTPUT([ -Makefile src/Makefile src/lib/Makefile src/bin/Makefile +Makefile +src/Makefile +src/lib/Makefile +src/bin/Makefile +eet-config +],[ +chmod +x eet-config +touch eet_docs.tar.gz ]) - |
From: <enl...@li...> - 2002-12-03 01:16:20
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet/src/lib Modified Files: Eet.h Log Message: spellage on docs =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/Eet.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- Eet.h 3 Dec 2002 00:26:34 -0000 1.3 +++ Eet.h 3 Dec 2002 01:16:19 -0000 1.4 @@ -1,22 +1,6 @@ #ifndef _EET_H #define _EET_H -/***************************************************************************/ - -/* - * EET - E file chunk reading/writing library - * - * What is it? - * It is a tiny library designed to write an arbitary set of chunks of data - * to a file and optionally compress each chunk (very much like a zip file) - * and allow fast random-access reading of the file later on. It does not - * do zip as zip itself has more complexity than we need, and it was much - * simpler to impliment this once here. - * - */ - -/***************************************************************************/ - #ifdef __cplusplus extern "C" { #endif @@ -57,7 +41,6 @@ typedef struct _Eet_File Eet_File; typedef struct _Eet_Data_Descriptor Eet_Data_Descriptor; - /***************************************************************************/ /** @@ -96,13 +79,13 @@ * @return The data stored in that entry in the eet file. * * This function finds an entry in the eet file that is stored under the - * name specified, and returns that data, decompressed, if successfule. - * NULL is retuurned if the lookup fails or if memory errors are + * name specified, and returns that data, decompressed, if successful. + * NULL is returned if the lookup fails or if memory errors are * encountered. It is the job of the calling program to call free() on * the returned data. The number of bytes in the returned data chunk are * placed in size_ret. * - * If the eet file handle is not valid NULl is returned and size_ret is + * If the eet file handle is not valid NULL is returned and size_ret is * filled with 0. */ void *eet_read (Eet_File *ef, char *name, int *size_ret); @@ -113,7 +96,7 @@ * @param data Pointer to the data to be stored. * @param size Length in bytes in the data to be stored. * @param compress Compression flags (1 == compress, 0 = don't compress). - * @retrun Success or failure of the write. + * @return Success or failure of the write. * * This function will write the specified chunk of data to the eet file * and return 1 on success. 0 will be returned on failure. @@ -134,7 +117,7 @@ * List all entries in eet file matching shell glob. * @param ef A valid eet file handle. * @param glob A shell glob to match against. - * @param count_ret Number of entries foudn to match. + * @param count_ret Number of entries found to match. * @return Pointer to an array of strings. * * This function will list all entries in the eet file matching the @@ -179,13 +162,13 @@ * The other parameters of the image (width, height etc.) are placed into * the values pointed to (they must be supplied). The pixel data is a linear * array of pixels starting from the top-left of the image scanning row by - * row from left to right. Each piel is a 32bit value, with the high byte + * row from left to right. Each pile is a 32bit value, with the high byte * being the alpha channel, the next being red, then green, and the low byte * being blue. The width and height are measured in pixels and will be * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes - * that the alpha channel is not used. 1 denoties that it is significant. - * Compress is fiulled with the compression value/amount the image was - * stored with. The quality value si fileld with the quality encoding of + * that the alpha channel is not used. 1 denotes that it is significant. + * Compress is filled with the compression value/amount the image was + * stored with. The quality value is filled with the quality encoding of * the image file (0 - 100). The lossy flags is either 0 or 1 as to if * the image was encoded lossily or not. * @@ -213,16 +196,16 @@ * actually written to encode the image data. * * The data expected is the same format as returned by eet_data_image_read. - * If this is not the case wierd things may happen. Width and height must + * If this is not the case weird things may happen. Width and height must * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning * the alpha values are not useful and 1 meaning they are). Compress can * be from 0 to 9 (0 meaning no compression, 9 meaning full compression). * This is only used if the image is not lossily encoded. Quality is used on - * lossy compression and shoudl be a value from 0 to 100. The lossy flag + * lossy compression and should be a value from 0 to 100. The lossy flag * can be 0 or 1. 0 means encode losslessly and 1 means to encode with * image quality loss (but then have a much smaller encoding). * - * On success this function rtuens the numebr fo bytes that were required + * On success this function returns the number of bytes that were required * to encode the image data, or on failure it returns 0. */ int eet_data_image_write(Eet_File *ef, char *name, void *data, int w, int h, int alpha, int compress, int quality, int lossy); @@ -244,13 +227,13 @@ * The other parameters of the image (width, height etc.) are placed into * the values pointed to (they must be supplied). The pixel data is a linear * array of pixels starting from the top-left of the image scanning row by - * row from left to right. Each piel is a 32bit value, with the high byte + * row from left to right. Each pixel is a 32bit value, with the high byte * being the alpha channel, the next being red, then green, and the low byte * being blue. The width and height are measured in pixels and will be * greater than 0 when returned. The alpha flag is either 0 or 1. 0 denotes - * that the alpha channel is not used. 1 denoties that it is significant. - * Compress is fiulled with the compression value/amount the image was - * stored with. The quality value si fileld with the quality encoding of + * that the alpha channel is not used. 1 denotes that it is significant. + * Compress is filled with the compression value/amount the image was + * stored with. The quality value is filled with the quality encoding of * the image file (0 - 100). The lossy flags is either 0 or 1 as to if * the image was encoded lossily or not. * @@ -261,7 +244,7 @@ */ void *eet_data_image_decode(void *data, int size, int *w, int *h, int *alpha, int *compress, int *quality, int *lossy); /** - * Encode image data for sotrage or transmission. + * Encode image data for storage or transmission. * @param data A pointer to the image pixel data. * @param size_ret A pointer to an int to hold the size of the returned data. * @param w The width of the image in pixels. @@ -273,21 +256,21 @@ * @return The encoded image data. * * This function stakes image pixel data and encodes it with compression and - * possible loss of quality (as a trade off for size) for sotrage or - * transmision to another system. + * possible loss of quality (as a trade off for size) for storage or + * transmission to another system. * * The data expected is the same format as returned by eet_data_image_read. - * If this is not the case wierd things may happen. Width and height must + * If this is not the case weird things may happen. Width and height must * be between 1 and 8000 pixels. The alpha flags can be 0 or 1 (0 meaning * the alpha values are not useful and 1 meaning they are). Compress can * be from 0 to 9 (0 meaning no compression, 9 meaning full compression). * This is only used if the image is not lossily encoded. Quality is used on - * lossy compression and shoudl be a value from 0 to 100. The lossy flag + * lossy compression and should be a value from 0 to 100. The lossy flag * can be 0 or 1. 0 means encode losslessly and 1 means to encode with * image quality loss (but then have a much smaller encoding). * * On success this function returns a pointer to the encoded data that you - * can free with free() wehn no longer needed. + * can free with free() when no longer needed. */ void *eet_data_image_encode(void *data, int *size_ret, int w, int h, int alpha, int compress, int quality, int lossy); /***************************************************************************/ |
From: <enl...@li...> - 2002-12-03 01:16:51
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet Modified Files: eet.c.in Log Message: spellage on docs =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/eet.c.in,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- eet.c.in 3 Dec 2002 00:26:34 -0000 1.1 +++ eet.c.in 3 Dec 2002 01:16:19 -0000 1.2 @@ -15,7 +15,17 @@ @section intro What is Eet? -Eet is a small library for encodeing, decoding, sotring and retrieving data. +It is a tiny library designed to write an arbitary set of chunks of data +to a file and optionally compress each chunk (very much like a zip file) +and allow fast random-access reading of the file later on. It does not +do zip as a zip itself has more complexity than is needed, and it was much +simpler to impliment this once here. + +It also can encode and decode data structures in memory, as well as image +data for saving to eet files or sending across the network to other +machines, or just writing to arbitary files on the system. All data is +encoded ina platform independant way and can be written and read by any +architecture. @todo Complete documentation of API |
From: <enl...@li...> - 2002-12-03 01:18:06
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet Modified Files: Makefile.am Log Message: oops. added doc to subdirs. not yet! =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/Makefile.am,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- Makefile.am 3 Dec 2002 00:26:34 -0000 1.3 +++ Makefile.am 3 Dec 2002 01:18:05 -0000 1.4 @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -SUBDIRS = src doc +SUBDIRS = src MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess \ config.h.in config.sub configure install-sh \ |
From: <enl...@li...> - 2002-12-04 03:59:03
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet Dir : e17/libs/eet Modified Files: Makefile.am Added Files: AUTHORS README Log Message: add those files.. and an extra \ too many =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/eet/Makefile.am,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- Makefile.am 3 Dec 2002 01:18:05 -0000 1.4 +++ Makefile.am 4 Dec 2002 03:59:02 -0000 1.5 @@ -11,7 +11,7 @@ ./gendoc; \ tar cvf eet_docs.tar doc; \ rm -f eet_docs.tar.gz; \ - gzip -9 eet_docs.tar; \ + gzip -9 eet_docs.tar; bin_SCRIPTS = eet-config |