Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: E.h Makefile.am aclass.c actions.c backgrounds.c buttons.c config.c file.c fx.c groups.c iclass.c ipc.c main.c menus-misc.c menus.c session.c snaps.c tclass.c theme.c util.h windowmatch.c Added Files: file.h parse.c parse.h user.c user.h Log Message: Split up, shuffle around file.c (no real changes). =================================================================== RCS file: /cvs/e/e16/e/src/E.h,v retrieving revision 1.559 retrieving revision 1.560 diff -u -3 -r1.559 -r1.560 --- E.h 21 Jul 2006 03:17:17 -0000 1.559 +++ E.h 24 Jul 2006 21:10:58 -0000 1.560 @@ -54,7 +54,7 @@ #define USE_COMPOSITE 1 #endif -#include <xwin.h> +#include "xwin.h" #define ENABLE_COLOR_MODIFIERS 0 /* Not functional */ @@ -669,36 +669,6 @@ void ExtInitWinSet(Window win); Window ExtInitWinGet(void); void ExtInitWinKill(void); - -/* file.c */ -void Etmp(char *s); -void E_md(const char *s); -int exists(const char *s); -int isfile(const char *s); -int isdir(const char *s); -int isabspath(const char *s); -char **E_ls(const char *dir, int *num); -void E_rm(const char *s); -void E_mv(const char *s, const char *ss); -time_t moddate(const char *s); -int fileinode(const char *s); -int filedev_map(int dev); -int filedev(const char *s); -char *username(int uid); -char *homedir(int uid); -char *usershell(int uid); -const char *atword(const char *s, int num); -void word(const char *s, int num, char *wd); -int canread(const char *s); -int canwrite(const char *s); -int canexec(const char *s); -char *fileof(const char *s); -char *fullfileof(const char *s); -char *pathtoexec(const char *file); -char *pathtofile(const char *file); -const char *FileExtension(const char *file); -char *field(char *s, int fieldno); -void fword(char *s, int num, char *wd); /* focus.c */ #define FOCUS_NOP 0 =================================================================== RCS file: /cvs/e/e16/e/src/Makefile.am,v retrieving revision 1.74 retrieving revision 1.75 diff -u -3 -r1.74 -r1.75 --- Makefile.am 21 Jul 2006 03:17:17 -0000 1.74 +++ Makefile.am 24 Jul 2006 21:10:58 -0000 1.75 @@ -61,6 +61,7 @@ ewmh.c \ extinitwin.c \ file.c \ + file.h \ finders.c \ focus.c \ fonts.c \ @@ -93,6 +94,8 @@ moveresize.c \ mwm.c \ pager.c \ + parse.c \ + parse.h \ progress.c \ regex.c \ screen.c \ @@ -117,6 +120,8 @@ timers.h \ tooltips.c \ tooltips.h \ + user.c \ + user.h \ util.h \ ttfont.c \ warp.c \ =================================================================== RCS file: /cvs/e/e16/e/src/aclass.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -3 -r1.34 -r1.35 --- aclass.c 29 Apr 2006 19:39:20 -0000 1.34 +++ aclass.c 24 Jul 2006 21:10:58 -0000 1.35 @@ -27,6 +27,8 @@ #include "e16-ecore_list.h" #include "emodule.h" #include "ewins.h" +#include "file.h" +#include "parse.h" #include <ctype.h> typedef struct _actiontype =================================================================== RCS file: /cvs/e/e16/e/src/actions.c,v retrieving revision 1.201 retrieving revision 1.202 diff -u -3 -r1.201 -r1.202 --- actions.c 21 Jul 2006 03:17:17 -0000 1.201 +++ actions.c 24 Jul 2006 21:10:58 -0000 1.202 @@ -23,6 +23,8 @@ */ #include "E.h" #include "dialog.h" +#include "file.h" +#include "user.h" static void runApp(const char *exe, const char *params) =================================================================== RCS file: /cvs/e/e16/e/src/backgrounds.c,v retrieving revision 1.78 retrieving revision 1.79 diff -u -3 -r1.78 -r1.79 --- backgrounds.c 21 Jul 2006 03:17:17 -0000 1.78 +++ backgrounds.c 24 Jul 2006 21:10:58 -0000 1.79 @@ -29,7 +29,9 @@ #include "e16-ecore_list.h" #include "eimage.h" #include "emodule.h" +#include "file.h" #include "iclass.h" +#include "parse.h" #include "tclass.h" #include "timers.h" #include "xwin.h" =================================================================== RCS file: /cvs/e/e16/e/src/buttons.c,v retrieving revision 1.93 retrieving revision 1.94 diff -u -3 -r1.93 -r1.94 --- buttons.c 22 Jun 2006 02:39:03 -0000 1.93 +++ buttons.c 24 Jul 2006 21:10:58 -0000 1.94 @@ -28,7 +28,9 @@ #include "e16-ecore_list.h" #include "eimage.h" #include "emodule.h" +#include "file.h" #include "iclass.h" +#include "parse.h" #include "tclass.h" #include "tooltips.h" #include "xwin.h" =================================================================== RCS file: /cvs/e/e16/e/src/config.c,v retrieving revision 1.147 retrieving revision 1.148 diff -u -3 -r1.147 -r1.148 --- config.c 19 Apr 2006 19:13:46 -0000 1.147 +++ config.c 24 Jul 2006 21:10:58 -0000 1.148 @@ -27,11 +27,13 @@ #include "borders.h" #include "buttons.h" #include "conf.h" +#include "file.h" #include "iclass.h" #include "menus.h" #include "session.h" #include "tclass.h" #include "tooltips.h" +#include "user.h" void SkipTillEnd(FILE * ConfigFile) =================================================================== RCS file: /cvs/e/e16/e/src/file.c,v retrieving revision 1.73 retrieving revision 1.74 diff -u -3 -r1.73 -r1.74 --- file.c 12 May 2006 13:40:52 -0000 1.73 +++ file.c 24 Jul 2006 21:10:58 -0000 1.74 @@ -21,24 +21,14 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "E.h" -#include <sys/stat.h> -#include <ctype.h> +#include "file.h" +#include "util.h" #include <dirent.h> -#include <pwd.h> -#include <time.h> - -const char * -FileExtension(const char *file) -{ - const char *p; - - p = strrchr(file, '.'); - if (p != NULL) - { - return p + 1; - } - return ""; -} +#include <stdio.h> +#include <string.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> void Etmp(char *s) @@ -48,60 +38,6 @@ Esnprintf(s, 1024, "%s/TMP_%d_%d", EDirUser(), getpid(), n_calls++); } -void -E_md(const char *s) -{ - if ((!s) || (!*s)) - return; - mkdir(s, S_IRWXU); -} - -int -exists(const char *s) -{ - struct stat st; - - if ((!s) || (!*s)) - return 0; - if (stat(s, &st) < 0) - return 0; - return 1; -} - -int -isfile(const char *s) -{ - struct stat st; - - if ((!s) || (!*s)) - return 0; - if (stat(s, &st) < 0) - return 0; - if (S_ISREG(st.st_mode)) - return 1; - return 0; -} - -int -isdir(const char *s) -{ - struct stat st; - - if ((!s) || (!*s)) - return 0; - if (stat(s, &st) < 0) - return 0; - if (S_ISDIR(st.st_mode)) - return 1; - return 0; -} - -int -isabspath(const char *path) -{ - return path[0] == '/'; -} - char ** E_ls(const char *dir, int *num) { @@ -172,11 +108,11 @@ } void -E_rm(const char *s) +E_md(const char *s) { if ((!s) || (!*s)) return; - unlink(s); + mkdir(s, S_IRWXU); } void @@ -187,6 +123,14 @@ rename(s, ss); } +void +E_rm(const char *s) +{ + if ((!s) || (!*s)) + return; + unlink(s); +} + #if 0 /* Unused */ void E_cp(const char *s, const char *ss) @@ -216,23 +160,21 @@ } #endif -time_t -moddate(const char *s) +#if 0 /* Unused */ +char * +cwd(void) { - struct stat st; + char *s; + char ss[FILEPATH_LEN_MAX]; - if ((!s) || (!*s)) - return 0; - if (stat(s, &st) < 0) - return 0; - if (st.st_mtime > st.st_ctime) - return st.st_mtime; - return st.st_ctime; + getcwd(ss, FILEPATH_LEN_MAX); + s = Estrdup(ss); + return s; } +#endif -#if 0 /* Unused */ int -filesize(const char *s) +exists(const char *s) { struct stat st; @@ -240,12 +182,11 @@ return 0; if (stat(s, &st) < 0) return 0; - return (int)st.st_size; + return 1; } -#endif int -fileinode(const char *s) +isdir(const char *s) { struct stat st; @@ -253,32 +194,13 @@ return 0; if (stat(s, &st) < 0) return 0; - return (int)st.st_ino; -} - -int -filedev_map(int dev) -{ -#ifdef __linux__ - /* device numbers in the anonymous range can't be relied - * upon, so map them all on a single one */ - switch (dev >> 8) - { - default: - return dev; - case 0: - case 144: - case 145: - case 146: - return 1; - } -#else - return dev; -#endif + if (S_ISDIR(st.st_mode)) + return 1; + return 0; } int -filedev(const char *s) +isfile(const char *s) { struct stat st; @@ -286,21 +208,10 @@ return 0; if (stat(s, &st) < 0) return 0; - return filedev_map((int)st.st_dev); -} - -#if 0 /* Unused */ -char * -cwd(void) -{ - char *s; - char ss[FILEPATH_LEN_MAX]; - - getcwd(ss, FILEPATH_LEN_MAX); - s = Estrdup(ss); - return s; + if (S_ISREG(st.st_mode)) + return 1; + return 0; } -#endif static int permissions(const char *s) @@ -314,336 +225,132 @@ return st.st_mode; } -#if 0 /* Not used */ int -owner(const char *s) +canread(const char *s) { - struct stat st; - if ((!s) || (!*s)) return 0; - if (stat(s, &st) < 0) + + if (!(permissions(s) & (S_IRUSR | S_IRGRP | S_IROTH))) return 0; - return st.st_uid; + + return 1 + access(s, R_OK); } int -group(const char *s) +canwrite(const char *s) { - struct stat st; - if ((!s) || (!*s)) return 0; - if (stat(s, &st) < 0) - return 0; - return st.st_gid; -} -#endif -char * -username(int uid) -{ - char *s; - static int usr_uid = -1; - static char *usr_s = NULL; - struct passwd *pwd; - - if (usr_uid < 0) - usr_uid = getuid(); - if ((uid == usr_uid) && (usr_s)) - return Estrdup(usr_s); - pwd = getpwuid(uid); - if (pwd) - { - s = Estrdup(pwd->pw_name); - if (uid == usr_uid) - usr_s = Estrdup(s); - return s; - } - return Estrdup("unknown"); -} - -char * -homedir(int uid) -{ - static int usr_uid = -1; - static char *usr_s = NULL; - char *s; - const char *ss; - struct passwd *pwd; - - if (usr_uid < 0) - usr_uid = getuid(); - if ((uid == usr_uid) && (usr_s)) - { - return Estrdup(usr_s); - } - pwd = getpwuid(uid); - if (pwd) - { - s = Estrdup(pwd->pw_dir); - if (uid == usr_uid) - usr_s = Estrdup(s); - return s; - } - ss = getenv("TMPDIR"); - if (!ss) - ss = "/tmp"; - return Estrdup(ss); -} - -char * -usershell(int uid) -{ - char *s; - static int usr_uid = -1; - static char *usr_s = NULL; - struct passwd *pwd; - - if (usr_uid < 0) - usr_uid = getuid(); - if ((uid == usr_uid) && (usr_s)) - return Estrdup(usr_s); - pwd = getpwuid(uid); - if (pwd) - { - if (!pwd->pw_shell) - return Estrdup("/bin/sh"); - if (strlen(pwd->pw_shell) < 1) - return Estrdup("/bin/sh"); - if (!(canexec(pwd->pw_shell))) - return Estrdup("/bin/sh"); - s = Estrdup(pwd->pw_shell); - if (uid == usr_uid) - usr_s = Estrdup(s); - return s; - } - return Estrdup("/bin/sh"); -} - -const char * -atword(const char *s, int num) -{ - int cnt, i; - - if (!s) - return NULL; - cnt = 0; - i = 0; + if (!(permissions(s) & (S_IWUSR | S_IWGRP | S_IWOTH))) + return 0; - while (s[i]) - { - if ((s[i] != ' ') && (s[i] != '\t')) - { - if (i == 0) - cnt++; - else if ((s[i - 1] == ' ') || (s[i - 1] == '\t')) - cnt++; - if (cnt == num) - return &s[i]; - } - i++; - } - return NULL; + return 1 + access(s, W_OK); } -void -word(const char *s, int num, char *wd) +int +canexec(const char *s) { - int cnt, i; - const char *start, *finish, *ss; + if ((!s) || (!*s)) + return 0; - if (!s) - return; - if (!wd) - return; - if (num <= 0) - { - *wd = 0; - return; - } - cnt = 0; - i = 0; - start = NULL; - finish = NULL; - ss = NULL; + if (!(permissions(s) & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 0; - while (s[i]) - { - if ((cnt == num) && ((s[i] == ' ') || (s[i] == '\t'))) - { - finish = &s[i]; - break; - } - if ((s[i] != ' ') && (s[i] != '\t')) - { - if (i == 0) - { - cnt++; - if (cnt == num) - start = &s[i]; - } - else if ((s[i - 1] == ' ') || (s[i - 1] == '\t')) - { - cnt++; - if (cnt == num) - start = &s[i]; - } - } - i++; - } - if (cnt == num) - { - if ((start) && (finish)) - { - for (ss = start; ss < finish; ss++) - *wd++ = *ss; - } - else if (start) - { - for (ss = start; *ss != 0; ss++) - *wd++ = *ss; - } - *wd = 0; - } + return 1 + access(s, X_OK); } -/* gets word number [num] in the string [s] and copies it into [wd] */ -/* wd is NULL terminated. If word [num] does not exist wd = "" */ -/* NB: this function now handles quotes so for a line: */ -/* Hello to "Welcome sir - may I Help" Shub Foo */ -/* Word 1 = Hello */ -/* Word 2 = to */ -/* Word 3 = Welcome sir - may I Help */ -/* Word 4 = Shub */ -/* word 5 = Foo */ -void -fword(char *s, int num, char *wd) +time_t +moddate(const char *s) { - char *cur, *start, *end; - int count, inword, inquote, len; + struct stat st; - if (!s) - return; - if (!wd) - return; - *wd = 0; - if (num <= 0) - return; - cur = s; - count = 0; - inword = 0; - inquote = 0; - start = NULL; - end = NULL; - while ((*cur) && (count < num)) - { - if (inword) - { - if (inquote) - { - if (*cur == '"') - { - inquote = 0; - inword = 0; - end = cur; - count++; - } - } - else - { - if (isspace(*cur)) - { - end = cur; - inword = 0; - count++; - } - } - } - else - { - if (!isspace(*cur)) - { - if (*cur == '"') - { - inquote = 1; - start = cur + 1; - } - else - start = cur; - inword = 1; - } - } - if (count == num) - break; - cur++; - } - if (!start) - return; - if (!end) - end = cur; - if (end <= start) - return; - len = (int)(end - start); - if (len > 4000) - len = 4000; - if (len > 0) - { - strncpy(wd, start, len); - wd[len] = 0; - } + if ((!s) || (!*s)) + return 0; + if (stat(s, &st) < 0) + return 0; + if (st.st_mtime > st.st_ctime) + return st.st_mtime; + return st.st_ctime; } -char * -field(char *s, int fieldno) +#if 0 /* Unused */ +int +filesize(const char *s) { - char buf[4096]; + struct stat st; - buf[0] = 0; - fword(s, fieldno + 1, buf); - if (buf[0]) - { - if ((!strcmp(buf, "NULL")) || (!strcmp(buf, "(null)"))) - return NULL; - return Estrdup(buf); - } - return NULL; + if ((!s) || (!*s)) + return 0; + if (stat(s, &st) < 0) + return 0; + return (int)st.st_size; } +#endif int -canread(const char *s) +fileinode(const char *s) { + struct stat st; + if ((!s) || (!*s)) return 0; - - if (!(permissions(s) & (S_IRUSR | S_IRGRP | S_IROTH))) + if (stat(s, &st) < 0) return 0; - - return 1 + access(s, R_OK); + return (int)st.st_ino; } int -canwrite(const char *s) +filedev(const char *s) { + struct stat st; + if ((!s) || (!*s)) return 0; - - if (!(permissions(s) & (S_IWUSR | S_IWGRP | S_IWOTH))) + if (stat(s, &st) < 0) return 0; + return filedev_map((int)st.st_dev); +} - return 1 + access(s, W_OK); +int +filedev_map(int dev) +{ +#ifdef __linux__ + /* device numbers in the anonymous range can't be relied + * upon, so map them all on a single one */ + switch (dev >> 8) + { + default: + return dev; + case 0: + case 144: + case 145: + case 146: + return 1; + } +#else + return dev; +#endif } int -canexec(const char *s) +isabspath(const char *path) { - if ((!s) || (!*s)) - return 0; + return path[0] == '/'; +} - if (!(permissions(s) & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 0; +const char * +FileExtension(const char *file) +{ + const char *p; - return 1 + access(s, X_OK); + p = strrchr(file, '.'); + if (p != NULL) + { + return p + 1; + } + return ""; } char * =================================================================== RCS file: /cvs/e/e16/e/src/fx.c,v retrieving revision 1.70 retrieving revision 1.71 diff -u -3 -r1.70 -r1.71 --- fx.c 21 Jul 2006 03:17:17 -0000 1.70 +++ fx.c 24 Jul 2006 21:10:58 -0000 1.71 @@ -25,6 +25,7 @@ #include "dialog.h" #include "eimage.h" #include "emodule.h" +#include "parse.h" #include "timers.h" #include "xwin.h" #include <math.h> =================================================================== RCS file: /cvs/e/e16/e/src/groups.c,v retrieving revision 1.82 retrieving revision 1.83 diff -u -3 -r1.82 -r1.83 --- groups.c 21 Jul 2006 03:17:17 -0000 1.82 +++ groups.c 24 Jul 2006 21:10:58 -0000 1.83 @@ -28,6 +28,7 @@ #include "emodule.h" #include "ewins.h" #include "groups.h" +#include "parse.h" #include "snaps.h" #include "timers.h" #include <math.h> =================================================================== RCS file: /cvs/e/e16/e/src/iclass.c,v retrieving revision 1.105 retrieving revision 1.106 diff -u -3 -r1.105 -r1.106 --- iclass.c 25 May 2006 00:18:09 -0000 1.105 +++ iclass.c 24 Jul 2006 21:10:58 -0000 1.106 @@ -29,6 +29,7 @@ #include "eimage.h" #include "emodule.h" #include "iclass.h" +#include "parse.h" #include "tclass.h" #include "xwin.h" =================================================================== RCS file: /cvs/e/e16/e/src/ipc.c,v retrieving revision 1.270 retrieving revision 1.271 diff -u -3 -r1.270 -r1.271 --- ipc.c 3 Jun 2006 14:11:33 -0000 1.270 +++ ipc.c 24 Jul 2006 21:10:58 -0000 1.271 @@ -30,6 +30,7 @@ #include "ewins.h" #include "ewin-ops.h" #include "hints.h" /* FIXME - Should not be here */ +#include "parse.h" #include "screen.h" #include "session.h" #include "snaps.h" =================================================================== RCS file: /cvs/e/e16/e/src/main.c,v retrieving revision 1.149 retrieving revision 1.150 diff -u -3 -r1.149 -r1.150 --- main.c 18 Jul 2006 00:18:48 -0000 1.149 +++ main.c 24 Jul 2006 21:10:58 -0000 1.150 @@ -25,10 +25,12 @@ #include "desktops.h" #include "dialog.h" #include "emodule.h" +#include "file.h" #include "hints.h" #include "session.h" #include "snaps.h" #include "timestamp.h" +#include "user.h" #include "xwin.h" #include <sys/utsname.h> #include <signal.h> =================================================================== RCS file: /cvs/e/e16/e/src/menus-misc.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -3 -r1.33 -r1.34 --- menus-misc.c 24 Jul 2006 20:21:13 -0000 1.33 +++ menus-misc.c 24 Jul 2006 21:10:58 -0000 1.34 @@ -26,9 +26,11 @@ #include "borders.h" #include "desktops.h" #include "ewins.h" +#include "file.h" #include "groups.h" #include "iclass.h" #include "menus.h" +#include "parse.h" #include <errno.h> #include <sys/stat.h> =================================================================== RCS file: /cvs/e/e16/e/src/menus.c,v retrieving revision 1.251 retrieving revision 1.252 diff -u -3 -r1.251 -r1.252 --- menus.c 21 Jul 2006 03:17:17 -0000 1.251 +++ menus.c 24 Jul 2006 21:10:58 -0000 1.252 @@ -29,9 +29,11 @@ #include "emodule.h" #include "eobj.h" #include "ewins.h" +#include "file.h" #include "hints.h" #include "iclass.h" #include "menus.h" +#include "parse.h" #include "screen.h" #include "tclass.h" #include "timers.h" =================================================================== RCS file: /cvs/e/e16/e/src/session.c,v retrieving revision 1.130 retrieving revision 1.131 diff -u -3 -r1.130 -r1.131 --- session.c 24 Jul 2006 20:53:49 -0000 1.130 +++ session.c 24 Jul 2006 21:10:59 -0000 1.131 @@ -28,6 +28,7 @@ #include "ewins.h" #include "session.h" #include "snaps.h" +#include "user.h" #include "xwin.h" #include <fcntl.h> #include <signal.h> =================================================================== RCS file: /cvs/e/e16/e/src/snaps.c,v retrieving revision 1.119 retrieving revision 1.120 diff -u -3 -r1.119 -r1.120 --- snaps.c 21 Jul 2006 03:17:18 -0000 1.119 +++ snaps.c 24 Jul 2006 21:10:59 -0000 1.120 @@ -27,7 +27,9 @@ #include "dialog.h" #include "e16-ecore_list.h" #include "ewins.h" +#include "file.h" #include "groups.h" +#include "parse.h" #include "snaps.h" #include "timers.h" #include "xwin.h" =================================================================== RCS file: /cvs/e/e16/e/src/tclass.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -3 -r1.46 -r1.47 --- tclass.c 8 May 2006 17:11:46 -0000 1.46 +++ tclass.c 24 Jul 2006 21:10:59 -0000 1.47 @@ -26,6 +26,7 @@ #include "e16-ecore_list.h" #include "emodule.h" #include "iclass.h" +#include "parse.h" #include "tclass.h" #include "xwin.h" =================================================================== RCS file: /cvs/e/e16/e/src/theme.c,v retrieving revision 1.57 retrieving revision 1.58 diff -u -3 -r1.57 -r1.58 --- theme.c 21 Apr 2006 22:52:59 -0000 1.57 +++ theme.c 24 Jul 2006 21:10:59 -0000 1.58 @@ -23,6 +23,7 @@ */ #include "E.h" #include "emodule.h" +#include "file.h" #include "session.h" #define ENABLE_THEME_SANITY_CHECKING 0 =================================================================== RCS file: /cvs/e/e16/e/src/util.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- util.h 13 May 2006 10:28:11 -0000 1.3 +++ util.h 24 Jul 2006 21:10:59 -0000 1.4 @@ -42,6 +42,7 @@ #endif /* memory.c */ +#include <stdlib.h> #define Ecalloc calloc #define Emalloc malloc #define Efree free =================================================================== RCS file: /cvs/e/e16/e/src/windowmatch.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -3 -r1.48 -r1.49 --- windowmatch.c 21 Apr 2006 22:52:59 -0000 1.48 +++ windowmatch.c 24 Jul 2006 21:10:59 -0000 1.49 @@ -29,6 +29,7 @@ #include "emodule.h" #include "ewins.h" #include "ewin-ops.h" +#include "parse.h" typedef struct _windowmatch WindowMatch; ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs