Changed all the licence notices in all the files.
[pspp-builds.git] / src / postscript.c
index b911f8ccdd6ec08588b6a6996aac77cd8dbea060..2caf2a651adfdabc31216072ae5d949f5f237d44 100644 (file)
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA. */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
 
 #include <config.h>
 
@@ -23,7 +23,7 @@
 #if !NO_POSTSCRIPT
 
 #include <ctype.h>
-#include <assert.h>
+#include "error.h"
 #include <errno.h>
 #include <limits.h>
 #include <stdlib.h>
@@ -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 */