home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2002 April / pcpro0402.iso / essentials / graphics / Gimp / gimp-src-20001226.exe / src / gimp / libgimp / gimpparasiteio.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-26  |  4.1 KB  |  173 lines

  1. /* LIBGIMP - The GIMP Library 
  2.  * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
  3.  *
  4.  * gimpparasiteio.c
  5.  * Copyright (C) 1999 Tor Lillqvist <tml@iki.fi>
  6.  *
  7.  * This library is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2 of the License, or (at your option) any later version.
  11.  *
  12.  * This library is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with this library; if not, write to the
  19.  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  20.  * Boston, MA 02111-1307, USA.
  21.  */
  22.  
  23. /*
  24.  * Functions for bulding and parsing string representations of
  25.  * various standard parasite types.
  26.  */
  27.  
  28. #include "config.h"
  29.  
  30. #include <stdio.h>
  31. #include <stdlib.h>
  32. #include <string.h>
  33.  
  34. #include <glib.h>
  35.  
  36. #include "gimpparasiteio.h"
  37.  
  38.  
  39. void
  40. gimp_pixpipe_params_init (GimpPixPipeParams *params)
  41. {
  42.   gint i;
  43.  
  44.   params->step       = 100;
  45.   params->ncells     = 1;
  46.   params->cellwidth  = 1;
  47.   params->cellheight = 1;
  48.   params->dim        = 1;
  49.   params->cols       = 1;
  50.   params->rows       = 1;
  51.   params->placement  = "constant";
  52.   params->free_placement_string = FALSE;
  53.   for (i = 0; i < GIMP_PIXPIPE_MAXDIM; i++)
  54.     {
  55.       params->selection[i]          = "random";
  56.       params->free_selection_string = FALSE;
  57.     }
  58.   params->rank[0] = 1;
  59.   for (i = 1; i < GIMP_PIXPIPE_MAXDIM; i++)
  60.     params->rank[i] = 0;
  61. }
  62.  
  63. void
  64. gimp_pixpipe_params_parse (gchar            *string,
  65.                GimpPixPipeParams *params)
  66. {
  67.   gchar *p, *q, *r;        /* Don't you love single-char identifiers?  */
  68.   gint i;                       /*          No, we don't!!   <Sven>         */ 
  69.  
  70.   q = string;
  71.   while ((p = strtok (q, " \r\n")) != NULL)
  72.     {
  73.       q = NULL;
  74.       r = strchr (p, ':');
  75.       if (r)
  76.     *r = 0;
  77.  
  78.       if (strcmp (p, "ncells") == 0)
  79.     {
  80.       if (r)
  81.         params->ncells = atoi (r + 1);
  82.     }
  83.       else if (strcmp (p, "step") == 0)
  84.     {
  85.       if (r)
  86.         params->step = atoi (r + 1);
  87.     }
  88.       else if (strcmp (p, "dim") == 0)
  89.     {
  90.       if (r)
  91.         params->dim = atoi (r + 1);
  92.     }
  93.       else if (strcmp (p, "cols") == 0)
  94.     {
  95.       if (r)
  96.         params->cols = atoi (r + 1);
  97.     }
  98.       else if (strcmp (p, "rows") == 0)
  99.     {
  100.       if (r)
  101.         params->rows = atoi (r + 1);
  102.     }
  103.       else if (strcmp (p, "cellwidth") == 0)
  104.     {
  105.       if (r)
  106.         params->cellwidth = atoi (r + 1);
  107.     }
  108.       else if (strcmp (p, "cellheight") == 0)
  109.     {
  110.       if (r)
  111.         params->cellheight = atoi (r + 1);
  112.     }
  113.       else if (strcmp (p, "placement") == 0)
  114.     {
  115.       if (r)
  116.         {
  117.           params->placement = g_strdup (r + 1);
  118.           params->free_placement_string = TRUE;
  119.         }
  120.     }
  121.       else if (strncmp (p, "rank", strlen ("rank")) == 0 && r)
  122.     {
  123.       if (r)
  124.         {
  125.           i = atoi (p + strlen ("rank"));
  126.           if (i >= 0 && i < params->dim)
  127.         params->rank[i] = atoi (r + 1);
  128.         }
  129.     }
  130.       else if (strncmp (p, "sel", strlen ("sel")) == 0 && r)
  131.     {
  132.       if (r)
  133.         {
  134.           i = atoi (p + strlen ("sel"));
  135.           if (i >= 0 && i < params->dim)
  136.         {
  137.           params->selection[i] = g_strdup (r + 1);
  138.           params->free_selection_string = TRUE;
  139.         }
  140.         }
  141.     }
  142.       if (r)
  143.     *r = ':';
  144.     }
  145. }
  146.  
  147. gchar *
  148. gimp_pixpipe_params_build (GimpPixPipeParams *params)
  149. {
  150.   GString *s = g_string_new (NULL);
  151.   gchar *str;
  152.  
  153.   gint i;
  154.  
  155.   g_string_sprintf (s, "ncells:%d cellwidth:%d cellheight:%d "
  156.             "step:%d dim:%d cols:%d rows:%d placement:%s",
  157.             params->ncells, params->cellwidth, params->cellheight,
  158.             params->step, params->dim,
  159.             params->cols, params->rows,
  160.             params->placement);
  161.  
  162.   for (i = 0; i < params->dim; i++)
  163.     {
  164.       g_string_sprintfa (s, " rank%d:%d", i, params->rank[i]);
  165.       g_string_sprintfa (s, " sel%d:%s", i, params->selection[i]);
  166.     }
  167.  
  168.   str = s->str;
  169.   g_string_free (s, FALSE);
  170.  
  171.   return str;
  172. }
  173.