The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
TYPEMAP
xmmsc_connection_t*			XMMSC_CONNECTION_T
xmmsc_coll_t*				XMMSC_COLL_T
xmmsc_coll_type_t			XMMSC_COLL_TYPE_T
xmmsc_coll_namespace_t		T_PV
xmmsc_result_t*				XMMSC_RESULT_T
xmmsc_result_propdict_t*	XMMSC_RESULT_PROPDICT_T
xmms_plugin_type_t			XMMS_PLUGIN_TYPE_T
xmmsc_result_type_t			XMMS_RESULT_TYPE_T
xmms_object_cmd_arg_type_t	XMMS_OBJECT_CMD_ARG_TYPE_T
uint32_t					T_UV
int32_t						T_IV
perl_xmmsclient_collection_order_t	PERL_XMMSCLIENT_COLLECTION_ORDER_T
perl_xmmsclient_playlist_t *	PERL_XMMSCLIENT_PLAYLIST_T

OUTPUT

XMMSC_CONNECTION_T
	if ($var == NULL) {
		$arg = &PL_sv_undef;
	} else {
		$arg = perl_xmmsclient_new_sv_from_ptr ($var, \"Audio::XMMSClient\");
	}

XMMSC_COLL_T
	$arg = perl_xmmsclient_new_sv_from_ptr ($var, \"Audio::XMMSClient::Collection\");

XMMSC_RESULT_T
	$arg = perl_xmmsclient_new_sv_from_ptr ($var, \"Audio::XMMSClient::Result\");

XMMS_RESULT_TYPE_T
	{
		$arg = newSVpv (\"unknown\", 0);
		if ($var == XMMSC_RESULT_CLASS_DEFAULT) {
			sv_setpv ($arg, \"default\");
		} else if ($var == XMMSC_RESULT_CLASS_SIGNAL) {
			sv_setpv ($arg, \"signal\");
		} else if ($var == XMMSC_RESULT_CLASS_BROADCAST) {
			sv_setpv ($arg, \"broadcast\");
		}
	}

XMMS_OBJECT_CMD_ARG_TYPE_T
	{
		$arg = newSVpv ("unknown", 0);
		if ($var == XMMS_OBJECT_CMD_ARG_NONE) {
			sv_setpv ($arg, \"none\");
		} else if ($var == XMMS_OBJECT_CMD_ARG_UINT32) {
			sv_setpv ($arg, \"uint\");
		} else if ($var == XMMS_OBJECT_CMD_ARG_INT32) {
			sv_setpv ($arg, \"int\");
		} else if ($var == XMMS_OBJECT_CMD_ARG_STRING) {
			sv_setpv ($arg, \"string\");
		} else if ($var == XMMS_OBJECT_CMD_ARG_DICT) {
			sv_setpv ($arg, \"dict\");
		} else if ($var == XMMSC_RESULT_VALUE_TYPE_BIN) {
			sv_setpv ($arg, \"bin\");
		} else if ($var == XMMSC_RESULT_VALUE_TYPE_COLL) {
			sv_setpv ($arg, \"coll\");
		} else if ($var == XMMS_OBJECT_CMD_ARG_LIST) {
			sv_setpv ($arg, \"list\");
		} else if ($var == XMMS_OBJECT_CMD_ARG_PROPDICT) {
			sv_setpv ($arg, \"propdict\");
		}
	}

XMMSC_COLL_TYPE_T
	{
		$arg = newSVpv ("", 0);
		if ($var == XMMS_COLLECTION_TYPE_REFERENCE) {
			sv_setpv ($arg, \"reference\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_UNION) {
			sv_setpv ($arg, \"union\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_INTERSECTION) {
			sv_setpv ($arg, \"intersection\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_COMPLEMENT) {
			sv_setpv ($arg, \"complement\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_HAS) {
			sv_setpv ($arg, \"has\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_EQUALS) {
			sv_setpv ($arg, \"equals\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_MATCH) {
			sv_setpv ($arg, \"match\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_SMALLER) {
			sv_setpv ($arg, \"smaller\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_GREATER) {
			sv_setpv ($arg, \"greater\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_IDLIST) {
			sv_setpv ($arg, \"idlist\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_QUEUE) {
			sv_setpv ($arg, \"queue\");
		}
		else if ($var == XMMS_COLLECTION_TYPE_PARTYSHUFFLE) {
			sv_setpv ($arg, \"partyshuffle\");
		}
		else {
			croak (\"unknown XMMSC_COLL_TYPE_T\");
		}
	}

PERL_XMMSCLIENT_PLAYLIST_T
	$arg = perl_xmmsclient_new_sv_from_ptr ($var, \"Audio::XMMSClient::Playlist\");

INPUT

XMMSC_CONNECTION_T
	$var = ($type)perl_xmmsclient_get_ptr_from_sv ($arg, \"Audio::XMMSClient\");

XMMSC_COLL_T
	$var = ($type)perl_xmmsclient_get_ptr_from_sv ($arg, \"Audio::XMMSClient::Collection\");

XMMSC_RESULT_T
	$var = ($type)perl_xmmsclient_get_ptr_from_sv ($arg, \"Audio::XMMSClient::Result\");

XMMSC_RESULT_PROPDICT_T
	$var = (xmmsc_result_t *)perl_xmmsclient_get_ptr_from_sv ($arg, \"Audio::XMMSClient::Result::PropDict::Tie\");

XMMS_PLUGIN_TYPE_T
	{
		char *plugin_type = NULL;
		if ($arg == NULL) {
			plugin_type = \"\";
		} else {
			plugin_type = SvPV_nolen ($arg);
		}

		if (strcmp (plugin_type, \"output\") == 0) {
			$var = XMMS_PLUGIN_TYPE_OUTPUT;
		} else if (strcmp (plugin_type, \"playlist\") == 0) {
			$var = XMMS_PLUGIN_TYPE_PLAYLIST;
		} else if (strcmp (plugin_type, \"effect\") == 0) {
			$var = XMMS_PLUGIN_TYPE_EFFECT;
		} else if (strcmp (plugin_type, \"xform\") == 0) {
			$var = XMMS_PLUGIN_TYPE_XFORM;
		} else if (strcmp (plugin_type, \"all\") == 0) {
			$var = XMMS_PLUGIN_TYPE_ALL;
		} else {
			croak (\"unknown XMMS_PLUGIN_TYPE_T: %s\", plugin_type);
		}
	}

PERL_XMMSCLIENT_COLLECTION_ORDER_T
	$var = ($type)perl_xmmsclient_unpack_char_ptr_ptr ($arg);

PERL_XMMSCLIENT_PLAYLIST_T
	$var = ($type)perl_xmmsclient_get_ptr_from_sv ($arg, \"Audio::XMMSClient::Playlist\");

XMMSC_COLL_TYPE_T
	{
		char *coll_type = SvPV_nolen ($arg);

		if (strcmp (coll_type, \"reference\") == 0) {
			$var = XMMS_COLLECTION_TYPE_REFERENCE;
		}
		else if (strcmp (coll_type, \"union\") == 0) {
			$var = XMMS_COLLECTION_TYPE_UNION;
		}
		else if (strcmp (coll_type, \"intersection\") == 0) {
			$var = XMMS_COLLECTION_TYPE_INTERSECTION;
		}
		else if (strcmp (coll_type, \"complement\") == 0) {
			$var = XMMS_COLLECTION_TYPE_COMPLEMENT;
		}
		else if (strcmp (coll_type, \"has\") == 0) {
			$var = XMMS_COLLECTION_TYPE_HAS;
		}
		else if (strcmp (coll_type, \"equals\") == 0) {
			$var = XMMS_COLLECTION_TYPE_EQUALS;
		}
		else if (strcmp (coll_type, \"match\") == 0) {
			$var = XMMS_COLLECTION_TYPE_MATCH;
		}
		else if (strcmp (coll_type, \"smaller\") == 0) {
			$var = XMMS_COLLECTION_TYPE_SMALLER;
		}
		else if (strcmp (coll_type, \"greater\") == 0) {
			$var = XMMS_COLLECTION_TYPE_GREATER;
		}
		else if (strcmp (coll_type, \"idlist\") == 0) {
			$var = XMMS_COLLECTION_TYPE_IDLIST;
		}
		else if (strcmp (coll_type, \"queue\") == 0) {
			$var = XMMS_COLLECTION_TYPE_QUEUE;
		}
		else if (strcmp (coll_type, \"partyshuffle\") == 0) {
			$var = XMMS_COLLECTION_TYPE_PARTYSHUFFLE;
		}
		else {
			croak (\"unknown XMMSC_COLL_TYPE_T: %s\", coll_type);
		}
	}