- b_found = true;
-
- /* Print name of module */
- if( strcmp( "main", p_parser->psz_object_name ) )
- {
- if( b_color )
- utf8_fprintf( stdout, "\n " GREEN "%s" GRAY " (%s)\n",
- module_gettext( p_parser, p_parser->psz_longname ),
- p_parser->psz_object_name );
- else
- utf8_fprintf( stdout, "\n %s\n",
- module_gettext(p_parser, p_parser->psz_longname ) );
- }
- if( p_parser->psz_help )
- {
- if( b_color )
- utf8_fprintf( stdout, CYAN" %s\n"GRAY,
- module_gettext( p_parser, p_parser->psz_help ) );
- else
- utf8_fprintf( stdout, " %s\n",
- module_gettext( p_parser, p_parser->psz_help ) );
- }
-
- /* Print module options */
- for( p_item = p_parser->p_config;
- p_item < p_end;
- p_item++ )
- {
- char *psz_text, *psz_spaces = psz_spaces_text;
- const char *psz_bra = NULL, *psz_type = NULL, *psz_ket = NULL;
- const char *psz_suf = "", *psz_prefix = NULL;
- signed int i;
- size_t i_cur_width;
-
- /* Skip removed options */
- if( p_item->b_removed )
- {
- continue;
- }
- /* Skip advanced options if requested */
- if( p_item->b_advanced && !b_advanced )
- {
- b_has_advanced = true;
- continue;
- }
-
- switch( p_item->i_type )
- {
- case CONFIG_HINT_CATEGORY:
- case CONFIG_HINT_USAGE:
- if( !strcmp( "main", p_parser->psz_object_name ) )
- {
- if( b_color )
- utf8_fprintf( stdout, GREEN "\n %s\n" GRAY,
- module_gettext( p_parser, p_item->psz_text ) );
- else
- utf8_fprintf( stdout, "\n %s\n",
- module_gettext( p_parser, p_item->psz_text ) );
- }
- if( b_description && p_item->psz_longtext )
- {
- if( b_color )
- utf8_fprintf( stdout, CYAN " %s\n" GRAY,
- module_gettext( p_parser, p_item->psz_longtext ) );
- else
- utf8_fprintf( stdout, " %s\n",
- module_gettext( p_parser, p_item->psz_longtext ) );
- }
- break;
-
- case CONFIG_HINT_SUBCATEGORY:
- if( strcmp( "main", p_parser->psz_object_name ) )
- break;
- case CONFIG_SECTION:
- p_section = p_item;
- break;
-
- case CONFIG_ITEM_STRING:
- case CONFIG_ITEM_LOADFILE:
- case CONFIG_ITEM_SAVEFILE:
- case CONFIG_ITEM_DIRECTORY:
- case CONFIG_ITEM_KEY:
- case CONFIG_ITEM_MODULE: /* We could also have "=<" here */
- case CONFIG_ITEM_MODULE_CAT:
- case CONFIG_ITEM_MODULE_LIST:
- case CONFIG_ITEM_MODULE_LIST_CAT:
- case CONFIG_ITEM_FONT:
- case CONFIG_ITEM_PASSWORD:
- print_help_section( p_parser, p_section, b_color,
- b_description );
- p_section = NULL;
- psz_bra = OPTION_VALUE_SEP "<";
- psz_type = _("string");
- psz_ket = ">";
-
- if( p_item->ppsz_list )
- {
- psz_bra = OPTION_VALUE_SEP "{";
- psz_type = psz_buffer;
- psz_buffer[0] = '\0';
- for( i = 0; p_item->ppsz_list[i]; i++ )
- {
- if( i ) strcat( psz_buffer, "," );
- strcat( psz_buffer, p_item->ppsz_list[i] );
- }
- psz_ket = "}";
- }
- break;
- case CONFIG_ITEM_INTEGER:
- print_help_section( p_parser, p_section, b_color,
- b_description );
- p_section = NULL;
- psz_bra = OPTION_VALUE_SEP "<";
- psz_type = _("integer");
- psz_ket = ">";
-
- if( p_item->min.i || p_item->max.i )
- {
- sprintf( psz_buffer, "%s [%"PRId64" .. %"PRId64"]",
- psz_type, p_item->min.i, p_item->max.i );
- psz_type = psz_buffer;
- }
-
- if( p_item->i_list )
- {
- psz_bra = OPTION_VALUE_SEP "{";
- psz_type = psz_buffer;
- psz_buffer[0] = '\0';
- for( i = 0; p_item->ppsz_list_text[i]; i++ )
- {
- if( i ) strcat( psz_buffer, ", " );
- sprintf( psz_buffer + strlen(psz_buffer), "%i (%s)",
- p_item->pi_list[i],
- module_gettext( p_parser, p_item->ppsz_list_text[i] ) );
- }
- psz_ket = "}";
- }
- break;
- case CONFIG_ITEM_FLOAT:
- print_help_section( p_parser, p_section, b_color,
- b_description );
- p_section = NULL;
- psz_bra = OPTION_VALUE_SEP "<";
- psz_type = _("float");
- psz_ket = ">";
- if( p_item->min.f || p_item->max.f )
- {
- sprintf( psz_buffer, "%s [%f .. %f]", psz_type,
- p_item->min.f, p_item->max.f );
- psz_type = psz_buffer;
- }
- break;
- case CONFIG_ITEM_BOOL:
- print_help_section( p_parser, p_section, b_color,
- b_description );
- p_section = NULL;
- psz_bra = ""; psz_type = ""; psz_ket = "";
- if( !b_help_module )
- {
- psz_suf = p_item->value.i ? _(" (default enabled)") :
- _(" (default disabled)");
- }
- break;
- }
-
- if( !psz_type )
- {
- continue;
- }
-
- /* Add short option if any */
- if( p_item->i_short )
- {
- sprintf( psz_short, "-%c,", p_item->i_short );
- }
- else
- {
- strcpy( psz_short, " " );
- }
-
- i = PADDING_SPACES - strlen( p_item->psz_name )
- - strlen( psz_bra ) - strlen( psz_type )
- - strlen( psz_ket ) - 1;
-
- if( p_item->i_type == CONFIG_ITEM_BOOL && !b_help_module )
- {
- psz_prefix = ", --no-";
- i -= strlen( p_item->psz_name ) + strlen( psz_prefix );
- }
-
- if( i < 0 )
- {
- psz_spaces[0] = '\n';
- i = 0;
- }
- else
- {
- psz_spaces[i] = '\0';
- }
-
- if( p_item->i_type == CONFIG_ITEM_BOOL && !b_help_module )
- {
- utf8_fprintf( stdout, psz_format_bool, psz_short,
- p_item->psz_name, psz_prefix, p_item->psz_name,
- psz_bra, psz_type, psz_ket, psz_spaces );
- }
- else
- {
- utf8_fprintf( stdout, psz_format, psz_short, p_item->psz_name,
- "", "", psz_bra, psz_type, psz_ket, psz_spaces );
- }
-
- psz_spaces[i] = ' ';
-
- /* We wrap the rest of the output */
- sprintf( psz_buffer, "%s%s", module_gettext( p_parser, p_item->psz_text ),
- psz_suf );
- b_description_hack = b_description;
-
- description:
- psz_text = psz_buffer;
- i_cur_width = b_description && !b_description_hack
- ? i_width_description
- : i_width;
- while( *psz_text )
- {
- char *psz_parser, *psz_word;
- size_t i_end = strlen( psz_text );
-
- /* If the remaining text fits in a line, print it. */
- if( i_end <= i_cur_width )
- {
- if( b_color )
- {
- if( !b_description || b_description_hack )
- utf8_fprintf( stdout, BLUE"%s\n"GRAY, psz_text );
- else
- utf8_fprintf( stdout, "%s\n", psz_text );
- }
- else
- {
- utf8_fprintf( stdout, "%s\n", psz_text );
- }
- break;
- }
-
- /* Otherwise, eat as many words as possible */
- psz_parser = psz_text;
- do
- {
- psz_word = psz_parser;
- psz_parser = strchr( psz_word, ' ' );
- /* If no space was found, we reached the end of the text
- * block; otherwise, we skip the space we just found. */
- psz_parser = psz_parser ? psz_parser + 1
- : psz_text + i_end;
-
- } while( (size_t)(psz_parser - psz_text) <= i_cur_width );
-
- /* We cut a word in one of these cases:
- * - it's the only word in the line and it's too long.
- * - we used less than 80% of the width and the word we are
- * going to wrap is longer than 40% of the width, and even
- * if the word would have fit in the next line. */
- if( psz_word == psz_text
- || ( (size_t)(psz_word - psz_text) < 80 * i_cur_width / 100
- && (size_t)(psz_parser - psz_word) > 40 * i_cur_width / 100 ) )
- {
- char c = psz_text[i_cur_width];
- psz_text[i_cur_width] = '\0';
- if( b_color )
- {
- if( !b_description || b_description_hack )
- utf8_fprintf( stdout, BLUE"%s\n%s"GRAY,
- psz_text, psz_spaces );
- else
- utf8_fprintf( stdout, "%s\n%s",
- psz_text, psz_spaces );
- }
- else
- {
- utf8_fprintf( stdout, "%s\n%s", psz_text, psz_spaces );
- }
- psz_text += i_cur_width;
- psz_text[0] = c;
- }
- else
- {
- psz_word[-1] = '\0';
- if( b_color )
- {
- if( !b_description || b_description_hack )
- utf8_fprintf( stdout, BLUE"%s\n%s"GRAY,
- psz_text, psz_spaces );
- else
- utf8_fprintf( stdout, "%s\n%s",
- psz_text, psz_spaces );
- }
- else
- {
- utf8_fprintf( stdout, "%s\n%s", psz_text, psz_spaces );
- }
- psz_text = psz_word;
- }
- }
-
- if( b_description_hack && p_item->psz_longtext )
- {
- sprintf( psz_buffer, "%s%s",
- module_gettext( p_parser, p_item->psz_longtext ),
- psz_suf );
- b_description_hack = false;
- psz_spaces = psz_spaces_longtext;
- utf8_fprintf( stdout, "%s", psz_spaces );
- goto description;
- }
- }
- }
-
- if( b_has_advanced )
- {
- if( b_color )
- utf8_fprintf( stdout, "\n" WHITE "%s" GRAY " %s\n", _( "Note:" ),
- _( "add --advanced to your command line to see advanced options."));
- else
- utf8_fprintf( stdout, "\n%s %s\n", _( "Note:" ),
- _( "add --advanced to your command line to see advanced options."));
- }
-
- if( i_only_advanced > 0 )
- {
- if( b_color )
- {
- utf8_fprintf( stdout, "\n" WHITE "%s" GRAY " ", _( "Note:" ) );
- utf8_fprintf( stdout, _( "%d module(s) were not displayed because they only have advanced options.\n" ), i_only_advanced );
- }
- else
- {
- utf8_fprintf( stdout, "\n%s ", _( "Note:" ) );
- utf8_fprintf( stdout, _( "%d module(s) were not displayed because they only have advanced options.\n" ), i_only_advanced );
- }
- }
- else if( !b_found )
- {
- if( b_color )
- utf8_fprintf( stdout, "\n" WHITE "%s" GRAY "\n",
- _( "No matching module found. Use --list or " \
- "--list-verbose to list available modules." ) );
- else
- utf8_fprintf( stdout, "\n%s\n",
- _( "No matching module found. Use --list or " \
- "--list-verbose to list available modules." ) );
- }
-
- /* Release the module list */
- module_list_free (list);
-}
-
-/*****************************************************************************
- * ListModules: list the available modules with their description
- *****************************************************************************
- * Print a list of all available modules (builtins and plugins) and a short
- * description for each one.
- *****************************************************************************/
-static void ListModules( libvlc_int_t *p_this, bool b_verbose )
-{
- module_t *p_parser;
-
- bool b_color = var_InheritBool( p_this, "color" );
-
-#ifdef WIN32
- ShowConsole( true );
- b_color = false; // don't put color control codes in a .txt file
-#else
- if( !isatty( 1 ) )
- b_color = false;
-#endif
-
- /* List all modules */
- module_t **list = module_list_get (NULL);
-
- /* Enumerate each module */
- for (size_t j = 0; (p_parser = list[j]) != NULL; j++)
- {
- if( b_color )
- utf8_fprintf( stdout, GREEN" %-22s "WHITE"%s\n"GRAY,
- p_parser->psz_object_name,
- module_gettext( p_parser, p_parser->psz_longname ) );
- else
- utf8_fprintf( stdout, " %-22s %s\n",
- p_parser->psz_object_name,
- module_gettext( p_parser, p_parser->psz_longname ) );
-
- if( b_verbose )
- {
- char *const *pp_shortcuts = p_parser->pp_shortcuts;
- for( unsigned i = 0; i < p_parser->i_shortcuts; i++ )
- {
- if( strcmp( pp_shortcuts[i], p_parser->psz_object_name ) )
- {
- if( b_color )
- utf8_fprintf( stdout, CYAN" s %s\n"GRAY,
- pp_shortcuts[i] );
- else
- utf8_fprintf( stdout, " s %s\n",
- pp_shortcuts[i] );
- }
- }
- if( p_parser->psz_capability )
- {
- if( b_color )
- utf8_fprintf( stdout, MAGENTA" c %s (%d)\n"GRAY,
- p_parser->psz_capability,
- p_parser->i_score );
- else
- utf8_fprintf( stdout, " c %s (%d)\n",
- p_parser->psz_capability,
- p_parser->i_score );
- }
- }
- }
- module_list_free (list);
-
-#ifdef WIN32 /* Pause the console because it's destroyed when we exit */
- PauseConsole();
-#endif
-}
-
-/*****************************************************************************
- * Version: print complete program version
- *****************************************************************************
- * Print complete program version and build number.
- *****************************************************************************/
-static void Version( void )
-{
-#ifdef WIN32
- ShowConsole( true );
-#endif
-
- utf8_fprintf( stdout, _("VLC version %s (%s)\n"), VERSION_MESSAGE,
- psz_vlc_changeset );
- utf8_fprintf( stdout, _("Compiled by %s on %s (%s)\n"),
- VLC_CompileBy(), VLC_CompileHost(), __DATE__" "__TIME__ );
- utf8_fprintf( stdout, _("Compiler: %s\n"), VLC_Compiler() );
- utf8_fprintf( stdout, "%s", LICENSE_MSG );
-
-#ifdef WIN32 /* Pause the console because it's destroyed when we exit */
- PauseConsole();
-#endif
-}
-
-/*****************************************************************************
- * ShowConsole: On Win32, create an output console for debug messages
- *****************************************************************************
- * This function is useful only on Win32.
- *****************************************************************************/
-#ifdef WIN32 /* */
-static void ShowConsole( bool b_dofile )
-{
-# ifndef UNDER_CE
- FILE *f_help = NULL;
-
- if( getenv( "PWD" ) && getenv( "PS1" ) ) return; /* cygwin shell */
-
- AllocConsole();
- /* Use the ANSI code page (e.g. Windows-1252) as expected by the LibVLC
- * Unicode/locale subsystem. By default, we have the obsolecent OEM code
- * page (e.g. CP437 or CP850). */
- SetConsoleOutputCP (GetACP ());
- SetConsoleTitle ("VLC media player version "PACKAGE_VERSION);
-
- freopen( "CONOUT$", "w", stderr );
- freopen( "CONIN$", "r", stdin );
-
- if( b_dofile && (f_help = fopen( "vlc-help.txt", "wt" )) )
- {
- fclose( f_help );
- freopen( "vlc-help.txt", "wt", stdout );
- utf8_fprintf( stderr, _("\nDumped content to vlc-help.txt file.\n") );