-/*****************************************************************************
- * Internal lua<->vlc utils
- *****************************************************************************/
-vlc_object_t * vlclua_get_this( lua_State *L )
-{
- vlc_object_t * p_this;
- lua_getglobal( L, "vlc" );
- lua_getfield( L, -1, "private" );
- p_this = (vlc_object_t*)lua_topointer( L, lua_gettop( L ) );
- lua_pop( L, 2 );
- return p_this;
-}
-
-/*****************************************************************************
- * VLC error code translation
- *****************************************************************************/
-int vlclua_push_ret( lua_State *L, int i_error )
-{
- lua_pushnumber( L, i_error );
- lua_pushstring( L, vlc_error( i_error ) );
- return 2;
-}
-
-/*****************************************************************************
- * Get the VLC version string
- *****************************************************************************/
-int vlclua_version( lua_State *L )
-{
- lua_pushstring( L, VLC_Version() );
- return 1;
-}
-
-/*****************************************************************************
- * Quit VLC
- *****************************************************************************/
-int vlclua_quit( lua_State *L )
-{
- vlc_object_t *p_this = vlclua_get_this( L );
- /* The rc.c code also stops the playlist ... not sure if this is needed
- * though. */
- vlc_object_kill( p_this->p_libvlc );
- return 0;
-}
-
-/*****************************************************************************
- * Volume related
- *****************************************************************************/
-int vlclua_volume_set( lua_State *L )
-{
- vlc_object_t *p_this = vlclua_get_this( L );
- int i_volume = luaL_checkint( L, -1 );
- /* Do we need to check that i_volume is in the AOUT_VOLUME_MIN->MAX range?*/
- return vlclua_push_ret( L, aout_VolumeSet( p_this, i_volume ) );
-}
-
-int vlclua_volume_get( lua_State *L )
-{
- vlc_object_t *p_this = vlclua_get_this( L );
- audio_volume_t i_volume;
- if( aout_VolumeGet( p_this, &i_volume ) == VLC_SUCCESS )
- lua_pushnumber( L, i_volume );
- else
- lua_pushnil( L );
- return 1;
-}
-
-int vlclua_volume_up( lua_State *L )
-{
- audio_volume_t i_volume;
- aout_VolumeUp( vlclua_get_this( L ),
- luaL_optint( L, 1, 1 ),
- &i_volume );
- lua_pushnumber( L, i_volume );
- return 1;
-}
-
-int vlclua_volume_down( lua_State *L )
-{
- audio_volume_t i_volume;
- aout_VolumeDown( vlclua_get_this( L ),
- luaL_optint( L, 1, 1 ),
- &i_volume );
- lua_pushnumber( L, i_volume );
- return 1;
-}
-
-/*****************************************************************************
- * Stream handling
- *****************************************************************************/
-int vlclua_stream_new( lua_State *L )
-{
- vlc_object_t * p_this = vlclua_get_this( L );
- stream_t * p_stream;
- const char * psz_url;
- psz_url = luaL_checkstring( L, -1 );
- p_stream = stream_UrlNew( p_this, psz_url );
- if( !p_stream )
- return luaL_error( L, "Error when opening url: `%s'", psz_url );
- lua_pop( L, 1 );
- lua_pushlightuserdata( L, p_stream );
- return 1;
-}
-
-int vlclua_stream_read( lua_State *L )
-{
- stream_t * p_stream;
- int n;
- byte_t *p_read;
- int i_read;
- if( lua_gettop( L ) != 2 ) return vlclua_error( L );
- p_stream = (stream_t *)luaL_checklightuserdata( L, -2 );
- n = luaL_checkint( L, -1 );
- lua_pop( L, 2 );
- p_read = malloc( n );
- if( !p_read ) return vlclua_error( L );
- i_read = stream_Read( p_stream, p_read, n );
- lua_pushlstring( L, (const char *)p_read, i_read );
- free( p_read );
- return 1;
-}
-
-int vlclua_stream_readline( lua_State *L )
-{
- stream_t * p_stream;
- if( lua_gettop( L ) != 1 ) return vlclua_error( L );
- p_stream = (stream_t *)luaL_checklightuserdata( L, -1 );
- lua_pop( L, 1 );
- char *psz_line = stream_ReadLine( p_stream );
- if( psz_line )
- {
- lua_pushstring( L, psz_line );
- free( psz_line );
- }
- else
- {
- lua_pushnil( L );
- }
- return 1;
-}
-
-int vlclua_stream_delete( lua_State *L )
-{
- stream_t * p_stream;
- if( lua_gettop( L ) != 1 ) return vlclua_error( L );
- p_stream = (stream_t *)luaL_checklightuserdata( L, -1 );
- lua_pop( L, 1 );
- stream_Delete( p_stream );
- return 1;
-}
-
-/*****************************************************************************
- * String transformations
- *****************************************************************************/
-/* TODO: make it work for any number of arguments */
-int vlclua_decode_uri( lua_State *L )
-{
- if( lua_gettop( L ) != 1 ) return vlclua_error( L );
- const char *psz_cstring = luaL_checkstring( L, 1 );
- if( !psz_cstring ) return vlclua_error( L );
- char *psz_string = strdup( psz_cstring );
- lua_pop( L, 1 );
- decode_URI( psz_string );
- lua_pushstring( L, psz_string );
- free( psz_string );
- return 1;
-}
-
-/* TODO: make it work for any number of arguments */
-int vlclua_resolve_xml_special_chars( lua_State *L )
-{
- if( lua_gettop( L ) != 1 ) return vlclua_error( L );
- const char *psz_cstring = luaL_checkstring( L, 1 );
- if( !psz_cstring ) return vlclua_error( L );
- char *psz_string = strdup( psz_cstring );
- lua_pop( L, 1 );
- resolve_xml_special_chars( psz_string );
- lua_pushstring( L, psz_string );
- free( psz_string );
- return 1;
-}
-
-/*****************************************************************************
- * Messaging facilities
- *****************************************************************************/
-/* TODO: make it work for any number of arguments */
-int vlclua_msg_dbg( lua_State *L )
-{
- vlc_object_t *p_this = vlclua_get_this( L );
- if( lua_gettop( L ) != 1 ) return vlclua_error( L );
- const char *psz_cstring = luaL_checkstring( L, 1 );
- if( !psz_cstring ) return vlclua_error( L );
- msg_Dbg( p_this, "%s", psz_cstring );
- return 0;
-}
-/* TODO: make it work for any number of arguments */
-int vlclua_msg_warn( lua_State *L )
-{
- vlc_object_t *p_this = vlclua_get_this( L );
- if( lua_gettop( L ) != 1 ) return vlclua_error( L );
- const char *psz_cstring = luaL_checkstring( L, 1 );
- if( !psz_cstring ) return vlclua_error( L );
- msg_Warn( p_this, "%s", psz_cstring );
- return 0;
-}
-/* TODO: make it work for any number of arguments */
-int vlclua_msg_err( lua_State *L )
-{
- vlc_object_t *p_this = vlclua_get_this( L );
- if( lua_gettop( L ) != 1 ) return vlclua_error( L );
- const char *psz_cstring = luaL_checkstring( L, 1 );
- if( !psz_cstring ) return vlclua_error( L );
- msg_Err( p_this, "%s", psz_cstring );
- return 0;
-}
-/* TODO: make it work for any number of arguments */
-int vlclua_msg_info( lua_State *L )
-{
- vlc_object_t *p_this = vlclua_get_this( L );
- if( lua_gettop( L ) != 1 ) return vlclua_error( L );
- const char *psz_cstring = luaL_checkstring( L, 1 );
- if( !psz_cstring ) return vlclua_error( L );
- msg_Info( p_this, "%s", psz_cstring );
- return 0;
-}
-