Example #1
0
static ioctl_fn lookup_dev_ioctl(unsigned int cmd)
{
	static ioctl_fn _ioctls[] = {
		autofs_dev_ioctl_version,
		autofs_dev_ioctl_protover,
		autofs_dev_ioctl_protosubver,
		autofs_dev_ioctl_openmount,
		autofs_dev_ioctl_closemount,
		autofs_dev_ioctl_ready,
		autofs_dev_ioctl_fail,
		autofs_dev_ioctl_setpipefd,
		autofs_dev_ioctl_catatonic,
		autofs_dev_ioctl_timeout,
		autofs_dev_ioctl_requester,
		autofs_dev_ioctl_expire,
		autofs_dev_ioctl_askumount,
		autofs_dev_ioctl_ismountpoint,
	};
	unsigned int idx = cmd_idx(cmd);

	return (idx >= ARRAY_SIZE(_ioctls)) ? NULL : _ioctls[idx];
}
Example #2
0
static ioctl_fn lookup_dev_ioctl(unsigned int cmd)
{
	static struct {
		int cmd;
		ioctl_fn fn;
	} _ioctls[] = {
		{cmd_idx(AUTOFS_DEV_IOCTL_VERSION_CMD), NULL},
		{cmd_idx(AUTOFS_DEV_IOCTL_PROTOVER_CMD),
			 autofs_dev_ioctl_protover},
		{cmd_idx(AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD),
			 autofs_dev_ioctl_protosubver},
		{cmd_idx(AUTOFS_DEV_IOCTL_OPENMOUNT_CMD),
			 autofs_dev_ioctl_openmount},
		{cmd_idx(AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD),
			 autofs_dev_ioctl_closemount},
		{cmd_idx(AUTOFS_DEV_IOCTL_READY_CMD),
			 autofs_dev_ioctl_ready},
		{cmd_idx(AUTOFS_DEV_IOCTL_FAIL_CMD),
			 autofs_dev_ioctl_fail},
		{cmd_idx(AUTOFS_DEV_IOCTL_SETPIPEFD_CMD),
			 autofs_dev_ioctl_setpipefd},
		{cmd_idx(AUTOFS_DEV_IOCTL_CATATONIC_CMD),
			 autofs_dev_ioctl_catatonic},
		{cmd_idx(AUTOFS_DEV_IOCTL_TIMEOUT_CMD),
			 autofs_dev_ioctl_timeout},
		{cmd_idx(AUTOFS_DEV_IOCTL_REQUESTER_CMD),
			 autofs_dev_ioctl_requester},
		{cmd_idx(AUTOFS_DEV_IOCTL_EXPIRE_CMD),
			 autofs_dev_ioctl_expire},
		{cmd_idx(AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD),
			 autofs_dev_ioctl_askumount},
		{cmd_idx(AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD),
			 autofs_dev_ioctl_ismountpoint}
	};
	unsigned int idx = cmd_idx(cmd);

	return (idx >= ARRAY_SIZE(_ioctls)) ? NULL : _ioctls[idx].fn;
}
Example #3
0
/*
 * Request a game command from the uI and carry out whatever actions
 * go along with it.
 */
void process_command(cmd_context ctx, bool no_request)
{
	int idx;
	game_command cmd;

	/* If we've got a command to process, do it. */
	if (cmd_get(ctx, &cmd, !no_request) == 0)
	{
		idx = cmd_idx(cmd.command);

		if (idx == -1) return;

		/* Do some sanity checking on those arguments that might have
		   been declared as "unknown", such as directions and targets. */
		switch (cmd.command)
		{
			case CMD_WALK:
			case CMD_RUN:
			case CMD_JUMP:
			case CMD_OPEN:
			case CMD_CLOSE:
			case CMD_TUNNEL:
			case CMD_DISARM:
			case CMD_BASH:
			case CMD_ALTER:
			case CMD_JAM:
			case CMD_MAKE_TRAP:
			{
				/* Direction hasn't been specified, so we ask for one. */
				if (cmd.args[0].direction == DIR_UNKNOWN)
				{
					if (!get_rep_dir(&cmd.args[0].direction))
						return;
				}

				break;
			}

			/*
			 * These take an item number and a  "target" as arguments,
			 * though a target isn't always actually needed, so we'll
			 * only prompt for it via callback if the item being used needs it.
			 */
			case CMD_USE_WAND:
			case CMD_USE_ROD:
			case CMD_QUAFF:
			case CMD_ACTIVATE:
			case CMD_READ_SCROLL:
			case CMD_FIRE:
			case CMD_THROW:
			case CMD_STEAL:
			{
				bool get_target = FALSE;

				if (cmd.command == CMD_FIRE ||
					cmd.command == CMD_THROW ||
					obj_needs_aim(object_from_item_idx(cmd.args[0].choice)))
				{
					if (cmd.args[1].direction == DIR_UNKNOWN)
						get_target = TRUE;

					if (cmd.args[1].direction == DIR_TARGET && !target_okay())
						get_target = TRUE;
				}

				if (get_target && !get_aim_dir(&cmd.args[1].direction, FALSE))
						return;

				break;
			}

			/* This takes a choice and a direction. */
			case CMD_CAST:
			{
				bool get_target = FALSE;

				if (spell_needs_aim(cp_ptr->spell_book, cmd.args[0].choice))
				{
					if (cmd.args[1].direction == DIR_UNKNOWN)
						get_target = TRUE;

					if (cmd.args[1].direction == DIR_TARGET && !target_okay())
						get_target = TRUE;

				}

				if (get_target && !get_aim_dir(&cmd.args[1].direction, FALSE))
						return;

				break;
			}

			default:
			{
				/* I can see the point of the compiler warning, but still... */
				break;
			}
		}

		/* Command repetition */
		if (game_cmds[idx].repeat_allowed)
		{
			/* Auto-repeat */
			if (game_cmds[idx].auto_repeat_n > 0 && p_ptr->command_arg == 0 && p_ptr->command_rep == 0)
				p_ptr->command_arg = game_cmds[idx].auto_repeat_n;

			allow_repeated_command();
		}

		repeat_prev_allowed = TRUE;

		if (game_cmds[idx].fn)
			game_cmds[idx].fn(cmd.command, cmd.args);
	}
}
Example #4
0
/*
 * Inserts a command in the queue to be carried out.
 */
errr cmd_insert(cmd_code c, ...)
{
	game_command cmd = {CMD_NULL, 0, {{0}} };
	va_list vp;
	size_t j = 0;
	int idx = cmd_idx(c);

	if (idx == -1) return 1;

	/* Begin the Varargs Stuff */
	va_start(vp, c);

	cmd.command = c;

	for (j = 0; (game_cmds[idx].arg_type[j] != arg_END &&
				 j < N_ELEMENTS(game_cmds[idx].arg_type)); j++)
	{
		switch (game_cmds[idx].arg_type[j])
		{
			case arg_CHOICE:
			{
				cmd.args[j].choice = va_arg(vp, int);
				break;
			}

			case arg_STRING:
			{
				cmd.args[j].string = string_make(va_arg(vp, const char *));
				break;
			}

			case arg_DIRECTION:
			case arg_TARGET:
			{
				cmd.args[j].direction = va_arg(vp, int);
				break;
			}

			case arg_POINT:
			{
				cmd.args[j].point.y = va_arg(vp, int);
				cmd.args[j].point.x = va_arg(vp, int);
				break;
			}

			case arg_ITEM:
			{
				cmd.args[j].item = va_arg(vp, int);
				break;
			}

			case arg_NUMBER:
			{
				cmd.args[j].number = va_arg(vp, int);
				break;
			}

			case arg_END:
			{
				break;
			}
		}
	}

	/* End the Varargs Stuff */
	va_end(vp);

	return cmd_insert_s(&cmd);
}
Example #5
0
f_describe()
{	register char *cp;
	register int i, c;
	char str[10];
	struct buffer *savbuf, *b, *make_buf();
	chroff bdot;

	saynow("Help for command: ");
	i = cmd_idx(c = cmd_read());		/* Get function idx for cmd */
	if(c&CB_META) sayntoo("M-");
	if(i == FN_PFXMETA)
	  {	sayntoo("M-");
		i = cmd_idx(c = (cmd_read() | CB_META));
	  }
	else if(i == FN_PFXEXT)
	  {	sayntoo("^X-");
		i = cmd_idx(c = (cmd_read() | CB_EXT));
	  }
	str[0] = c&0177;
	str[1] = 0;
	sayntoo(str);

	/* Now read in the help file, if necessary */
	savbuf = cur_buf;
	if(help_buf)
		chg_buf(help_buf);
	else
	  {
		saynow("Loading ");
		sayntoo(ev_helpfile);
		sayntoo("...");
		chg_buf(help_buf = make_buf(" **HELP**"));
		if(read_file(ev_helpfile) == 0)
		  {	chg_buf(savbuf);
			kill_buf(help_buf);
			help_buf = 0;
			return;
		  }
	  }


	/* Find function index in current buffer */
	cp = str;
	*cp++ = '<';
	*cp++ = 'F';
	cp = dottoa(cp, (chroff)i);
	*cp++ = '>';
	e_gobob();
	if(e_search(str, cp-str, 0) == 0)
		sayntoo(" No help found");
	else
	  {
		bdot = e_dot();
		while(!e_lblankp()) e_gonl();	/* Move past 1st blank line */
		b = make_buf(" *SHOW*");
		sb_sins((SBBUF *)b, e_copyn(bdot - e_dot()));
		mk_showin(b);			/* Show the stuff */
		kill_buf(b);
		sayclr();
	  }
	chg_buf(savbuf);
}