📄 rpn.c
字号:
free( name ); } else if( !strcmp( s, "url_encode" ) ) { char *url = E_(SSPop)( st ); char *value; value = E_(ToUTF8)( p_intf, url ); free( url ); url = value; value = vlc_UrlEncode( url ); free( url ); E_(SSPush)( st, value ); free( value ); } else if( !strcmp( s, "addslashes" ) ) { char *psz_src = E_(SSPop)( st ); char *psz_dest; char *str = psz_src; p = psz_dest = malloc( strlen( str ) * 2 + 1 ); while( *str != '\0' ) { if( *str == '"' || *str == '\'' || *str == '\\' ) { *p++ = '\\'; } *p++ = *str; str++; } *p = '\0'; E_(SSPush)( st, psz_dest ); free( psz_src ); free( psz_dest ); } else if( !strcmp( s, "stripslashes" ) ) { char *psz_src = E_(SSPop)( st ); char *psz_dest; char *str = psz_src; p = psz_dest = strdup( psz_src ); while( *str ) { if( *str == '\\' && *(str + 1) ) { str++; } *p++ = *str++; } *p = '\0'; E_(SSPush)( st, psz_dest ); free( psz_src ); free( psz_dest ); } else if( !strcmp( s, "htmlspecialchars" ) ) { char *psz_src = E_(SSPop)( st ); char *psz_dest; psz_dest = convert_xml_special_chars( psz_src ); E_(SSPush)( st, psz_dest ); free( psz_src ); free( psz_dest ); } else if( !strcmp( s, "realpath" ) ) { char *psz_src = E_(SSPop)( st ); char *psz_dir = E_(RealPath)( p_intf, psz_src ); E_(SSPush)( st, psz_dir ); free( psz_src ); free( psz_dir ); } /* 4. stack functions */ else if( !strcmp( s, "dup" ) ) { char *str = E_(SSPop)( st ); E_(SSPush)( st, str ); E_(SSPush)( st, str ); free( str ); } else if( !strcmp( s, "drop" ) ) { char *str = E_(SSPop)( st ); free( str ); } else if( !strcmp( s, "swap" ) ) { char *s1 = E_(SSPop)( st ); char *s2 = E_(SSPop)( st ); E_(SSPush)( st, s1 ); E_(SSPush)( st, s2 ); free( s1 ); free( s2 ); } else if( !strcmp( s, "flush" ) ) { E_(SSClean)( st ); E_(SSInit)( st ); } else if( !strcmp( s, "store" ) ) { char *value = E_(SSPop)( st ); char *name = E_(SSPop)( st ); E_(mvar_PushNewVar)( vars, name, value ); free( name ); free( value ); } else if( !strcmp( s, "value" ) ) { char *name = E_(SSPop)( st ); char *value = E_(mvar_GetValue)( vars, name ); E_(SSPush)( st, value ); free( name ); } /* 5. player control */ else if( !strcmp( s, "vlc_play" ) ) { int i_id = E_(SSPopN)( st, vars ); int i_ret; i_ret = playlist_Control( p_sys->p_playlist, PLAYLIST_ITEMPLAY, playlist_ItemGetById( p_sys->p_playlist, i_id ) ); msg_Dbg( p_intf, "requested playlist item: %i", i_id ); E_(SSPushN)( st, i_ret ); } else if( !strcmp( s, "vlc_stop" ) ) { playlist_Control( p_sys->p_playlist, PLAYLIST_STOP ); msg_Dbg( p_intf, "requested playlist stop" ); } else if( !strcmp( s, "vlc_pause" ) ) { playlist_Control( p_sys->p_playlist, PLAYLIST_PAUSE ); msg_Dbg( p_intf, "requested playlist pause" ); } else if( !strcmp( s, "vlc_next" ) ) { playlist_Control( p_sys->p_playlist, PLAYLIST_SKIP, 1 ); msg_Dbg( p_intf, "requested playlist next" ); } else if( !strcmp( s, "vlc_previous" ) ) { playlist_Control( p_sys->p_playlist, PLAYLIST_SKIP, -1 ); msg_Dbg( p_intf, "requested playlist previous" ); } else if( !strcmp( s, "vlc_seek" ) ) { char *psz_value = E_(SSPop)( st ); E_(HandleSeek)( p_intf, psz_value ); msg_Dbg( p_intf, "requested playlist seek: %s", psz_value ); free( psz_value ); } else if( !strcmp( s, "vlc_var_type" ) || !strcmp( s, "vlc_config_type" ) ) { vlc_object_t *p_object; const char *psz_type = NULL; int i_type = 0; if( !strcmp( s, "vlc_var_type" ) ) { char *psz_object = E_(SSPop)( st ); char *psz_variable = E_(SSPop)( st ); vlc_bool_t b_need_release; p_object = GetVLCObject( p_intf, psz_object, &b_need_release ); if( p_object != NULL ) i_type = var_Type( p_object, psz_variable ); free( psz_variable ); free( psz_object ); if( b_need_release && p_object != NULL ) vlc_object_release( p_object ); } else { char *psz_variable = E_(SSPop)( st ); p_object = VLC_OBJECT(p_intf); i_type = config_GetType( p_object, psz_variable ); free( psz_variable ); } if( p_object != NULL ) { switch( i_type & VLC_VAR_TYPE ) { case VLC_VAR_BOOL: psz_type = "VLC_VAR_BOOL"; break; case VLC_VAR_INTEGER: psz_type = "VLC_VAR_INTEGER"; break; case VLC_VAR_HOTKEY: psz_type = "VLC_VAR_HOTKEY"; break; case VLC_VAR_STRING: psz_type = "VLC_VAR_STRING"; break; case VLC_VAR_MODULE: psz_type = "VLC_VAR_MODULE"; break; case VLC_VAR_FILE: psz_type = "VLC_VAR_FILE"; break; case VLC_VAR_DIRECTORY: psz_type = "VLC_VAR_DIRECTORY"; break; case VLC_VAR_VARIABLE: psz_type = "VLC_VAR_VARIABLE"; break; case VLC_VAR_FLOAT: psz_type = "VLC_VAR_FLOAT"; break; default: psz_type = "UNDEFINED"; } } else psz_type = "INVALID"; E_(SSPush)( st, psz_type ); } else if( !strcmp( s, "vlc_var_set" ) ) { char *psz_object = E_(SSPop)( st ); char *psz_variable = E_(SSPop)( st ); vlc_bool_t b_need_release; vlc_object_t *p_object = GetVLCObject( p_intf, psz_object, &b_need_release ); if( p_object != NULL ) { vlc_bool_t b_error = VLC_FALSE; char *psz_value = NULL; vlc_value_t val; int i_type; i_type = var_Type( p_object, psz_variable ); switch( i_type & VLC_VAR_TYPE ) { case VLC_VAR_BOOL: val.b_bool = E_(SSPopN)( st, vars ); msg_Dbg( p_intf, "requested %s var change: %s->%d", psz_object, psz_variable, val.b_bool ); break; case VLC_VAR_INTEGER: case VLC_VAR_HOTKEY: val.i_int = E_(SSPopN)( st, vars ); msg_Dbg( p_intf, "requested %s var change: %s->%d", psz_object, psz_variable, val.i_int ); break; case VLC_VAR_STRING: case VLC_VAR_MODULE: case VLC_VAR_FILE: case VLC_VAR_DIRECTORY: case VLC_VAR_VARIABLE: val.psz_string = psz_value = E_(SSPop)( st ); msg_Dbg( p_intf, "requested %s var change: %s->%s", psz_object, psz_variable, psz_value ); break; case VLC_VAR_FLOAT: psz_value = E_(SSPop)( st ); val.f_float = atof( psz_value ); msg_Dbg( p_intf, "requested %s var change: %s->%f", psz_object, psz_variable, val.f_float ); break; default: E_(SSPopN)( st, vars ); msg_Warn( p_intf, "invalid %s variable type %d (%s)", psz_object, i_type & VLC_VAR_TYPE, psz_variable ); b_error = VLC_TRUE; } if( !b_error ) var_Set( p_object, psz_variable, val ); if( psz_value != NULL ) free( psz_value ); } else msg_Warn( p_intf, "vlc_var_set called without an object" ); free( psz_variable ); free( psz_object ); if( b_need_release && p_object != NULL ) vlc_object_release( p_object ); } else if( !strcmp( s, "vlc_var_get" ) ) { char *psz_object = E_(SSPop)( st ); char *psz_variable = E_(SSPop)( st ); vlc_bool_t b_need_release; vlc_object_t *p_object = GetVLCObject( p_intf, psz_object, &b_need_release ); if( p_object != NULL ) { vlc_value_t val; int i_type; i_type = var_Type( p_object, psz_variable ); var_Get( p_object, psz_variable, &val ); switch( i_type & VLC_VAR_TYPE ) { case VLC_VAR_BOOL: E_(SSPushN)( st, val.b_bool ); break; case VLC_VAR_INTEGER: case VLC_VAR_HOTKEY: E_(SSPushN)( st, val.i_int ); break; case VLC_VAR_STRING: case VLC_VAR_MODULE: case VLC_VAR_FILE: case VLC_VAR_DIRECTORY: case VLC_VAR_VARIABLE: E_(SSPush)( st, val.psz_string ); free( val.psz_string ); break; case VLC_VAR_FLOAT: { char psz_value[20]; lldiv_t value = lldiv( val.f_float * 1000000, 1000000 ); snprintf( psz_value, sizeof(psz_value), I64Fd".%06u", value.quot, (unsigned int)value.rem ); E_(SSPush)( st, psz_value ); break; } default: msg_Warn( p_intf, "invalid %s variable type %d (%s)", psz_object, i_type & VLC_VAR_TYPE, psz_variable ); E_(SSPush)( st, "" ); } } else { msg_Warn( p_intf, "vlc_var_get called without an object" ); E_(SSPush)( st, "" ); } free( psz_variable ); free( psz_object ); if( b_need_release && p_object != NULL ) vlc_object_release( p_object ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -