\f
/* Driver initialization. */
-int
+static int
ps_open_global (struct outp_class *this unused)
{
init_fonts ();
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. */
return valid_sizes;
}
-int
+static int
ps_preopen_driver (struct outp_driver *this)
{
struct ps_driver_ext *x;
return 1;
}
-int
+static int
ps_postopen_driver (struct outp_driver *this)
{
struct ps_driver_ext *x = this->ext;
return 1;
}
-int
+static int
ps_close_driver (struct outp_driver *this)
{
struct ps_driver_ext *x = this->ext;
/* 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. */
};
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;
}
}
break;
-#if __CHECKER__
- case 42000:
- assert (0);
-#endif
default:
assert (0);
}
{
const struct ps_encoding *a = pa;
- return hashpjw (a->filename);
+ return hsh_hash_string (a->filename);
}
/* Hash table free function for ps_encoding's. */
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;
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)
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);
"%%%%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;
return 1;
}
-int
+static int
ps_open_page (struct outp_driver *this)
{
struct ps_driver_ext *x = this->ext;
return !ferror (x->file.file);
}
-int
+static int
ps_close_page (struct outp_driver *this)
{
struct ps_driver_ext *x = this->ext;
/* 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. */
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;
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]));
(*f)->ndep++;
}
-void
+static void
ps_line_horz (struct outp_driver *this, const struct rect *r,
const struct color *c unused, int style)
{
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)
{
#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)
}
}
-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);
\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;
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;
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;
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;
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;
return x->family;
}
-int
+static int
ps_text_set_size (struct outp_driver *this, int size)
{
struct ps_driver_ext *x = this->ext;
return 1;
}
-int
+static int
ps_text_get_size (struct outp_driver *this, int *em_width)
{
struct ps_driver_ext *x = this->ext;
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. */
}
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;
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);
/* 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