r6: *** empty log message ***
[ctsim.git] / include / sdf.h
index e22efe3ea718e213de2526463483e95531e39d5d..be1c7932d857ce503191f84be8988ef4023d051e 100644 (file)
-/* FILE IDENTIFICATION\r
- *\r
- *     Name:         sdf.h         Header file for Standard Data FIle system\r
- *     Programmer:   Kevin Rosenberg\r
- *     Date Started:  9-18-84\r
- *     Last Change:  12-24-84\r
- */\r
-\r
-#ifndef __H_SDF\r
-#define __H_SDF\r
-\r
-#include "kmath.h"\r
-\r
-\r
-/*----------------*/\r
-/* SYSTEM ALIASES */\r
-/*----------------*/\r
-\r
-#define SDF_VERSION  2\r
-#define SDF_ID_STR   "SDF"\r
-\r
-/*------------------*/\r
-/* DEFINITION BLOCK */\r
-/*------------------*/\r
-\r
-/* fixed system constants */\r
-\r
-#define BLK_SIZE   256         /* Size of a header block */\r
-#define NUM_DIRBLK   1         /* number of directory blocks */\r
-\r
-/* block types */\r
-\r
-#define BT_EMPTY       0       /* Not being used */\r
-#define BT_DIRECTORY   1       /* First blocks in file */\r
-#define BT_LABEL       2       /* Label block */\r
-\r
-/* label types */\r
-\r
-#define LT_EMPTY         0     /* label record is available for use */\r
-#define LT_TITLE         1     /* descriptive label given by user */\r
-#define LT_HISTORY       2     /* history label generated by application */\r
-                               /* program */\r
-#define LT_NOTE                  3     /* A note created with a label editor */\r
-\r
-/* codes for open_sdf and create_sdf */\r
-\r
-#define SDF_RDONLY  0\r
-#define SDF_WRONLY  1\r
-#define SDF_RDWR    2\r
-\r
-/* function return codes */\r
-\r
-#define SDF_ERROR  ERROR\r
-#define SDF_2D_ERROR SDF_ERROR\r
-#define SDF_OK    OK\r
-\r
-/* types of sdf file, this area is EXPANDABLE */\r
-\r
-#define SDF_FTYPE_2D   10      /* Two-dimensional data file */\r
-\r
-\r
-/* BLOCK IDENTIFICATION\r
- *\r
- *   Name: Directory Header Block\r
- *   Size: Multiple of BLK_SIZE\r
- *\r
- * DESCRIPTION\r
- *    This is the first block of a sdf file.  It contains information on the \r
- *    size of the users' data plus the number and type of header blocks.\r
- */\r
-\r
-struct dir_blk_st {\r
-    int block_type;            /* required at the beginning of every block */\r
-                               /* to identify type of block */\r
-\r
-    char id_str[4];            /* identification string == SDF_ID_STR */\r
-    int sdf_version;           /* which version of sdf system == SDF_VERSION */\r
-\r
-    int blk_size;              /* size of a header block in bytes */\r
-\r
-    int df_type;               /* type of data file, used as identification */\r
-                               /* by application programs */\r
-\r
-    unsigned int num_dirblk;   /* number of directory header blocks */\r
-                               /* currently, only 1 block long */\r
-     \r
-/* label directory */\r
-\r
-     unsigned int start_label; /* starting position of label header blocks */\r
-     unsigned int num_label;   /* number of label header blocks */\r
-\r
-/* data header info */\r
-\r
-    unsigned int start_dhead;  /* block number of the start of the users' */\r
-                               /* data header blocks */\r
-    unsigned int num_dhead;    /* number of data header blocks */\r
-    unsigned int dhead_len;    /* length of data header in bytes */\r
-\r
-/* data record info */\r
-\r
-    unsigned int start_drec;   /* block number of start of data records */\r
-    unsigned int num_drec;     /* number of of user data records */\r
-    unsigned int drec_size;    /* size of users' record */\r
-    int num_dval;              /* number of values in each data record */\r
-    int dval_size;             /* size of data value in bytes */\r
-                               /* NOTE:  drec_size = dval_size * num_dval */\r
-};\r
-\r
-\r
-/* BLOCK IDENTIFICATION\r
- *\r
- *    Name:  Label block\r
- *    Size:  BLK_SIZE\r
- *\r
- * DESCRIPTION                              \r
- *        This block contains both user and history labels.  Labels are alpha-\r
- *     numeric.  History labels include time & date stamp plus calculation time.  \r
- */\r
-\r
-#define LABEL_LEN        159    /* size of alphanumeric label */\r
-#define LABELS_PER_BLOCK  1\r
-                               /* number of labels in each block */\r
-\r
-struct label_blk_st {\r
-    int block_type;            /* required at the beginning of every block */\r
-    int label_type;            /* type of label */\r
-    char label_str[LABEL_LEN+1];/* alpha numeric label */\r
-\r
-/* history label time stamping */\r
-\r
-    TIMEDATE timedate;         /* time and date of operation */\r
-    float calc_time;           /* calculation time in seconds */\r
-};\r
-\r
-\r
-/* BLOCK IDENTIFICATION\r
- *\r
- *     Name:  Data Header Block\r
- *     Size:  Variable, but always integer multiple of BLK_SIZE\r
- *\r
- * DESCRIPTION\r
- *       This block hold information entirely specific to the data in the sdf \r
- *     file, such as the user coordinates of the extent of an image, or the\r
- *     the rotation increment of raysum data.  When an application program\r
- *     reads or writes the data header, it passes the size in bytes of the\r
- *     data header to be read or written.  If the length of a data header\r
- *     being read doesn't match the length of the data header in the file,\r
- *     the header is still read, but a WARNING message is given.\r
- */\r
-\r
-\r
-\r
-/* STRUCTURE IDENTIFICATION\r
- *\r
- *     Name:  Data File Structure       Contains all information on open files\r
- *\r
- * DESCRIPTION\r
- *        This structure is generated by open_file() and create_file(), it is\r
- *     passed to all subroutines of the sdf system.\r
- */\r
-\r
-struct sdfile_st {\r
-    bool open;                 /* if file is open or not */\r
-    int  mode;                 /* read-write mode */\r
-    int  fd;                   /* file descriptor gotten from C library */\r
-    bool error;                        /* TRUE if error occurred, all further */\r
-                               /* procesing is stopped */\r
-    bool error_report;         /* Error reporting flag */\r
-\r
-    unsigned int blk_size;     /* size of a header block */\r
-    unsigned int num_dirblk;   /* number of directory header blocks */\r
-    char fname[MAXFULLNAME+1]; /* operating system filename */\r
-\r
-    int df_type;               /* identification type of data file */\r
-\r
-/* variables that are used when writing to a file, they define what parts\r
- * of the file have been written\r
- */\r
-\r
-    struct wrt {\r
-       unsigned dir : 1;       /* 1 if directory header has been written */\r
-       unsigned label : 1;     /* 1 if labels have been written */\r
-       unsigned dhead : 1;     /* 1 if data header has been written */\r
-       unsigned drec : 1;      /* 1 when data records have been written */\r
-    } written;\r
-\r
-/* Directory information to have about the file */\r
-\r
-    unsigned int start_label;  /* starting position of labels */\r
-    unsigned int num_label;    /* number of labels in file */\r
-\r
-    unsigned int dhead_len;    /* length of data header in bytes */\r
-\r
-    unsigned int num_drec;     /* number of data records */\r
-    unsigned int drec_size;    /* size of data records in bytes */\r
-    int num_dval;              /* number of values in each data record */\r
-    int dval_size;             /* size of data value in bytes */\r
-                               /* NOTE:  drec_size = dval_size * num_dval */\r
-\r
-/* ffset pointers into sdf file */\r
-\r
-    long int pos_dhead;                /* starting position of data header */\r
-    long int pos_drec;         /* starting position of users' data */\r
-};\r
-\r
-\r
-union sdf_blk_un {\r
-    char buf[BLK_SIZE];\r
-    struct dir_blk_st   dir;\r
-    struct label_blk_st lab;\r
-};\r
-\r
-typedef struct dir_blk_st      DIR_BLK;\r
-typedef struct label_blk_st    LABEL_BLK;\r
-typedef struct sdfile_st       SDFILE;\r
-typedef union  sdf_blk_un      SDF_BLK;\r
-\r
-\r
-/*----------------------------------------------------------------------*/\r
-/*             2-Dimensional Standard Data File Header                 */\r
-/*----------------------------------------------------------------------*/\r
-\r
-\r
-/* STRUCTURE IDENTIFICATION\r
- *\r
- *     Name:  sdf_2d_dhead_st          Data header for 2d data files\r
- *\r
- * DESCRIPTION\r
- *\r
- *         This structure holds the data that is stored in an image sdf file's\r
- *     data header.  It contains all data needed to use 2d data records\r
- */\r
-\r
-struct sdf_2d_dhead_st {\r
-       int file_type;          /* type of data making up this file */\r
-                               /* currenty, DFT_2D_IMAGE or DFT_2D_RAYSUM */\r
-       int nx;                 /* number of rows */\r
-       int ny;                 /* number of columns in row */\r
-       int val_type;           /* type of pixel value, eg, DT_FLOAT */\r
-       int val_size;           /* size of pixel value in bytes */\r
-\r
-       bool axis_ext_kwn;      /* TRUE if picture extent is known */\r
-                               /* stored in xmin,xmax,ymin,ymax */\r
-       double xmin, ymin;      /* position of lower left corner of picture */\r
-       double xmax, ymax;      /* position of upper right corner of picture */\r
-\r
-       bool axis_incr_kwn;     /* TRUE if increments are known */\r
-       double xinc, yinc;\r
-\r
-       bool val_ext_kwn;       /* TRUE if pixel extent is known */\r
-       double dvalmin, dvalmax;/* min & max data value for FLOAT & DOUBLE */\r
-       long lvalmin, lvalmax;  /* data extent for INT & LONG */\r
-};\r
-\r
-\r
-/* STRUCTURE IDENTIFICATION\r
- *\r
- *     Name:  sdf_2d_st                        Information about an sdf image\r
- *\r
- * DESCRIPTION\r
- *\r
- *         This structure holds all the information need to access an sdf\r
- *     image.\r
- */\r
-\r
-struct sdf_2d_st {\r
-  struct sdf_2d_dhead_st dhead;        /* image information that is stored in data header */\r
-  SDFILE *dfp;                 /* pointer to image's standard data file */\r
-  MTX *mtx;                    /* data values */\r
-  int memory_only; /* TRUE if sdf_2d file is stored in memory only */\r
-};\r
-\r
-typedef struct sdf_2d_dhead_st  SDF_2D_DHEAD;\r
-typedef struct sdf_2d_st        SDF_2D;\r
-\r
-/* types of 2d data files */\r
-\r
-#define SDF_2D_IMAGE   100             /* data file type is an image */\r
-#define SDF_2D_RAYSUM  101             /* raysum data file type */\r
-\r
-\r
-/* sdf.c */\r
-SDFILE *sdf_open(const char *filename, const int mode);\r
-SDFILE *sdf_create(const char *filename, const int mode, const unsigned int num_drec, const unsigned int num_dval, const int dval_size, const int df_type);\r
-int sdf_read_label(LABEL_BLK *lrec, const int nlab, SDFILE *dfp);\r
-int sdf_write_label(LABEL_BLK *lrec, const int nlab, SDFILE *dfp);\r
-int sdf_add_label(const int ltype, const char *lstr, const double calc_time, SDFILE *dfp);\r
-int sdf_add_empty_label(SDFILE *dfp);\r
-int sdf_copy_labels(SDFILE *dfp_to, SDFILE *dfp_from);\r
-int sdf_read_dhead(void *dh_buf, const unsigned int dhead_len, SDFILE *dfp);\r
-int sdf_write_dhead(const void *dh_buf, const unsigned int dhead_len, SDFILE *dfp);\r
-int sdf_read_drec(void *drec, const int start_rec, const int num_rec, SDFILE *dfp);\r
-int sdf_write_drec(const void *drec, const int start_rec, const int num_rec, SDFILE *dfp);\r
-int sdf_read_dval(void *dval, const int rec, const int start_val, const int num_val, SDFILE *dfp);\r
-int sdf_write_dval(const void *dval, const int rec, const int start_val, const int num_val, SDFILE *dfp);\r
-int sdf_close(SDFILE *dfp);\r
-void sdf_error_report(SDFILE *dfp, const int flag);\r
-void sdf_error(const SDFILE *dfp, const char *str, ...);\r
-bool sdf_check_dfp(const SDFILE *dfp, const int mode, const char *name);\r
-void *sdf_alloc_blk(const int n, SDFILE *dfp, const char *name);\r
-int sdf_free_blk(void *hb, SDFILE *dfp, const char *name);\r
-/* sdf_2d.c */\r
-SDF_2D *sdf_2d_open(const char *fname, const int mode);\r
-SDF_2D *sdf_2d_create(const char *fname, const int mode, const int nx, const int ny, const int val_type, const int df_type);\r
-int sdf_2d_save(SDF_2D *imp);\r
-int sdf_2d_restore(SDF_2D *imp);\r
-int sdf_2d_alloc_mtx(SDF_2D *imp);\r
-int sdf_2d_free_mtx(SDF_2D *sdf_2d);\r
-int sdf_2d_read_row(char *row_buf, const unsigned int row, SDF_2D *imp);\r
-int sdf_2d_write_row(const char *row_buf, const unsigned int row, SDF_2D *imp);\r
-int sdf_2d_read_col(char *col_buf, const unsigned int col, SDF_2D *imp);\r
-int sdf_2d_write_col(const char *col_buf, const unsigned int col, SDF_2D *imp);\r
-int sdf_2d_close(SDF_2D *imp);\r
-char *sdf_2d_alloc_row(const int nrow, SDF_2D *imp);\r
-char *sdf_2d_alloc_col(const int ncol, SDF_2D *imp);\r
-void sdf_2d_error(const SDF_2D *imp, const char *str, ...);\r
-\r
-#endif\r
+/*****************************************************************************
+**  This is part of the CTSim program
+**  Copyright (C) 1983-2000 Kevin Rosenberg
+**
+**  $Id: sdf.h,v 1.2 2000/04/28 14:14:16 kevin Exp $
+**  $Log: sdf.h,v $
+**  Revision 1.2  2000/04/28 14:14:16  kevin
+**  *** empty log message ***
+**
+**
+**  This program is free software; you can redistribute it and/or modify
+**  it under the terms of the GNU General Public License (version 2) as
+**  published by the Free Software Foundation.
+**
+**  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+******************************************************************************/
+/* FILE IDENTIFICATION
+ *
+ *     Name:         sdf.h         Header file for Standard Data FIle system
+ *     Programmer:   Kevin Rosenberg
+ *     Date Started:  9-18-84
+ *     Last Change:  12-24-84
+ */
+
+#ifndef __H_SDF
+#define __H_SDF
+
+#include "kmath.h"
+
+
+/*----------------*/
+/* SYSTEM ALIASES */
+/*----------------*/
+
+#define SDF_VERSION  2
+#define SDF_ID_STR   "SDF"
+
+/*------------------*/
+/* DEFINITION BLOCK */
+/*------------------*/
+
+/* fixed system constants */
+
+#define BLK_SIZE   256         /* Size of a header block */
+#define NUM_DIRBLK   1         /* number of directory blocks */
+
+/* block types */
+
+#define BT_EMPTY       0       /* Not being used */
+#define BT_DIRECTORY   1       /* First blocks in file */
+#define BT_LABEL       2       /* Label block */
+
+/* label types */
+
+#define LT_EMPTY         0     /* label record is available for use */
+#define LT_TITLE         1     /* descriptive label given by user */
+#define LT_HISTORY       2     /* history label generated by application */
+                               /* program */
+#define LT_NOTE                  3     /* A note created with a label editor */
+
+/* codes for open_sdf and create_sdf */
+
+#define SDF_RDONLY  0
+#define SDF_WRONLY  1
+#define SDF_RDWR    2
+
+/* function return codes */
+
+#define SDF_ERROR  ERROR
+#define SDF_2D_ERROR SDF_ERROR
+#define SDF_OK    OK
+
+/* types of sdf file, this area is EXPANDABLE */
+
+#define SDF_FTYPE_2D   10      /* Two-dimensional data file */
+
+
+/* BLOCK IDENTIFICATION
+ *
+ *   Name: Directory Header Block
+ *   Size: Multiple of BLK_SIZE
+ *
+ * DESCRIPTION
+ *    This is the first block of a sdf file.  It contains information on the 
+ *    size of the users' data plus the number and type of header blocks.
+ */
+
+struct dir_blk_st {
+    int block_type;            /* required at the beginning of every block */
+                               /* to identify type of block */
+
+    char id_str[4];            /* identification string == SDF_ID_STR */
+    int sdf_version;           /* which version of sdf system == SDF_VERSION */
+
+    int blk_size;              /* size of a header block in bytes */
+
+    int df_type;               /* type of data file, used as identification */
+                               /* by application programs */
+
+    unsigned int num_dirblk;   /* number of directory header blocks */
+                               /* currently, only 1 block long */
+     
+/* label directory */
+
+     unsigned int start_label; /* starting position of label header blocks */
+     unsigned int num_label;   /* number of label header blocks */
+
+/* data header info */
+
+    unsigned int start_dhead;  /* block number of the start of the users' */
+                               /* data header blocks */
+    unsigned int num_dhead;    /* number of data header blocks */
+    unsigned int dhead_len;    /* length of data header in bytes */
+
+/* data record info */
+
+    unsigned int start_drec;   /* block number of start of data records */
+    unsigned int num_drec;     /* number of of user data records */
+    unsigned int drec_size;    /* size of users' record */
+    int num_dval;              /* number of values in each data record */
+    int dval_size;             /* size of data value in bytes */
+                               /* NOTE:  drec_size = dval_size * num_dval */
+};
+
+
+/* BLOCK IDENTIFICATION
+ *
+ *    Name:  Label block
+ *    Size:  BLK_SIZE
+ *
+ * DESCRIPTION                              
+ *        This block contains both user and history labels.  Labels are alpha-
+ *     numeric.  History labels include time & date stamp plus calculation time.  
+ */
+
+#define LABEL_LEN        159    /* size of alphanumeric label */
+#define LABELS_PER_BLOCK  1
+                               /* number of labels in each block */
+
+struct label_blk_st {
+    int block_type;            /* required at the beginning of every block */
+    int label_type;            /* type of label */
+    char label_str[LABEL_LEN+1];/* alpha numeric label */
+
+/* history label time stamping */
+
+    TIMEDATE timedate;         /* time and date of operation */
+    float calc_time;           /* calculation time in seconds */
+};
+
+
+/* BLOCK IDENTIFICATION
+ *
+ *     Name:  Data Header Block
+ *     Size:  Variable, but always integer multiple of BLK_SIZE
+ *
+ * DESCRIPTION
+ *       This block hold information entirely specific to the data in the sdf 
+ *     file, such as the user coordinates of the extent of an image, or the
+ *     the rotation increment of raysum data.  When an application program
+ *     reads or writes the data header, it passes the size in bytes of the
+ *     data header to be read or written.  If the length of a data header
+ *     being read doesn't match the length of the data header in the file,
+ *     the header is still read, but a WARNING message is given.
+ */
+
+
+
+/* STRUCTURE IDENTIFICATION
+ *
+ *     Name:  Data File Structure       Contains all information on open files
+ *
+ * DESCRIPTION
+ *        This structure is generated by open_file() and create_file(), it is
+ *     passed to all subroutines of the sdf system.
+ */
+
+struct sdfile_st {
+    bool open;                 /* if file is open or not */
+    int  mode;                 /* read-write mode */
+    int  fd;                   /* file descriptor gotten from C library */
+    bool error;                        /* TRUE if error occurred, all further */
+                               /* procesing is stopped */
+    bool error_report;         /* Error reporting flag */
+
+    unsigned int blk_size;     /* size of a header block */
+    unsigned int num_dirblk;   /* number of directory header blocks */
+    char fname[MAXFULLNAME+1]; /* operating system filename */
+
+    int df_type;               /* identification type of data file */
+
+/* variables that are used when writing to a file, they define what parts
+ * of the file have been written
+ */
+
+    struct wrt {
+       unsigned dir : 1;       /* 1 if directory header has been written */
+       unsigned label : 1;     /* 1 if labels have been written */
+       unsigned dhead : 1;     /* 1 if data header has been written */
+       unsigned drec : 1;      /* 1 when data records have been written */
+    } written;
+
+/* Directory information to have about the file */
+
+    unsigned int start_label;  /* starting position of labels */
+    unsigned int num_label;    /* number of labels in file */
+
+    unsigned int dhead_len;    /* length of data header in bytes */
+
+    unsigned int num_drec;     /* number of data records */
+    unsigned int drec_size;    /* size of data records in bytes */
+    int num_dval;              /* number of values in each data record */
+    int dval_size;             /* size of data value in bytes */
+                               /* NOTE:  drec_size = dval_size * num_dval */
+
+/* ffset pointers into sdf file */
+
+    long int pos_dhead;                /* starting position of data header */
+    long int pos_drec;         /* starting position of users' data */
+};
+
+
+union sdf_blk_un {
+    char buf[BLK_SIZE];
+    struct dir_blk_st   dir;
+    struct label_blk_st lab;
+};
+
+typedef struct dir_blk_st      DIR_BLK;
+typedef struct label_blk_st    LABEL_BLK;
+typedef struct sdfile_st       SDFILE;
+typedef union  sdf_blk_un      SDF_BLK;
+
+
+/*----------------------------------------------------------------------*/
+/*             2-Dimensional Standard Data File Header                 */
+/*----------------------------------------------------------------------*/
+
+
+/* STRUCTURE IDENTIFICATION
+ *
+ *     Name:  sdf_2d_dhead_st          Data header for 2d data files
+ *
+ * DESCRIPTION
+ *
+ *         This structure holds the data that is stored in an image sdf file's
+ *     data header.  It contains all data needed to use 2d data records
+ */
+
+struct sdf_2d_dhead_st {
+       int file_type;          /* type of data making up this file */
+                               /* currenty, DFT_2D_IMAGE or DFT_2D_RAYSUM */
+       int nx;                 /* number of rows */
+       int ny;                 /* number of columns in row */
+       int val_type;           /* type of pixel value, eg, DT_FLOAT */
+       int val_size;           /* size of pixel value in bytes */
+
+       bool axis_ext_kwn;      /* TRUE if picture extent is known */
+                               /* stored in xmin,xmax,ymin,ymax */
+       double xmin, ymin;      /* position of lower left corner of picture */
+       double xmax, ymax;      /* position of upper right corner of picture */
+
+       bool axis_incr_kwn;     /* TRUE if increments are known */
+       double xinc, yinc;
+
+       bool val_ext_kwn;       /* TRUE if pixel extent is known */
+       double dvalmin, dvalmax;/* min & max data value for FLOAT & DOUBLE */
+       long lvalmin, lvalmax;  /* data extent for INT & LONG */
+};
+
+
+/* STRUCTURE IDENTIFICATION
+ *
+ *     Name:  sdf_2d_st                        Information about an sdf image
+ *
+ * DESCRIPTION
+ *
+ *         This structure holds all the information need to access an sdf
+ *     image.
+ */
+
+struct sdf_2d_st {
+  struct sdf_2d_dhead_st dhead;        /* image information that is stored in data header */
+  SDFILE *dfp;                 /* pointer to image's standard data file */
+  MTX *mtx;                    /* data values */
+  int memory_only; /* TRUE if sdf_2d file is stored in memory only */
+};
+
+typedef struct sdf_2d_dhead_st  SDF_2D_DHEAD;
+typedef struct sdf_2d_st        SDF_2D;
+
+/* types of 2d data files */
+
+#define SDF_2D_IMAGE   100             /* data file type is an image */
+#define SDF_2D_RAYSUM  101             /* raysum data file type */
+
+
+/* sdf.c */
+SDFILE *sdf_open(const char *filename, const int mode);
+SDFILE *sdf_create(const char *filename, const int mode, const unsigned int num_drec, const unsigned int num_dval, const int dval_size, const int df_type);
+int sdf_read_label(LABEL_BLK *lrec, const int nlab, SDFILE *dfp);
+int sdf_write_label(LABEL_BLK *lrec, const int nlab, SDFILE *dfp);
+int sdf_add_label(const int ltype, const char *lstr, const double calc_time, SDFILE *dfp);
+int sdf_add_empty_label(SDFILE *dfp);
+int sdf_copy_labels(SDFILE *dfp_to, SDFILE *dfp_from);
+int sdf_read_dhead(void *dh_buf, const unsigned int dhead_len, SDFILE *dfp);
+int sdf_write_dhead(const void *dh_buf, const unsigned int dhead_len, SDFILE *dfp);
+int sdf_read_drec(void *drec, const int start_rec, const int num_rec, SDFILE *dfp);
+int sdf_write_drec(const void *drec, const int start_rec, const int num_rec, SDFILE *dfp);
+int sdf_read_dval(void *dval, const int rec, const int start_val, const int num_val, SDFILE *dfp);
+int sdf_write_dval(const void *dval, const int rec, const int start_val, const int num_val, SDFILE *dfp);
+int sdf_close(SDFILE *dfp);
+void sdf_error_report(SDFILE *dfp, const int flag);
+void sdf_error(const SDFILE *dfp, const char *str, ...);
+bool sdf_check_dfp(const SDFILE *dfp, const int mode, const char *name);
+void *sdf_alloc_blk(const int n, SDFILE *dfp, const char *name);
+int sdf_free_blk(void *hb, SDFILE *dfp, const char *name);
+/* sdf_2d.c */
+SDF_2D *sdf_2d_open(const char *fname, const int mode);
+SDF_2D *sdf_2d_create(const char *fname, const int mode, const int nx, const int ny, const int val_type, const int df_type);
+int sdf_2d_save(SDF_2D *imp);
+int sdf_2d_restore(SDF_2D *imp);
+int sdf_2d_alloc_mtx(SDF_2D *imp);
+int sdf_2d_free_mtx(SDF_2D *sdf_2d);
+int sdf_2d_read_row(char *row_buf, const unsigned int row, SDF_2D *imp);
+int sdf_2d_write_row(const char *row_buf, const unsigned int row, SDF_2D *imp);
+int sdf_2d_read_col(char *col_buf, const unsigned int col, SDF_2D *imp);
+int sdf_2d_write_col(const char *col_buf, const unsigned int col, SDF_2D *imp);
+int sdf_2d_close(SDF_2D *imp);
+char *sdf_2d_alloc_row(const int nrow, SDF_2D *imp);
+char *sdf_2d_alloc_col(const int ncol, SDF_2D *imp);
+void sdf_2d_error(const SDF_2D *imp, const char *str, ...);
+
+#endif