Esempio n. 1
0
static error_t parse_opt(int k, char *arg, struct argp_state *state)
{
	switch (k) {
	case 'p':
		port = atoi(arg);
		break;
	case 'v':
		verbose	++;
		break;
	case '?':
		argp_state_help(state, state->out_stream,
				ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG
				| ARGP_HELP_DOC);
		fprintf(state->out_stream, _("\nReport bugs to %s.\n"), argp_program_bug_address);
		exit(0);
	case 'V':
		fprintf (state->out_stream, "%s\n", argp_program_version);
		exit(0);
	case -3:
		argp_state_help(state, state->out_stream, ARGP_HELP_USAGE);
		exit(0);
	default:
		return ARGP_ERR_UNKNOWN;
	}
	return 0;
}
Esempio n. 2
0
static error_t parse_opt(int k, char *optarg, struct argp_state *state)
{
	struct arguments *args = state->input;
	switch (k) {
	case 'I':
		args->input_format = dvb_parse_format(optarg);
		break;
	case 'O':
		args->output_format = dvb_parse_format(optarg);
		break;
	case 's':
		args->delsys = dvb_parse_delsys(optarg);
		break;
	case '?':
		argp_state_help(state, state->out_stream,
				ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG
				| ARGP_HELP_DOC);
		fprintf(state->out_stream, _("\nReport bugs to %s.\n"), argp_program_bug_address);
		exit(0);
	case 'V':
		fprintf (state->out_stream, "%s\n", argp_program_version);
		exit(0);
	case -3:
		argp_state_help(state, state->out_stream, ARGP_HELP_USAGE);
		exit(0);
	default:
		return ARGP_ERR_UNKNOWN;
	};
	return 0;
}
Esempio n. 3
0
static error_t
argp_parser(int key, char* arg, struct argp_state* state)
{
    struct options *opts = state->input;

    switch (key) {
    case 'd':
        opts->device = arg;
        return 0;

    case 'h':
        strncpy(opts->params.hostname, arg, sizeof(opts->params.hostname) - 1);
        return 0;

    case 's':
        strncpy(opts->params.service, arg, sizeof(opts->params.service) - 1);
        return 0;

    case ARGP_KEY_END:
        if (!opts->device) {
            fprintf(stderr, "Device MUST be specified!\n");
            argp_state_help(state, stderr, ARGP_HELP_STD_HELP);
            return EINVAL;
        }

        if (strlen(opts->params.service) == 0)
            strcpy(opts->params.service, STR(TANG_PORT));

        return 0;

    default:
        return ARGP_ERR_UNKNOWN;
    }
}
Esempio n. 4
0
static error_t parse_opt (int key, char *arg, struct argp_state *state)
{
	switch (key) {
		case 'c':
			cat = 1;
			return 0;
		case 'g':
			global = 1;
			quiet = 1;
			return 0;
		case 'd':
			debug_level = 1;
			return 0;
		case 'q':
			quiet = 1;
			return 0;
		case 'C':
			user_config_file = arg;
			return 0;
		case 'm':
			alt_system = arg;
			return 0;
		case 'h':
			argp_state_help (state, state->out_stream,
					 ARGP_HELP_STD_HELP);
			break;
	}
	return ARGP_ERR_UNKNOWN;
}
Esempio n. 5
0
/*
   PARSER. Field 2 in ARGP.
   Order of parameters: KEY, ARG, STATE.
*/
static error_t parse_opt (int key, char *arg, struct argp_state *state)
{
  	struct arguments *arguments = state->input;
	//int i;
	//for(i=0; i<state->argc; i++){
	//	LOG(("state->argv[%d]=%s\n",i,state->argv[i]));
	//}

	LOG(("-----------------------------------\n"));
	LOG(("key=%c\targ:%s\targ_num:%d\tstate->next=%d\n",key,arg,\
				state->arg_num,state->next));
  	switch (key){
    	case 'v':
      		arguments->verbose = 1;		// 准备输出详细的内容
      		break;
    	case 'a':
    	  	arguments->string1 = arg;
    	  	break;
    	case 'b':
    	  	arguments->string2 = arg;
    	  	break;
    	case 'o':
    	  	arguments->outfile = arg;
    	  	break;
    	case ARGP_KEY_ARG:		// 这里是无标识的输入参数,保存在state->args中
			LOG(("ARGP_KEY_ARG,key=%c\n",key));
    	  	if (state->arg_num >= 2)
			{
				argp_usage(state);
			}
    	  	arguments->args[state->arg_num] = arg;
    	  	break;
    	case ARGP_KEY_END:		// 这里和ARGP_KEY_ARG配合,使无标识输入只能是两个
			LOG(("ARGP_KEY_END,key=%c\n",key));
    	  	if (state->arg_num < 2){
		  		argp_usage (state);
			}
    	  	break;
		case ARGP_KEY_NO_ARGS:
			LOG(("ARGP_KEY_NO_ARGS\n"));
			argp_state_help(state, stdout, ARGP_HELP_STD_HELP);
    	default:
    	  	return ARGP_ERR_UNKNOWN;
    	}
  	return 0;	// success
}
Esempio n. 6
0
File: sl.cpp Progetto: Gerjo/vogl
static error_t
parse_opt(int key, char *arg, struct argp_state *state)
{
    arguments_t *arguments = (arguments_t *)state->input;

    switch (key)
    {
    case '?':
        fprintf(stderr, "\nGameIDS:\n");
        for(size_t i = 0; i < sizeof(g_gameids) / sizeof(g_gameids[0]); i++)
        {
            fprintf(stderr, "  %-6d - %s\n", g_gameids[i].id, g_gameids[i].name);
        }
        printf("\n");
        argp_state_help(state, stderr, ARGP_HELP_LONG | ARGP_HELP_EXIT_OK);
        break;
    case -1:
        arguments->cmdline += " ";
        arguments->cmdline += state->argv[state->next - 1];
        break;
    case 'i': arguments->gameid = arg; break;
    case 'f': arguments->vogl_tracefile = arg; break;
    case 'v': arguments->flags |= F_VERBOSE; break;
    case '6': arguments->flags |= F_AMD64; break;
    case 'y': g_dryrun = true; break;
    case 'd': g_debugspew = true; break;
        break;

    case -2:
        // --show-type-list: Whitespaced list of options for bash autocomplete.
        for (size_t i = 0; ; i++)
        {
            const char *name = state->root_argp->options[i].name;
            if (!name)
                break;
            printf("--%s ", name);
        }
        exit(0);
    }
    return 0;
}
Esempio n. 7
0
/* default parse_opt */
static error_t parse_opt(int key, char *arg, struct argp_state *state)
{
    struct cmdctx *cmdctx = state->input;
    int rc = 0;

    switch (key) {
        case ARGP_KEY_INIT:
            state->child_inputs[0] = cmdctx;
            state->child_inputs[1] = NULL;
            break;
        
        case 'v': {
            if ((cmdctx->cmd->flags & COMMAND_HASVERBOSE) == 0) {
                argp_usage (state);
                cmdctx->rtflags |= CMDCTX_ERR;
                
            } else {
                poldek_set_verbose(poldek_VERBOSE + 1);
            }
        }
        break;

        case 'q': 
            cmdctx->rtflags |= CMDCTX_NOCTRLMSGS;
            poldek_set_verbose(-1);
            break;
        
            
        case ARGP_KEY_ARG:
            DBGF("cli.arg %s, %d\n", arg,
                 cmdctx->cmd->flags & COMMAND_SELFARGS);
            if (cmdctx->cmd->flags & COMMAND_SELFARGS)
                return ARGP_ERR_UNKNOWN;
            
            
            if (cmdctx->cmd->flags & COMMAND_NOARGS) {
                argp_usage (state);
                cmdctx->rtflags |= CMDCTX_ERR;
                return EINVAL;
            }
            poldek_ts_add_pkgmask(cmdctx->ts, arg);
            break;
            
        case 'h':
            argp_state_help(state, stdout, ARGP_HELP_LONG | ARGP_HELP_DOC |
                            ARGP_HELP_USAGE);
            return EINVAL;
            break;
            
        case ARGP_KEY_NO_ARGS:
            DBGF("NOARGS %d\n",
                 cmdctx->rtflags & (CMDCTX_ISHELP|CMDCTX_GOTARGS));
            if (cmdctx->rtflags & (CMDCTX_ISHELP | CMDCTX_GOTARGS))
                break;
            
            if ((cmdctx->cmd->flags & (COMMAND_NOARGS|COMMAND_EMPTYARGS)) == 0) {
                argp_usage (state);
                cmdctx->rtflags |= CMDCTX_ERR;
                return EINVAL;
            }
            break;
            
            
        case ARGP_KEY_ERROR:
            cmdctx->rtflags |= CMDCTX_ERR;
            return EINVAL;
            break;
            
        default:
            return ARGP_ERR_UNKNOWN;
    }
    
    //printf("key = %d, rc = %d\n", key, rc);
    return rc;
}
Esempio n. 8
0
static error_t parse_opt(int k, char *optarg, struct argp_state *state)
{
	struct arguments *args = state->input;
	switch (k) {
	case 'a':
		args->adapter = strtoul(optarg, NULL, 0);
		args->n_adapter++;
		break;
	case 'f':
		args->frontend = strtoul(optarg, NULL, 0);
		args->adapter_fe = args->adapter;
		break;
	case 'd':
		args->demux = strtoul(optarg, NULL, 0);
		args->adapter_dmx = args->adapter;
		break;
	case 'w':
		if (!strcasecmp(optarg,"on")) {
			args->lna = 1;
		} else if (!strcasecmp(optarg,"off")) {
			args->lna = 0;
		} else if (!strcasecmp(optarg,"auto")) {
			args->lna = LNA_AUTO;
		} else {
			int val = strtoul(optarg, NULL, 0);
			if (!val)
				args->lna = 0;
			else if (val > 0)
				args->lna = 1;
			else
				args->lna = LNA_AUTO;
		}
		break;
	case 'l':
		args->lnb_name = optarg;
		break;
	case 'S':
		args->sat_number = strtoul(optarg, NULL, 0);
		break;
	case 'U':
		args->freq_bpf = strtoul(optarg, NULL, 0);
		break;
	case 'W':
		args->diseqc_wait = strtoul(optarg, NULL, 0);
		break;
	case 'N':
		args->get_nit++;
		break;
	case 'G':
		args->get_detected++;
		break;
	case 'F':
		args->dont_add_new_freqs++;
		break;
	case 'p':
		args->other_nit++;
		break;
	case 'v':
		verbose++;
		break;
	case 'T':
		args->timeout_multiply = strtoul(optarg, NULL, 0);
		break;
	case 'I':
		args->input_format = dvb_parse_format(optarg);
		break;
	case 'O':
		args->output_format = dvb_parse_format(optarg);
		break;
	case 'o':
		args->output = optarg;
		break;
	case '3':
		args->force_dvbv3 = 1;
		break;
	case 'C':
		args->cc = strndup(optarg, 2);
		break;
	case '?':
		argp_state_help(state, state->out_stream,
				ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG
				| ARGP_HELP_DOC);
		fprintf(state->out_stream, _("\nReport bugs to %s.\n"), argp_program_bug_address);
		exit(0);
	case 'V':
		fprintf (state->out_stream, "%s\n", argp_program_version);
		exit(0);
	case -3:
		argp_state_help(state, state->out_stream, ARGP_HELP_USAGE);
		exit(0);
	default:
		return ARGP_ERR_UNKNOWN;
	};
	return 0;
}
Esempio n. 9
0
static error_t parse_opt (int key, char *arg, struct argp_state *state)
{
	switch (key) {
		case 'd':
			debug_level = 1;
			return 0;
		case 'v':
			quiet = 0;
			return 0;
		case 'r':
			regex_opt = 1;
			return 0;
		case 'e':
			/* Only makes sense for apropos, but has
			 * historically been accepted by whatis anyway.
			 */
			regex_opt = 0;
			exact = 1;
			return 0;
		case 'w':
			regex_opt = 0;
			wildcard = 1;
			return 0;
		case 'a':
			if (am_apropos)
				require_all = 1;
			else
				argp_usage (state);
			return 0;
		case 'l':
			long_output = 1;
			return 0;
		case 's':
			sections = split_sections (arg);
			return 0;
		case 'm':
			alt_systems = arg;
			return 0;
		case 'M':
			manp = xstrdup (arg);
			return 0;
		case 'L':
			locale = arg;
			return 0;
		case 'C':
			user_config_file = arg;
			return 0;
		case 'f':
			/* helpful override if program name detection fails */
			am_apropos = 0;
			return 0;
		case 'k':
			/* helpful override if program name detection fails */
			am_apropos = 1;
			return 0;
		case 'h':
			argp_state_help (state, state->out_stream,
					 ARGP_HELP_STD_HELP &
					 ~ARGP_HELP_PRE_DOC);
			break;
		case ARGP_KEY_ARGS:
			keywords = state->argv + state->next;
			num_keywords = state->argc - state->next;
			return 0;
		case ARGP_KEY_NO_ARGS:
			/* Make sure that we have a keyword! */
			printf (_("%s what?\n"), program_name);
			exit (FAIL);
		case ARGP_KEY_SUCCESS:
			if (am_apropos && !exact && !wildcard)
				regex_opt = 1;
			return 0;
	}
	return ARGP_ERR_UNKNOWN;
}
Esempio n. 10
0
static error_t parse_opt(int k, char *arg, struct argp_state *state)
{
	char *p;
	long key;
	int rc;

	switch (k) {
	case 'v':
		debug++;
		break;
	case 't':
		test++;
		break;
	case 'c':
		clear++;
		break;
	case 'D':
		delay = atoi(arg);
		break;
	case 'P':
		period = atoi(arg);
		break;
	case 'd':
		devicename = arg;
		break;
	case 's':
		devclass = arg;
		break;
	case 'r':
		readtable++;
		break;
	case 'w': {
		char *name = NULL;

		rc = parse_keyfile(arg, &name);
		if (rc)
			goto err_inval;
		if (name)
			fprintf(stderr, _("Read %s table\n"), name);
		break;
	}
	case 'a': {
		rc = parse_cfgfile(arg);
		if (rc)
			goto err_inval;
		break;
	}
	case 'k':
		p = strtok(arg, ":=");
		do {
			if (!p)
				goto err_inval;
			nextkey->codes[0] = strtoul(p, NULL, 0);
			if (errno)
				goto err_inval;

			p = strtok(NULL, ",;");
			if (!p)
				goto err_inval;
			key = parse_code(p);
			if (key == -1) {
				key = strtol(p, NULL, 0);
				if (errno)
					goto err_inval;
			}
			nextkey->codes[1] = key;

			if (debug)
				fprintf(stderr, _("scancode 0x%04x=%u\n"),
					nextkey->codes[0], nextkey->codes[1]);

			nextkey->next = calloc(1, sizeof(keys));
			if (!nextkey->next) {
				perror(_("No memory!\n"));
				return ENOMEM;
			}
			nextkey = nextkey->next;

			p = strtok(NULL, ":=");
		} while (p);
		break;
	case 'p':
		p = strtok(arg, ",;");
		do {
			if (!p)
				goto err_inval;
			if (!strcasecmp(p,"rc5") || !strcasecmp(p,"rc-5"))
				ch_proto |= RC_5;
			else if (!strcasecmp(p,"rc6") || !strcasecmp(p,"rc-6"))
				ch_proto |= RC_6;
			else if (!strcasecmp(p,"nec"))
				ch_proto |= NEC;
			else if (!strcasecmp(p,"jvc"))
				ch_proto |= JVC;
			else if (!strcasecmp(p,"sony"))
				ch_proto |= SONY;
			else if (!strcasecmp(p,"sanyo"))
				ch_proto |= SANYO;
			else if (!strcasecmp(p,"lirc"))
				ch_proto |= LIRC;
			else if (!strcasecmp(p,"rc-5-sz"))
				ch_proto |= RC_5_SZ;
			else if (!strcasecmp(p,"sharp"))
				ch_proto |= RC_5_SZ;
			else if (!strcasecmp(p,"mce-kbd"))
				ch_proto |= RC_5_SZ;
			else if (!strcasecmp(p,"xmp"))
				ch_proto |= XMP;
			else if (!strcasecmp(p,"all"))
				ch_proto |= ~0;
			else
				goto err_inval;
			p = strtok(NULL, ",;");
		} while (p);
		break;
	case '?':
		argp_state_help(state, state->out_stream,
				ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG
				| ARGP_HELP_DOC);
		fprintf(state->out_stream, _("\nReport bugs to %s.\n"), argp_program_bug_address);
		exit(0);
	case 'V':
		fprintf (state->out_stream, "%s\n", argp_program_version);
		exit(0);
	case -3:
		argp_state_help(state, state->out_stream, ARGP_HELP_USAGE);
		exit(0);
	default:
		return ARGP_ERR_UNKNOWN;
	}
	return 0;

err_inval:
	fprintf(stderr, _("Invalid parameter(s)\n"));
	return ARGP_ERR_UNKNOWN;

}
Esempio n. 11
0
//----------------------------------------------------------------------------------------------------------------------
// parse_options
//----------------------------------------------------------------------------------------------------------------------
static error_t parse_options(int key, char *arg, struct argp_state *state)
{
    voglperf_data_t *arguments = (voglperf_data_t *)state->input;
    extern char *program_invocation_short_name;

    // Check g_options array for this key.
    for (size_t i = 0; i < sizeof(g_options) / sizeof(g_options[0]); i++)
    {
        if (g_options[i].key == key)
        {
            arguments->flags |= g_options[i].flag;
            return 0;
        }
    }

    switch (key)
    {
    case 0:
        if (arg && arg[0])
        {
            if (arguments->gameid.size())
            {
                // These are arguments to our program, e.g. if the user wants to run:
                //   "voglperfrun -- glxgears -info",
                // we get "-info".
                arguments->game_args += std::string("\"") + state->argv[state->next - 1] + "\"";
            }
            else
            {
                arguments->gameid = arg;
            }
        }
        break;

    case '?':
        printf("\nUsage:\n");
        printf("  %s [options] [SteamGameID | ExecutableName]\n", program_invocation_short_name);

        printf("\n");
        argp_state_help(state, stdout, ARGP_HELP_LONG);

        printf("\nGameIDS (please see the appids.txt file to modify this list):\n");
        for (size_t i = 0; i < arguments->installed_games.size(); i++)
        {
            printf("  %-6u - %s\n", arguments->installed_games[i].id, arguments->installed_games[i].name.c_str());
        }

        printf("\n");
        printf("To view frametime graph with gnpulot:\n");
        printf("  gnuplot -p -e 'set terminal wxt size 1280,720;set ylabel \"milliseconds\";set yrange [0:100]; plot \"FILENAME\" with lines'\n");
        printf("\n");
        printf("Create frametime graph png file:\n");
        printf("  gnuplot -p -e 'set output \"blah.png\";set terminal pngcairo size 1280,720 enhanced;set ylabel \"milliseconds\";set yrange [0:100]; plot \"FILENAME\" with lines'\n");

        exit(0);

    case -2:
        // --show-type-list: Whitespaced list of options for bash autocomplete.
        for (size_t i = 0;; i++)
        {
            const char *name = state->root_argp->options[i].name;
            if (!name)
                break;

            printf("--%s ", name);
        }
        exit(0);
    }

    return 0;
}
Esempio n. 12
0
static error_t parse_opt(int k, char *arg, struct argp_state *state)
{
	switch (k) {
	case 'a':
		adapter = atoi(arg);
		break;
	case 'f':
		frontend = atoi(arg);
		break;
	case 'd':
		delsys = dvb_parse_delsys(arg);
		if (delsys < 0)
			return ARGP_ERR_UNKNOWN;
		break;
	case 'm':
		femon++;
		break;
	case 'A':
		femon++;
		acoustical++;
		break;
#if 0
	case 's':
		set_params = arg;
		break;
#endif
	case 'g':
		get++;
		break;
	case 'D':
		device_mon++;
		break;
	case 'H':
		server = arg;
		break;
	case 'T':
		port = atoi(arg);
		break;
	case 'v':
		verbose	++;
		break;
	case 'c':
		count = atoi(arg);
		break;
	case '?':
		argp_state_help(state, state->out_stream,
				ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG
				| ARGP_HELP_DOC);
		fprintf(state->out_stream, _("\nReport bugs to %s.\n"), argp_program_bug_address);
		exit(0);
	case 'V':
		fprintf (state->out_stream, "%s\n", argp_program_version);
		exit(0);
	case -3:
		argp_state_help(state, state->out_stream, ARGP_HELP_USAGE);
		exit(0);
	default:
		return ARGP_ERR_UNKNOWN;
	}
	return 0;
}
Esempio n. 13
0
static error_t parse_opt(int k, char *optarg, struct argp_state *state)
{
	struct arguments *args = state->input;

	switch (k) {
	case 'a':
		args->adapter = strtoul(optarg, NULL, 0);
		break;
	case 'f':
		args->frontend = strtoul(optarg, NULL, 0);
		break;
	case 'd':
		args->demux = strtoul(optarg, NULL, 0);
		break;
	case 't':
		args->timeout = strtoul(optarg, NULL, 0);
		break;
	case 'I':
		args->input_format = dvb_parse_format(optarg);
		break;
	case 'o':
		args->filename = strdup(optarg);
		/* fall through */
	case 'r':
		args->dvr = 1;
		break;
	case 'p':
		args->rec_psi = 1;
		break;
	case 'x':
		args->exit_after_tuning = 1;
		break;
	case 'c':
		args->confname = strdup(optarg);
		break;
	case 'w':
		if (!strcasecmp(optarg,"on")) {
			args->lna = 1;
		} else if (!strcasecmp(optarg,"off")) {
			args->lna = 0;
		} else if (!strcasecmp(optarg,"auto")) {
			args->lna = LNA_AUTO;
		} else {
			int val = strtoul(optarg, NULL, 0);
			if (!val)
				args->lna = 0;
			else if (val > 0)
				args->lna = 1;
			else
				args->lna = LNA_AUTO;
		}
		break;
	case 'l':
		args->lnb_name = strdup(optarg);
		break;
	case 'S':
		args->sat_number = strtoul(optarg, NULL, 0);
		break;
	case 'U':
		args->freq_bpf = strtoul(optarg, NULL, 0);
		break;
	case 'W':
		args->diseqc_wait = strtoul(optarg, NULL, 0);
		break;
	case 's':
		args->silent++;
		break;
	case 'v':
		args->verbose++;
		break;
	case 'A':
		args->n_apid = strtoul(optarg, NULL, 0);
		break;
	case 'V':
		args->n_vpid = strtoul(optarg, NULL, 0);
		break;
	case 'P':
		args->all_pids++;
		break;
	case '3':
		args->force_dvbv3 = 1;
		break;
	case 'm':
		args->traffic_monitor = 1;
		break;
	case 'X':
		args->low_traffic = 1;
		break;
	case 'L':
		args->search = strdup(optarg);
		break;
	case 'C':
		args->cc = strndup(optarg, 2);
		break;
	case '?':
		argp_state_help(state, state->out_stream,
				ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG
				| ARGP_HELP_DOC);
		fprintf(state->out_stream, _("\nReport bugs to %s.\n"), argp_program_bug_address);
		exit(0);
	case -4:
		fprintf (state->out_stream, "%s\n", argp_program_version);
		exit(0);
	case -3:
		argp_state_help(state, state->out_stream, ARGP_HELP_USAGE);
		exit(0);
	default:
		return ARGP_ERR_UNKNOWN;
	};
	return 0;
}