Change license from GPLv2+ to GPLv3+.
[pspp-builds.git] / src / output / manager.c
index 3647abb01fc610683512e71fbbe82218e5a3af3b..2d16416aef49ded08f92e457a7d8ea153ed7bf9f 100644 (file)
@@ -1,29 +1,25 @@
-/* PSPP - computes sample statistics.
+/* PSPP - a program for statistical analysis.
    Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
-   Written by Ben Pfaff <blp@gnu.org>.
 
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
    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., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA. */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <config.h>
 #include "manager.h"
-#include "message.h"
 #include <stdio.h>
 #include <stdlib.h>
+#include <libpspp/assertion.h>
 #include "output.h"
-#include "debug-print.h"
 
 /* Table. */
 int table_num = 1;
@@ -56,17 +52,17 @@ void
 som_blank_line (void)
 {
   struct outp_driver *d;
-  
+
   for (d = outp_drivers (NULL); d; d = outp_drivers (d))
     if (d->page_open && d->cp_y != 0)
       d->cp_y += d->font_height;
 }
 \f
 /* Driver. */
-static struct outp_driver *d=0;
+static struct outp_driver *d = 0;
 
 /* Table. */
-static struct som_entity *t=0;
+static struct som_entity *t = 0;
 
 /* Flags. */
 static unsigned flags;
@@ -93,13 +89,13 @@ static void output_entity (struct outp_driver *, struct som_entity *);
 void
 som_submit (struct som_entity *t)
 {
-#if GLOBAL_DEBUGGING
+#if DEBUGGING
   static int entry;
-  
+
   assert (entry++ == 0);
 #endif
 
-  if ( t->type == SOM_TABLE) 
+  if ( t->type == SOM_TABLE)
     {
       t->class->table (t);
       t->class->flags (&flags);
@@ -107,12 +103,12 @@ som_submit (struct som_entity *t)
       t->class->headers (&hl, &hr, &ht, &hb);
 
 
-#if GLOBAL_DEBUGGING
+#if DEBUGGING
       if (hl + hr > nc || ht + hb > nr)
        {
          printf ("headers: (l,r)=(%d,%d), (t,b)=(%d,%d) in table size (%d,%d)\n",
                  hl, hr, ht, hb, nc, nr);
-         abort ();
+         NOT_REACHED ();
        }
       else if (hl + hr == nc)
        printf ("warning: headers (l,r)=(%d,%d) in table width %d\n", hl, hr, nc);
@@ -124,18 +120,18 @@ som_submit (struct som_entity *t)
 
       if (!(flags & SOMF_NO_TITLE))
        subtable_num++;
-  
+
     }
-  
+
   {
     struct outp_driver *d;
-    
+
     for (d = outp_drivers (NULL); d; d = outp_drivers (d))
        output_entity (d, t);
 
   }
-  
-#if GLOBAL_DEBUGGING
+
+#if DEBUGGING
   assert (--entry == 0);
 #endif
 }
@@ -147,13 +143,7 @@ output_entity (struct outp_driver *driver, struct som_entity *entity)
   bool fits_width, fits_length;
   d = driver;
 
-  assert (d->driver_open);
-  if (!d->page_open && !d->class->open_page (d))
-    {
-      d->device = OUTP_DEV_DISABLED;
-      return;
-    }
-  
+  outp_open_page (d);
   if (d->class->special || entity->type == SOM_CHART)
     {
       driver->class->submit (d, entity);
@@ -161,12 +151,12 @@ output_entity (struct outp_driver *driver, struct som_entity *entity)
     }
 
   t = entity;
-  
+
   t->class->driver (d);
   t->class->area (&tw, &th);
   fits_width = t->class->fits_width (d->width);
   fits_length = t->class->fits_length (d->length);
-  if (!fits_width || !fits_length) 
+  if (!fits_width || !fits_length)
     {
       int tl, tr, tt, tb;
       tl = fits_width ? hl : 0;
@@ -177,17 +167,17 @@ output_entity (struct outp_driver *driver, struct som_entity *entity)
       t->class->driver (d);
       t->class->area (&tw, &th);
     }
-  
+
   if (!(flags & SOMF_NO_SPACING) && d->cp_y != 0)
     d->cp_y += d->font_height;
-       
+
   if (cs != SOM_COL_NONE
       && 2 * (tw + d->prop_em_width) <= d->width
       && nr - (ht + hb) > 5)
     render_columns ();
   else if (tw < d->width && th + d->cp_y < d->length)
     render_simple ();
-  else 
+  else
     render_segments ();
 
   t->class->set_headers (hl, hr, ht, hb);
@@ -200,27 +190,29 @@ render_columns (void)
   int y0, y1;
   int max_len = 0;
   int index = 0;
-  
+
   assert (cs == SOM_COL_DOWN);
   assert (d->cp_x == 0);
 
   for (y0 = ht; y0 < nr - hb; y0 = y1)
     {
       int len;
-      
+
       t->class->cumulate (SOM_ROWS, y0, &y1, d->length - d->cp_y, &len);
 
       if (y0 == y1)
        {
          assert (d->cp_y);
          outp_eject_page (d);
-       } else {
+       }
+      else
+        {
          if (len > max_len)
            max_len = len;
 
          t->class->title (index++, 0);
          t->class->render (0, y0, nc, y1);
-         
+
          d->cp_x += tw + 2 * d->prop_em_width;
          if (d->cp_x + tw > d->width)
            {
@@ -230,7 +222,7 @@ render_columns (void)
            }
        }
     }
-  
+
   if (d->cp_x > 0)
     {
       d->cp_x = 0;
@@ -255,17 +247,17 @@ static void
 render_segments (void)
 {
   int count = 0;
-  
+
   int x_index;
   int x0, x1;
-  
+
   assert (d->cp_x == 0);
 
   for (x_index = 0, x0 = hl; x0 < nc - hr; x0 = x1, x_index++)
     {
       int y_index;
       int y0, y1;
-      
+
       t->class->cumulate (SOM_COLUMNS, x0, &x1, d->width, NULL);
       if (x_index == 0 && x1 != nc - hr)
        x_index++;
@@ -273,10 +265,10 @@ render_segments (void)
       for (y_index = 0, y0 = ht; y0 < nr - hb; y0 = y1, y_index++)
        {
          int len;
-      
+
          if (count++ != 0 && d->cp_y != 0)
            d->cp_y += d->font_height;
-             
+
          t->class->cumulate (SOM_ROWS, y0, &y1, d->length - d->cp_y, &len);
          if (y_index == 0 && y1 != nr - hb)
            y_index++;
@@ -285,11 +277,13 @@ render_segments (void)
            {
              assert (d->cp_y);
              outp_eject_page (d);
-           } else {
+           }
+          else
+            {
              t->class->title (x_index ? x_index : y_index,
                               x_index ? y_index : 0);
              t->class->render (x0, y0, x1, y1);
-         
+
              d->cp_y += len;
            }
        }