/* FPDIO.C Copyright (C) 1993 Fergus Patrick Duniho */ #ifndef _FPDIO_C #define _FPDIO_C #include #include #include #include #include #define RdOpen(X,Y) X=FDOpen(Y, "r") #define WrOpen(X,Y) X=FDOpen(Y, "w") #define ApOpen(X,Y) X=FDOpen(Y, "a") void wrapwrite (FILE *fptr, int ind, int lm, int rm, char *s, ...); int wrdlen(char *s); int fgetp (FILE *fptr); FILE *FDOpen (const char *fn, const char *mode); int Linefeeds (char *fname); char *clone_line (FILE *fptr, int max); int yesno (); void wrapwrite (FILE *fptr, int ind, int lm, int rm, char *s, ...) { va_list ap; int i, j; va_start(ap, s); for (j = ind; ; j = lm) { for (i = 0; i < j; i++) fputc (' ', fptr); for (i = j; i < rm; i++) switch (*s) { case 0: /* End of string reached */ if ((s = va_arg(ap, char *)) == 0) { fputc ('\n', fptr); va_end(ap); return; } if ((i + wrdlen(s)) >= rm) i = rm; else if (i > j) fputc (' ', fptr); break; case ' ': /* End of word reached */ if ((i + wrdlen(++s)) >= rm) i = rm; else if (i > j) fputc (' ', fptr); break; case '\n': /* End of line reached */ i = rm; s++; break; default: fputc (*s++, fptr); } fputc ('\n', fptr); if ((*s == '\0') && ((s = va_arg(ap, char *)) == 0)) { va_end(ap); return; } } } int wrdlen(char *s) { int r; for (r = 0; *s != ' ' && *s != '\n' && *s != '\0'; r++, s++); return r; } int fgetp (FILE *fptr) { int c, tot = 0; while (!isdigit(c = getc(fptr))) if (c == EOF) return EOF; do { tot *= 10; tot += (c - '0'); } while (isdigit(c = getc(fptr))); if (c != '\n') ungetc (c, fptr); return tot; } FILE *FDOpen (const char *fn, const char *mode) { FILE *fptr; if ((fptr = fopen(fn, mode)) == NULL) { fprintf (stderr, "Could not open %s.", fn); exit (2); } return fptr; } int Linefeeds (char *fname) { FILE *fptr; int c, cnt = 0; RdOpen (fptr, fname); while ((c = getc(fptr)) != EOF) if (c == '\n') cnt++; fclose (fptr); return cnt; } char *clone_line (FILE *fptr, int max) { char *s, *r, *t; int i; s = (char *)malloc(max + 1); t = s; for (i = 0; (i < max) && ((*s = fgetc(fptr)) != '\n'); i++, s++); if (*s != '\n') ungetc(*s, fptr); *s = '\0'; r = strdup(t); free (t); return r; } int yesno () { int c; for (;;) { c = fgetc(stdin); while (fgetc(stdin) != '\n'); if (c == 'y' || c == 'Y') return 1; if (c == 'n' || c == 'N') return 0; puts ("Please answer y or n."); } } #endif /* _FPDIO_C */