kwo pushed a commit to branch master.

http://git.enlightenment.org/legacy/imlib2.git/commit/?id=49a67a8f9cc071236ba55a589a8f8f3216e0d660

commit 49a67a8f9cc071236ba55a589a8f8f3216e0d660
Author: Kim Woelders <k...@woelders.dk>
Date:   Fri Jul 20 14:34:44 2018 +0200

    XPM loader: Simplify pixel value handling
---
 src/modules/loaders/loader_xpm.c | 104 ++++++++++++++-------------------------
 1 file changed, 36 insertions(+), 68 deletions(-)

diff --git a/src/modules/loaders/loader_xpm.c b/src/modules/loaders/loader_xpm.c
index 2872224..9ac6a6b 100644
--- a/src/modules/loaders/loader_xpm.c
+++ b/src/modules/loaders/loader_xpm.c
@@ -6,9 +6,12 @@
 static FILE        *rgb_txt = NULL;
 
 static void
-xpm_parse_color(char *color, int *r, int *g, int *b)
+xpm_parse_color(char *color, DATA32 * pixel)
 {
    char                buf[4096];
+   int                 r, g, b;
+
+   r = g = b = 0;
 
    /* is a #ff00ff like color */
    if (color[0] == '#')
@@ -25,30 +28,31 @@ xpm_parse_color(char *color, int *r, int *g, int *b)
              for (i = 0; i < len; i++)
                 val[i] = color[1 + i + (0 * len)];
              val[i] = 0;
-             sscanf(val, "%x", r);
+             sscanf(val, "%x", &r);
              for (i = 0; i < len; i++)
                 val[i] = color[1 + i + (1 * len)];
              val[i] = 0;
-             sscanf(val, "%x", g);
+             sscanf(val, "%x", &g);
              for (i = 0; i < len; i++)
                 val[i] = color[1 + i + (2 * len)];
              val[i] = 0;
-             sscanf(val, "%x", b);
+             sscanf(val, "%x", &b);
              if (len == 1)
                {
-                  *r = (*r << 4) | *r;
-                  *g = (*g << 4) | *g;
-                  *b = (*b << 4) | *b;
+                  r = (r << 4) | r;
+                  g = (g << 4) | g;
+                  b = (b << 4) | b;
                }
              else if (len > 2)
                {
-                  *r >>= (len - 2) * 4;
-                  *g >>= (len - 2) * 4;
-                  *b >>= (len - 2) * 4;
+                  r >>= (len - 2) * 4;
+                  g >>= (len - 2) * 4;
+                  b >>= (len - 2) * 4;
                }
           }
-        return;
+        goto done;
      }
+
    /* look in rgb txt database */
    if (!rgb_txt)
       rgb_txt = fopen("/usr/share/X11/rgb.txt", "r");
@@ -57,7 +61,8 @@ xpm_parse_color(char *color, int *r, int *g, int *b)
    if (!rgb_txt)
       rgb_txt = fopen("/usr/openwin/lib/X11/rgb.txt", "r");
    if (!rgb_txt)
-      return;
+      goto done;
+
    fseek(rgb_txt, 0, SEEK_SET);
    while (fgets(buf, 4000, rgb_txt))
      {
@@ -69,13 +74,15 @@ xpm_parse_color(char *color, int *r, int *g, int *b)
              sscanf(buf, "%i %i %i %[^\n]", &rr, &gg, &bb, name);
              if (!strcasecmp(name, color))
                {
-                  *r = rr;
-                  *g = gg;
-                  *b = bb;
-                  return;
+                  r = rr;
+                  g = gg;
+                  b = bb;
+                  goto done;
                }
           }
      }
+ done:
+   *pixel = PIXEL_ARGB(0xff, r, g, b);
 }
 
 static void
@@ -93,15 +100,15 @@ load(ImlibImage * im, ImlibProgressFunction progress, char 
progress_granularity,
    int                 rc;
    DATA32             *ptr, *end;
    FILE               *f;
-   int                 pc, c, i, j, k, w, h, ncolors, cpp, comment, transp,
-      quote, context, len, done, r, g, b, backslash;
+   int                 pc, c, i, j, k, w, h, ncolors, cpp;
+   int                 comment, transp, quote, context, len, done, backslash;
    char               *line, s[256], tok[256], col[256];
    int                 lsz = 256;
    struct _cmap {
       char                assigned;
       unsigned char       transp;
       char                str[6];
-      short               r, g, b;
+      DATA32              pixel;
    }                  *cmap;
    short               lookup[128 - 32][128 - 32];
    float               per = 0.0, per_inc = 0.0;
@@ -275,20 +282,15 @@ load(ImlibImage * im, ImlibProgressFunction progress, 
char progress_granularity,
                                       if (!strcasecmp(col, "none"))
                                         {
                                            cmap[j].transp = 1;
+                                           cmap[j].pixel = 0;
                                         }
                                       else if ((!cmap[j].assigned ||
                                                 !strcmp(tok, "c"))
                                                && (!hascolor))
                                         {
-                                           r = 0;
-                                           g = 0;
-                                           b = 0;
-                                           xpm_parse_color(col, &r, &g, &b);
+                                           xpm_parse_color(col, 
&cmap[j].pixel);
                                            cmap[j].assigned = 1;
                                            cmap[j].transp = 0;
-                                           cmap[j].r = r;
-                                           cmap[j].g = g;
-                                           cmap[j].b = b;
                                            if (iscolor)
                                               hascolor = 1;
                                         }
@@ -329,59 +331,31 @@ load(ImlibImage * im, ImlibProgressFunction progress, 
char progress_granularity,
              else
                {
                   /* Image Data */
-                  i = 0;
-                  if (cpp == 0)
-                    {
-                       /* Chars per pixel = 0? well u never know */
-                    }
+
                   if (cpp == 1)
                     {
-#define CM1_TRANS() cmap[lookup[col[0] - ' '][0]].transp
-#define CM1_R()     (unsigned char)cmap[lookup[col[0] - ' '][0]].r
-#define CM1_G()     (unsigned char)cmap[lookup[col[0] - ' '][0]].g
-#define CM1_B()     (unsigned char)cmap[lookup[col[0] - ' '][0]].b
+#define CM1(c0) (&cmap[lookup[c0 - ' '][0]])
                        for (i = 0;
                             ((i < 65536) && (ptr < end) && (line[i])); i++)
                          {
-                            col[0] = line[i];
-                            r = CM1_R();
-                            g = CM1_G();
-                            b = CM1_B();
-                            if (transp && CM1_TRANS())
-                               *ptr++ = 0;
-                            else
-                               *ptr++ = PIXEL_ARGB(0xff, r, g, b);
+                            *ptr++ = CM1(line[i])->pixel;
                             count++;
                          }
                     }
                   else if (cpp == 2)
                     {
-#define CM2_TRANS() cmap[lookup[col[0] - ' '][col[1] - ' ']].transp
-#define CM2_R()     (unsigned char)cmap[lookup[col[0] - ' '][col[1] - ' ']].r
-#define CM2_G()     (unsigned char)cmap[lookup[col[0] - ' '][col[1] - ' ']].g
-#define CM2_B()     (unsigned char)cmap[lookup[col[0] - ' '][col[1] - ' ']].b
+#define CM2(c0, c1) (&cmap[lookup[c0 - ' '][c1 - ' ']])
                        for (i = 0;
                             ((i < 65536) && (ptr < end)
-                             && (line[i]) && (line[i + 1])); i++)
+                             && (line[i]) && (line[i + 1])); i += 2)
                          {
-                            col[0] = line[i++];
-                            col[1] = line[i];
-                            r = CM2_R();
-                            g = CM2_G();
-                            b = CM2_B();
-                            if (transp && CM2_TRANS())
-                               *ptr++ = 0;
-                            else
-                               *ptr++ = PIXEL_ARGB(0xff, r, g, b);
+                            *ptr++ = CM2(line[i], line[i + 1])->pixel;
                             count++;
                          }
                     }
                   else
                     {
-#define CM0_TRANS(_j) cmap[_j].transp
-#define CM0_R(_j)     (unsigned char)cmap[_j].r
-#define CM0_G(_j)     (unsigned char)cmap[_j].g
-#define CM0_B(_j)     (unsigned char)cmap[_j].b
+#define CMn(_j) (&cmap[_j])
                        for (i = 0;
                             ((i < 65536) && (ptr < end) && (line[i])); i++)
                          {
@@ -395,13 +369,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char 
progress_granularity,
                               {
                                  if (!strcmp(col, cmap[j].str))
                                    {
-                                      r = CM0_R(j);
-                                      g = CM0_G(j);
-                                      b = CM0_B(j);
-                                      if (transp && CM0_TRANS(j))
-                                         *ptr++ = 0;
-                                      else
-                                         *ptr++ = PIXEL_ARGB(0xff, r, g, b);
+                                      *ptr++ = CMn(j)->pixel;
                                       count++;
                                       j = ncolors;
                                    }

-- 


Reply via email to