home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************************************
- MODULE: rcputs.c
- PURPOSE: recio column 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"
-
- #define rcol(rp) ((rp)->r_colno)
- #define rfp(rp) ((rp)->r_fp)
- #define rflags(rp) ((rp)->r_flags)
- #define rfldch(rp) ((rp)->r_fldch)
- #define rtxtch(rp) ((rp)->r_txtch)
-
- extern int _rstatus(REC *rp, int mode);
- extern int _rputc(REC *rp, int ch);
-
- /****************************************************************************/
- int /* return 0 on success; !0 on error */
- rcputc( /* put character to record stream */
- REC *rp, /* record pointer */
- size_t col, /* column position */
- int ch) /* character to put to record stream */
- /****************************************************************************/
- {
- int err=EOF; /* return error (0=no error; !0=error) */
-
- if (!_rstatus(rp, R_WRITE)) {
- if (col >= rcolno(rp)) {
- rfldno(rp)++;
- /* if colno < col, pad with spaces */
- while (rcolno(rp) < col) {
- err = _rputc(rp, ' ');
- if (err) goto done;
- }
- /* put character */
- err = _rputc(rp, ch);
- } else {
- rseterr(rp, R_EINVAL); \
- }
- }
- done:
- return err;
- }
-
- /****************************************************************************/
- int /* return 0 on success; !0 on error */
- rcputs( /* put string to record stream */
- REC *rp, /* record pointer */
- size_t begcol, /* beginning column */
- size_t endcol, /* ending column */
- 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)) {
- if (endcol >= begcol && begcol >= rcolno(rp)) {
- rfldno(rp)++;
- /* if colno < begcol, pad with spaces */
- while (rcolno(rp) < begcol) {
- err = _rputc(rp, ' ');
- if (err) goto done;
- }
-
- sl = strlen(str);
- /* if str is too long for space */
- if (sl > (endcol-begcol+1)) {
- rsetwarn(rp, R_WWIDTH);
- /* put as much of the string as possible */
- while (rcolno(rp) <= endcol) {
- err = _rputc(rp, *str++);
- if (err) goto done;
- }
- } else {
- err = fputs(str, rfp(rp));
- if (err==EOF) {
- rseterr(rp, R_ENOPUT);
- } else {
- err = 0;
- rcol(rp) += sl;
- }
- }
- } else {
- rseterr(rp, R_EINVAL); \
- }
- }
- done:
- return err;
- }
-