home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************************************
- MODULE: _rbput.h
- PURPOSE: recio character delimited integral number output functions
- COPYRIGHT: (C) 1994 William Pierpoint
- VERSION: 2.00
- RELEASE: April 15, 1994
- *****************************************************************************/
-
- #ifndef _RBPUT_H
- #define _RBPUT_H
-
- #include "recio.h"
-
- extern int _rstatus(REC *rp, int mode);
- extern int _rputc(REC *rp, int ch);
-
- #define rfp(rp) ((rp)->r_fp)
- #define rcol(rp) ((rp)->r_colno)
- #define rfldch(rp) ((rp)->r_fldch)
-
- /* macro to put character delimited integral number */
- #define rbput_fn( /* define function to put number to record stream */\
- fn_type, /* defined function number type */\
- fn_name, /* defined function name */\
- cv_type, /* conversion function type */\
- cv_name) /* conversion function name */\
- \
- int /* return 0 on success; !0 on error */\
- fn_name( /* put string to record stream */\
- REC *rp, /* record pointer */\
- int base, /* base (radix) (2 to 36) */\
- fn_type num) /* number to put to stream */\
- { \
- int err=EOF; /* return error (0=no error; !0=error) */\
- if (!_rstatus(rp, R_WRITE)) { \
- if (base >= 2 && base <= 36) { \
- rfldno(rp)++; \
- /* if not first field, put field separator */\
- if (rfldno(rp) > 1) { \
- err = _rputc(rp, rfldch(rp)); \
- if (err) goto done; \
- } \
- cv_name((cv_type)num, _r_nsbuf, base); \
- err = fputs(_r_nsbuf, rfp(rp)); \
- if (err==EOF) { \
- rseterr(rp, R_ENOPUT); \
- goto done; \
- } else { \
- rcol(rp) += strlen(_r_nsbuf); \
- err = 0; \
- goto done; \
- } \
- } \
- rseterr(rp, R_EINVAL); \
- } \
- done: \
- return err; \
- }
-
- #endif
-