コード例 #1
0
ファイル: ckkeywd.c プロジェクト: Sunshine-OS/pkg-gate
int
ckkeywd(char *strval, char *keyword[], char *defstr, char *error, char *help,
	char *prompt)
{
	int valid, i, n;
	char input[MAX_INPUT];
	char defmesg[512];
	char *ept;

	(void) sprintf(defmesg, "Please enter one of the following keywords: ");
	ept = defmesg + strlen(defmesg);
	for (i = 0; keyword[i]; ) {
		if (i)
			(void) strcat(ept, ", ");
		(void) strcat(ept, keyword[i++]);
	}
	(void) strcat(ept, ckquit ? ", q." : ".");

	if (!prompt)
		prompt = "Enter appropriate value";

start:
	putprmpt(stderr, prompt, keyword, defstr);
	if (getinput(input))
		return (1);

	n = (int)strlen(input);
	if (n == 0) {
		if (defstr) {
			(void) strcpy(strval, defstr);
			return (0);
		}
		puterror(stderr, defmesg, error);
		goto start;
	}
	if (strcmp(input, "?") == 0) {
		puthelp(stderr, defmesg, help);
		goto start;
	}
	if (ckquit && (strcmp(input, "q") == 0)) {
		(void) strcpy(strval, input);
		return (3);
	}

	valid = 1;
	if (keyword)
		valid = !match(input, keyword);

	if (!valid) {
		puterror(stderr, defmesg, error);
		goto start;
	}
	(void) strcpy(strval, input);
	return (0);
}
コード例 #2
0
ファイル: ckstr.c プロジェクト: NanXiao/illumos-joyent
int
ckstr(char *strval, char *regexp[], int length, char *defstr, char *error,
	char *help, char *prompt)
{
	int	n;
	char	*defhlp;
	char	input[MAX_INPUT],
		hlpbuf[1024],
		errbuf[1024];

	defhlp = NULL;
	if (!prompt)
		prompt = "Enter an appropriate value";

start:
	putprmpt(stderr, prompt, NULL, defstr);
	if (getinput(input))
		return (1);

	n = (int)strlen(input);
	if (n == 0) {
		if (defstr) {
			(void) strcpy(strval, defstr);
			return (0);
		}
		puterror(stderr, ERRMSG0, error);
		goto start;
	}
	if (strcmp(input, "?") == 0) {
		if (defhlp == NULL)
			defhlp = sethlp(hlpbuf, regexp, length);
		puthelp(stderr, defhlp, help);
		goto start;
	}
	if (ckquit && (strcmp(input, "q") == 0)) {
		(void) strcpy(strval, input);
		return (3);
	}
	if (ckstr_val(regexp, length, input)) {
		/* LINTED E_SEC_PRINTF_VAR_FMT */
		(void) snprintf(errbuf, sizeof (errbuf), errstr, length);
		puterror(stderr, errbuf, error);
		goto start;
	}
	(void) strcpy(strval, input);
	return (0);
}
コード例 #3
0
ファイル: ckint.c プロジェクト: NanXiao/illumos-joyent
int
ckint(long *intval, short base, char *defstr, char *error, char *help,
	char *prompt)
{
	long	value;
	char	*ptr,
		input[MAX_INPUT],
		defmesg[64],
		temp[64];

	if (!prompt) {
		setprmpt(temp, base);
		prompt = temp;
	}
	setmsg(defmesg, base);

start:
	putprmpt(stderr, prompt, NULL, defstr);
	if (getinput(input))
		return (1);

	if (strlen(input) == 0) {
		if (defstr) {
			*intval = strtol(defstr, NULL, (int)base);
			return (0);
		}
		puterror(stderr, defmesg, error);
		goto start;
	} else if (strcmp(input, "?") == 0) {
		puthelp(stderr, defmesg, help);
		goto start;
	} else if (ckquit && (strcmp(input, "q") == 0))
		return (3);

	value = strtol(input, &ptr, (int)base);
	if (*ptr != '\0') {
		puterror(stderr, defmesg, error);
		goto start;
	}
	*intval = value;
	return (0);
}
コード例 #4
0
ファイル: ckyorn.c プロジェクト: Sunshine-OS/pkg-gate
int
ckyorn(char *yorn, char *defstr, char *error, char *help, char *prompt)
{
	int	n;
	char	input[MAX_INPUT];

	if (!prompt)
		prompt = "Yes or No";
start:
	putprmpt(stderr, prompt, choices, defstr);
	if (getinput(input))
		return (1);

	n = (int)strlen(input);
	if (n == 0) {
		if (defstr) {
			(void) strcpy(yorn, defstr);
			return (0);
		}
		puterror(stderr, REQMSG, error);
		goto start;
	}
	if (strcmp(input, "?") == 0) {
		puthelp(stderr, HLPMSG, help);
		goto start;
	}
	if (ckquit && (strcmp(input, "q") == 0))
		return (3);

	if (ckyorn_val(input)) {
		puterror(stderr, ERRMSG, error);
		goto start;
	}
	(void) strcpy(yorn, input);
	return (0);
}