Enlightenment CVS committal

Author  : glassy
Project : e17
Module  : apps/engycad

Dir     : e17/apps/engycad/src


Modified Files:
        cl.c misc.c serv.c shell.c misc.h 


Log Message:
aliases backported, deadlock fixed

===================================================================
RCS file: /cvs/e/e17/apps/engycad/src/cl.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- cl.c        16 Jul 2007 15:54:04 -0000      1.4
+++ cl.c        22 Jul 2007 10:42:28 -0000      1.5
@@ -482,6 +482,41 @@
    cl_refresh(oparent);
 }*/
 
+int check_alias(const char *keyname, Evas_Modifier *mods)
+{
+       int mask = 0;
+       char *s;
+       char buf[4096];
+
+       if(evas_key_modifier_is_set(mods, "Shift"))
+               mask |= 1;
+       if(evas_key_modifier_is_set(mods, "Control"))
+               mask |= 2;
+       if(evas_key_modifier_is_set(mods, "Alt"))
+               mask |= 4;
+
+       switch(mask)
+       {
+               case 0: return 0; break;
+               case 1: s = "shift"; break;
+               case 2: s = "ctrl"; break;
+               case 3: s = "ctrl+shift"; break;
+               case 4: s = "alt"; break;
+               case 5: s = "alt+shift"; break;
+               case 6: s = "ctrl+alt"; break;
+               case 7: s = "ctrl+alt+shift"; break;
+       }
+       sprintf(buf, "%s+%s", s, keyname);
+       s = _alias(buf);
+       if(s)
+       {
+               gui_put_string(s);
+               return 1;
+       }
+
+       return 0;
+}
+
 void cl_handle_key(Evas_Object *o, void *event_info)
 {
        Evas_Object *oparent;
@@ -547,7 +582,7 @@
 
        cl_text_set(oparent, "");
    }
-   else 
+   else if(!check_alias(ee->keyname, ee->modifiers)) 
    {   // insert input
       char * nt;
 
===================================================================
RCS file: /cvs/e/e17/apps/engycad/src/misc.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- misc.c      8 Jul 2007 14:56:23 -0000       1.2
+++ misc.c      22 Jul 2007 10:42:28 -0000      1.3
@@ -511,42 +511,58 @@
 
 /** aliases **/
 
+Evas_Hash *aliases;
+
+Evas_Bool my_pair_free(Evas_Hash *hash, 
+               const char *key, void *data, void *fdata)
+{
+       FREE(data);
+}
+
+void alias_init()
+{
+       char buf[4096];
+       char *al;
+       FILE *f;
+
+       sprintf(buf,"%s/%s", shell->home, shell->aliases);
+       f = fopen(buf, "r");
+
+       if(!f)
+               return;
+       while(!feof(f))
+       {
+               fgets(buf, 4095, f);
+               if(!buf[0])
+                       continue;
+               buf[strlen(buf)-1] = '\0';
+               al = strchr(buf, '=');
+               if(!al)
+                       continue;
+               al[0] = '\0';
+               al++;
+               aliases = evas_hash_add(aliases, buf, DUP(al));
+       }
+
+       fclose(f);
+}
+
+void alias_shutdown()
+{
+       evas_hash_foreach(aliases, my_pair_free, NULL);
+       evas_hash_free(aliases);
+}
+
 char               *
 _alias(char *s)
 {
-    char                buf[4096];
-    char               *al;
-    char               *res;
-    FILE               *in;
-    int                 fl = 1;
-
-    sprintf(buf, "%s/%s", shell->home, shell->aliases);
-    in = fopen(buf, "r");
-    ENGY_ASSERT(in);
-
-    if (!in)
-        return NULL;
-
-    while ((!feof(in)) && fl)
-      {
-          fgets(buf, 4095, in);
-          if (!buf)
-              continue;
-          buf[strlen(buf) - 1] = 0;
-          al = (char *)strchr(buf, '=');
-          if (!al)
-              continue;
-          al[0] = 0;
-          al++;
-          if (!strcmp(buf, s))
-              fl = 0;
-      }
-    fclose(in);
+       char *res;
+       res = (char*) evas_hash_find(aliases, s);
 
-    if (fl)
-        return NULL;
+       if(res)
+               return DUP(res);
 
-    return DUP(al);
+       return NULL;
 }
 
 /* screen-to-world */
===================================================================
RCS file: /cvs/e/e17/apps/engycad/src/serv.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- serv.c      16 Jul 2007 15:54:04 -0000      1.5
+++ serv.c      22 Jul 2007 10:42:28 -0000      1.6
@@ -32,6 +32,7 @@
 
 /* vars */
 
+pthread_mutex_t     queuemutex = PTHREAD_MUTEX_INITIALIZER;
 pthread_mutex_t     datamutex = PTHREAD_MUTEX_INITIALIZER;
 
 pthread_t           thserv;
@@ -142,7 +143,7 @@
     if (strlen(s) > 4000)
         s[4000] = 0;
 
-    pthread_mutex_lock(&datamutex);
+    pthread_mutex_lock(&queuemutex);
     for (i = 0, j = 0; s[i]; i++)
       {
           if ((s[i] == '|') || (j == 4095))
@@ -160,7 +161,7 @@
     buf[j] = 0;
     _serv_put_string(DUP(_(buf)));
     FREE(s);
-    pthread_mutex_unlock(&datamutex);
+    pthread_mutex_unlock(&queuemutex);
 }
 
 char               *
@@ -170,16 +171,16 @@
 
     do
     {
-           pthread_mutex_lock(&datamutex);
+           pthread_mutex_lock(&queuemutex);
            if(!serv_queue)
            {
-                   pthread_mutex_unlock(&datamutex);
-                   usleep(10*1000);
+                   pthread_mutex_unlock(&queuemutex);
+                   usleep(100*1000);
                    continue;
            }
            s = serv_queue->data;
            serv_queue = evas_list_remove(serv_queue, s);
-           pthread_mutex_unlock(&datamutex);
+           pthread_mutex_unlock(&queuemutex);
     }
     while(!s);
 
@@ -224,6 +225,7 @@
           serv_parser(s);
       }
 
+    pthread_mutex_destroy(&queuemutex);
     pthread_mutex_destroy(&datamutex);
     fl_shutdown = 2;
 
===================================================================
RCS file: /cvs/e/e17/apps/engycad/src/shell.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- shell.c     16 Jul 2007 15:54:04 -0000      1.6
+++ shell.c     22 Jul 2007 10:42:28 -0000      1.7
@@ -609,6 +609,7 @@
     pointer_init();
     serv_init();
     logo_init();
+    alias_init();
 //    evas_render(shell->evas);
 }
 
@@ -1120,6 +1121,7 @@
        serv_put_string(DUP("__exit"));
        usleep(10000);
        gui_apply();
+       alias_shutdown();
        cl_shutdown();
        menu_shutdown();
        panel_shutdown();
===================================================================
RCS file: /cvs/e/e17/apps/engycad/src/misc.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- misc.h      8 Jul 2007 04:15:49 -0000       1.1
+++ misc.h      22 Jul 2007 10:42:28 -0000      1.2
@@ -34,7 +34,10 @@
 void timer(void);
 
 /* usefull aliasing */
+void alias_init(void);
+void alias_shutdown(void);
 char               *_alias(char *);
+
 
 Evas_Object        *evas_image_load(char *file);
 



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to