Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/eesh


Modified Files:
      Tag: branch-exp
        E.h Makefile.am comms.c main.c 
Removed Files:
      Tag: branch-exp
        lists.c 


Log Message:
Simplify eesh, enable one-liners like "eesh wl a".
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/eesh/E.h,v
retrieving revision 1.19.2.1
retrieving revision 1.19.2.2
diff -u -3 -r1.19.2.1 -r1.19.2.2
--- E.h 2 Sep 2004 20:22:06 -0000       1.19.2.1
+++ E.h 20 Oct 2004 19:20:04 -0000      1.19.2.2
@@ -40,57 +40,21 @@
 #define USE_LIBC_STRDUP  1     /* Use libc strdup if present */
 #endif
 
-#define LIST_FINDBY_NAME        0
-#define LIST_FINDBY_ID          1
-#define LIST_FINDBY_BOTH        2
-#define LIST_FINDBY_NONE        3
-
-#define LIST_TYPE_COUNT         18
-#define LIST_TYPE_ANY            0
-#define LIST_TYPE_CLIENT         1
-
-typedef struct _list
-{
-   int                 type;
-   char               *name;
-   int                 id;
-   void               *item;
-
-   struct _list       *next;
-}
-List;
-
 typedef struct _client
 {
-   char               *name;
    Window              win;
    char               *msg;
-   char               *clientname;
-   char               *version;
-   char               *author;
-   char               *email;
-   char               *web;
-   char               *address;
-   char               *info;
-   Pixmap              pmap;
 }
 Client;
 
-void               *FindItem(const char *name, int id, int find_by, int type);
-void                AddItem(void *item, const char *name, int id, int type);
-void               *RemoveItem(char *name, int id, int find_by, int type);
-void              **ListItemType(int *num, int type);
-char              **ListItems(int *num, int type);
-void              **ListItemTypeID(int *num, int type, int id);
-
 Window              CommsSetup(void);
 Window              CommsFindCommsWindow(void);
 void                CommsSend(Client * c, const char *s);
-char               *CommsGet(Client ** c, XEvent * ev);
-Client             *MakeClient(Window win);
-void                ListFreeClient(void *ptr);
-void                DeleteClient(Client * c);
-int                 HandleComms(XEvent * ev);
+char               *CommsGet(Client * c, XEvent * ev);
+Client             *ClientCreate(Window win);
+void                ClientDestroy(Client * c);
+
+void                Alert(const char *fmt, ...);
 
 #define Ecalloc     calloc
 #define Emalloc     malloc
@@ -103,25 +67,4 @@
 char               *Estrdup(const char *s);
 #endif
 
-#define FILEPATH_LEN_MAX 4096
-/* This turns on E's internal stack tracking system for  coarse debugging */
-/* and being able to trace E for profiling/optimisation purposes (which */
-/* believe it or not I'm actually doing) */
-
-/* #define DEBUG 1 */
-
-#define EDBUG(l,x)  \
-;
-#define EDBUG_RETURN(x)  \
-{ \
-  return (x); \
-}
-#define EDBUG_RETURN_  \
-{ \
-  return; \
-}
-
-void                Alert(const char *fmt, ...);
-
 extern Display     *disp;
-extern List         lists;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/eesh/Makefile.am,v
retrieving revision 1.13
retrieving revision 1.13.2.1
diff -u -3 -r1.13 -r1.13.2.1
--- Makefile.am 20 Jul 2004 19:42:05 -0000      1.13
+++ Makefile.am 20 Oct 2004 19:20:04 -0000      1.13.2.1
@@ -1,7 +1,7 @@
 
 bin_PROGRAMS = eesh
 
-eesh_SOURCES = E.h comms.c lists.c main.c
+eesh_SOURCES = E.h comms.c main.c
 
 LDADD = $(X_LIBS) -lX11
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/eesh/comms.c,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -3 -r1.12 -r1.12.2.1
--- comms.c     1 Jul 2004 09:27:30 -0000       1.12
+++ comms.c     20 Oct 2004 19:20:04 -0000      1.12.2.1
@@ -30,15 +30,17 @@
 CommsSetup(void)
 {
    char               *str;
-
-   EDBUG(5, "CommsSetup");
+   XSetWindowAttributes attr;
 
    str = getenv("ENL_WM_ROOT");
    root_win = (str) ? strtoul(str, NULL, 0) : DefaultRootWindow(disp);
 
-   my_win = XCreateSimpleWindow(disp, root_win, -100, -100, 5, 5, 0, 0, 0);
+   attr.override_redirect = False;
+   my_win = XCreateWindow(disp, root_win, -100, -100, 5, 5, 0, 0, InputOnly,
+                         DefaultVisual(disp, DefaultScreen(disp)),
+                         CWOverrideRedirect, &attr);
 
-   EDBUG_RETURN(my_win);
+   return my_win;
 }
 
 Window
@@ -52,54 +54,52 @@
    int                 dint;
    unsigned int        duint;
 
-   EDBUG(6, "CommsFindCommsWindow");
-
    comms_win = None;
 
    a = XInternAtom(disp, "ENLIGHTENMENT_COMMS", True);
    if (a == None)
-      EDBUG_RETURN(None);
+      return None;
 
    s = NULL;
    XGetWindowProperty(disp, root_win, a, 0, 14, False, AnyPropertyType,
                      &ar, &format, &num, &after, &s);
    if (!s)
-      EDBUG_RETURN(None);
+      return None;
 
    sscanf((char *)s, "%*s %lx", &comms_win);
    XFree(s);
    if (comms_win == None)
-      EDBUG_RETURN(None);
+      return None;
 
    if (!XGetGeometry(disp, comms_win, &rt, &dint, &dint,
                     &duint, &duint, &duint, &duint))
-      EDBUG_RETURN(None);
+      return None;
 
    s = NULL;
    XGetWindowProperty(disp, comms_win, a, 0, 14, False,
                      AnyPropertyType, &ar, &format, &num, &after, &s);
    if (!s)
-      EDBUG_RETURN(None);
+      return None;
    XFree(s);
 
    XSelectInput(disp, comms_win, StructureNotifyMask | SubstructureNotifyMask);
 
-   EDBUG_RETURN(comms_win);
+   return comms_win;
 }
 
 void
 CommsSend(Client * c, const char *s)
 {
-   char                ss[21];
+   char                ss[20];
    int                 i, j, k, len;
    XEvent              ev;
    Atom                a;
 
-   EDBUG(5, "CommsSend");
-   if ((!s) || (!c))
-      EDBUG_RETURN_;
-   len = strlen(s);
+   if ((!s) || (!c) || (c->win == None))
+      return;
+
    a = XInternAtom(disp, "ENL_MSG", True);
+
    ev.xclient.type = ClientMessage;
    ev.xclient.serial = 0;
    ev.xclient.send_event = True;
@@ -107,6 +107,7 @@
    ev.xclient.message_type = a;
    ev.xclient.format = 8;
 
+   len = strlen(s);
    for (i = 0; i < len + 1; i += 12)
      {
        sprintf(ss, "%8x", (int)my_win);
@@ -116,148 +117,82 @@
             if (!s[i + j])
                j = 12;
          }
-       ss[20] = 0;
        for (k = 0; k < 20; k++)
           ev.xclient.data.b[k] = ss[k];
-       XSendEvent(disp, c->win, False, 0, (XEvent *) & ev);
+       XSendEvent(disp, c->win, False, 0, &ev);
      }
-   EDBUG_RETURN_;
 }
 
 char               *
-CommsGet(Client ** c, XEvent * ev)
+CommsGet(Client * c, XEvent * ev)
 {
-   char                s[13], s2[9], *msg, st[32];
+   char                s[13], s2[9], *msg;
    int                 i;
    Window              win;
-   Client             *cl;
 
-   EDBUG(5, "CommsGet");
    if ((!ev) || (!c))
-      EDBUG_RETURN(NULL);
+      return NULL;
    if (ev->type != ClientMessage)
-      EDBUG_RETURN(NULL);
+      return NULL;
+
    s[12] = 0;
    s2[8] = 0;
    msg = NULL;
+
    for (i = 0; i < 8; i++)
       s2[i] = ev->xclient.data.b[i];
    for (i = 0; i < 12; i++)
       s[i] = ev->xclient.data.b[i + 8];
+
    sscanf(s2, "%lx", &win);
-   cl = (Client *) FindItem(NULL, win, LIST_FINDBY_ID, LIST_TYPE_CLIENT);
-   if (!cl)
-     {
-       cl = MakeClient(win);
-       if (!cl)
-          EDBUG_RETURN(NULL);
-       sprintf(st, "%8x", (int)win);
-       cl->name = Estrdup(st);
-       AddItem((void *)cl, st, cl->win, LIST_TYPE_CLIENT);
-       XSelectInput(disp, win, StructureNotifyMask | SubstructureNotifyMask);
-     }
-   if (cl->msg)
+
+   if (c->msg)
      {
        /* append text to end of msg */
-       cl->msg = Erealloc(cl->msg, strlen(cl->msg) + strlen(s) + 1);
-       if (!cl->msg)
-          EDBUG_RETURN(NULL);
-       strcat(cl->msg, s);
+       c->msg = Erealloc(c->msg, strlen(c->msg) + strlen(s) + 1);
+       if (!c->msg)
+          return NULL;
+       strcat(c->msg, s);
      }
    else
      {
        /* new msg */
-       cl->msg = Emalloc(strlen(s) + 1);
-       if (!cl->msg)
-          EDBUG_RETURN(NULL);
-       strcpy(cl->msg, s);
+       c->msg = Emalloc(strlen(s) + 1);
+       if (!c->msg)
+          return NULL;
+       strcpy(c->msg, s);
      }
    if (strlen(s) < 12)
      {
-       msg = cl->msg;
-       cl->msg = NULL;
-       *c = cl;
+       msg = c->msg;
+       c->msg = NULL;
      }
-   EDBUG_RETURN(msg);
+
+   return msg;
 }
 
 Client             *
-MakeClient(Window win)
+ClientCreate(Window win)
 {
    Client             *c;
 
-   EDBUG(6, "MakeClient");
    c = Emalloc(sizeof(Client));
    if (!c)
-      EDBUG_RETURN(NULL);
-   c->name = NULL;
+      return NULL;
+
    c->win = win;
    c->msg = NULL;
-   c->clientname = NULL;
-   c->version = NULL;
-   c->author = NULL;
-   c->email = NULL;
-   c->web = NULL;
-   c->address = NULL;
-   c->info = NULL;
-   c->pmap = 0;
-   EDBUG_RETURN(c);
+
+   return c;
 }
 
 void
-ListFreeClient(void *ptr)
+ClientDestroy(Client * c)
 {
-   Client             *c;
-
-   EDBUG(6, "ListFreeClient");
-   c = (Client *) ptr;
    if (!c)
-      EDBUG_RETURN_;
-   if (c->name)
-      Efree(c->name);
+      return;
+
    if (c->msg)
       Efree(c->msg);
-   if (c->clientname)
-      Efree(c->clientname);
-   if (c->version)
-      Efree(c->version);
-   if (c->author)
-      Efree(c->author);
-   if (c->email)
-      Efree(c->email);
-   if (c->web)
-      Efree(c->web);
-   if (c->address)
-      Efree(c->address);
-   if (c->info)
-      Efree(c->info);
    Efree(c);
-   EDBUG_RETURN_;
-}
-
-void
-DeleteClient(Client * c)
-{
-   Client             *cc;
-
-   EDBUG(6, "DeleteClient");
-   cc = RemoveItem(NULL, c->win, LIST_FINDBY_ID, LIST_TYPE_CLIENT);
-   ListFreeClient(cc);
-   EDBUG_RETURN_;
-}
-
-int
-HandleComms(XEvent * ev)
-{
-   Client             *c;
-   char               *s;
-
-   EDBUG(4, "HandleComms");
-   s = CommsGet(&c, ev);
-   if (!s)
-      EDBUG_RETURN(0);
-   printf("%s\n", s);
-   fflush(stdout);
-   Efree(s);
-   EDBUG_RETURN(1);
 }
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/eesh/main.c,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -u -3 -r1.19 -r1.19.2.1
--- main.c      1 Jul 2004 09:27:30 -0000       1.19
+++ main.c      20 Oct 2004 19:20:04 -0000      1.19.2.1
@@ -25,12 +25,12 @@
 
 /* Global vars */
 Display            *disp;
-List                lists;
 
 static char         buf[10240];
 static int          stdin_state;
 static char        *display_name;
 static Client      *e;
+static Window       my_win, comms_win;
 
 static void
 process_line(char *line)
@@ -87,19 +87,23 @@
    Client             *me;
    int                 i;
    fd_set              fd;
-   char               *command;
-   Window              my_win, comms_win;
-   char                waitonly, complete;
+   char               *command, *s;
+   char                mode;
+   int                 len, l;
 
-   waitonly = 0;
-   lists.next = NULL;
+   mode = 0;
    display_name = NULL;
    command = NULL;
 
-   for (i = 0; i < argc; i++)
+   for (i = 1; i < argc; i++)
      {
+       s = argv[i];
+       if (*s != '-')
+          break;
+
        if (!strcmp(argv[i], "-e"))
          {
+            mode = -1;
             if (i != (argc - 1))
               {
                  command = argv[++i];
@@ -107,7 +111,7 @@
          }
        else if (!strcmp(argv[i], "-ewait"))
          {
-            waitonly = 1;
+            mode = 1;
             if (i != (argc - 1))
                command = argv[++i];
          }
@@ -122,13 +126,15 @@
        else if ((!strcmp(argv[i], "-h")) ||
                 (!strcmp(argv[i], "-help")) || (!strcmp(argv[i], "--help")))
          {
-            printf("%s [ -e \"Command to Send to Enlightenment then exit\"]\n"
-                   "     [ -ewait \"Command to Send to E then wait for a reply then 
exit\"]\n",
-                   argv[0]);
-            printf("Use \"%s\" by itself to enter the \"interactive mode\"\n"
-                   "Ctrl-D will exit interactive mode (EOF)\n"
-                   "use \"help\" from inside interactive mode for further "
-                   "assistance\n", argv[0]);
+            printf
+               ("eesh sends commands to E\n\n"
+                "Examples:\n"
+                "  eesh Command to Send to E then wait for a reply then exit\n"
+                "  eesh -ewait \"Command to Send to E then wait for a reply then 
exit\"\n"
+                "  eesh -e \"Command to Send to Enlightenment then exit\"\n\n");
+            printf("Use eesh by itself to enter the \"interactive mode\"\n"
+                   "  Ctrl-D will exit interactive mode\n"
+                   "  Use \"help\" from inside interactive mode for further 
assistance\n");
             exit(0);
          }
      }
@@ -145,28 +151,41 @@
    my_win = CommsSetup();
    comms_win = CommsFindCommsWindow();
 
-   e = MakeClient(comms_win);
-   AddItem(e, "E", e->win, LIST_TYPE_CLIENT);
-
-   /* Not sure this is used... */
-   me = MakeClient(my_win);
-   AddItem(me, "ME", me->win, LIST_TYPE_CLIENT);
+   e = ClientCreate(comms_win);
+   me = ClientCreate(my_win);
 
    CommsSend(e, "set clientname eesh");
    CommsSend(e, "set version 0.1");
+#if 0                          /* Speed it up */
    CommsSend(e, "set author The Rasterman");
    CommsSend(e, "set email [EMAIL PROTECTED]");
    CommsSend(e, "set web http://www.enlightenment.org";);
-/*  CommsSend(e, "set address NONE"); */
+/* CommsSend(e, "set address NONE"); */
    CommsSend(e, "set info Enlightenment IPC Shell - talk to E direct");
-/*  CommsSend(e, "set pixmap 0"); */
+/* CommsSend(e, "set pixmap 0"); */
+#endif
+
+   if (command == NULL && i < argc)
+     {
+       mode = 1;
+       len = 0;
+       for (; i < argc; i++)
+         {
+            l = strlen(argv[i]);
+            command = Erealloc(command, len + l + 2);
+            if (len)
+               command[len++] = ' ';
+            strcpy(command + len, argv[i]);
+            len += l;
+         }
+     }
 
    if (command)
      {
        /* Non-interactive */
        CommsSend(e, command);
        XSync(disp, False);
-       if (!waitonly)
+       if (mode <= 0)
           goto done;
      }
    else
@@ -200,8 +219,13 @@
                  switch (ev.type)
                    {
                    case ClientMessage:
-                      complete = HandleComms(&ev);
-                      if (waitonly && complete)
+                      s = CommsGet(me, &ev);
+                      if (!s)
+                         break;
+                      printf("%s\n", s);
+                      fflush(stdout);
+                      Efree(s);
+                      if (mode)
                          goto done;
                       break;
                    case DestroyNotify:
@@ -213,6 +237,9 @@
      }
 
  done:
+   ClientDestroy(e);
+   ClientDestroy(me);
+
    return 0;
 }
 
@@ -221,11 +248,9 @@
 {
    va_list             ap;
 
-   EDBUG(7, "Alert");
    va_start(ap, fmt);
    vfprintf(stderr, fmt, ap);
    va_end(ap);
-   EDBUG_RETURN_;
 }
 
 #if !USE_LIBC_STRDUP
@@ -235,12 +260,12 @@
    char               *ss;
    int                 sz;
 
-   EDBUG(9, "Estrdup");
    if (!s)
-      EDBUG_RETURN(NULL);
+      return NULL;
    sz = strlen(s);
    ss = Emalloc(sz + 1);
    strncpy(ss, s, sz + 1);
-   EDBUG_RETURN(ss);
+
+   return ss;
 }
 #endif




-------------------------------------------------------
This SF.net email is sponsored by: IT Product Guide on ITManagersJournal
Use IT products in your business? Tell us what you think of them. Give us
Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more
http://productguide.itmanagersjournal.com/guidepromo.tmpl
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to