home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 423_01 / recio200 / recio.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-15  |  8.8 KB  |  231 lines

  1. /****************************************************************************
  2.    MODULE: recio.h
  3.   PURPOSE: header file included in application
  4. COPYRIGHT: (C) 1994 William Pierpoint
  5.   VERSION: 2.00
  6.   RELEASE: April 15, 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    8       /* max no of rec streams open at same time */
  37. #define R_READ       0       /* read mode */
  38. #define R_WRITE      1       /* write/append mode */
  39.  
  40. #ifdef __BORLANDC__
  41. #define NSBUFSIZ    34       /* string buffer sized for ltoa & dtoa */
  42. #else
  43. #error set NSBUFSIZ for this compiler!
  44. #endif
  45. extern char _r_nsbuf[NSBUFSIZ];/* buffer for numeric to string conversions */
  46.  
  47. /* enumerate errors */
  48. enum {
  49.     R_EINVAL=1,              /* invalid argument value */
  50.     R_EINVDAT,               /* invalid data */
  51.     R_EINVMOD,               /* invalid read or write mode */
  52.     R_EMISDAT,               /* missing data */
  53.     R_ENOMEM,                /* could not allocate memory */
  54.     R_ENOPUT,                /* failed put to stream */
  55.     R_ERANGE                 /* data out of range */
  56. };
  57.  
  58. /* enumerate warnings */
  59. enum {
  60.     R_WEMPSTR=1,             /* data string empty */
  61.     R_WNOREG,                /* unable to register function (atexit full) */
  62.     R_WWIDTH                 /* column width too small for data */
  63. };
  64.  
  65. /* define static record streams */
  66. extern REC *recin;           /* recin  record pointer */
  67. extern REC *recout;          /* recout record pointer */
  68. extern REC *recerr;          /* recerr record pointer */
  69. extern REC *recprn;          /* recprn record pointer */
  70.  
  71. #define RECIN       -1       /* recin  context number */
  72. #define RECOUT      -2       /* recout context number */
  73. #define RECERR      -3       /* recerr context number */
  74. #define RECPRN      -4       /* recprn context number */
  75.  
  76. /* record status flags definitions */
  77. #define _R_COL       1       /* beginning column flag (bit 0) */
  78. #define _R_WRT       2       /* read/write stream flag (bit 1) */
  79. #define _R_EOF     128       /* end-of-file indicator (bit 7) */
  80. #define _R_ERR     256       /* error indicator (bits 8-11) */
  81. #define _R_WRN    4096       /* warning indicator (bits 12-15) */
  82.  
  83. #define _R_ERRMASK  15       /* error indicator mask ((2^#bits)-1) */
  84. #define _R_WRNMASK  15       /* warning indicator mask ((2^#bits)-1) */
  85.  
  86. /* functions implemented as macros */
  87. #define rskipfld(rp)     (rskipnfld((rp), 1))
  88. #define rnames(rp)       ((rp)->r_fname)
  89. #define rrecs(rp)        ((rp)->r_recp)
  90. #define rflds(rp)        ((rp)->r_fldp)
  91. #define rrecno(rp)       ((rp)->r_recno)
  92. #define rfldno(rp)       ((rp)->r_fldno)
  93. #define rcolno(rp)       ((rp)->r_colno + rbegcolno(rp))
  94. #define rcxtno(rp)       ((rp)->r_cxtno)
  95. #define rbegcolno(rp)    ((rp)->r_flags & _R_COL)
  96. #define reof(rp)         ((rp)->r_flags & _R_EOF)
  97. #define rclearwarn(rp)   (rsetwarn((rp), 0))
  98.  
  99. #define rgeti(rp)        (rbgeti( (rp), 10))
  100. #define rgetl(rp)        (rbgetl( (rp), 10))
  101. #define rgetui(rp)       (rbgetui((rp), 10))
  102. #define rgetul(rp)       (rbgetul((rp), 10))
  103.  
  104. #define rcgeti(rp, begcol, endcol)  (rcbgeti( (rp), (begcol), (endcol), 10))
  105. #define rcgetl(rp, begcol, endcol)  (rcbgetl( (rp), (begcol), (endcol), 10))
  106. #define rcgetui(rp, begcol, endcol) (rcbgetui((rp), (begcol), (endcol), 10))
  107. #define rcgetul(rp, begcol, endcol) (rcbgetul((rp), (begcol), (endcol), 10))
  108.  
  109. #define rputi(rp, num)   (rbputi( (rp), 10, (num)))
  110. #define rputl(rp, num)   (rbputl( (rp), 10, (num)))
  111. #define rputui(rp, num)  (rbputui((rp), 10, (num)))
  112. #define rputul(rp, num)  (rbputul((rp), 10, (num)))
  113.  
  114. #define rcputi(rp, begcol, endcol, num)  (rcbputi( (rp), (begcol), (endcol), 10, (num)))
  115. #define rcputl(rp, begcol, endcol, num)  (rcbputl( (rp), (begcol), (endcol), 10, (num)))
  116. #define rcputui(rp, begcol, endcol, num) (rcbputui((rp), (begcol), (endcol), 10, (num)))
  117. #define rcputul(rp, begcol, endcol, num) (rcbputul((rp), (begcol), (endcol), 10, (num)))
  118.  
  119. #ifdef __cplusplus
  120. extern "C" {
  121. #endif
  122. /* function prototypes */
  123. /* source: recio.c */
  124. extern int   rclose(REC *rp);
  125. extern int   rcloseall(void);
  126. extern int   risvalid(REC *rp);
  127. extern REC  *ropen(const char *filename, const char *mode);
  128. extern int   rsetbegcolno(REC *rp, int colno);
  129. extern int   rsetcxtno(REC *rp, int cxtno);
  130. extern int   rsetfldch(REC *rp, int ch);
  131. extern int   rsettxtch(REC *rp, int ch);
  132.  
  133. /* source: rerr.c */
  134. extern void  rclearerr(REC *rp);
  135. extern int   rerror(REC *rp);
  136. extern char *rerrstr(REC *rp);
  137. extern int   rseterr(REC *rp, int errnum);
  138. extern void  rseterrfn(void(*rerrfn)(REC *rp));
  139. extern char *rstrerror(int errnum);
  140.  
  141. /* source: rwarn.c */
  142. extern int   rwarning(REC *rp);
  143. extern char *rwarnstr(REC *rp);
  144. extern int   rsetwarn(REC *rp, int warnum);
  145. extern void  rsetwarnfn(void(*rwarnfn)(REC *rp));
  146. extern char *rstrwarning(int warnum);
  147.  
  148. /* source: rget.c */
  149. extern char *rgetrec(REC *rp);
  150. extern int   rsetfldsiz(REC *rp, size_t fldsize);
  151. extern int   rsetfldstr(REC *rp, char *s);
  152. extern int   rsetrecsiz(REC *rp, size_t recsize);
  153. extern int   rskipnfld(REC *rp, size_t num);
  154.  
  155. /* source: rput.c */
  156. extern int rputrec(REC *rp);
  157.  
  158. /* source: rgets.c */
  159. extern int    rgetc(REC *rp);
  160. extern char  *rgets(REC *rp);
  161.  
  162. /* source: rgetf.c */
  163. extern float  rgetf(REC *rp);
  164. extern double rgetd(REC *rp);
  165.  
  166. /* source: rbget.c */
  167. extern int           rbgeti( REC *rp, int base);
  168. extern unsigned int  rbgetui(REC *rp, int base);
  169. extern long          rbgetl( REC *rp, int base);
  170. extern unsigned long rbgetul(REC *rp, int base);
  171.  
  172. /* source: rcgets.c */
  173. extern int    rcgetc(REC *rp, size_t col);
  174. extern char  *rcgets(REC *rp, size_t begcol, size_t endcol);
  175.  
  176. /* source: rcgetf.c */
  177. extern float  rcgetf(REC *rp, size_t begcol, size_t endcol);
  178. extern double rcgetd(REC *rp, size_t begcol, size_t endcol);
  179.  
  180. /* source: rcbget.c */
  181. extern int           rcbgeti( REC *rp, size_t begcol, size_t endcol, int base);
  182. extern unsigned int  rcbgetui(REC *rp, size_t begcol, size_t endcol, int base);
  183. extern long          rcbgetl( REC *rp, size_t begcol, size_t endcol, int base);
  184. extern unsigned long rcbgetul(REC *rp, size_t begcol, size_t endcol, int base);
  185.  
  186. /* source: rputs.c */
  187. extern int rputc(REC *rp, int ch);
  188. extern int rputs(REC *rp, char *str);
  189.  
  190. /* source: rputf.c */
  191. extern int rputf(REC *rp, float f);
  192. extern int rputd(REC *rp, double d);
  193.  
  194. /* source: rbput.c */
  195. extern int rbputi(REC *rp, int base, int i);
  196. extern int rbputui(REC *rp, int base, unsigned int ui);
  197. extern int rbputl(REC *rp, int base, long l);
  198. extern int rbputul(REC *rp, int base, unsigned long ul);
  199.  
  200. /* source: rcputf.c */
  201. extern int rcputf(REC *rp, size_t begcol, size_t endcol, float f);
  202. extern int rcputd(REC *rp, size_t begcol, size_t endcol, double d);
  203.  
  204. /* source: rcputs.c */
  205. extern int rcputc(REC *rp, size_t col, int ch);
  206. extern int rcputs(REC *rp, size_t begcol, size_t endcol, char *str);
  207.  
  208. /* source: rcbput.c */
  209. extern int rcbputi(REC *rp, size_t begcol, size_t endcol, int base, int i);
  210. extern int rcbputui(REC *rp, size_t begcol, size_t endcol, int base, unsigned int ui);
  211. extern int rcbputl(REC *rp, size_t begcol, size_t endcol, int base, long l);
  212. extern int rcbputul(REC *rp, size_t begcol, size_t endcol, int base, unsigned long ul);
  213.  
  214. /* source: rfix.c */
  215. extern int rbfixi( REC *rp, int base);
  216. extern int rbfixui(REC *rp, int base);
  217. extern int rbfixl( REC *rp, int base);
  218. extern int rbfixul(REC *rp, int base);
  219. extern int rfixc(REC *rp);
  220. extern int rfixf(REC *rp);
  221. extern int rfixd(REC *rp);
  222. extern int rfixi(REC *rp);
  223. extern int rfixl(REC *rp);
  224. extern int rfixui(REC *rp);
  225. extern int rfixul(REC *rp);
  226. #ifdef  __cplusplus
  227. }
  228. #endif
  229.  
  230. #endif
  231.