X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Flibvlc-module.c;h=0d655a6da74fc5f96e31cbed86152c3c8c371de7;hb=e65e71975462203720ed5620a10c97037f90076a;hp=b24425e29d855639747b8461914940e81c8523fd;hpb=a419656009d1e887a71f2113ab1aedb9989a4ed7;p=vlc diff --git a/src/libvlc-module.c b/src/libvlc-module.c index b24425e29d..0d655a6da7 100644 --- a/src/libvlc-module.c +++ b/src/libvlc-module.c @@ -39,18 +39,76 @@ #if defined (WIN32) || defined (__APPLE__) static const char *ppsz_language[] = -{ "auto", "en", "en_GB", "ca", "cs", "da", "de", "es", "fr", "gl", "he", "hu", - "it", "ja", "ka", "ko", "ms", "nl", "oc", "pt_BR", "ro", "ru", "sk", "sl", - "sv", "tr", "zh_CN", "zh_TW" }; +{ + "auto", + "en", + "ar", + "pt_BR", + "en_GB", + "ca", + "zh_TW", + "cs", + "da", + "nl", + "fi", + "fr", + "gl", + "ka", + "de", + "he", + "hu", + "it", + "ja", + "ko", + "ms", + "oc", + "fa", + "pl", + "ro", + "ru", + "zh_CN", + "sk", + "sl", + "es", + "sv", + "tr" +}; static const char *ppsz_language_text[] = -{ N_("Auto"), N_("American English"), N_("British English"), -N_("Catalan"), N_("Czech"), N_("Danish"), N_("German"), N_("Spanish"), -N_("French"), N_("Galician"), N_("Hebrew"), N_("Hungarian"),N_("Italian"), -N_("Japanese"),N_("Georgian"), N_("Korean"), N_("Malay"), N_("Dutch"), -N_("Occitan"), N_("Brazilian Portuguese"), N_("Romanian"), N_("Russian"), -N_("Slovak"), N_("Slovenian"), N_("Swedish"), N_("Turkish"), -N_("Simplified Chinese"), N_("Chinese Traditional") }; +{ + N_("Auto"), + N_("American English"), + N_("Arabic"), + N_("Brazilian Portuguese"), + N_("British English"), + N_("Catalan"), + N_("Chinese Traditional"), + N_("Czech"), + N_("Danish"), + N_("Dutch"), + N_("Finnish"), + N_("French"), + N_("Galician"), + N_("Georgian"), + N_("German"), + N_("Hebrew"), + N_("Hungarian"), + N_("Italian"), + N_("Japanese"), + N_("Korean"), + N_("Malay"), + N_("Occitan"), + N_("Persian"), + N_("Polish"), + N_("Romanian"), + N_("Russian"), + N_("Simplified Chinese"), + N_("Slovak"), + N_("Slovenian"), + N_("Spanish"), + N_("Swedish"), + N_("Turkish") +}; #endif static const char *ppsz_snap_formats[] = @@ -220,6 +278,28 @@ static const char *ppsz_force_dolby_descriptions[] = { N_("Auto"), N_("On"), N_( #define AUDIO_VISUAL_LONGTEXT N_( \ "This adds visualization modules (spectrum analyzer, etc.).") + +#define AUDIO_REPLAY_GAIN_MODE_TEXT N_( \ + "Replay gain mode" ) +#define AUDIO_REPLAY_GAIN_MODE_LONGTEXT N_( \ + "Select the replay gain mode" ) +#define AUDIO_REPLAY_GAIN_PREAMP_TEXT N_( \ + "Replay preamp" ) +#define AUDIO_REPLAY_GAIN_PREAMP_LONGTEXT N_( \ + "This allows you to change the default target level (89 dB) " \ + "for stream with replay gain information" ) +#define AUDIO_REPLAY_GAIN_DEFAULT_TEXT N_( \ + "Default replay gain" ) +#define AUDIO_REPLAY_GAIN_DEFAULT_LONGTEXT N_( \ + "This is the gain used for stream without replay gain information" ) +#define AUDIO_REPLAY_GAIN_PEAK_PROTECTION_TEXT N_( \ + "Peak protection" ) +#define AUDIO_REPLAY_GAIN_PEAK_PROTECTION_LONGTEXT N_( \ + "Protect against sound clipping" ) + +static const char *ppsz_replay_gain_mode[] = { "none", "track", "album" }; +static const char *ppsz_replay_gain_mode_text[] = { N_("None"), N_("Track"), N_("Album") }; + /***************************************************************************** * Video ****************************************************************************/ @@ -303,9 +383,30 @@ static const char *ppsz_align_descriptions[] = #define VIDEO_ON_TOP_LONGTEXT N_( \ "Always place the video window on top of other windows." ) +#define VIDEO_TITLE_SHOW_TEXT N_("Show media title on video.") +#define VIDEO_TITLE_SHOW_LONGTEXT N_( \ + "Display the title of the video on top of the movie.") + +#define VIDEO_TITLE_TIMEOUT_TEXT N_("Show video title for x miliseconds.") +#define VIDEO_TITLE_TIMEOUT_LONGTEXT N_( \ + "Show the video title for n miliseconds, default is 5000 ms (5 sec.)") + +#define VIDEO_TITLE_POSITION_TEXT N_("Position of video title.") +#define VIDEO_TITLE_POSITION_LONGTEXT N_( \ + "Place on video where to display the title (default bottom center).") + +static int pi_pos_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 }; +static const char *ppsz_pos_descriptions[] = +{ N_("Center"), N_("Left"), N_("Right"), N_("Top"), N_("Bottom"), + N_("Top-Left"), N_("Top-Right"), N_("Bottom-Left"), N_("Bottom-Right") }; + #define SS_TEXT N_("Disable screensaver") #define SS_LONGTEXT N_("Disable the screensaver during video playback." ) +#define INHIBIT_TEXT N_("Inhibits the power management daemon during playback.") +#define INHIBIT_LONGTEXT N_("Inhibits the power management daemon during any " \ + "playback, to avoid the computer being suspended because of inactivity.") + #define VIDEO_DECO_TEXT N_("Window decorations") #define VIDEO_DECO_LONGTEXT N_( \ "VLC can avoid creating window caption, frames, etc... around the video" \ @@ -343,6 +444,16 @@ static const char *ppsz_align_descriptions[] = #define SNAP_SEQUENTIAL_LONGTEXT N_( \ "Use sequential numbers instead of timestamps for snapshot numbering") +#define SNAP_WIDTH_TEXT N_("Video snapshot width") +#define SNAP_WIDTH_LONGTEXT N_( \ + "You can enforce the width of the video snapshot. By default " \ + "it will be 320 pixels." ) + +#define SNAP_HEIGHT_TEXT N_("Video snapshot height") +#define SNAP_HEIGHT_LONGTEXT N_( \ + "You can enforce the height of the video snapshot. By default " \ + "it will be 200 pixels." ) + #define CROP_TEXT N_("Video cropping") #define CROP_LONGTEXT N_( \ "This forces the cropping of the source video. " \ @@ -381,10 +492,9 @@ static const char *ppsz_align_descriptions[] = "pixels (1:1). If you have a 16:9 screen, you might need to change this " \ "to 4:3 in order to keep proportions.") -/// \bug [String] Remove "this option" #define SKIP_FRAMES_TEXT N_("Skip frames") #define SKIP_FRAMES_LONGTEXT N_( \ - "This option enables framedropping on MPEG2 stream. Framedropping " \ + "Enables framedropping on MPEG2 stream. Framedropping " \ "occurs when your computer is not powerful enough" ) #define DROP_LATE_FRAMES_TEXT N_("Drop late frames") @@ -437,8 +547,10 @@ static const char *ppsz_clock_descriptions[] = #define MTU_TEXT N_("MTU of the network interface") #define MTU_LONGTEXT N_( \ - "This is the maximum packet size that can be transmitted " \ - "over the network interface. On Ethernet it is usually 1500 bytes.") + "This is the maximum application-layer packet size that can be " \ + "transmitted over the network (in bytes).") +/* Should be less than 1500 - 8[ppp] - 40[ip6] - 8[udp] in any case. */ +#define MTU_DEFAULT 1400 #define TTL_TEXT N_("Hop limit (TTL)") #define TTL_LONGTEXT N_( \ @@ -515,6 +627,10 @@ static const char *ppsz_clock_descriptions[] = #define STOP_TIME_LONGTEXT N_( \ "The stream will stop at this position (in seconds)." ) +#define RUN_TIME_TEXT N_("Run time") +#define RUN_TIME_LONGTEXT N_( \ + "The stream will run this duration (in seconds)." ) + #define INPUT_LIST_TEXT N_("Input list") #define INPUT_LIST_LONGTEXT N_( \ "You can give a comma-separated list " \ @@ -558,11 +674,10 @@ static const char *ppsz_clock_descriptions[] = #define TEXTRENDERER_LONGTEXT N_( \ "VLC normally uses Freetype for rendering, but this allows you to use svg for instance.") -/// \bug typo arbitraty #define SUB_FILTER_TEXT N_("Subpictures filter module") #define SUB_FILTER_LONGTEXT N_( \ "This adds so-called \"subpicture filters\". These filters overlay " \ - "some images or text over the video (like a logo, arbitraty text...)." ) + "some images or text over the video (like a logo, arbitrary text...)." ) #define SUB_AUTO_TEXT N_("Autodetect subtitle files") #define SUB_AUTO_LONGTEXT N_( \ @@ -694,6 +809,11 @@ static const char *ppsz_clock_descriptions[] = "This allows you to select a list of encoders that VLC will use in " \ "priority.") +#define SYSTEM_CODEC_TEXT N_("Prefer system plugins over vlc") +#define SYSTEM_CODEC_LONGTEXT N_( \ + "Indicates whether VLC will prefer native plugins installed " \ + "on system over VLC owns plugins whenever a choice is available." ) + /***************************************************************************** * Sout ****************************************************************************/ @@ -738,6 +858,11 @@ static const char *ppsz_clock_descriptions[] = "multiple playlist item (automatically insert the gather stream output " \ "if not specified)" ) +#define SOUT_MUX_CACHING_TEXT N_("Stream output muxer caching (ms)") +#define SOUT_MUX_CACHING_LONGTEXT N_( \ + "This allow you to configure the initial caching amount for stream output " \ + " muxer. This value should be set in milliseconds." ) + #define PACKETIZER_TEXT N_("Preferred packetizer list") #define PACKETIZER_LONGTEXT N_( \ "This allows you to select the order in which VLC will choose its " \ @@ -898,7 +1023,7 @@ static const char *ppsz_clock_descriptions[] = "for example if you associated VLC with some media types and you " \ "don't want a new instance of VLC to be opened each time you " \ "open a file in your file manager. This option will allow you " \ - "to play the file with the already running instance or enqueue it." \ + "to play the file with the already running instance or enqueue it. " \ "This option require the D-Bus session daemon to be active " \ "and the running instance of VLC to use D-Bus control interface.") @@ -920,24 +1045,6 @@ static const char *ppsz_clock_descriptions[] = "all the processor time and render the whole system unresponsive which " \ "might require a reboot of your machine.") -#define FAST_MUTEX_TEXT N_("Fast mutex on NT/2K/XP (developers only)") -#define FAST_MUTEX_LONGTEXT N_( \ - "On Windows NT/2K/XP we use a slow mutex implementation but which " \ - "allows us to correctly implement condition variables. " \ - "You can also use the faster Win9x implementation but you might " \ - "experience problems with it.") - -#define WIN9X_CV_TEXT N_("Condition variables implementation for Win9x " \ - "(developers only)") -#define WIN9X_CV_LONGTEXT N_( \ - "On Windows 9x/Me you can use a fast but incorrect condition variables " \ - "implementation (more precisely there is a possibility for a race " \ - "condition to happen). " \ - "However it is possible to use slower alternatives which are more " \ - "robust. " \ - "Currently you can choose between implementation 0 (which is the " \ - "fastest but slightly incorrect), 1 (default) and 2.") - #define PLAYLISTENQUEUE_TEXT N_( \ "Enqueue items to playlist when in one instance mode") #define PLAYLISTENQUEUE_LONGTEXT N_( \ @@ -958,9 +1065,14 @@ static const char *ppsz_clock_descriptions[] = "Automatically preparse files added to the playlist " \ "(to retrieve some metadata)." ) +#define FETCH_META_TEXT N_( "Authorise meta information fetching" ) +#define FETCH_META_LONGTEXT N_( \ + "Specify if you want to attempt to fetch files'"\ + "meta informations using the network." ) + #define ALBUM_ART_TEXT N_( "Album art policy" ) #define ALBUM_ART_LONGTEXT N_( \ - "Choose how album art will be downloaded." ); + "Choose how album art will be downloaded." ) static int pi_albumart_values[] = { ALBUM_ART_WHEN_ASKED, ALBUM_ART_WHEN_PLAYED, @@ -1018,8 +1130,10 @@ static const char *ppsz_pltree_descriptions[] = { N_("Default"), N_("Always"), N #define HOTKEY_CAT_LONGTEXT N_( "These settings are the global VLC key " \ "bindings, known as \"hotkeys\"." ) -#define FULLSCREEN_KEY_TEXT N_("Fullscreen") -#define FULLSCREEN_KEY_LONGTEXT N_("Select the hotkey to use to swap fullscreen state.") +#define TOGGLE_FULLSCREEN_KEY_TEXT N_("Fullscreen") +#define TOGGLE_FULLSCREEN_KEY_LONGTEXT N_("Select the hotkey to use to swap fullscreen state.") +#define LEAVE_FULLSCREEN_KEY_TEXT N_("Leave fullscreen") +#define LEAVE_FULLSCREEN_KEY_LONGTEXT N_("Select the hotkey to use to leave fullscreen state.") #define PLAY_PAUSE_KEY_TEXT N_("Play/Pause") #define PLAY_PAUSE_KEY_LONGTEXT N_("Select the hotkey to use to swap paused state.") #define PAUSE_KEY_TEXT N_("Pause only") @@ -1173,6 +1287,12 @@ static const char *ppsz_pltree_descriptions[] = { N_("Default"), N_("Always"), N #define DUMP_KEY_TEXT N_("Dump") #define DUMP_KEY_LONGTEXT N_("Media dump access filter trigger.") +#define LOOP_KEY_TEXT N_("Normal/Repeat/Loop") +#define LOOP_KEY_LONGTEXT N_("Toggle Normal/Repeat/Loop playlist modes") + +#define RANDOM_KEY_TEXT N_("Random") +#define RANDOM_KEY_LONGTEXT N_("Toggle random playlist playback") + #define ZOOM_KEY_TEXT N_("Zoom") #define ZOOM_KEY_LONGTEXT N_("Zoom") @@ -1199,6 +1319,30 @@ static const char *ppsz_pltree_descriptions[] = { N_("Default"), N_("Always"), N #define UNCROP_RIGHT_KEY_TEXT N_("Uncrop one pixel from the right of the video") #define UNCROP_RIGHT_KEY_LONGTEXT N_("Uncrop one pixel from the right of the video") +#define WALLPAPER_KEY_TEXT N_("Toggle wallpaper mode in video output") +#define WALLPAPER_KEY_LONGTEXT N_( \ + "Toggle wallpaper mode in video output. Only works with the directx " \ + "video output for the time being." ) + +#define MENU_ON_KEY_TEXT N_("Display OSD menu on top of video output") +#define MENU_ON_KEY_LONGTEXT N_("Display OSDmenu on top of video output") +#define MENU_OFF_KEY_TEXT N_("Do not display OSD menu on video output") +#define MENU_OFF_KEY_LONGTEXT N_("Do not display OSDmenu on top of video output") +#define MENU_RIGHT_KEY_TEXT N_("Highlight widget on the right") +#define MENU_RIGHT_KEY_LONGTEXT N_( \ + "Move OSD menu highlight to the widget on the right") +#define MENU_LEFT_KEY_TEXT N_("Highlight widget on the left") +#define MENU_LEFT_KEY_LONGTEXT N_( \ + "Move OSD menu highlight to the widget on the left") +#define MENU_UP_KEY_TEXT N_("Highlight widget on top") +#define MENU_UP_KEY_LONGTEXT N_( \ + "Move OSD menu highlight to the widget on top") +#define MENU_DOWN_KEY_TEXT N_("Highlight widget below") +#define MENU_DOWN_KEY_LONGTEXT N_( \ + "Move OSD menu highlight to the widget below") +#define MENU_SELECT_KEY_TEXT N_("Select current widget") +#define MENU_SELECT_KEY_LONGTEXT N_( \ + "Selecting current widget performs the associated action.") const char vlc_usage[] = N_( "Usage: %s [options] [stream] ..." @@ -1274,9 +1418,22 @@ vlc_module_begin(); change_integer_list( pi_force_dolby_values, ppsz_force_dolby_descriptions, 0 ); add_integer( "audio-desync", 0, NULL, DESYNC_TEXT, DESYNC_LONGTEXT, VLC_TRUE ); + + /* FIXME TODO create a subcat replay gain ? */ + add_string( "audio-replay-gain-mode", ppsz_replay_gain_mode[0], NULL, AUDIO_REPLAY_GAIN_MODE_TEXT, + AUDIO_REPLAY_GAIN_MODE_LONGTEXT, VLC_FALSE ); + change_string_list( ppsz_replay_gain_mode, ppsz_replay_gain_mode_text, 0 ); + add_float( "audio-replay-gain-preamp", 0.0, NULL, + AUDIO_REPLAY_GAIN_PREAMP_TEXT, AUDIO_REPLAY_GAIN_PREAMP_LONGTEXT, VLC_FALSE ); + add_float( "audio-replay-gain-default", -7.0, NULL, + AUDIO_REPLAY_GAIN_DEFAULT_TEXT, AUDIO_REPLAY_GAIN_DEFAULT_LONGTEXT, VLC_FALSE ); + add_bool( "audio-replay-gain-peak-protection", VLC_TRUE, NULL, + AUDIO_REPLAY_GAIN_PEAK_PROTECTION_TEXT, AUDIO_REPLAY_GAIN_PEAK_PROTECTION_LONGTEXT, VLC_TRUE ); + set_subcategory( SUBCAT_AUDIO_AOUT ); add_module( "aout", "audio output", NULL, NULL, AOUT_TEXT, AOUT_LONGTEXT, VLC_TRUE ); + change_short('A'); set_subcategory( SUBCAT_AUDIO_AFILTER ); add_module_list_cat( "audio-filter", SUBCAT_AUDIO_AFILTER, 0, NULL, AUDIO_FILTER_TEXT, @@ -1313,6 +1470,14 @@ vlc_module_begin(); add_bool( "disable-screensaver", VLC_TRUE, NULL, SS_TEXT, SS_LONGTEXT, VLC_TRUE ); + add_bool( "video-title-show", 1, NULL, VIDEO_TITLE_SHOW_TEXT, + VIDEO_TITLE_SHOW_LONGTEXT, VLC_FALSE ); + add_integer( "video-title-timeout", 5000, NULL, VIDEO_TITLE_TIMEOUT_TEXT, + VIDEO_TITLE_TIMEOUT_LONGTEXT, VLC_FALSE ); + add_integer( "video-title-position", 8, NULL, VIDEO_TITLE_POSITION_TEXT, + VIDEO_TITLE_POSITION_LONGTEXT, VLC_FALSE ); + change_integer_list( pi_pos_values, ppsz_pos_descriptions, 0 ); + set_section( N_("Snapshot") , NULL ); add_directory( "snapshot-path", NULL, NULL, SNAP_PATH_TEXT, SNAP_PATH_LONGTEXT, VLC_FALSE ); @@ -1325,6 +1490,10 @@ vlc_module_begin(); SNAP_PREVIEW_LONGTEXT, VLC_FALSE ); add_bool( "snapshot-sequential", VLC_FALSE, NULL, SNAP_SEQUENTIAL_TEXT, SNAP_SEQUENTIAL_LONGTEXT, VLC_FALSE ); + add_integer( "snapshot-width", 320, NULL, SNAP_WIDTH_TEXT, + SNAP_WIDTH_LONGTEXT, VLC_TRUE ); + add_integer( "snapshot-height", 200, NULL, SNAP_HEIGHT_TEXT, + SNAP_HEIGHT_LONGTEXT, VLC_TRUE ); set_section( N_("Window properties" ), NULL ); add_integer( "width", -1, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, VLC_TRUE ); @@ -1358,8 +1527,8 @@ vlc_module_begin(); set_subcategory( SUBCAT_VIDEO_VFILTER ); add_module_list_cat( "video-filter", SUBCAT_VIDEO_VFILTER, NULL, NULL, VIDEO_FILTER_TEXT, VIDEO_FILTER_LONGTEXT, VLC_FALSE ); - add_deprecated( "filter", VLC_FALSE ); /*deprecated since 0.8.2 */ -// add_deprecated( "vout-filter", VLC_FALSE ); /* deprecated since 0.8.6 *// While the "video-filter" chain isn't parsed for both vfilter and vfilter2, keep both options + add_deprecated_alias( "filter" ); /*deprecated since 0.8.2 */ +// add_deprecated_alias( "vout-filter" ); /* deprecated since 0.8.6 *// While the "video-filter" chain isn't parsed for both vfilter and vfilter2, keep both options add_module_list_cat( "vout-filter", SUBCAT_VIDEO_VFILTER, NULL, NULL, NULL, NULL, VLC_FALSE ); #if 0 @@ -1392,7 +1561,7 @@ vlc_module_begin(); SUB_PATH_TEXT, SUB_PATH_LONGTEXT, VLC_TRUE ); add_integer( "sub-margin", 0, NULL, SUB_MARGIN_TEXT, SUB_MARGIN_LONGTEXT, VLC_TRUE ); - add_deprecated( "spu-margin", VLC_FALSE ); /*Deprecated since 0.8.2 */ + add_deprecated_alias( "spu-margin" ); /*Deprecated since 0.8.2 */ set_section( N_( "Overlays" ) , NULL ); add_module_list_cat( "sub-filter", SUBCAT_VIDEO_SUBPIC, NULL, NULL, SUB_FILTER_TEXT, SUB_FILTER_LONGTEXT, VLC_FALSE ); @@ -1410,10 +1579,10 @@ vlc_module_begin(); INPUT_PROGRAMS_TEXT, INPUT_PROGRAMS_LONGTEXT, VLC_TRUE ); add_integer( "audio-track", -1, NULL, INPUT_AUDIOTRACK_TEXT, INPUT_AUDIOTRACK_LONGTEXT, VLC_TRUE ); - add_deprecated( "audio-channel", VLC_FALSE ); /*deprecated since 0.8.2 */ + add_deprecated_alias( "audio-channel" ); /*deprecated since 0.8.2 */ add_integer( "sub-track", -1, NULL, INPUT_SUBTRACK_TEXT, INPUT_SUBTRACK_LONGTEXT, VLC_TRUE ); - add_deprecated("spu-channel",VLC_FALSE); /*deprecated since 0.8.2*/ + add_deprecated_alias("spu-channel" ); /*deprecated since 0.8.2*/ add_string( "audio-language", "", NULL, INPUT_AUDIOTRACK_LANG_TEXT, INPUT_AUDIOTRACK_LANG_LONGTEXT, VLC_FALSE ); @@ -1432,6 +1601,8 @@ vlc_module_begin(); START_TIME_TEXT, START_TIME_LONGTEXT, VLC_TRUE ); add_integer( "stop-time", 0, NULL, STOP_TIME_TEXT, STOP_TIME_LONGTEXT, VLC_TRUE ); + add_integer( "run-time", 0, NULL, + RUN_TIME_TEXT, RUN_TIME_LONGTEXT, VLC_TRUE ); add_string( "input-list", NULL, NULL, INPUT_LIST_TEXT, INPUT_LIST_LONGTEXT, VLC_TRUE ); add_string( "input-slave", NULL, NULL, @@ -1442,7 +1613,7 @@ vlc_module_begin(); set_section( N_( "Default devices") , NULL ); - add_file( "dvd", NULL, NULL, DVD_DEV_TEXT, DVD_DEV_LONGTEXT, + add_file( "dvd", DVD_DEVICE, NULL, DVD_DEV_TEXT, DVD_DEV_LONGTEXT, VLC_FALSE ); add_file( "vcd", VCD_DEVICE, NULL, VCD_DEV_TEXT, VCD_DEV_LONGTEXT, VLC_FALSE ); @@ -1453,7 +1624,7 @@ vlc_module_begin(); add_integer( "server-port", 1234, NULL, SERVER_PORT_TEXT, SERVER_PORT_LONGTEXT, VLC_FALSE ); - add_integer( "mtu", 1500, NULL, MTU_TEXT, MTU_LONGTEXT, VLC_TRUE ); + add_integer( "mtu", MTU_DEFAULT, NULL, MTU_TEXT, MTU_LONGTEXT, VLC_TRUE ); add_bool( "ipv6", 0, NULL, IPV6_TEXT, IPV6_LONGTEXT, VLC_FALSE ); change_short('6'); add_bool( "ipv4", 0, NULL, IPV4_TEXT, IPV4_LONGTEXT, VLC_FALSE ); @@ -1522,6 +1693,8 @@ vlc_module_begin(); set_subcategory( SUBCAT_INPUT_VCODEC ); set_subcategory( SUBCAT_INPUT_ACODEC ); set_subcategory( SUBCAT_INPUT_SCODEC ); + add_bool( "prefer-system-codecs", VLC_FALSE, NULL, SYSTEM_CODEC_TEXT, + SYSTEM_CODEC_LONGTEXT, VLC_FALSE ); /* Stream output options */ @@ -1542,6 +1715,8 @@ vlc_module_begin(); SOUT_VIDEO_LONGTEXT, VLC_TRUE ); add_bool( "sout-spu", 1, NULL, SOUT_SPU_TEXT, SOUT_SPU_LONGTEXT, VLC_TRUE ); + add_integer( "sout-mux-caching", 1500, NULL, SOUT_MUX_CACHING_TEXT, + SOUT_MUX_CACHING_LONGTEXT, VLC_TRUE ); set_section( N_("VLM"), NULL ); add_string( "vlm-conf", NULL, NULL, VLM_CONF_TEXT, @@ -1602,7 +1777,6 @@ vlc_module_begin(); add_category_hint( N_("Miscellaneous"), MISC_CAT_LONGTEXT, VLC_TRUE ); add_module( "memcpy", "memcpy", NULL, NULL, MEMCPY_TEXT, MEMCPY_LONGTEXT, VLC_TRUE ); - change_short('A'); change_need_restart(); set_section( N_("Plugins" ), NULL ); @@ -1635,6 +1809,10 @@ vlc_module_begin(); ONEINSTANCE_DBUS_LONGTEXT, VLC_TRUE ); add_bool( "playlist-enqueue", 0, NULL, PLAYLISTENQUEUE_TEXT, PLAYLISTENQUEUE_LONGTEXT, VLC_TRUE ); + change_unsaveable(); + + add_bool( "inhibit", 1, NULL, INHIBIT_TEXT, + INHIBIT_LONGTEXT, VLC_TRUE ); #endif #if defined(WIN32) @@ -1649,15 +1827,10 @@ vlc_module_begin(); ONEINSTANCEWHENSTARTEDFROMFILE_LONGTEXT, VLC_TRUE ); add_bool( "playlist-enqueue", 0, NULL, PLAYLISTENQUEUE_TEXT, PLAYLISTENQUEUE_LONGTEXT, VLC_TRUE ); + change_unsaveable(); add_bool( "high-priority", 0, NULL, HPRIORITY_TEXT, HPRIORITY_LONGTEXT, VLC_FALSE ); change_need_restart(); - add_bool( "fast-mutex", 0, NULL, FAST_MUTEX_TEXT, - FAST_MUTEX_LONGTEXT, VLC_TRUE ); - change_need_restart(); - add_integer( "win9x-cv-method", 1, NULL, WIN9X_CV_TEXT, - WIN9X_CV_LONGTEXT, VLC_TRUE ); - change_need_restart(); #endif /* Playlist options */ @@ -1666,13 +1839,10 @@ vlc_module_begin(); add_category_hint( N_("Playlist"), PLAYLIST_CAT_LONGTEXT , VLC_FALSE ); add_bool( "random", 0, NULL, RANDOM_TEXT, RANDOM_LONGTEXT, VLC_FALSE ); change_short('Z'); - change_autosave(); add_bool( "loop", 0, NULL, LOOP_TEXT, LOOP_LONGTEXT, VLC_FALSE ); change_short('L'); - change_autosave(); add_bool( "repeat", 0, NULL, REPEAT_TEXT, REPEAT_LONGTEXT, VLC_FALSE ); change_short('R'); - change_autosave(); add_bool( "play-and-exit", 0, NULL, PAE_TEXT, PAE_LONGTEXT, VLC_FALSE ); add_bool( "play-and-stop", 0, NULL, PAS_TEXT, PAS_LONGTEXT, VLC_FALSE ); add_bool( "media-library", 1, NULL, ML_TEXT, ML_LONGTEXT, VLC_FALSE ); @@ -1686,7 +1856,10 @@ vlc_module_begin(); add_bool( "auto-preparse", VLC_TRUE, NULL, PREPARSE_TEXT, PREPARSE_LONGTEXT, VLC_FALSE ); - add_integer( "album-art", ALBUM_ART_WHEN_PLAYED, NULL, ALBUM_ART_TEXT, + add_integer( "fetch-meta", VLC_TRUE, NULL, FETCH_META_TEXT, + FETCH_META_LONGTEXT, VLC_FALSE ); + + add_integer( "album-art", ALBUM_ART_WHEN_ASKED, NULL, ALBUM_ART_TEXT, ALBUM_ART_LONGTEXT, VLC_FALSE ); change_integer_list( pi_albumart_values, ppsz_albumart_descriptions, 0 ); @@ -1732,11 +1905,11 @@ vlc_module_begin(); change_need_restart(); #endif - add_bool( "color", 0, NULL, COLOR_TEXT, COLOR_LONGTEXT, VLC_TRUE ); - add_bool( "advanced", 0, NULL, ADVANCED_TEXT, ADVANCED_LONGTEXT, + add_bool( "color", VLC_TRUE, NULL, COLOR_TEXT, COLOR_LONGTEXT, VLC_TRUE ); + add_bool( "advanced", VLC_FALSE, NULL, ADVANCED_TEXT, ADVANCED_LONGTEXT, VLC_FALSE ); change_need_restart(); - add_bool( "interact", VLC_FALSE, NULL, INTERACTION_TEXT, + add_bool( "interact", VLC_TRUE, NULL, INTERACTION_TEXT, INTERACTION_LONGTEXT, VLC_FALSE ); add_bool( "show-intf", VLC_FALSE, NULL, SHOWINTF_TEXT, SHOWINTF_LONGTEXT, @@ -1795,7 +1968,8 @@ vlc_module_begin(); * show info KEY_MODIFIER_COMMAND|'i' * help KEY_MODIFIER_COMMAND|'?' */ -# define KEY_FULLSCREEN KEY_MODIFIER_COMMAND|'f' +# define KEY_TOGGLE_FULLSCREEN KEY_MODIFIER_COMMAND|'f' +# define KEY_LEAVE_FULLSCREEN KEY_ESC # define KEY_PLAY_PAUSE KEY_MODIFIER_COMMAND|'p' # define KEY_PAUSE KEY_UNSET # define KEY_PLAY KEY_UNSET @@ -1841,6 +2015,8 @@ vlc_module_begin(); # define KEY_SNAPSHOT KEY_MODIFIER_COMMAND|KEY_MODIFIER_ALT|'s' # define KEY_ZOOM 'z' # define KEY_UNZOOM KEY_MODIFIER_SHIFT|'z' +# define KEY_RANDOM 'r' +# define KEY_LOOP KEY_MODIFIER_SHIFT|'l' # define KEY_CROP_TOP KEY_MODIFIER_ALT|'i' # define KEY_UNCROP_TOP KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'i' @@ -1875,9 +2051,19 @@ vlc_module_begin(); # define KEY_HISTORY_FORWARD KEY_MODIFIER_COMMAND|']' # define KEY_RECORD KEY_MODIFIER_COMMAND|KEY_MODIFIER_SHIFT|'r' # define KEY_DUMP KEY_MODIFIER_COMMAND|KEY_MODIFIER_SHIFT|'d' +# define KEY_WALLPAPER KEY_MODIFIER_COMMAND|'w' + +# define KEY_MENU_ON KEY_MODIFIER_ALT|'m' +# define KEY_MENU_OFF KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'m' +# define KEY_MENU_RIGHT KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_RIGHT +# define KEY_MENU_LEFT KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_LEFT +# define KEY_MENU_UP KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_UP +# define KEY_MENU_DOWN KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_DOWN +# define KEY_MENU_SELECT KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_ENTER #else -# define KEY_FULLSCREEN 'f' +# define KEY_TOGGLE_FULLSCREEN 'f' +# define KEY_LEAVE_FULLSCREEN KEY_ESC # define KEY_PLAY_PAUSE KEY_SPACE # define KEY_PAUSE KEY_UNSET # define KEY_PLAY KEY_UNSET @@ -1904,24 +2090,27 @@ vlc_module_begin(); # define KEY_VOL_UP KEY_MODIFIER_CTRL|KEY_UP # define KEY_VOL_DOWN KEY_MODIFIER_CTRL|KEY_DOWN # define KEY_VOL_MUTE 'm' -# define KEY_SUBDELAY_UP KEY_MODIFIER_CTRL|'h' -# define KEY_SUBDELAY_DOWN KEY_MODIFIER_CTRL|'j' -# define KEY_AUDIODELAY_UP KEY_MODIFIER_CTRL|'k' -# define KEY_AUDIODELAY_DOWN KEY_MODIFIER_CTRL|'l' - -# define KEY_AUDIO_TRACK 'l' -# define KEY_SUBTITLE_TRACK 'k' +# define KEY_SUBDELAY_UP 'h' +# define KEY_SUBDELAY_DOWN 'g' +# define KEY_AUDIODELAY_UP 'k' +# define KEY_AUDIODELAY_DOWN 'j' +# define KEY_RANDOM 'r' +# define KEY_LOOP 'l' + +# define KEY_AUDIO_TRACK 'b' +# define KEY_SUBTITLE_TRACK 'v' # define KEY_ASPECT_RATIO 'a' # define KEY_CROP 'c' # define KEY_DEINTERLACE 'd' # define KEY_INTF_SHOW 'i' # define KEY_INTF_HIDE 'I' -# define KEY_DISC_MENU KEY_MODIFIER_CTRL|'m' -# define KEY_TITLE_PREV KEY_MODIFIER_CTRL|'p' -# define KEY_TITLE_NEXT KEY_MODIFIER_CTRL|'f' -# define KEY_CHAPTER_PREV KEY_MODIFIER_CTRL|'u' -# define KEY_CHAPTER_NEXT KEY_MODIFIER_CTRL|'d' +# define KEY_DISC_MENU KEY_MODIFIER_ALT|'r' +# define KEY_TITLE_PREV KEY_MODIFIER_ALT|'o' +# define KEY_TITLE_NEXT KEY_MODIFIER_ALT|'b' +# define KEY_CHAPTER_PREV KEY_MODIFIER_ALT|'p' +# define KEY_CHAPTER_NEXT KEY_MODIFIER_ALT|'n' # define KEY_SNAPSHOT KEY_MODIFIER_CTRL|KEY_MODIFIER_ALT|'s' + # define KEY_ZOOM 'z' # define KEY_UNZOOM KEY_MODIFIER_SHIFT|'z' @@ -1954,14 +2143,26 @@ vlc_module_begin(); # define KEY_PLAY_BOOKMARK8 KEY_F8 # define KEY_PLAY_BOOKMARK9 KEY_F9 # define KEY_PLAY_BOOKMARK10 KEY_F10 -# define KEY_HISTORY_BACK KEY_MODIFIER_CTRL|'v' -# define KEY_HISTORY_FORWARD KEY_MODIFIER_CTRL|'b' -# define KEY_RECORD KEY_MODIFIER_CTRL|'r' +# define KEY_HISTORY_BACK KEY_MODIFIER_ALT|'g' +# define KEY_HISTORY_FORWARD KEY_MODIFIER_ALT|'h' +# define KEY_RECORD KEY_MODIFIER_CTRL|KEY_MODIFIER_SHIFT|'r' # define KEY_DUMP KEY_MODIFIER_CTRL|KEY_MODIFIER_SHIFT|'d' +# define KEY_WALLPAPER 'w' + +# define KEY_MENU_ON KEY_MODIFIER_ALT|'m' +# define KEY_MENU_OFF KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'m' +# define KEY_MENU_RIGHT KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_RIGHT +# define KEY_MENU_LEFT KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_LEFT +# define KEY_MENU_UP KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_UP +# define KEY_MENU_DOWN KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_DOWN +# define KEY_MENU_SELECT KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_ENTER #endif - add_key( "key-fullscreen", KEY_FULLSCREEN, NULL, FULLSCREEN_KEY_TEXT, - FULLSCREEN_KEY_LONGTEXT, VLC_FALSE ); + add_key( "key-toggle-fullscreen", KEY_TOGGLE_FULLSCREEN, NULL, TOGGLE_FULLSCREEN_KEY_TEXT, + TOGGLE_FULLSCREEN_KEY_LONGTEXT, VLC_FALSE ); + add_deprecated_alias( "key-fullscreen" ); /*deprecated since 0.9.0 */ + add_key( "key-leave-fullscreen", KEY_LEAVE_FULLSCREEN, NULL, LEAVE_FULLSCREEN_KEY_TEXT, + LEAVE_FULLSCREEN_KEY_LONGTEXT, VLC_FALSE ); add_key( "key-play-pause", KEY_PLAY_PAUSE, NULL, PLAY_PAUSE_KEY_TEXT, PLAY_PAUSE_KEY_LONGTEXT, VLC_FALSE ); add_key( "key-pause", KEY_PAUSE, NULL, PAUSE_KEY_TEXT, @@ -2061,6 +2262,23 @@ vlc_module_begin(); ZOOM_KEY_TEXT, ZOOM_KEY_LONGTEXT, VLC_TRUE ); add_key( "key-unzoom", KEY_UNZOOM, NULL, UNZOOM_KEY_TEXT, UNZOOM_KEY_LONGTEXT, VLC_TRUE ); + add_key( "key-wallpaper", KEY_WALLPAPER, NULL, WALLPAPER_KEY_TEXT, + WALLPAPER_KEY_LONGTEXT, VLC_FALSE ); + + add_key( "key-menu-on", KEY_MENU_ON, NULL, + MENU_ON_KEY_TEXT, MENU_ON_KEY_LONGTEXT, VLC_TRUE ); + add_key( "key-menu-off", KEY_MENU_OFF, NULL, + MENU_OFF_KEY_TEXT, MENU_OFF_KEY_LONGTEXT, VLC_TRUE ); + add_key( "key-menu-right", KEY_MENU_RIGHT, NULL, + MENU_RIGHT_KEY_TEXT, MENU_RIGHT_KEY_LONGTEXT, VLC_TRUE ); + add_key( "key-menu-left", KEY_MENU_LEFT, NULL, + MENU_LEFT_KEY_TEXT, MENU_LEFT_KEY_LONGTEXT, VLC_TRUE ); + add_key( "key-menu-up", KEY_MENU_UP, NULL, + MENU_UP_KEY_TEXT, MENU_UP_KEY_LONGTEXT, VLC_TRUE ); + add_key( "key-menu-down", KEY_MENU_DOWN, NULL, + MENU_DOWN_KEY_TEXT, MENU_DOWN_KEY_LONGTEXT, VLC_TRUE ); + add_key( "key-menu-select", KEY_MENU_SELECT, NULL, + MENU_SELECT_KEY_TEXT, MENU_SELECT_KEY_LONGTEXT, VLC_TRUE ); add_key( "key-crop-top", KEY_CROP_TOP, NULL, CROP_TOP_KEY_TEXT, CROP_TOP_KEY_LONGTEXT, VLC_TRUE ); @@ -2078,6 +2296,10 @@ vlc_module_begin(); CROP_RIGHT_KEY_TEXT, CROP_RIGHT_KEY_LONGTEXT, VLC_TRUE ); add_key( "key-uncrop-right", KEY_UNCROP_RIGHT, NULL, UNCROP_RIGHT_KEY_TEXT, UNCROP_RIGHT_KEY_LONGTEXT, VLC_TRUE ); + add_key( "key-random", KEY_RANDOM, NULL, + RANDOM_KEY_TEXT, RANDOM_KEY_LONGTEXT, VLC_FALSE ); + add_key( "key-loop", KEY_LOOP, NULL, + LOOP_KEY_TEXT, LOOP_KEY_LONGTEXT, VLC_FALSE ); set_section ( N_("Jump sizes" ), NULL ); add_integer( "extrashort-jump-size", 3, NULL, JIEXTRASHORT_TEXT, @@ -2155,79 +2377,85 @@ vlc_module_begin(); add_string( "bookmark10", NULL, NULL, BOOKMARK10_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE ); - /* Usage (mainly useful for cmd line stuff) */ +#define HELP_TEXT \ + N_("print help for VLC (can be combined with --advanced and " \ + "--help-verbose)") +#define LONGHELP_TEXT \ + N_("print help for VLC and all its modules (can be combined with " \ + "--advanced and --help-verbose)") +#define HELP_VERBOSE_TEXT \ + N_("ask for extra verbosity when displaying help") +#define LIST_TEXT \ + N_("print a list of available modules") +#define LIST_VERBOSE_TEXT \ + N_("print a list of available modules with extra detail") +#define MODULE_TEXT \ + N_("print help on a specific module (can be combined with --advanced " \ + "and --help-verbose)") +#define SAVE_CONFIG_TEXT \ + N_("save the current command line options in the config") +#define RESET_CONFIG_TEXT \ + N_("reset the current config to the default values") +#define CONFIG_TEXT \ + N_("use alternate config file") +#define RESET_PLUGINS_CACHE_TEXT \ + N_("resets the current plugins cache") +#define VERSION_TEXT \ + N_("print version information") + + add_bool( "help", VLC_FALSE, NULL, HELP_TEXT, "", VLC_FALSE ); + change_short( 'h' ); + change_internal(); + change_unsaveable(); + add_bool( "longhelp", VLC_FALSE, NULL, LONGHELP_TEXT, "", VLC_FALSE ); + change_short( 'H' ); + change_internal(); + change_unsaveable(); + add_bool( "help-verbose", VLC_FALSE, NULL, HELP_VERBOSE_TEXT, "", + VLC_FALSE ); + change_internal(); + change_unsaveable(); + add_bool( "list", VLC_FALSE, NULL, LIST_TEXT, "", VLC_FALSE ); + change_short( 'l' ); + change_internal(); + change_unsaveable(); + add_bool( "list-verbose", VLC_FALSE, NULL, LIST_VERBOSE_TEXT, "", + VLC_FALSE ); + change_short( 'l' ); + change_internal(); + change_unsaveable(); + add_string( "module", NULL, NULL, MODULE_TEXT, "", VLC_FALSE ); + change_short( 'p' ); + change_internal(); + change_unsaveable(); + add_bool( "save-config", VLC_FALSE, NULL, SAVE_CONFIG_TEXT, "", + VLC_FALSE ); + change_internal(); + change_unsaveable(); + add_bool( "reset-config", VLC_FALSE, NULL, MODULE_TEXT, "", VLC_FALSE ); + change_internal(); + change_unsaveable(); + add_bool( "reset-plugins-cache", VLC_FALSE, NULL, + RESET_PLUGINS_CACHE_TEXT, "", VLC_FALSE ); + change_internal(); + change_unsaveable(); + add_bool( "version", VLC_FALSE, NULL, VERSION_TEXT, "", VLC_FALSE ); + change_internal(); + change_unsaveable(); + add_string( "config", NULL, NULL, CONFIG_TEXT, "", VLC_FALSE ); + change_internal(); + change_unsaveable(); + add_bool( "version", VLC_FALSE, NULL, VERSION_TEXT, "", VLC_FALSE ); + change_internal(); + change_unsaveable(); + + /* Usage (mainly useful for cmd line stuff) */ /* add_usage_hint( PLAYLIST_USAGE ); */ set_description( N_("main program") ); set_capability( "main", 100 ); vlc_module_end(); -const module_config_t libvlc_config[] = -{ - { - .i_type = CONFIG_ITEM_BOOL, - .psz_name = "help", - .i_short = 'h', - .psz_text = N_("print help for VLC (can be combined with --advanced)") - }, - { - .i_type = CONFIG_ITEM_BOOL, - .psz_name = "longhelp", - .i_short = 'H', - .psz_text = N_("print help for VLC and all its modules (can be combined with --advanced)") - }, - { - .i_type = CONFIG_ITEM_BOOL, - .psz_name = "advanced", - .psz_text = N_("print help for the advanced options") - }, - { - .i_type = CONFIG_ITEM_BOOL, - .psz_name = "help-verbose", - .psz_text = N_("ask for extra verbosity when displaying help") - }, - { - .i_type = CONFIG_ITEM_BOOL, - .psz_name = "list", - .i_short = 'l', - .psz_text = N_("print a list of available modules") - }, - { - .i_type = CONFIG_ITEM_STRING, - .psz_name = "module", - .i_short = 'p', - .psz_text = N_("print help on a specific module (can be combined with --advanced)") - }, - { - .i_type = CONFIG_ITEM_BOOL, - .psz_name = "save-config", - .psz_text = N_("save the current command line options in the config") - }, - { - .i_type = CONFIG_ITEM_BOOL, - .psz_name = "reset-config", - .psz_text = N_("reset the current config to the default values") - }, - { - .i_type = CONFIG_ITEM_STRING, - .psz_name = "config", - .psz_text = N_("use alternate config file") - }, - { - .i_type = CONFIG_ITEM_BOOL, - .psz_name = "reset-plugins-cache", - .psz_text = N_("resets the current plugins cache") - }, - { - .i_type = CONFIG_ITEM_BOOL, - .psz_name = "version", - .psz_text = N_("print version information") - } -}; - -const size_t libvlc_config_count = sizeof (libvlc_config) - / sizeof (libvlc_config[0]); - /***************************************************************************** * End configuration. *****************************************************************************/ @@ -2256,7 +2484,8 @@ const struct hotkey libvlc_hotkeys[] = { "key-next", ACTIONID_NEXT, 0, 0, 0, 0 }, { "key-faster", ACTIONID_FASTER, 0, 0, 0, 0 }, { "key-slower", ACTIONID_SLOWER, 0, 0, 0, 0 }, - { "key-fullscreen", ACTIONID_FULLSCREEN, 0, 0, 0, 0 }, + { "key-toggle-fullscreen", ACTIONID_TOGGLE_FULLSCREEN, 0, 0, 0, 0 }, + { "key-leave-fullscreen", ACTIONID_LEAVE_FULLSCREEN, 0, 0, 0, 0 }, { "key-vol-up", ACTIONID_VOL_UP, 0, 0, 0, 0 }, { "key-vol-down", ACTIONID_VOL_DOWN, 0, 0, 0, 0 }, { "key-vol-mute", ACTIONID_VOL_MUTE, 0, 0, 0, 0 }, @@ -2316,6 +2545,16 @@ const struct hotkey libvlc_hotkeys[] = { "key-history-forward", ACTIONID_HISTORY_FORWARD, 0, 0, 0, 0 }, { "key-record", ACTIONID_RECORD, 0, 0, 0, 0 }, { "key-dump", ACTIONID_DUMP, 0, 0, 0, 0 }, + { "key-random", ACTIONID_RANDOM, 0, 0, 0, 0 }, + { "key-loop", ACTIONID_LOOP, 0, 0, 0, 0 }, + { "key-wallpaper", ACTIONID_WALLPAPER, 0, 0, 0, 0 }, + { "key-menu-on", ACTIONID_MENU_ON, 0, 0, 0, 0 }, + { "key-menu-off", ACTIONID_MENU_OFF, 0, 0, 0, 0 }, + { "key-menu-right", ACTIONID_MENU_RIGHT, 0, 0, 0, 0 }, + { "key-menu-left", ACTIONID_MENU_LEFT, 0, 0, 0, 0 }, + { "key-menu-up", ACTIONID_MENU_UP, 0, 0, 0, 0 }, + { "key-menu-down", ACTIONID_MENU_DOWN, 0, 0, 0, 0 }, + { "key-menu-select", ACTIONID_MENU_SELECT, 0, 0, 0, 0 }, { NULL, 0, 0, 0, 0, 0 } };