Enlightenment CVS committal

Author  : horms
Project : e17
Module  : apps/entice

Dir     : e17/apps/entice/src/bin


Modified Files:
        entice.c entice.h ipc.c ipc.h main.c 


Log Message:
Fix and clean-up initial ipc

===================================================================
RCS file: /cvs/e/e17/apps/entice/src/bin/entice.c,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -3 -r1.67 -r1.68
--- entice.c    5 Sep 2005 12:21:49 -0000       1.67
+++ entice.c    15 Apr 2006 08:05:18 -0000      1.68
@@ -14,6 +14,7 @@
 #include <Esmart/Esmart_Trans_X11.h>
 #include <Esmart/Esmart_Draggies.h>
 #include <Epsilon.h>
+#include <Ecore_Ipc.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -122,7 +123,6 @@
       memset(e, 0, sizeof(Entice));
       e->ee = ee;
 
-      epsilon_init();
       ecore_evas_geometry_get(ee, &x, &y, &w, &h);
       o = edje_object_add(ecore_evas_get(ee));
       if (!edje_object_file_set(o, entice_config_theme_get(), "entice"))
@@ -586,94 +586,74 @@
 {
    struct stat st;
 
-   if (file)
-   {
-      if (stat(file, &st) < 0)
-         return (0);
-      if (S_ISDIR(st.st_mode))
-         return (1);
-   }
-   return (0);
+   if (file && !stat(file, &st)&& S_ISDIR(st.st_mode))
+     return 1;
+   return 0;
 }
 
 void
-entice_file_add_dir_job_cb(void *data)
+entice_file_add_job_dir(Ecore_Ipc_Server *server, const char *dirname)
 {
    DIR *d = NULL;
    struct dirent *dent = NULL;
-   char buf[PATH_MAX], *file = NULL;
-
-   if (data)
-   {
-      file = (char *) data;
-
-      if ((d = opendir(data)))
-      {
-         while ((dent = readdir(d)))
-         {
-            if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, "..")
-                || (dent->d_name[0] == '.'))
-               continue;
-            snprintf(buf, PATH_MAX, "%s/%s", file, dent->d_name);
-            if (!entice_file_is_dir(buf))
-               entice_file_add_job_cb(buf, IPC_FILE_APPEND);
-         }
-         closedir(d);
-      }
-   }
+   char buf[PATH_MAX];
 
+   if (!dirname || ! (d = opendir(dirname)))
+     return;
+   while ((dent = readdir(d)))
+     {
+       if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, "..")
+             || (dent->d_name[0] == '.'))
+         continue;
+       snprintf(buf, PATH_MAX, "%s/%s", dirname, dent->d_name);
+       if (!entice_file_is_dir(buf))
+         entice_file_add_job(server, buf, IPC_FILE_APPEND);
+     }
+   closedir(d);
 }
 
 /**
- * entice_file_add_job_cb - generate the cached thumb and send an ipc
+ * entice_file_add_job - generate the cached thumb and send an ipc
  * message telling entice to load it
  * @data - the full or relative path to the file we want to cache
  * @add_type - whether to display or show the image
  */
 void
-entice_file_add_job_cb(void *data, int add_type)
+entice_file_add_job(Ecore_Ipc_Server *server, const char *filename, 
+      int add_type)
 {
    Epsilon *e = NULL;
-   char buf[PATH_MAX], *file = NULL;
+   char buf[PATH_MAX];
 
-   if (data)
-   {
-      file = (char *) data;
+   if (!filename)
+     return;
 
-      if (file)
-      {
-         if (file[0] == '/')
-            snprintf(buf, PATH_MAX, "%s", file);
-         else if ((strlen(file) > 7) && !strncmp(file, "http://";, 7))
-         {
-            fprintf(stderr, "Entice Compiled without http loading support\n");
-         }
-         else
-         {
-            char mycwd[PATH_MAX];
+   if (filename[0] == '/')
+     snprintf(buf, PATH_MAX-1, "%s", filename);
+   else if ((strlen(filename) > 7) && !strncmp(filename, "http://";, 7))
+     fprintf(stderr, "Entice Compiled without http loading support\n");
+   else
+     {
+       char mycwd[PATH_MAX];
+       memset(mycwd, 0, sizeof(mycwd));
+       if (getcwd(mycwd, PATH_MAX))
+         snprintf(buf, PATH_MAX, "%s/%s", mycwd, filename);
+     }
+
+   if (entice_file_is_dir(buf))
+     {
+       entice_file_add_job_dir(server, buf);
+       return;
+     }
+
+   entice_ipc_client_request_image_load(server, buf, add_type);
+
+   epsilon_init();
+   if (!(e = epsilon_new(buf)) || (epsilon_exists(e) == EPSILON_FAIL &&
+        epsilon_generate(e) == EPSILON_FAIL))
+     fprintf(stderr, "Unable to thumbnail %s\n", filename);
 
-            memset(mycwd, 0, sizeof(mycwd));
-            if (getcwd(mycwd, PATH_MAX))
-            {
-               snprintf(buf, PATH_MAX, "%s/%s", mycwd, file);
-            }
-         }
-         if (entice_file_is_dir(buf))
-            entice_file_add_dir_job_cb(buf);
-         else if ((e = epsilon_new(buf)))
-         {
-            if (epsilon_exists(e) == EPSILON_FAIL)
-            {
-               if (epsilon_generate(e) == EPSILON_FAIL)
-               {
-                  fprintf(stderr, "Unable to thumbnail %s\n", file);
-               }
-            }
-            epsilon_free(e);
-            entice_ipc_client_request_image_load(buf, add_type);
-         }
-      }
-   }
+   epsilon_free(e);
 }
 
 static void
===================================================================
RCS file: /cvs/e/e17/apps/entice/src/bin/entice.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- entice.h    17 Feb 2005 03:27:24 -0000      1.19
+++ entice.h    15 Apr 2006 08:05:18 -0000      1.20
@@ -13,6 +13,7 @@
 #include<Edje.h>
 #include<Ecore.h>
 #include<Ecore_Evas.h>
+#include<Ecore_Ipc.h>
 
 struct _Entice
 {
@@ -43,8 +44,9 @@
 int entice_file_del(const char *file);
 int entice_file_del_from_fs(const char *file);
 int entice_current_image_set(const char *file);
-void entice_file_add_job_cb(void *data, int add_type);
-void entice_file_add_dir_job_cb(void *data);
+void entice_file_add_job(Ecore_Ipc_Server *server, const char *filename,
+      int add_type);
+void entice_file_add_job_dir(Ecore_Ipc_Server *server, const char *dirname);
 
 void entice_thumbs_scroll_next_start(void);
 void entice_thumbs_scroll_prev_start(void);
===================================================================
RCS file: /cvs/e/e17/apps/entice/src/bin/ipc.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- ipc.c       5 Sep 2005 12:21:49 -0000       1.8
+++ ipc.c       15 Apr 2006 08:05:18 -0000      1.9
@@ -9,20 +9,18 @@
 
 #define IPC_TITLE "entice"
 
+static unsigned int entice_ipc_client_request_pending = 0;
+
 /**
  * ipc_server_add - when we connect to the ipc daemon
  * @data -
  * @type - 
  * @event - the Ecore_Ipc_Event_Server_Add that triggered us
  */
-int
+static int
 ipc_server_add(void *data, int type, void *event)
 {
-   Ecore_Ipc_Event_Server_Add *e;
-
-   e = (Ecore_Ipc_Event_Server_Add *) event;
-   // fprintf(stderr, "Server add\n");
-   return (1);
+   return 1;
 }
 
 /**
@@ -31,14 +29,10 @@
  * @type - 
  * @event - the Ecore_Ipc_Event_Server_Del that triggered us
  */
-int
+static int
 ipc_server_del(void *data, int type, void *event)
 {
-   Ecore_Ipc_Event_Server_Del *e;
-
-   e = (Ecore_Ipc_Event_Server_Del *) event;
-   /* fprintf(stderr, "Server delete\n"); */
-   return (1);
+   return 1;
 }
 
 /**
@@ -47,84 +41,77 @@
  * @type - 
  * @event - the Ecore_Ipc_Event_Server_Data that triggered us
  */
-int
+static int
 ipc_server_data(void *data, int type, void *event)
 {
-   Ecore_Ipc_Event_Server_Data *e;
-
-   e = (Ecore_Ipc_Event_Server_Data *) event;
-   /* 
-      printf("!! Server sent: [%i] [%i] (%i) \"%s\"\n", e->major, e->minor,
-      e->size, e->data); */
-   return (1);
+       Ecore_Ipc_Event_Server_Data *e = (Ecore_Ipc_Event_Server_Data *)event;
+       /* printf("ipc_server_data: %p [%i] [%i] [%i] (%s)\n", 
+              e->server, e->major, e->minor, e->size, (char *)e->data); */
+       if (!--entice_ipc_client_request_pending)
+               ecore_main_loop_quit();
+       return 1;
 }
 
 /**
  * ipc_client_add - 
  * @data -
  * @type - 
- * @event -
+ * @event - the Ecore_Ipc_Event_Server_Add that triggered us
  */
-int
+static int
 ipc_client_add(void *data, int type, void *event)
 {
-   Ecore_Ipc_Event_Client_Add *e;
-
-   e = (Ecore_Ipc_Event_Client_Add *) event;
-   // fprintf(stderr, "Client Connected!!!\n");
-   return (1);
+   return 1;
 }
 
 /**
  * ipc_client_del - 
  * @data -
  * @type - 
- * @event -
+ * @event - the Ecore_Ipc_Event_Server_Del that triggered us
  */
-int
+static int
 ipc_client_del(void *data, int type, void *event)
 {
-   Ecore_Ipc_Event_Client_Del *e;
-
-   e = (Ecore_Ipc_Event_Client_Del *) event;
-   // fprintf(stderr, "Client Disconnected!!!\n");
-   return (1);
+   return 1;
 }
 
 /**
  * ipc_client_data - when we get sent stuff by an entice client
  * @data -
  * @type - 
- * @event -
+ * @event - the Ecore_Ipc_Event_Server_Data that triggered us
  */
-int
+#define IPC_CLIENT_ACK_MSG "ACK: Pants On!"
+static int
 ipc_client_data(void *data, int type, void *event)
 {
-   Ecore_Ipc_Event_Client_Data *e;
+   Ecore_Ipc_Event_Client_Data *e= (Ecore_Ipc_Event_Client_Data *)event;
+   char buf[e->size];
 
-   if ((e = (Ecore_Ipc_Event_Client_Data *) event))
-   {
-      char buf[e->size];
-
-      snprintf(buf, e->size, "%s", (char *) e->data);
-      switch (e->major)
-      {
-        case IPC_FILE_APPEND:
-           entice_file_add(buf);
-           break;
-        case IPC_FILE_DISPLAY:
-           entice_current_image_set(buf);
-           break;
-        default:
-           fprintf(stderr, "Unknown major code sent by client(%d)\n",
-                   e->major);
-           break;
-      }
-      /* 
-         printf("!! Client sent: [%i] [%i] (%i) \"%s\"\n", e->major,
-         e->minor, e->size, buf); */
-   }
-   return (1);
+   if (!e)
+     return 1;
+
+   ecore_ipc_client_send(e->client, 3, 4, 0, 0, 0, 
+        IPC_CLIENT_ACK_MSG, strlen(IPC_CLIENT_ACK_MSG) + 1);
+
+   snprintf(buf, e->size, "%s", (char *) e->data);
+   switch (e->major)
+     {
+      case IPC_FILE_APPEND:
+        entice_file_add(buf);
+        break;
+      case IPC_FILE_DISPLAY:
+        entice_current_image_set(buf);
+        break;
+      default:
+        fprintf(stderr, "Unknown major code sent by client(%d)\n",
+              e->major);
+        break;
+     }
+   /* printf("!! Client sent: [%i] [%i] (%i) \"%s\"\n", e->major,
+      e->minor, e->size, buf); */
+   return 1;
 }
 
 /**
@@ -132,56 +119,57 @@
  * already is running
  * @argc - the number of arguments passed to entice
  * @argv - the string arguments passed to entice
- * Basically it tries to connect to an already running entice ipc server.
- * If it successfully connects, it sends the filenames to the current entice
- * daemon and should exit.  If it does not successfully connect it registers
- * itself as the server and the app should then start up.
- */
-int
-entice_ipc_init(int argc, const char **argv)
-{
-   int i;
+ * Attempts to connect to an existing entice ipc server.
+ * If it successful, it sends the filenames to the current entice daemon
+ * and exits. Else, it registers itself as the server and the app should
+ * then start up.
+ */
+int 
+entice_ipc_init(int argc, const char **argv) 
+{ 
+   int i; 
+   char buf[PATH_MAX];
    Ecore_Ipc_Server *server = NULL;
 
-   /* we definitely fail if we can't connect to ecore_ipc */
    if (ecore_ipc_init() < 1)
-      return (1);
+      return 1;
 
+   server = ecore_ipc_server_connect(ECORE_IPC_LOCAL_USER, IPC_TITLE, 0, NULL);
    /* If we can connect to a currently running entice process */
-   if ((server =
-        ecore_ipc_server_connect(ECORE_IPC_LOCAL_USER, IPC_TITLE, 0, NULL)))
-   {
-      ecore_ipc_server_del(server);
-      for (i = 1; i < argc; i++)
-      {
-         entice_file_add_job_cb((void *) argv[i], IPC_FILE_APPEND);
-      }
-      if (argc > 0)
-         entice_file_add_job_cb((void *) argv[1], IPC_FILE_DISPLAY);
-      return (1);
-   }
-   /* Otherwise we create it */
-   else
-   {
-      char buf[PATH_MAX];
-
-      snprintf(buf, PATH_MAX, "%s/.ecore/entice/0", getenv("HOME"));
-      unlink(buf);
-      /* 
-         printf("creating new server\n"); */
-      server = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, IPC_TITLE, 0, NULL);
-      if (server == NULL)
-         printf("creating new IPC server failed\n");
-      ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD, ipc_client_add,
-                              NULL);
-      ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL, ipc_client_del,
-                              NULL);
-      ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, ipc_client_data,
-                              NULL);
-      /* 
-         fprintf(stderr, "Listener Started\n"); */
-   }
-   return (0);
+   if (server)
+     {
+       if (! (server = entice_ipc_client_init()) )
+         return 1;
+       for (i = 1; i < argc; i++)
+         {
+            entice_file_add_job(server, argv[i], IPC_FILE_APPEND);
+            if (i == 1)
+              entice_file_add_job(server, argv[1], IPC_FILE_DISPLAY);
+            /* Flush every now an again */
+            if ((i & 0xf) == 0x1)
+               entice_ipc_client_wait(server);
+         }
+       entice_ipc_client_wait(server);
+       entice_ipc_client_shutdown(server);
+       return 1;
+     }
+
+   /* Otherwise we create an entice server */
+   snprintf(buf, PATH_MAX, "%s/.ecore/entice/0", getenv("HOME"));
+   unlink(buf);
+   server = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, IPC_TITLE, 0, NULL);
+   if (!server)
+     {
+       printf("creating new IPC server failed\n");
+       return 1;
+     }
+   ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD, ipc_client_add,
+        NULL);
+   ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL, ipc_client_del,
+        NULL);
+   ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, ipc_client_data,
+        NULL);
+   return 0;
 }
 
 /**
@@ -190,46 +178,86 @@
 void
 entice_ipc_shutdown(void)
 {
-   // printf("shutting down IPC\n");
    ecore_ipc_shutdown();
 }
 
 /**
+ * entice_ipc_client_init - initilaise client ipc
+ * Must be called before entice_ipc_client_send
+ * Returns handle to entice server
+ */
+Ecore_Ipc_Server *
+entice_ipc_client_init(void)
+{
+   Ecore_Ipc_Server *server;
+
+   if (!ecore_init())
+     {
+       fprintf(stderr, "unable to init ecore\n");
+       return NULL;
+     }
+       
+   if (!ecore_ipc_init())
+     {
+       fprintf(stderr, "unable to init ecore_con\n");
+       goto out_ecore;
+     }
+
+   server = ecore_ipc_server_connect(ECORE_IPC_LOCAL_USER, IPC_TITLE, 0, NULL);
+   if (!server)
+     {
+       fprintf(stderr, "unable to connect to server\n");
+       goto out_ecore_ipc;
+     }
+   ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_ADD, ipc_server_add, NULL);
+   ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DEL, ipc_server_del, NULL);
+   ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DATA, ipc_server_data, NULL);
+
+   return server;
+
+out_ecore_ipc:
+   ecore_ipc_shutdown();
+out_ecore:
+   ecore_shutdown();
+   return NULL;
+}
+
+/**
+ * entice_ipc_client_shutdown - shutdown client
+ * @server - handle to entice server
+ */
+void 
+entice_ipc_client_shutdown(Ecore_Ipc_Server *server)
+{
+   ecore_ipc_server_del(server);
+   ecore_ipc_shutdown();
+   ecore_shutdown();
+}
+
+/**
+ * entice_ipc_client_wait - wait for all pending messages to be procecced
+ * Must be called after issuing one or more entice_ipc_client_send
+ * @server - handle to entice server
+ */
+void 
+entice_ipc_client_wait(Ecore_Ipc_Server *server)
+{
+   if (entice_ipc_client_request_pending)
+     ecore_main_loop_begin();
+}
+
+/**
  * entice_ipc_client_request_image_load - send a message to a running
  * entice process telling it to load the file
+ * @server - handle to entice server
  * @file - the absolute path to file
+ * @major - major number of request
  */
 void
-entice_ipc_client_request_image_load(const char *file, int major)
+entice_ipc_client_request_image_load(Ecore_Ipc_Server *server, 
+                                      const char *file, int major)
 {
-   Ecore_Ipc_Server *server = NULL;
-
-   /* we definitely fail if we can't connect to ecore_ipc */
-   if (ecore_ipc_init() < 1)
-      return;
-
-   /* If we can connect to a currently running entice process */
-   if ((server =
-        ecore_ipc_server_connect(ECORE_IPC_LOCAL_USER, IPC_TITLE, 0, NULL)))
-   {
-      char buf[PATH_MAX];
-
-      ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_ADD, ipc_server_add,
-                              NULL);
-      ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DEL, ipc_server_del,
-                              NULL);
-      ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DATA, ipc_server_data,
-                              NULL);
-
-      snprintf(buf, PATH_MAX, "%s", file);
-      ecore_ipc_server_send(server, major, 6, 0, 0, 0, buf, strlen(buf) + 1);
-      memset(buf, 0, sizeof(buf));
-      ecore_ipc_server_del(server);
-   }
-#if DEBUG
-   else
-   {
-      fprintf(stderr, "ERROR: Unable to connect to entice IPC Server\n");
-   }
-#endif
+   entice_ipc_client_request_pending++;
+   ecore_ipc_server_send(server, major, 6, 0, 0, 0, (void *)file, 
+        strlen(file) + 1);
 }
===================================================================
RCS file: /cvs/e/e17/apps/entice/src/bin/ipc.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ipc.h       8 Jan 2004 05:03:54 -0000       1.2
+++ ipc.h       15 Apr 2006 08:05:18 -0000      1.3
@@ -4,14 +4,14 @@
 #define IPC_FILE_APPEND 1
 #define IPC_FILE_DISPLAY 2
 
-/**
- * entice_ipc_init - entialize entice's ipc handlers
- * @argc - the number or arguments
- * @argv - pointer to the argument strings
- * Lengthy descriptin in entice_ipc.c
- */
 int entice_ipc_init(int argc, const char **argv);
 void entice_ipc_shutdown(void);
-void entice_ipc_client_request_image_load(const char *file, int major);
+int entice_ipc_init(int argc, const char **argv);
+void entice_ipc_shutdown(void);
+Ecore_Ipc_Server *entice_ipc_client_init(void);
+void entice_ipc_client_shutdown(Ecore_Ipc_Server *server);
+void entice_ipc_client_wait(Ecore_Ipc_Server *server);
+void entice_ipc_client_request_image_load(Ecore_Ipc_Server *server, 
+                                      const char *file, int major);
 
 #endif
===================================================================
RCS file: /cvs/e/e17/apps/entice/src/bin/main.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -3 -r1.35 -r1.36
--- main.c      5 Sep 2005 12:21:49 -0000       1.35
+++ main.c      15 Apr 2006 08:05:18 -0000      1.36
@@ -148,48 +148,57 @@
    int fd[2];
    char line[PATH_MAX];
    struct stat status;
+   Ecore_Ipc_Server *server;
 
    if (pipe(fd) < 0)
-      exit(1);
+     {
+               perror("pipe");
+       exit(1);
+     }
 
    if ((pid = fork()) < 0)
-   {
-      fprintf(stderr, "Forking error\n");
-      exit(1);
-   }
-   else if (pid > 0)            /* parent */
-   {
-      close(fd[0]);
-      return (fd[1]);
-   }
-   else                         /* child */
-   {
-      close(fd[1]);
-      while ((n = read(fd[0], line, PATH_MAX)) > 0)
-      {
-         if (!strncmp(line, "ok", n))
-         {
-            for (i = 1; i < argc; i++)
-            {
-               snprintf(line, PATH_MAX, "%s", argv[i]);
-               if (!stat(line, &status))
-               {
-                  if (S_ISDIR(status.st_mode))
-                  {
-                     entice_file_add_dir_job_cb(line);
-                  }
-                  else
-                  {
-                     entice_file_add_job_cb(line, IPC_FILE_APPEND);
-                  }
-               }
-            }
-            break;
-         }
-      }
-      close(fd[0]);
-      exit(0);
-   }
+     {
+       perror("fork");
+       exit(1);
+     }
+
+   if (pid > 0)            /* parent */
+     {
+               close(fd[0]);
+       return fd[1];
+     }
+
+   /* child */
+   close(fd[1]);
+   while ((n = read(fd[0], line, PATH_MAX)) > 0)
+      if (!strncmp(line, "ok", n))
+         break;
+   if ( !(server=entice_ipc_client_init()) )
+     {
+       fprintf(stderr, "Could not intialise client IPC\n");
+       exit(1);
+     }
+   for (i = 1; i < argc; i++)
+     {
+       snprintf(line, PATH_MAX, "%s", argv[i]);
+       if (stat(line, &status))
+         continue;
+       if (S_ISDIR(status.st_mode))
+         entice_file_add_job_dir(server, line);
+       else
+         entice_file_add_job(server, line, IPC_FILE_APPEND);
+       /* Flush rather than waiting for all thumbnails before displaying 
+        * anything */
+       if ((i & 0xf) == 0x1)
+         entice_ipc_client_wait(server); 
+     }
+
+   entice_ipc_client_wait(server); 
+   entice_ipc_client_shutdown(server);
+   exit(0);
+
+   /* Not reached */
+   close(fd[0]);
    return (0);
 }
 
@@ -204,14 +213,14 @@
  * 7. for(;;)
  */
 int
-main(int argc, char *argv[])
+main(int argc, char **argv)
 {
    int pnum = -1;
    int x, y, w, h;
    Ecore_Evas *ee = NULL;
 
    if (argc > 1)
-      pnum = entice_pipe_foo(argc, (const char **) argv);
+      pnum = entice_pipe_foo(argc, argv);
 
    ecore_init();
    ecore_app_args_set(argc, (const char **) argv);




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to