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 / _rputf.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-15  |  1.9 KB  |  58 lines

  1. /*****************************************************************************
  2.    MODULE: _rputf.h
  3.   PURPOSE: recio character delimited floating point output functions
  4. COPYRIGHT: (C) 1994 William Pierpoint
  5.   VERSION: 2.00
  6.   RELEASE: April 15, 1994
  7. *****************************************************************************/
  8.  
  9. #ifndef _RPUTF_H
  10. #define _RPUTF_H
  11.  
  12. #include "recio.h"
  13.  
  14. extern int _rstatus(REC *rp, int mode);
  15. extern int _rputc(REC *rp, int ch);
  16.  
  17. #define rfp(rp)          ((rp)->r_fp)
  18. #define rcol(rp)         ((rp)->r_colno)
  19. #define rfldch(rp)       ((rp)->r_fldch)
  20.  
  21. /* macro to put character delimited floating point number */
  22. #define rput_fn( /* define function to put number to record stream */\
  23.     fn_type,      /* defined function number type */\
  24.     fn_name,      /* defined function name */\
  25.     cv_type,      /* conversion function type */\
  26.     cv_name,      /* conversion function name */\
  27.     cv_dig)       /* conversion number of significant digits */\
  28. \
  29. int                          /* return 0 on success; !0 on error */\
  30.     fn_name(                 /* put string to record stream      */\
  31.         REC    *rp,          /* record pointer                   */\
  32.         fn_type num)         /* number to put to stream          */\
  33. { \
  34.     int err=EOF;             /* return error (0=no error; !0=error) */\
  35.     if (!_rstatus(rp, R_WRITE)) { \
  36.         rfldno(rp)++; \
  37.         /* if not first field, put field separator */\
  38.         if (rfldno(rp) > 1) { \
  39.             err = _rputc(rp, rfldch(rp)); \
  40.             if (err) goto done; \
  41.         } \
  42.         cv_name((cv_type)num, (cv_dig), _r_nsbuf); \
  43.         err = fputs(_r_nsbuf, rfp(rp)); \
  44.         if (err==EOF) { \
  45.             rseterr(rp, R_ENOPUT); \
  46.             goto done; \
  47.         } else { \
  48.             rcol(rp) += strlen(_r_nsbuf); \
  49.             err = 0; \
  50.             goto done; \
  51.         } \
  52.     } \
  53. done: \
  54.     return err; \
  55. }
  56.  
  57. #endif
  58.