Clean up file handle code in preparation to add temporary file
[pspp] / src / dfm-read.c
index 4bc59caf92bcc9e6a690da30f8b0086f3a3a3a0a..a739b5c32f1bd66d5cb531c1edf9a71738fd220d 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>
 #include "dfm-read.h"
 #include "command.h"
 #include "error.h"
 #include "file-handle.h"
+#include "file-handle-def.h"
 #include "filename.h"
-#include "getline.h"
+#include "getl.h"
 #include "lexer.h"
 #include "str.h"
 #include "vfm.h"
 
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
 #include "debug-print.h"
 
 /* Flags for DFM readers. */
@@ -81,8 +85,9 @@ dfm_close_reader (struct dfm_reader *r)
       if (!still_open) 
         {
           /* Skip any remaining data on the inline file. */
-          while ((r->flags & DFM_EOF) == 0)
-            read_record (r);
+          if (r->flags & DFM_SAW_BEGIN_DATA)
+            while ((r->flags & DFM_EOF) == 0)
+              read_record (r);
           inline_file = NULL;
         }
     }
@@ -131,7 +136,7 @@ dfm_open_reader (struct file_handle *fh)
   r->fh = fh;
   if (fh != NULL) 
     {
-      r->where.filename = handle_get_filename (fh);
+      r->where.filename = fh_get_filename (fh);
       r->where.line_number = 0; 
     }
   r->file.file = NULL;
@@ -141,7 +146,7 @@ dfm_open_reader (struct file_handle *fh)
 
   if (fh != NULL)
     {
-      r->file.filename = xstrdup (handle_get_filename (r->fh));
+      r->file.filename = xstrdup (fh_get_filename (r->fh));
       r->file.mode = "rb";
       r->file.file = NULL;
       r->file.sequence_no = NULL;
@@ -152,7 +157,7 @@ dfm_open_reader (struct file_handle *fh)
        {
          msg (ME, _("Could not open \"%s\" for reading "
                      "as a data file: %s."),
-               handle_get_filename (r->fh), strerror (errno));
+               fh_get_filename (r->fh), strerror (errno));
           err_cond_fail ();
           fh_close (fh,"data file", "rs");
           free (r);
@@ -236,7 +241,7 @@ static int
 read_file_record (struct dfm_reader *r)
 {
   assert (r->fh != NULL);
-  if (handle_get_mode (r->fh) == MODE_TEXT)
+  if (fh_get_mode (r->fh) == MODE_TEXT)
     {
       ds_clear (&r->line);
       if (!ds_gets (&r->line, r->file.file)) 
@@ -244,15 +249,15 @@ read_file_record (struct dfm_reader *r)
           if (ferror (r->file.file))
             {
               msg (ME, _("Error reading file %s: %s."),
-                   handle_get_name (r->fh), strerror (errno));
+                   fh_get_name (r->fh), strerror (errno));
               err_cond_fail ();
             }
           return 0;
         }
     }
-  else if (handle_get_mode (r->fh) == MODE_BINARY)
+  else if (fh_get_mode (r->fh) == MODE_BINARY)
     {
-      size_t record_width = handle_get_record_width (r->fh);
+      size_t record_width = fh_get_record_width (r->fh);
       size_t amt;
 
       if (ds_length (&r->line) < record_width) 
@@ -264,10 +269,10 @@ read_file_record (struct dfm_reader *r)
         {
           if (ferror (r->file.file))
             msg (ME, _("Error reading file %s: %s."),
-                 handle_get_name (r->fh), strerror (errno));
+                 fh_get_name (r->fh), strerror (errno));
           else if (amt != 0)
             msg (ME, _("%s: Partial record at end of file."),
-                 handle_get_name (r->fh));
+                 fh_get_name (r->fh));
           else
             return 0;
 
@@ -310,7 +315,7 @@ dfm_eof (struct dfm_reader *r)
         {
           if (r->fh != NULL)
             msg (SE, _("Attempt to read beyond end-of-file on file %s."),
-                 handle_get_name (r->fh));
+                 fh_get_name (r->fh));
           else
             msg (SE, _("Attempt to read beyond END DATA."));
           err_cond_fail ();
@@ -355,14 +360,14 @@ dfm_expand_tabs (struct dfm_reader *r)
   r->flags |= DFM_TABS_EXPANDED;
 
   if (r->fh != NULL
-      && (handle_get_mode (r->fh) == MODE_BINARY
-          || handle_get_tab_width (r->fh) == 0
+      && (fh_get_mode (r->fh) == MODE_BINARY
+          || fh_get_tab_width (r->fh) == 0
           || memchr (ds_c_str (&r->line), '\t', ds_length (&r->line)) == NULL))
     return;
 
   /* Expand tabs from r->line into r->scratch, and figure out
      new value for r->pos. */
-  tab_width = r->fh != NULL ? handle_get_tab_width (r->fh) : 8;
+  tab_width = r->fh != NULL ? fh_get_tab_width (r->fh) : 8;
   ds_clear (&r->scratch);
   new_pos = 0;
   for (ofs = 0; ofs < ds_length (&r->line); ofs++)