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. */
#if !file_handle_h
#define file_handle_h 1
-/* File handle provider (fhp).
-
- This module provides file handles in the form of file_handle
- structures to the dfm and sfm modules, which are known as file
- handle users (fhusers). fhp does not know anything about file
- contents. */
+/* File handles. */
#include <stddef.h>
-#include "error.h"
-
-/* Record formats. */
-enum
- {
- FH_RF_FIXED, /* Fixed length records. */
- FH_RF_VARIABLE, /* Variable length records. */
- FH_RF_SPANNED /* ? */
- };
/* File modes. */
-enum
+enum file_handle_mode
{
- FH_MD_CHARACTER, /* Character data. */
- FH_MD_IMAGE, /* ? */
- FH_MD_BINARY, /* Character and/or binary data. */
- FH_MD_MULTIPUNCH, /* Column binary data (not supported). */
- FH_MD_360 /* ? */
+ MODE_TEXT, /* New-line delimited lines. */
+ MODE_BINARY /* Fixed-length records. */
};
-struct file_handle;
-/* Services that fhusers provide to fhp. */
-struct fh_ext_class
- {
- int magic; /* Magic identifier for fhuser. */
- const char *name; /* String identifier for fhuser. */
- void (*close) (struct file_handle *);
- /* Closes any associated file, etc. */
- };
-
-/* Opaque structure. The `ext' member is an exception for use by
- subclasses. `where.ln' is also acceptable. */
-struct file_handle
- {
- /* name must be the first member. */
- const char *name; /* File handle identifier. */
- char *norm_fn; /* Normalized filename. */
- char *fn; /* Filename as provided by user. */
- struct file_locator where; /* Used for reporting error messages. */
-
- int recform; /* One of FH_RF_*. */
- size_t lrecl; /* Length of records for FH_RF_FIXED. */
- int mode; /* One of FH_MD_*. */
-
- struct fh_ext_class *class; /* Polymorphism support. */
- void *ext; /* Extension struct for fhuser use. */
- };
+void fh_init(void);
+void fh_done(void);
-/* All the file handles in the system. */
-extern struct avl_tree *files;
+/* Parsing handles. */
+struct file_handle *fh_parse (void);
-/* Pointer to the file handle that corresponds to data in the command
- file entered via BEGIN DATA/END DATA. */
-extern struct file_handle *inline_file;
/* Opening and closing handles. */
-struct file_handle *fh_get_handle_by_name (const char name[9]);
-struct file_handle *fh_get_handle_by_filename (const char *filename);
-struct file_handle *fh_parse_file_handle (void);
-void fh_close_handle (struct file_handle *handle);
+void **fh_open (struct file_handle *, const char *type, const char *mode);
+int fh_close (struct file_handle *, const char *type, const char *mode);
/* Handle info. */
-const char *fh_handle_name (struct file_handle *handle);
-char *fh_handle_filename (struct file_handle *handle);
-size_t fh_record_width (struct file_handle *handle);
+const char *handle_get_name (const struct file_handle *);
+const char *handle_get_filename (const struct file_handle *);
+enum file_handle_mode handle_get_mode (const struct file_handle *);
+size_t handle_get_record_width (const struct file_handle *);
+size_t handle_get_tab_width (const struct file_handle *);
#endif /* !file_handle.h */