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

📄 getans.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
/* getans.c - get an answer from the user and return a string array */#include "../h/mh.h"#ifdef	BSD42#include <setjmp.h>#endif	BSD42#include <signal.h>#include <stdio.h>static	char ansbuf[BUFSIZ];#ifndef	BSD42static	int interrupted;#else	BSD42static	jmp_buf sigenv;#endif	BSD42static int	intrser ();char  **getans (prompt, ansp)char   *prompt;struct swit   *ansp;{    int    i;    TYPESIG    (*istat) ();    char  *cp,	 **cpp;#ifndef	BSD42    interrupted = 0;    istat = signal (SIGINT, intrser);#else	BSD42    switch (setjmp (sigenv)) {	case OK: 	    istat = signal (SIGINT, intrser);	    break;	default: 	    (void) signal (SIGINT, istat);	    return NULL;    }#endif	BSD42    for (;;) {	printf ("%s", prompt);	(void) fflush (stdout);	cp = ansbuf;	while ((i = getchar ()) != '\n') {#ifndef	BSD42	    if (i == EOF || interrupted) {		interrupted = 0;		(void) signal (SIGINT, istat);		return NULL;	    }#else	BSD42	    if (i == EOF)		longjmp (sigenv, DONE);#endif	BSD42	    if (cp < &ansbuf[sizeof ansbuf - 1])		*cp++ = i;	}	*cp = 0;	if (ansbuf[0] == '?' || cp == ansbuf) {	    printf ("Options are:\n");	    printsw (ALL, ansp, "");	    continue;	}	cpp = brkstring (ansbuf, " ", NULLCP);	switch (smatch (*cpp, ansp)) {	    case AMBIGSW: 		ambigsw (*cpp, ansp);		continue;	    case UNKWNSW: 		printf (" -%s unknown. Hit <CR> for help.\n", *cpp);		continue;	    default: 		(void) signal (SIGINT, istat);		return cpp;	}    }}static	int intrser () {#ifndef	BSD42	(void) signal(SIGINT, intrser);	interrupted = 1;#else	BSD42	longjmp (sigenv, NOTOK);#endif	BSD42}

⌨️ 快捷键说明

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