|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 1413 (0x585) Types: TextFile Names: »cpydgst.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦3658e588a⟧ »EurOpenD3/mail/mh/mh-6.7.tar.Z« └─⟦c75e36ecb⟧ └─⟦this⟧ »mh-6.7/sbr/cpydgst.c«
/* cpydgst.c - copy from one fd to another in encapsulating mode */ #include "../h/mh.h" #include <stdio.h> /* All we want to do is to perform the substitution \n(-.*)\n --> \n- \1\n we could use sed -e 's%^-%- -%' < ifile > ofile to do this, but the routine below is faster than the pipe, fork, and exec. */ #define S1 0 #define S2 1 #define output(c) if (bp >= dp) {flush(); *bp++ = c;} else *bp++ = c #define flush() if ((j = bp - outbuf) && write (out, outbuf, j) != j) \ adios (ofile, "error writing"); \ else \ bp = outbuf /* \f */ void cpydgst (in, out, ifile, ofile) register int in, out; register char *ifile, *ofile; { register int i, state; register char *cp, *ep; char buffer[BUFSIZ]; register int j; register char *bp, *dp; char outbuf[BUFSIZ]; dp = (bp = outbuf) + sizeof outbuf; for (state = S1; (i = read (in, buffer, sizeof buffer)) > 0;) for (ep = (cp = buffer) + i; cp < ep; cp++) { if (*cp == NULL) continue; switch (state) { case S1: if (*cp == '-') { output ('-'); output (' '); } state = S2; /* fall */ case S2: output (*cp); if (*cp == '\n') state = S1; break; } } if (i == NOTOK) adios (ifile, "error reading"); flush (); }