home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************************************
- MODULE: rputs.c
- PURPOSE: recio character delimited string and char output functions
- COPYRIGHT: (C) 1994 William Pierpoint
- COMPILER: Borland C Version 3.1
- OS: MSDOS Version 6.2
- VERSION: 2.00
- RELEASE: April 15, 1994
- *****************************************************************************/
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include "recio.h"
-
- extern int _rstatus(REC *rp, int mode);
- extern int _rputc(REC *rp, int ch);
-
- #define rflags(rp) ((rp)->r_flags)
- #define rfp(rp) ((rp)->r_fp)
- #define rcol(rp) ((rp)->r_colno)
- #define rfldch(rp) ((rp)->r_fldch)
- #define rtxtch(rp) ((rp)->r_txtch)
-
- /****************************************************************************/
- int /* return 0 on success; !0 on error */
- _rputc( /* put character to record stream */
- REC *rp, /* record pointer */
- int ch) /* character to put to record stream */
- /****************************************************************************/
- {
- int err = fputc(ch, rfp(rp));
- if (err==EOF) {
- rseterr(rp, R_ENOPUT);
- } else {
- rcol(rp)++;
- err = 0;
- }
- return err;
- }
-
- /****************************************************************************/
- int /* return 0 on success; !0 on error */
- rputc( /* put character to record stream */
- REC *rp, /* record pointer */
- int ch) /* character to put to record stream */
- /****************************************************************************/
- {
- int err=EOF; /* return error (0=no error; !0=error) */
-
- if (!_rstatus(rp, R_WRITE)) {
- rfldno(rp)++;
- /* if not first field, put field separator */
- if (rfldno(rp) > 1) {
- err = _rputc(rp, rfldch(rp));
- if (err) goto done;
- }
- /* put character */
- err = _rputc(rp, ch);
- }
- done:
- return err;
- }
-
- /****************************************************************************/
- int /* return 0 on success; !0 on error */
- rputs( /* put string to record stream */
- REC *rp, /* record pointer */
- char *str) /* pointer to string */
- /****************************************************************************/
- /* note: assumes str does not contain a newline character */
- {
- int err=EOF; /* return error (0=no error; !0=error) */
- size_t sl; /* string length */
-
- if (!_rstatus(rp, R_WRITE)) {
- rfldno(rp)++;
-
- /* if not first field, put field separator */
- if (rfldno(rp) > 1) {
- err = _rputc(rp, rfldch(rp));
- if (err) goto done;
- }
-
- /* if text delimiter not space, put leading text delimiter */
- if (rtxtch(rp) != ' ') {
- err = _rputc(rp, rtxtch(rp));
- if (err) goto done;
- }
-
- /* put string */
- err = fputs(str, rfp(rp));
- sl = strlen(str);
- if (err==EOF) {
- rseterr(rp, R_ENOPUT);
- goto done;
- } else {
- err = 0;
- rcol(rp) += sl;
- }
-
- /* if text delimiter not space, put trailing text delimiter */
- if (rtxtch(rp) != ' ') {
- err = _rputc(rp, rtxtch(rp));
- }
- }
- done:
- return err;
- }
-