Пример #1
0
static int parse_args_post(int argc, char *argv[])
{
	DBG("Parsing arguments post state");

	optind = 1;

	for (;;)
	{
		char *gostr = "i:o:p:r:R:s:aUb" \
			      "L:hvVf:";

		struct option long_opts[] = {
			{"input", 1, 0, 'i'},
			{"output", 1, 0, 'o'},
			{"policy", 1, 0, 'p'},
			{"read-interval", 1, 0, 'r'},
			{"rate-interval", 1, 0, 'R'},
			{"sleep-interval", 1, 0, 's'},
			{"show-all", 0, 0, 'a'},
			{"use-si", 0, 0, 'U'},
			{"use-bit", 0, 0, 'b'},
			{"lifetime", 1, 0, 'L'},
			{0, 0, 0, 0},
		};
		int c = getopt_long(argc, argv, gostr, long_opts, NULL);
		if (c == -1)
			break;
		
		switch (c)
		{
			case 'i':
				if (input_set(optarg))
					return 1;
				break;

			case 'o':
				if (output_set(optarg))
					return 1;
				break;

			case 'p':
				cfg_setstr(cfg, "policy", optarg);
				break;

			case 'r':
				cfg_setfloat(cfg, "read_interval", strtod(optarg, NULL));
				break;

			case 'R':
				cfg_setfloat(cfg, "rate_interval", strtod(optarg, NULL));
				break;

			case 's':
				cfg_setint(cfg, "sleep_time", strtoul(optarg, NULL, 0));
				break;

			case 'a':
				cfg_setbool(cfg, "show_all", cfg_true);
				break;

			case 'U':
				cfg_setbool(cfg, "use_si", cfg_true);
				break;

			case 'b':
				cfg_setbool(cfg, "use_bit", cfg_true);
				break;

			case 'L':
				cfg_setint(cfg, "lifetime", strtoul(optarg, NULL, 0));
				break;

			case 'f':
				/* Already handled in pre getopt loop */
				break;

			default:
				quit("Aborting...\n");
				break;

		}
	}

	return 0;
}
static void key_assigner_update(void* data, int status)
{
	key_assigner_t* key = (key_assigner_t*)data;

	if(status == LOW)
		return;

	if(key->assigned == NOT_READY
	&& key->pressed_key != 0)
	{	
		key->timer += sync_elapsed;

		if(key->timer >= ACTIVATION_TIME)
		{
			int i;

			key->assigned       = WAIT_KEYS;
			key->timer          = (mFloat)0.0;
			key->timer_ready    = (mFloat)0.0;
			key->timer_unassign = (mFloat)0.0;

			if(key->type == MOUSE)
			{
				key->assigned = CHOOSE;
				key->selection = KEY_NB;
			}
	
			if(input_set(&player_array[key->player_nb].input, key->sys, key->type))
			{
				player_array[key->player_nb].input.flag = key->sys;
				
				if(key->type == MOUSE)
				{
					// For the mouse, we guarantee that each signal
					// will be in the range [1-4]
					for(i = 0 ; i < KEY_NB ; i++)
						player_array[key->player_nb].input.key[i] = i + 1;
				}
				else
				{
					for(i = 0 ; i < KEY_NB ; i++)
						player_array[key->player_nb].input.key[i] = 0;
				}
			}
			else
				key->assigned = NOT_READY;
		}
	}
	else if(key->assigned == CHOOSE
	     || key->assigned == READY) 
	{
		if(key->ready_pressed)
		{
			// Don't be able to accept if there's no model to load!
			if(model_nb_filenames > 0)
				key->timer_ready += sync_elapsed;
		}
		else if(key->unassign_pressed)
			key->timer_unassign += sync_elapsed;

		if(key->timer_unassign >= ACTIVATION_TIME)
		{
			int i;
			int players_not_ready = 0;

			key->assigned = NOT_READY;
			key->unassign_pressed = 0;
			key->timer_unassign = (mFloat)0.0;
	
			for(i = 0 ; i < KEY_NB ; i++)
				player_array[key->player_nb].input.key[i] = 0;
			
			for(i = 0 ; i < MAX_PLAYERS ; i++)
				player_array[i].box_force = 1; 
					
			// This function sets 'ready' to 0 itself.	
			destroy_player(&player_array[key->player_nb]);
	
			for(i = 0 ; i < MAX_PLAYERS ; i++)	
			{
				if(!player_array[i].ready)
					players_not_ready++;
			}

			if(players_not_ready == MAX_PLAYERS)
			{
				dont_draw = 1;
				dont_compute = 1;
			}
		}
		else
		{
			if(key->assigned == CHOOSE)
			{
				if(key->timer_ready >= ACTIVATION_TIME)
				{
					int i;

					if(load_model(key))
					{
						key->assigned = READY;
						player_array[key->player_nb].ready = 1;
					}

					key->timer_ready = (mFloat)0.0;
					key->ready_pressed = 0;
					
					// Just below, we compute something modulo 
					// key->nb_frames, which raises an exception!
					key->nb_frames = 1;

					for(i = 0 ; i < MAX_PLAYERS ; i++)
						player_array[i].box_force = 1; 
				}
			}

			// The state could have gone to 'Ready' by the
			// code above.
			if(key->assigned == READY)
			{
				key->animation_time += sync_elapsed;

				if(key->animation_time >= key->frame_time)
				{
					key->frame_nb = (key->frame_nb + 1) % key->nb_frames;
					key->animation_time = (mFloat)0.0;
				}

				if(dont_draw)
				{
					int players_ready = 0;
					int i;
				
					for(i = 0 ; i < MAX_PLAYERS ; i++)
					{
						if(((key_assigner_t*)container_assigner[i].data.data)->assigned == READY 
						|| ((key_assigner_t*)container_assigner[i].data.data)->assigned == NOT_READY)
							players_ready++;
					}

					if(players_ready == MAX_PLAYERS)
						client_join_local(NULL);
				}
			}
		}
	}
}
Пример #3
0
Файл: bmon.c Проект: noushi/bmon
static void parse_args_post(int argc, char *argv[])
{
	optind = 1;

	for (;;)
	{
		char *gostr = "i:I:o:O:p:r:R:s:S:P:wadu:U" \
			      "L:g:hvVf:";

#ifdef HAVE_GETOPT_LONG
		struct option long_opts[] = {
			{"input", 1, 0, 'i'},
			{"secondary-input", 1, 0, 'I'},
			{"output", 1, 0, 'o'},
			{"secondary-output", 1, 0, 'O'},
			{"policy", 1, 0, 'p'},
			{"read-interval", 1, 0, 'r'},
			{"rate-interval", 1, 0, 'R'},
			{"sleep-interval", 1, 0, 's'},
			{"send-signal", 1, 0, 'S'},
			{"pidfile", 1, 0, 'P'},
			{"wait-for-signal", 0, 0, 'w'},
			{"show-all", 0, 0, 'a'},
			{"daemon", 0, 0, 'd'},
			{"uid", 1, 0, 'u'},
			{"use-si", 0, 0, 'U'},
			{"lifetime", 1, 0, 'L'},
			{"gid", 1, 0, 'g'},
			{0, 0, 0, 0},
		};
		int c = getopt_long(argc, argv, gostr, long_opts, NULL);
#else
		int c = getopt(argc, argv, gostr;
#endif

		if (c == -1)
			break;
		
		switch (c)
		{
			case 'i':
				input_set(optarg);
				break;

			case 'I':
				input_set_secondary(optarg);
				break;

			case 'o':
				output_set(optarg);
				break;

			case 'O':
				output_set_secondary(optarg);
				break;

			case 'p':
				cfg_setstr(cfg, "policy", optarg);
				break;

			case 'r':
				cfg_setfloat(cfg, "read_interval", strtod(optarg, NULL));
				break;

			case 'R':
				cfg_setfloat(cfg, "rate_interval", strtod(optarg, NULL));
				break;

			case 's':
				cfg_setint(cfg, "sleep_time", strtoul(optarg, NULL, 0));
				break;

			case 'S':
				signal_send(optarg);
				exit(0);

			case 'w':
				cfg_setint(cfg, "signal_driven", 1);
				break;

			case 'P':
				cfg_setstr(cfg, "pidfile", optarg);
				break;

			case 'a':
				cfg_setint(cfg, "show_all", 1);
				break;

			case 'd':
				cfg_setbool(cfg, "daemon", cfg_true);
				break;

			case 'u':
				cfg_setstr(cfg, "uid", optarg);
				break;

			case 'U':
				cfg_setbool(cfg, "use_si", cfg_true);
				break;

			case 'L':
				cfg_setint(cfg, "lifetime", strtoul(optarg, NULL, 0));
				break;

			case 'g':
				cfg_setstr(cfg, "gid", optarg);
				break;

			case 'f':
				/* Already handled in pre getopt loop */
				break;

			default:
				quit("Aborting...\n");
				break;

		}
	}
}