|
|
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 ();
}