X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fpostscript.c;h=ebad2472655f1d25734edce3744ea3d6c740576f;hb=7dc203206d3f3172474a4ec0f4dcab5364f4ce26;hp=b911f8ccdd6ec08588b6a6996aac77cd8dbea060;hpb=f2828f801736701c0294803b5dedd4c4ab63b45e;p=pspp diff --git a/src/postscript.c b/src/postscript.c index b911f8ccdd..ebad247265 100644 --- a/src/postscript.c +++ b/src/postscript.c @@ -23,7 +23,7 @@ #if !NO_POSTSCRIPT #include -#include +#include "error.h" #include #include #include @@ -267,6 +267,7 @@ static unsigned hash_font_entry (const void *, void *param); static void free_font_entry (void *, void *foo); static struct font_entry *load_font (struct outp_driver *, const char *dit); static void init_fonts (void); +static void done_fonts (void); static void dump_lines (struct outp_driver *this); @@ -297,6 +298,8 @@ ps_open_global (struct outp_class *this UNUSED) static int ps_close_global (struct outp_class *this UNUSED) { + groff_done (); + done_fonts (); return 1; } @@ -567,7 +570,7 @@ ps_option (struct outp_driver *this, const char *key, const struct string *val) { struct ps_driver_ext *x = this->ext; int cat, subcat; - char *value = ds_value (val); + char *value = ds_c_str (val); cat = outp_match_keyword (key, option_tab, &option_info, &subcat); @@ -661,6 +664,7 @@ ps_option (struct outp_driver *this, const char *key, const struct string *val) break; default: assert (0); + abort (); } if (setting) x->output_options |= mask; @@ -762,6 +766,7 @@ ps_option (struct outp_driver *this, const char *key, const struct string *val) break; default: assert (0); + abort (); } if (*dest) free (*dest); @@ -896,8 +901,8 @@ output_encodings (struct outp_driver *this) struct string line, buf; - ds_init (NULL, &line, 128); - ds_init (NULL, &buf, 128); + ds_init (&line, 128); + ds_init (&buf, 128); for (pe = hsh_first (x->encodings, &iter); pe != NULL; pe = hsh_next (x->encodings, &iter)) { @@ -944,7 +949,7 @@ output_encodings (struct outp_driver *this) if (buf.length == 0) continue; - pschar = strtok_r (ds_value (&buf), " \t\r\n", &sp); + pschar = strtok_r (ds_c_str (&buf), " \t\r\n", &sp); code = strtok_r (NULL, " \t\r\n", &sp); if (*pschar == 0 || *code == 0) continue; @@ -982,14 +987,14 @@ output_encodings (struct outp_driver *this) if (ds_length (&line) + strlen (temp) > 70) { - ds_concat (&line, x->eol); - fputs (ds_value (&line), x->file.file); + ds_puts (&line, x->eol); + fputs (ds_c_str (&line), x->file.file); ds_clear (&line); } - ds_concat (&line, temp); + ds_puts (&line, temp); } - ds_concat (&line, x->eol); - fputs (ds_value (&line), x->file.file); + ds_puts (&line, x->eol); + fputs (ds_c_str (&line), x->file.file); if (fclose (f) == EOF) msg (MW, _("PostScript driver: Error closing encoding file `%s'."), @@ -1102,7 +1107,7 @@ read_ps_encodings (struct outp_driver *this) where.line_number = 0; err_push_file_locator (&where); - ds_init (NULL, &line, 128); + ds_init (&line, 128); for (;;) { @@ -2410,6 +2415,7 @@ write_text (struct outp_driver *this, break; default: assert (0); + abort (); } lp = line; @@ -2540,7 +2546,7 @@ text (struct outp_driver *this, struct outp_text *t, int draw) buf_loc = buf; assert (!ls_null_p (&t->s)); - cp = ls_value (&t->s); + cp = ls_c_str (&t->s); end = ls_end (&t->s); if (draw) { @@ -2575,7 +2581,7 @@ text (struct outp_driver *this, struct outp_text *t, int draw) char_name = local_char_name; if (ext->current->font->ligatures && *cp == 'f') { - int lig; + int lig = 0; char_name = NULL; if (cp < end - 1) @@ -2604,7 +2610,7 @@ text (struct outp_driver *this, struct outp_text *t, int draw) } if ((lig & ext->current->font->ligatures) == 0) { - local_char_name[0] = *cp++; /* 'f' */ + local_char_name[0] = *cp; /* 'f' */ char_name = local_char_name; } } @@ -2812,6 +2818,12 @@ init_fonts (void) NULL, NULL); } +static void +done_fonts (void) +{ + hsh_destroy (ps_fonts); +} + /* Loads the font having Groff name DIT into THIS driver instance. Specifically, adds it into the THIS driver's `loaded' hash table. */ @@ -2859,6 +2871,28 @@ load_font (struct outp_driver *this, const char *dit) return fe; } + +void ps_chart_initialise(struct outp_class *c UNUSED, + struct chart *ch UNUSED); + +void ps_chart_finalise(struct outp_class *c UNUSED, + struct chart *ch UNUSED); + + +void +ps_chart_initialise(struct outp_class *c UNUSED, struct chart *ch ) +{ + msg(MW, _("Charts are currently unsupported with postscript drivers.")); + ch->lp = 0; +} + +void +ps_chart_finalise(struct outp_class *c UNUSED, struct chart *ch UNUSED) +{ + +} + + /* PostScript driver class. */ struct outp_class postscript_class = { @@ -2898,6 +2932,9 @@ struct outp_class postscript_class = ps_text_get_size, ps_text_metrics, ps_text_draw, + + ps_chart_initialise, + ps_chart_finalise }; /* EPSF driver class. FIXME: Probably doesn't work right. */ @@ -2939,6 +2976,10 @@ struct outp_class epsf_class = ps_text_get_size, ps_text_metrics, ps_text_draw, + + ps_chart_initialise, + ps_chart_finalise + }; #endif /* NO_POSTSCRIPT */