home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_C / RECIO110.ZIP / RECIO.H < prev    next >
C/C++ Source or Header  |  1994-03-28  |  5KB  |  130 lines

  1. /*****************************************************************************
  2.    MODULE: recio.h
  3.   PURPOSE: header file included in application
  4. COPYRIGHT: (C) 1994 William Pierpoint
  5.   VERSION: 1.10
  6.   RELEASE: Mar 28, 1994
  7. *****************************************************************************/
  8.  
  9. #ifndef RECIO_H
  10. #define RECIO_H
  11.  
  12. typedef struct {
  13.         int      r_fd;       /* descriptor */
  14.         unsigned r_flags;    /* status flags */
  15.         FILE    *r_fp;       /* file pointer */
  16.   const char    *r_fname;    /* pointer to name of file */
  17.         long     r_recno;    /* current record number */
  18.         size_t   r_fldno;    /* current field number */
  19.         size_t   r_colno;    /* current column number in current record */
  20.         size_t   r_recsiz;   /* size of record buffer */
  21.         size_t   r_reclen;   /* current length of record buffer */
  22.         char    *r_recp;     /* pointer to record buffer */
  23.         size_t   r_fldsiz;   /* size of field buffer */
  24.         char    *r_fldp;     /* pointer to field buffer */
  25.         int      r_fldch;    /* field separator character */
  26.         int      r_txtch;    /* text delimiter character */
  27.         int      r_cxtno;    /* context number */
  28. } REC;
  29.  
  30. /* constant expression macros */
  31. #define RECBUFSIZ  80        /* minimum size of record buffer */
  32. #define FLDBUFSIZ  20        /* minimum size of field buffer */
  33. #define RECFLDCH   ' '       /* record field separator character */
  34. #define RECTXTCH   ' '       /* text delimiter character */
  35.  
  36. #define ROPEN_MAX  5         /* max no of rec streams open at same time */
  37.  
  38. /* enumerate errors */
  39. enum {
  40.     R_EINVAL=1,              /* invalid argument value */
  41.     R_EINVDAT,               /* invalid data */
  42.     R_EMISDAT,               /* missing data */
  43.     R_ENOMEM,                /* could not allocate memory */
  44.     R_ENOREG,                /* unable to register function (atexit full) */
  45.     R_ERANGE                 /* data out of range */
  46. };
  47.  
  48. /* define predetermined record streams */
  49. extern REC *recin;           /* recin record pointer */
  50. #define RECIN  -1            /* recin context number */
  51.  
  52. /* record status flags definitions */
  53. #define _R_COL    1      /* beginning column flag */
  54. #define _R_EOF    2      /* end-of-file flag */
  55.  
  56. /* functions implemented as macros */
  57. #define rskipfld(rp)     (rskipnfld((rp), 1))
  58. #define rnames(rp)       ((rp)->r_fname)
  59. #define rrecs(rp)        ((rp)->r_recp)
  60. #define rflds(rp)        ((rp)->r_fldp)
  61. #define rrecno(rp)       ((rp)->r_recno)
  62. #define rfldno(rp)       ((rp)->r_fldno)
  63. #define rcolno(rp)       ((rp)->r_colno + rbegcolno(rp))
  64. #define rcxtno(rp)       ((rp)->r_cxtno)
  65. #define reof(rp)         ((rp)->r_flags & _R_EOF)
  66. #define rbegcolno(rp)    ((rp)->r_flags & _R_COL)
  67.  
  68. #define rgeti(rp)        (rbgeti( (rp), 10))
  69. #define rgetl(rp)        (rbgetl( (rp), 10))
  70. #define rgetui(rp)       (rbgetui((rp), 10))
  71. #define rgetul(rp)       (rbgetul((rp), 10))
  72.  
  73. #define rcgeti(rp, begcol, endcol)    (rcbgeti( (rp), (begcol), (endcol), 10))
  74. #define rcgetl(rp, begcol, endcol)    (rcbgetl( (rp), (begcol), (endcol), 10))
  75. #define rcgetui(rp, begcol, endcol)   (rcbgetui((rp), (begcol), (endcol), 10))
  76. #define rcgetul(rp, begcol, endcol)   (rcbgetul((rp), (begcol), (endcol), 10))
  77.  
  78. #ifdef __cplusplus
  79. extern "C" {
  80. #endif
  81. /* function prototypes */
  82. /* source: recio.c */
  83. extern void  rclearerr(REC *rp);
  84. extern int   rclose(REC *rp);
  85. extern int   rcloseall(void);
  86. extern int   rerror(REC *rp);
  87. extern int   risvalid(REC *rp);
  88. extern char *rgetrec(REC *rp);
  89. extern REC  *ropen(const char *filename, const char *mode);
  90. extern int   rsetbegcolno(REC *rp, int colno);
  91. extern int   rsetcxtno(REC *rp, int cxtno);
  92. extern int   rseterr(REC *rp, int errnum);
  93. extern void  rseterrfn(void(*rerrfn)(REC *rp));
  94. extern int   rsetfldch(REC *rp, int ch);
  95. extern int   rsetfldsiz(REC *rp, size_t fldsize);
  96. extern int   rsetfldstr(REC *rp, char *s);
  97. extern int   rsetrecsiz(REC *rp, size_t recsize);
  98. extern int   rsettxtch(REC *rp, int ch);
  99. extern int   rskipnfld(REC *rp, size_t num);
  100.  
  101. /* source: rget.c */
  102. extern int    strtoc(const char  *nptr, char **endptr);
  103. extern int    rgetc(REC *rp);
  104. extern char  *rgets(REC *rp);
  105. extern float  rgetf(REC *rp);
  106. extern double rgetd(REC *rp);
  107.  
  108. /* source: rbget.c */
  109. extern int           rbgeti( REC *rp, int base);
  110. extern unsigned int  rbgetui(REC *rp, int base);
  111. extern long          rbgetl( REC *rp, int base);
  112. extern unsigned long rbgetul(REC *rp, int base);
  113.  
  114. /* source: rcget.c */
  115. extern int    rcgetc(REC *rp, size_t col);
  116. extern char  *rcgets(REC *rp, size_t begcol, size_t endcol);
  117. extern float  rcgetf(REC *rp, size_t begcol, size_t endcol);
  118. extern double rcgetd(REC *rp, size_t begcol, size_t endcol);
  119.  
  120. /* source: rcbget.c */
  121. extern int           rcbgeti( REC *rp, size_t begcol, size_t endcol, int base);
  122. extern unsigned int  rcbgetui(REC *rp, size_t begcol, size_t endcol, int base);
  123. extern long          rcbgetl( REC *rp, size_t begcol, size_t endcol, int base);
  124. extern unsigned long rcbgetul(REC *rp, size_t begcol, size_t endcol, int base);
  125. #ifdef  __cplusplus
  126. }
  127. #endif
  128.  
  129. #endif
  130.