Sat Dec 27 16:16:49 2003 Ben Pfaff <blp@gnu.org>
[pspp-builds.git] / src / postscript.c
index 8e6fa4883078f1854962b01d3a3b01efaec2361b..ef6cebe9ae0594c955f4408dd83d7e726eafa01e 100644 (file)
@@ -302,7 +302,7 @@ static char *quote_ps_string (char *dest, const char *string);
 \f
 /* Driver initialization. */
 
-int
+static int
 ps_open_global (struct outp_class *this unused)
 {
   init_fonts ();
@@ -310,13 +310,13 @@ ps_open_global (struct outp_class *this unused)
   return 1;
 }
 
-int
+static int
 ps_close_global (struct outp_class *this unused)
 {
   return 1;
 }
 
-int *
+static int *
 ps_font_sizes (struct outp_class *this unused, int *n_valid_sizes)
 {
   /* Allow fonts up to 1" in height. */
@@ -328,7 +328,7 @@ ps_font_sizes (struct outp_class *this unused, int *n_valid_sizes)
   return valid_sizes;
 }
 
-int
+static int
 ps_preopen_driver (struct outp_driver *this)
 {
   struct ps_driver_ext *x;
@@ -403,7 +403,7 @@ ps_preopen_driver (struct outp_driver *this)
   return 1;
 }
 
-int
+static int
 ps_postopen_driver (struct outp_driver *this)
 {
   struct ps_driver_ext *x = this->ext;
@@ -476,7 +476,7 @@ ps_postopen_driver (struct outp_driver *this)
   return 1;
 }
 
-int
+static int
 ps_close_driver (struct outp_driver *this)
 {
   struct ps_driver_ext *x = this->ext;
@@ -517,9 +517,10 @@ compare_font_entry (const void *a, const void *b, void *foobar unused)
 
 /* font_entry hash function for hash tables. */
 static unsigned
-hash_font_entry (const void *a, void *foobar unused)
+hash_font_entry (const void *fe_, void *foobar unused)
 {
-  return hashpjw (((struct font_entry *) a)->dit);
+  const struct font_entry *fe = fe_;
+  return hsh_hash_string (fe->dit);
 }
 
 /* font_entry destructor function for hash tables. */
@@ -577,7 +578,7 @@ static struct outp_option option_tab[] =
 };
 static struct outp_option_info option_info;
 
-void
+static void
 ps_option (struct outp_driver *this, const char *key, const struct string *val)
 {
   struct ps_driver_ext *x = this->ext;
@@ -811,10 +812,6 @@ ps_option (struct outp_driver *this, const char *key, const struct string *val)
          }
       }
       break;
-#if __CHECKER__
-    case 42000:
-      assert (0);
-#endif
     default:
       assert (0);
     }
@@ -889,7 +886,7 @@ hash_ps_encoding (const void *pa, void *foo unused)
 {
   const struct ps_encoding *a = pa;
 
-  return hashpjw (a->filename);
+  return hsh_hash_string (a->filename);
 }
 
 /* Hash table free function for ps_encoding's. */
@@ -917,8 +914,8 @@ output_encodings (struct outp_driver *this)
 
   ds_init (NULL, &line, 128);
   ds_init (NULL, &buf, 128);
-  hsh_iterator_init (iter);
-  while ((pe = hsh_foreach (x->encodings, &iter)) != NULL)
+  for (pe = hsh_first (x->encodings, &iter); pe != NULL;
+       pe = hsh_next (x->encodings, &iter)) 
     {
       FILE *f;
 
@@ -958,8 +955,11 @@ output_encodings (struct outp_driver *this)
 
          while (ds_get_config_line (f, &buf, &where))
            {
-             char *sp;
-             
+             char *sp; 
+
+             if (buf.length == 0) 
+               continue;
+
              pschar = strtok_r (ds_value (&buf), " \t\r\n", &sp);
              code = strtok_r (NULL, " \t\r\n", &sp);
              if (*pschar == 0 || *code == 0)
@@ -1067,14 +1067,13 @@ static void
 add_encoding (struct outp_driver *this, char *filename)
 {
   struct ps_driver_ext *x = this->ext;
-
   struct ps_encoding **pe;
 
   filename = find_encoding_file (this, filename);
   if (!filename)
     return;
 
-  pe = (struct ps_encoding **) hsh_probe (x->encodings, (void *) &filename);
+  pe = (struct ps_encoding **) hsh_probe (x->encodings, &filename);
   if (*pe)
     {
       free (filename);
@@ -1629,8 +1628,8 @@ preclose (struct file_ext *f)
            "%%%%DocumentNeededResources:%s"),
           x->eol, x->file_page_number, x->eol, x->eol);
 
-  hsh_iterator_init (iter);
-  while ((fe = hsh_foreach (x->loaded, &iter)) != NULL)
+  for (fe = hsh_first (x->loaded, &iter); fe != NULL;
+       fe = hsh_next (x->loaded, &iter)) 
     {
       char buf[256], *cp;
 
@@ -1653,7 +1652,7 @@ preclose (struct file_ext *f)
   return 1;
 }
 
-int
+static int
 ps_open_page (struct outp_driver *this)
 {
   struct ps_driver_ext *x = this->ext;
@@ -1710,7 +1709,7 @@ ps_open_page (struct outp_driver *this)
   return !ferror (x->file.file);
 }
 
-int
+static int
 ps_close_page (struct outp_driver *this)
 {
   struct ps_driver_ext *x = this->ext;
@@ -1733,16 +1732,22 @@ ps_close_page (struct outp_driver *this)
 
 /* qsort() comparison function for int tuples. */
 static int
-int_2_compare (const void *a, const void *b)
+int_2_compare (const void *a_, const void *b_)
 {
-  return *((const int *) a) - *((const int *) b);
+  const int *a = a_;
+  const int *b = b_;
+
+  return *a < *b ? -1 : *a > *b;
 }
 
 /* Hash table comparison function for cached lines. */
 static int
-compare_line (const void *a, const void *b, void *foo unused)
+compare_line (const void *a_, const void *b_, void *foo unused)
 {
-  return ((struct line_form *) a)->ind - ((struct line_form *) b)->ind;
+  const struct line_form *a = a_;
+  const struct line_form *b = b_;
+
+  return a->ind < b->ind ? -1 : a->ind > b->ind;
 }
 
 /* Hash table hash function for cached lines. */
@@ -1828,14 +1833,18 @@ dump_lines (struct outp_driver *this)
   struct ps_driver_ext *x = this->ext;
 
   struct hsh_iterator iter;
-  struct line_form *line;
   int type;
 
-  hsh_iterator_init (iter);
   for (type = 0; type < n_line_types; type++)
     {
-      while (NULL != (line = hsh_foreach (x->lines[type], &iter)))
-       {
+      struct line_form *line;
+
+      if (x->lines[type] == NULL) 
+        continue;
+
+      for (line = hsh_first (x->lines[type], &iter); line != NULL;
+           line = hsh_next (x->lines[type], &iter)) 
+        {
          int i;
          int lo = INT_MIN, hi;
 
@@ -1882,8 +1891,7 @@ line (struct outp_driver *this, int type, int ind, int dep1, int dep2)
   if (ext->lines[type] == NULL)
     ext->lines[type] = hsh_create (31, compare_line, hash_line,
                                   free_line, NULL);
-  f = (struct line_form **) hsh_probe (ext->lines[type],
-                                      (struct line_form *) & ind);
+  f = (struct line_form **) hsh_probe (ext->lines[type], &ind);
   if (*f == NULL)
     {
       *f = xmalloc (sizeof **f + sizeof (int[15][2]));
@@ -1904,7 +1912,7 @@ line (struct outp_driver *this, int type, int ind, int dep1, int dep2)
   (*f)->ndep++;
 }
 
-void
+static void
 ps_line_horz (struct outp_driver *this, const struct rect *r,
              const struct color *c unused, int style)
 {
@@ -1921,7 +1929,7 @@ ps_line_horz (struct outp_driver *this, const struct rect *r,
     line (this, style, y, r->x1, r->x2);
 }
 
-void
+static void
 ps_line_vert (struct outp_driver *this, const struct rect *r,
              const struct color *c unused, int style)
 {
@@ -1943,7 +1951,7 @@ ps_line_vert (struct outp_driver *this, const struct rect *r,
 #define T (style->t != OUTP_L_NONE)
 #define B (style->b != OUTP_L_NONE)
 
-void
+static void
 ps_line_intersection (struct outp_driver *this, const struct rect *r,
                      const struct color *c unused,
                      const struct outp_styles *style)
@@ -2025,38 +2033,25 @@ ps_line_intersection (struct outp_driver *this, const struct rect *r,
     }
 }
 
-void
-ps_line_width (struct outp_driver *this, int *width, int *height)
-{
-  struct ps_driver_ext *x = this->ext;
-
-  assert (this->driver_open && this->page_open);
-  width[0] = height[0] = 0;
-  width[1] = height[1] = 2 * x->line_gutter + x->line_width;
-  width[2] = height[2] = (2 * x->line_gutter + 2 * x->line_width
-                         + x->line_space);
-  width[3] = height[3] = 2 * x->line_gutter + x->line_width;
-}
-
-void
+static void
 ps_box (struct outp_driver *this unused, const struct rect *r unused,
        const struct color *bord unused, const struct color *fill unused)
 {
   assert (this->driver_open && this->page_open);
 }
 
-void 
+static void 
 ps_polyline_begin (struct outp_driver *this unused,
                   const struct color *c unused)
 {
   assert (this->driver_open && this->page_open);
 }
-void 
+static void 
 ps_polyline_point (struct outp_driver *this unused, int x unused, int y unused)
 {
   assert (this->driver_open && this->page_open);
 }
-void 
+static void 
 ps_polyline_end (struct outp_driver *this unused)
 {
   assert (this->driver_open && this->page_open);
@@ -2153,7 +2148,7 @@ draw_headers (struct outp_driver *this)
 \f
 /* Text. */
 
-void
+static void
 ps_text_set_font_by_name (struct outp_driver *this, const char *dit)
 {
   struct ps_driver_ext *x = this->ext;
@@ -2182,7 +2177,7 @@ ps_text_set_font_by_name (struct outp_driver *this, const char *dit)
   x->current = fe;
 }
 
-void
+static void
 ps_text_set_font_by_position (struct outp_driver *this, int pos)
 {
   struct ps_driver_ext *x = this->ext;
@@ -2229,7 +2224,7 @@ ps_text_set_font_by_position (struct outp_driver *this, int pos)
   local_free (dit);
 }
 
-void
+static void
 ps_text_set_font_family (struct outp_driver *this, const char *s)
 {
   struct ps_driver_ext *x = this->ext;
@@ -2240,7 +2235,7 @@ ps_text_set_font_family (struct outp_driver *this, const char *s)
   x->family = xstrdup (s);
 }
 
-const char *
+static const char *
 ps_text_get_font_name (struct outp_driver *this)
 {
   struct ps_driver_ext *x = this->ext;
@@ -2249,7 +2244,7 @@ ps_text_get_font_name (struct outp_driver *this)
   return x->current->font->name;
 }
 
-const char *
+static const char *
 ps_text_get_font_family (struct outp_driver *this)
 {
   struct ps_driver_ext *x = this->ext;
@@ -2258,7 +2253,7 @@ ps_text_get_font_family (struct outp_driver *this)
   return x->family;
 }
 
-int
+static int
 ps_text_set_size (struct outp_driver *this, int size)
 {
   struct ps_driver_ext *x = this->ext;
@@ -2268,7 +2263,7 @@ ps_text_set_size (struct outp_driver *this, int size)
   return 1;
 }
 
-int
+static int
 ps_text_get_size (struct outp_driver *this, int *em_width)
 {
   struct ps_driver_ext *x = this->ext;
@@ -2304,8 +2299,8 @@ static unsigned
 hash_ps_combo (const void *pa, void *foo unused)
 {
   const struct ps_font_combo *a = pa;
-
-  return hashpjw (a->font->font->internal_name) ^ a->size;
+  unsigned name_hash = hsh_hash_string (a->font->font->internal_name);
+  return name_hash ^ hsh_hash_int (a->size);
 }
 
 /* Hash table free function for ps_combo structs. */
@@ -2745,9 +2740,6 @@ text (struct outp_driver *this, struct outp_text *t, int draw)
            }
 
          x += kern_amt;
-#if __CHECKER__
-         memset (buf_loc, 0, sizeof *buf_loc);
-#endif
          buf_loc->font = ext->current;
          buf_loc->size = ext->size;
          buf_loc->x = x;
@@ -2783,14 +2775,14 @@ exit:
   ext->size = old_size;
 }
 
-void
+static void
 ps_text_metrics (struct outp_driver *this, struct outp_text *t)
 {
   assert (this->driver_open && this->page_open);
   text (this, t, 0);
 }
 
-void
+static void
 ps_text_draw (struct outp_driver *this, struct outp_text *t)
 {
   assert (this->driver_open && this->page_open);
@@ -2819,10 +2811,10 @@ compare_filename2font (const void *a, const void *b, void *param unused)
 
 /* Hash table hash function for filename2font structs. */
 static unsigned
-hash_filename2font (const void *a, void *param unused)
+hash_filename2font (const void *f2f_, void *param unused)
 {
-  /* I sure hope this works with long filenames. */
-  return hashpjw (((struct filename2font *) a)->filename);
+  const struct filename2font *f2f = f2f_;
+  return hsh_hash_string (f2f->filename);
 }
 
 /* Initializes the global font list by creating the hash table for