⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfgets.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
/* vfgets.c - virtual fgets */#include "../h/mh.h"#include <stdio.h>#define	QUOTE	'\\'int	vfgets (in, bp)register FILE *in;register char  **bp;{    register int    toggle;    register char  *cp,                   *dp,                   *ep,		   *fp;    static int  len = 0;    static char *pp = NULL;    if (pp == NULL)	if ((pp = malloc ((unsigned) (len = BUFSIZ))) == NULL)	    adios (NULLCP, "unable to allocate string storage");    for (ep = (cp = pp) + len - 1;;) {	if (fgets (cp, ep - cp + 1, in) == NULL) {	    if (cp != pp) {		*bp = pp;		return OK;	    }	    return (ferror (in) && !feof (in) ? NOTOK : DONE);	}	if ((dp = cp + strlen (cp) - 2) < cp || *dp != QUOTE) {wrong_guess: ;	    if (cp > ++dp)		adios (NULLCP, "vfgets() botch -- you lose big");	    if (*dp == '\n') {		*bp = pp;		return OK;	    }	    else		cp = ++dp;	}	else {	    for (fp = dp - 1, toggle = 0; fp >= cp; fp--)		if (*fp != QUOTE)		    break;		else		    toggle = !toggle;	    if (toggle)		goto wrong_guess;	    if (*++dp == '\n')		*--dp = NULL, cp = dp;	    else		cp = ++dp;	}	if (cp >= ep) {	    register int curlen = cp - pp;	    if ((dp = realloc (pp, (unsigned) (len += BUFSIZ))) == NULL)		adios (NULLCP, "unable to allocate string storage");	    else		cp = dp + curlen, ep = (pp = dp) + len - 1;	}    }}

⌨️ 快捷键说明

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