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

📄 getpar.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic char sccsid[] = "@(#)getpar.c	4.3	(Berkeley)	5/28/83";#endif not lint# include	<stdio.h># include	"getpar.h"/** **	get integer parameter **/getintpar(s)char	*s;{	register int	i;	int		n;	while (1)	{		if (testnl() && s)			printf("%s: ", s);		i = scanf("%d", &n);		if (i < 0)			exit(1);		if (i > 0 && testterm())			return (n);		printf("invalid input; please enter an integer\n");		skiptonl(0);	}}/** **	get floating parameter **/double getfltpar(s)char	*s;{	register int		i;	double			d;	while (1)	{		if (testnl() && s)			printf("%s: ", s);		i = scanf("%lf", &d);		if (i < 0)			exit(1);		if (i > 0 && testterm())			return (d);		printf("invalid input; please enter a double\n");		skiptonl(0);	}}/** **	get yes/no parameter **/struct cvntab	Yntab[] ={	"y",	"es",	(int (*)())1,	0,	"n",	"o",	(int (*)())0,	0,	0};getynpar(s)char	*s;{	struct cvntab		*r;	r = getcodpar(s, Yntab);	return ((int) r->value);}/** **	get coded parameter **/struct cvntab *getcodpar(s, tab)char		*s;struct cvntab	tab[];{	char				input[100];	register struct cvntab		*r;	int				flag;	register char			*p, *q;	int				c;	int				f;	flag = 0;	while (1)	{		flag |= (f = testnl());		if (flag)			printf("%s: ", s);		if (f)			cgetc(0);		/* throw out the newline */		scanf("%*[ \t;]");		if ((c = scanf("%[^ \t;\n]", input)) < 0)			exit(1);		if (c == 0)			continue;		flag = 1;		/* if command list, print four per line */		if (input[0] == '?' && input[1] == 0)		{			c = 4;			for (r = tab; r->abrev; r++)			{				concat(r->abrev, r->full, input);				printf("%14.14s", input);				if (--c > 0)					continue;				c = 4;				printf("\n");			}			if (c != 4)				printf("\n");			continue;		}		/* search for in table */		for (r = tab; r->abrev; r++)		{			p = input;			for (q = r->abrev; *q; q++)				if (*p++ != *q)					break;			if (!*q)			{				for (q = r->full; *p && *q; q++, p++)					if (*p != *q)						break;				if (!*p || !*q)					break;			}		}		/* check for not found */		if (!r->abrev)		{			printf("invalid input; ? for valid inputs\n");			skiptonl(0);		}		else			return (r);	}}/** **	get string parameter **/getstrpar(s, r, l, t)char	*s;char	*r;int	l;char	*t;{	register int	i;	char		format[20];	register int	f;	if (t == 0)		t = " \t\n;";	sprintf(format, "%%%d[^%s]", l, t);	while (1)	{		if ((f = testnl()) && s)			printf("%s: ", s);		if (f)			cgetc(0);		scanf("%*[\t ;]");		i = scanf(format, r);		if (i < 0)			exit(1);		if (i != 0)			return;	}}/** **	test if newline is next valid character **/testnl(){	register char		c;	while ((c = cgetc(0)) != '\n')		if ((c >= '0' && c <= '9') || c == '.' || c == '!' ||				(c >= 'A' && c <= 'Z') ||				(c >= 'a' && c <= 'z') || c == '-')		{			ungetc(c, stdin);			return(0);		}	ungetc(c, stdin);	return (1);}/** **	scan for newline **/skiptonl(c)char	c;{	while (c != '\n')		if (!(c = cgetc(0)))			return;	ungetc('\n', stdin);	return;}/** **	test for valid terminator **/testterm(){	register char		c;	if (!(c = cgetc(0)))		return (1);	if (c == '.')		return (0);	if (c == '\n' || c == ';')		ungetc(c, stdin);	return (1);}/***  TEST FOR SPECIFIED DELIMETER****	The standard input is scanned for the parameter.  If found,**	it is thrown away and non-zero is returned.  If not found,**	zero is returned.*/readdelim(d)char	d;{	register char	c;	while (c = cgetc(0))	{		if (c == d)			return (1);		if (c == ' ')			continue;		ungetc(c, stdin);		break;	}	return (0);}

⌨️ 快捷键说明

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