Beispiel #1
0
void
set_option(char *arg)
{
    struct pro *p;

    arg++;			/* ignore leading "-" */
    for (p = pro; p->p_name; p++)
	if (*p->p_name == *arg && eqin(p->p_name, arg))
	    goto found;
    errx(1, "%s: unknown parameter \"%s\"", option_source, arg - 1);
found:
    switch (p->p_type) {

    case PRO_SPECIAL:
	switch (p->p_special) {

	case IGN:
	    break;

	case CLI:
	    if (*param_start == 0)
		goto need_param;
	    ps.case_indent = atof(param_start);
	    break;

	case STDIN:
	    if (input == 0)
		input = stdin;
	    if (output == 0)
		output = stdout;
	    break;

	case KEY:
	    if (*param_start == 0)
		goto need_param;
	    {
		char *str = strdup(param_start);
		if (str == NULL)
			err(1, NULL);
		addkey(str, 4);
	    }
	    break;

	default:
	    errx(1, "set_option: internal error: p_special %d", p->p_special);
	}
	break;

    case PRO_BOOL:
	if (p->p_special == OFF)
	    *p->p_obj = false;
	else
	    *p->p_obj = true;
	break;

    case PRO_INT:
	if (!isdigit(*param_start)) {
    need_param:
	    errx(1, "%s: ``%s'' requires a parameter", option_source, arg - 1);
	}
	*p->p_obj = atoi(param_start);
	break;

    case PRO_FONT:
	parsefont((struct fstate *) p->p_obj, param_start);
	break;

    default:
	errx(1, "set_option: internal error: p_type %d", p->p_type);
    }
}
Beispiel #2
0
void
set_option(char *arg)
{
	struct pro *p;

	arg++;			/* ignore leading "-" */
	for (p = pro; p->p_name; p++)
		if (*p->p_name == *arg && eqin(p->p_name, arg))
			goto found;
	fprintf(stderr, "indent: %s: unknown parameter \"%s\"\n", option_source, arg - 1);
	exit(1);
found:
	switch (p->p_type) {

	case PRO_SPECIAL:
		switch (p->p_special) {

		case IGN:
			break;

		case CLI:
			if (*param_start == 0)
				goto need_param;
			ps.case_indent = atof(param_start);
			break;

		case STDIN:
			if (input == 0)
				input = stdin;
			if (output == 0)
				output = stdout;
			break;

		case KEY:
			if (*param_start == 0)
				goto need_param;
			{
				char   *str;

				str = strdup(param_start);
				addkey(str, 4);
			}
			break;

		case KEY_FILE:
			if (*param_start == 0)
				goto need_param;
			add_typedefs_from_file(param_start);
			break;

		case VERSION:
			{
				printf("pg_bsd_indent %s\n", INDENT_PG_VERSION);
				exit(0);
			}
			break;

		default:
			fprintf(stderr, "\
indent: set_option: internal error: p_special %d\n", p->p_special);
			exit(1);
		}
		break;

	case PRO_BOOL:
		if (p->p_special == OFF)
			*p->p_obj = false;
		else
			*p->p_obj = true;
		break;

	case PRO_INT:
		if (!isdigit((unsigned char)*param_start)) {
	need_param:
			fprintf(stderr, "indent: %s: ``%s'' requires a parameter\n",
			    option_source, arg - 1);
			exit(1);
		}
		*p->p_obj = atoi(param_start);
		break;

	case PRO_FONT:
		parsefont((struct fstate *) p->p_obj, param_start);
		break;

	default:
		fprintf(stderr, "indent: set_option: internal error: p_type %d\n",
		    p->p_type);
		exit(1);
	}
}