cpydgst.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 71 行

C
71
字号
/* 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/*  */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 ();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?