Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/eesh Modified Files: E.h Makefile.am comms.c main.c Removed Files: globals.c memory.c setup.c Log Message: Trim eesh. =================================================================== RCS file: /cvsroot/enlightenment/e16/e/eesh/E.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- E.h 31 May 2004 19:47:33 -0000 1.18 +++ E.h 1 Jul 2004 09:27:30 -0000 1.19 @@ -35,18 +35,6 @@ #include <stdarg.h> #include <string.h> #include <fcntl.h> -#include <dirent.h> -#include <signal.h> -#include <time.h> -#include <math.h> -#include <pwd.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <sys/stat.h> -#include <sys/resource.h> -#include <sys/ipc.h> -#include <sys/shm.h> #if HAVE_STRDUP #define USE_LIBC_STRDUP 1 /* Use libc strdup if present */ @@ -88,22 +76,6 @@ } Client; -typedef struct _root -{ - Window win; - Visual *vis; - int depth; - Colormap cmap; - int scr; - int w, h; - Window focuswin; -} -Root; - -void *Emalloc(int size); -void *Erealloc(void *ptr, int size); -void Efree(void *ptr); - 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); @@ -111,42 +83,19 @@ char **ListItems(int *num, int type); void **ListItemTypeID(int *num, int type, int id); -void SetupX(void); - -void CommsSetup(void); -void CommsFindCommsWindow(void); +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); -void HandleComms(XEvent * ev); +int HandleComms(XEvent * ev); -#if defined(__FILE__) && defined(__LINE__) -#define Efree(x) \ -{ \ - if (x) \ - __Efree(x); \ - else \ - Alert("%s:%d: Attempt to free a NULL pointer\n", __FILE__, __LINE__); \ -} -#define Emalloc(x) \ -__Emalloc(x) -#define Erealloc(x, y) \ -__Erealloc(x, y) -#else -#define Efree(x) \ -{ \ - if (x) \ - __Efree(x); \ - else \ - Alert("??:??: Attempt to free a NULL pointer\n"); \ -} -#define Emalloc(x) \ -__Emalloc(x) -#define Erealloc(x, y) \ -__Erealloc(x, y) -#endif +#define Ecalloc calloc +#define Emalloc malloc +#define Efree free +#define Erealloc realloc #if USE_LIBC_STRDUP #define Estrdup(s) ((s) ? strdup(s) : NULL) @@ -154,10 +103,6 @@ char *Estrdup(const char *s); #endif -void *__Emalloc(int size); -void *__Erealloc(void *ptr, int size); -void __Efree(void *ptr); - #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 */ @@ -220,11 +165,5 @@ void Alert(const char *fmt, ...); -void EDisplayMemUse(void); - extern Display *disp; extern List lists; -extern Window comms_win; -extern Window my_win; -extern Root root; -extern char *display_name; =================================================================== RCS file: /cvsroot/enlightenment/e16/e/eesh/Makefile.am,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- Makefile.am 8 May 2004 21:39:37 -0000 1.11 +++ Makefile.am 1 Jul 2004 09:27:30 -0000 1.12 @@ -1,9 +1,9 @@ bin_PROGRAMS = eesh -eesh_SOURCES = E.h comms.c globals.c lists.c main.c setup.c memory.c +eesh_SOURCES = E.h comms.c lists.c main.c -LDADD = $(X_LIBS) -lX11 +LDADD = $(X_LIBS) -lX11 $(RL_LIBS) INCLUDES = -I$(top_builddir) -I$(top_srcdir)/intl $(X_CFLAGS) =================================================================== RCS file: /cvsroot/enlightenment/e16/e/eesh/comms.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- comms.c 30 Jun 2004 13:03:57 -0000 1.11 +++ comms.c 1 Jul 2004 09:27:30 -0000 1.12 @@ -23,72 +23,68 @@ #include "E.h" -char waitonly; -Window root_win; +static Window root_win; +static Window my_win; -void -CommsSetup() +Window +CommsSetup(void) { char *str; EDBUG(5, "CommsSetup"); str = getenv("ENL_WM_ROOT"); - root_win = (str) ? strtoul(str, NULL, 0) : root.win; + root_win = (str) ? strtoul(str, NULL, 0) : DefaultRootWindow(disp); my_win = XCreateSimpleWindow(disp, root_win, -100, -100, 5, 5, 0, 0, 0); - EDBUG_RETURN_; + EDBUG_RETURN(my_win); } -void -CommsFindCommsWindow() +Window +CommsFindCommsWindow(void) { unsigned char *s; Atom a, ar; unsigned long num, after; int format; - Window rt; + Window rt, comms_win; int dint; unsigned int duint; EDBUG(6, "CommsFindCommsWindow"); + + comms_win = None; + a = XInternAtom(disp, "ENLIGHTENMENT_COMMS", True); - if (a != None) - { - s = NULL; - XGetWindowProperty(disp, root_win, a, 0, 14, False, AnyPropertyType, - &ar, &format, &num, &after, &s); - if (s) - { - comms_win = 0; - sscanf((char *)s, "%*s %lx", &comms_win); - XFree(s); - } - else - (comms_win = 0); - if (comms_win) - { - if (!XGetGeometry(disp, comms_win, &rt, &dint, &dint, - &duint, &duint, &duint, &duint)) - comms_win = 0; - s = NULL; - if (comms_win) - { - XGetWindowProperty(disp, comms_win, a, 0, 14, False, - AnyPropertyType, &ar, &format, &num, - &after, &s); - if (s) - XFree(s); - else - comms_win = 0; - } - } - } - if (comms_win) - XSelectInput(disp, comms_win, - StructureNotifyMask | SubstructureNotifyMask); - EDBUG_RETURN_; + if (a == None) + EDBUG_RETURN(None); + + s = NULL; + XGetWindowProperty(disp, root_win, a, 0, 14, False, AnyPropertyType, + &ar, &format, &num, &after, &s); + if (!s) + EDBUG_RETURN(None); + + sscanf((char *)s, "%*s %lx", &comms_win); + XFree(s); + if (comms_win == None) + EDBUG_RETURN(None); + + if (!XGetGeometry(disp, comms_win, &rt, &dint, &dint, + &duint, &duint, &duint, &duint)) + EDBUG_RETURN(None); + + s = NULL; + XGetWindowProperty(disp, comms_win, a, 0, 14, False, + AnyPropertyType, &ar, &format, &num, &after, &s); + if (!s) + EDBUG_RETURN(None); + XFree(s); + + XSelectInput(disp, comms_win, StructureNotifyMask | SubstructureNotifyMask); + + EDBUG_RETURN(comms_win); } void @@ -250,7 +246,7 @@ EDBUG_RETURN_; } -void +int HandleComms(XEvent * ev) { Client *c; @@ -259,11 +255,9 @@ EDBUG(4, "HandleComms"); s = CommsGet(&c, ev); if (!s) - EDBUG_RETURN_; + EDBUG_RETURN(0); printf("%s\n", s); fflush(stdout); - if (waitonly) - exit(0); Efree(s); - EDBUG_RETURN_; + EDBUG_RETURN(1); } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/eesh/main.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- main.c 21 Mar 2004 01:37:31 -0000 1.18 +++ main.c 1 Jul 2004 09:27:30 -0000 1.19 @@ -22,30 +22,74 @@ */ #include "E.h" -#include <sys/time.h> -#include <sys/types.h> -#include <unistd.h> -extern char waitonly; +/* Global vars */ +Display *disp; +List lists; +static char buf[10240]; static int stdin_state; -void restore_stdin_state(void); -void -restore_stdin_state(void) +static char *display_name; +static Client *e; + +static void +process_line(char *line) +{ + if (line == NULL) + exit(0); + if (*line == '\0') + return; + + CommsSend(e, line); + XSync(disp, False); +} + +static void +stdin_state_setup(void) +{ + stdin_state = fcntl(0, F_GETFL, 0); + fcntl(0, F_SETFL, O_NONBLOCK); +} + +static void +stdin_state_restore(void) { fcntl(0, F_SETFL, stdin_state); } +static void +stdin_read(void) +{ + static int j = 0; + int k, ret; + + k = 0; + while ((ret = read(0, &(buf[j]), 1) > 0)) + { + k = 1; + if (buf[j] == '\n') + { + buf[j] = 0; + if (strlen(buf) > 0) + process_line(buf); + j = -1; + } + j++; + } + if ((ret < 0) || ((k == 0) && (ret == 0))) + exit(0); +} + int main(int argc, char **argv) { XEvent ev; - Client *me, *e; - char buf[10240]; - int i, j, k; + Client *me; + int i; fd_set fd; - signed char ret; char *command; + Window my_win, comms_win; + char waitonly, complete; waitonly = 0; lists.next = NULL; @@ -76,7 +120,6 @@ } } else if ((!strcmp(argv[i], "-h")) || - (!strcmp(argv[i], "--h")) || (!strcmp(argv[i], "-help")) || (!strcmp(argv[i], "--help"))) { printf("%s [ -e \"Command to Send to Enlightenment then exit\"]\n" @@ -90,15 +133,25 @@ } } - SetupX(); - CommsSetup(); - CommsFindCommsWindow(); - XSelectInput(disp, comms_win, StructureNotifyMask); - XSelectInput(disp, root.win, PropertyChangeMask); + /* Open a connection to the diplay nominated by the DISPLAY variable */ + /* Or set with the -display option */ + disp = XOpenDisplay(display_name); + if (!disp) + { + Alert("Failed to connect to X server\n"); + exit(1); + } + + 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); + CommsSend(e, "set clientname eesh"); CommsSend(e, "set version 0.1"); CommsSend(e, "set author The Rasterman"); @@ -110,74 +163,56 @@ if (command) { + /* Non-interactive */ CommsSend(e, command); + XSync(disp, False); if (!waitonly) - { - XSync(disp, False); - exit(0); - } + goto done; + } + else + { + /* Interactive */ + stdin_state_setup(); + atexit(stdin_state_restore); } - XSync(disp, False); - j = 0; - stdin_state = fcntl(0, F_GETFL, 0); - atexit(restore_stdin_state); - fcntl(0, F_SETFL, O_NONBLOCK); for (;;) { - if (waitonly) + FD_ZERO(&fd); + if (!command) + FD_SET(0, &fd); + FD_SET(ConnectionNumber(disp), &fd); + + if (select(ConnectionNumber(disp) + 1, &fd, NULL, NULL, NULL) < 0) + break; + + XSync(disp, False); + + if (FD_ISSET(0, &fd)) { - XNextEvent(disp, &ev); - if (ev.type == ClientMessage) - HandleComms(&ev); - else if (ev.type == DestroyNotify) - exit(0); - XSync(disp, False); + stdin_read(); } - else + else if (FD_ISSET(ConnectionNumber(disp), &fd)) { - FD_ZERO(&fd); - FD_SET(0, &fd); - FD_SET(ConnectionNumber(disp), &fd); - if (select(ConnectionNumber(disp) + 1, &fd, NULL, NULL, NULL) < 0) - exit(0); - XSync(disp, False); - - if (FD_ISSET(0, &fd)) - { - k = 0; - while ((ret = read(0, &(buf[j]), 1) > 0)) - { - k = 1; - if (buf[j] == '\n') - { - buf[j] = 0; - if (strlen(buf) > 0) - { - CommsSend(e, buf); - XSync(disp, False); - } - j = -1; - } - j++; - } - if ((ret < 0) || ((k == 0) && (ret == 0))) - exit(0); - } - else if (FD_ISSET(ConnectionNumber(disp), &fd)) + while (XPending(disp)) { - while (XPending(disp)) + XNextEvent(disp, &ev); + switch (ev.type) { - XNextEvent(disp, &ev); - if (ev.type == ClientMessage) - HandleComms(&ev); - else if (ev.type == DestroyNotify) - exit(0); + case ClientMessage: + complete = HandleComms(&ev); + if (waitonly && complete) + goto done; + break; + case DestroyNotify: + goto done; } - XSync(disp, False); } + XSync(disp, False); } } + + done: return 0; } @@ -192,3 +227,20 @@ va_end(ap); EDBUG_RETURN_; } + +#if !USE_LIBC_STRDUP +char * +Estrdup(const char *s) +{ + char *ss; + int sz; + + EDBUG(9, "Estrdup"); + if (!s) + EDBUG_RETURN(NULL); + sz = strlen(s); + ss = Emalloc(sz + 1); + strncpy(ss, s, sz + 1); + EDBUG_RETURN(ss); +} +#endif ------------------------------------------------------- This SF.Net email sponsored by Black Hat Briefings & Training. Attend Black Hat Briefings & Training, Las Vegas July 24-29 - digital self defense, top technical experts, no vendor pitches, unmatched networking opportunities. Visit www.blackhat.com _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs