Example of the various ways to interface with an Eet File
00001 /*
00002  * build: gcc -o eet_file eet-file.c `pkg-config --cflags --libs eet`
00003  */
00004 #include <Eet.h>
00005 #include <stdio.h>
00006 #include <string.h>
00007 
00008 static int
00009 create_eet_file(void)
00010 {
00011    Eet_File *ef;
00012    char buf[1024], *ptr;
00013    int size, len, i;
00014    const char *some_strings[] = {
00015       "And some more strings",
00016       "spread across several",
00017       "elements of an array!"
00018    };
00019    const char some_data[] =
00020      "\x1e\xe7\x0f\x42\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x35"
00021      "\x00\x00\x00\xa0\x00\x00\x00\xa0\x00\x00\x00\x24\x00\x00\x00\x11"
00022      "\x00\x00\x00\x00\x2f\x6d\x69\x73\x74\x65\x72\x69\x6f\x75\x73\x2f"
00023      "\x64\x61\x74\x61\x00\x41\x6e\x20\x45\x45\x54\x20\x69\x6e\x73\x69"
00024      "\x64\x65\x20\x6f\x66\x20\x61\x6e\x20\x45\x45\x54\x21\x0a\x54\x68"
00025      "\x69\x73\x20\x77\x61\x73\x6e\x27\x74\x20\x72\x65\x61\x6c\x6c\x79"
00026      "\x20\x75\x73\x65\x66\x75\x6c\x20\x62\x75\x74\x20\x69\x74\x20\x68"
00027      "\x65\x6c\x70\x65\x64\x20\x74\x6f\x20\x73\x68\x6f\x77\x20\x68\x6f"
00028      "\x77\x0a\x74\x6f\x20\x75\x73\x65\x20\x65\x65\x74\x5f\x6d\x65\x6d"
00029      "\x6f\x70\x65\x6e\x5f\x72\x65\x61\x64\x28\x29\x20\x74\x6f\x20\x6f"
00030      "\x70\x65\x6e\x20\x61\x6e\x20\x65\x65\x74\x20\x66\x69\x6c\x65\x20"
00031      "\x66\x72\x6f\x6d\x0a\x64\x61\x74\x61\x20\x61\x6c\x72\x65\x61\x64"
00032      "\x79\x20\x6c\x6f\x61\x64\x65\x64\x20\x69\x6e\x20\x6d\x65\x6d\x6f"
00033      "\x72\x79\x2e\x0a\x00";
00034 
00035    ef = eet_open("/tmp/my_file.eet", EET_FILE_MODE_WRITE);
00036    if (!ef) return 0;
00037 
00038    strcpy(buf, "Here is a string of data to save!");
00039    size = eet_write(ef, "/key/to_store/at", buf, sizeof(buf), 1);
00040    if (!size)
00041      {
00042         fprintf(stderr, "Error writing data!\n");
00043         eet_close(ef);
00044         return 0;
00045      }
00046    len = strlen(buf);
00047    printf("strlen() = %d, eet_write() = %d\n", len, size);
00048 
00049    ptr = buf;
00050    for (i = 0; i < 3; i++)
00051      {
00052         len = strlen(some_strings[i]) + 1;
00053         memcpy(ptr, some_strings[i], len);
00054         ptr += len;
00055      }
00056    eet_write(ef, "/several/strings", buf, sizeof(buf), 1);
00057    eet_sync(ef);
00058 
00059    eet_write(ef, "/some/mysterious/data", some_data, sizeof(some_data) - 1, 1);
00060 
00061    eet_delete(ef, "/several/strings");
00062 
00063    return eet_close(ef) == EET_ERROR_NONE;
00064 }
00065 
00066 int
00067 main(void)
00068 {
00069    Eet_File *ef;
00070    char *ret, **list;
00071    int size, num, i;
00072 
00073    eet_init();
00074 
00075    if (!create_eet_file())
00076      return -1;
00077 
00078    ef = eet_open("/tmp/my_file.eet", EET_FILE_MODE_READ);
00079    if (!ef) return -1;
00080 
00081    list = eet_list(ef, "*", &num);
00082    if (list)
00083      {
00084         for (i = 0; i < num; i++)
00085           printf("Key stored: %s\n", list[i]);
00086         free(list);
00087      }
00088 
00089    ret = eet_read(ef, "/key/to_store/at", &size);
00090    if (ret)
00091      {
00092         printf("Data read (%i bytes):\n%s\n", size, ret);
00093         free(ret);
00094      }
00095 
00096    ret = eet_read(ef, "/several/strings", &size);
00097    if (ret)
00098      {
00099         printf("More data read (%i bytes):\n%s\n", size, ret);
00100         free(ret);
00101      }
00102 
00103    ret = eet_read(ef, "/some/mysterious/data", &size);
00104    if (ret)
00105      {
00106         Eet_File *ef2;
00107 
00108         ef2 = eet_memopen_read(ret, size);
00109 
00110         num = eet_num_entries(ef2);
00111         printf("Mysterious data has %d entries\n", num);
00112 
00113         printf("Mysterious data:\n%s\n",
00114                (char *)eet_read_direct(ef2, "/mysterious/data", NULL));
00115 
00116         eet_close(ef2);
00117 
00118         free(ret);
00119      }
00120 
00121    eet_close(ef);
00122 
00123    eet_shutdown();
00124 
00125    return 0;
00126 }
00127