2005-09-25 14:42:24 -04:00
/*
Copyright ( C ) 2001 Paul Davis
2009-10-14 12:10:01 -04:00
2005-09-25 14:42:24 -04:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include <getopt.h>
2009-10-24 09:26:26 -04:00
# include <string.h>
2005-09-25 14:42:24 -04:00
# include <iostream>
# include <cstdlib>
2009-10-24 09:26:26 -04:00
# include "ardour/debug.h"
2009-02-25 13:26:51 -05:00
# include "ardour/session.h"
2008-01-10 16:20:59 -05:00
2005-09-25 14:42:24 -04:00
# include "opts.h"
# include "i18n.h"
using namespace std ;
2007-10-11 18:07:47 -04:00
string ARDOUR_COMMAND_LINE : : session_name = " " ;
string ARDOUR_COMMAND_LINE : : jack_client_name = " ardour " ;
bool ARDOUR_COMMAND_LINE : : show_key_actions = false ;
bool ARDOUR_COMMAND_LINE : : no_splash = true ;
bool ARDOUR_COMMAND_LINE : : just_version = false ;
bool ARDOUR_COMMAND_LINE : : use_vst = true ;
bool ARDOUR_COMMAND_LINE : : new_session = false ;
char * ARDOUR_COMMAND_LINE : : curvetest_file = 0 ;
bool ARDOUR_COMMAND_LINE : : try_hw_optimization = true ;
string ARDOUR_COMMAND_LINE : : keybindings_path = " " ; /* empty means use builtin default */
Glib : : ustring ARDOUR_COMMAND_LINE : : menus_file = " ardour.menus " ;
2008-01-10 16:20:59 -05:00
bool ARDOUR_COMMAND_LINE : : finder_invoked_ardour = false ;
2009-10-14 20:57:55 -04:00
string ARDOUR_COMMAND_LINE : : immediate_save ;
2007-10-11 18:07:47 -04:00
using namespace ARDOUR_COMMAND_LINE ;
2005-09-25 14:42:24 -04:00
int
print_help ( const char * execname )
{
2009-10-24 11:43:59 -04:00
cout < < _ ( " Usage: " ) < < execname < < " [OPTION]... [SESSION_NAME] \n \n "
< < _ ( " [SESSION_NAME] Name of session to load \n " )
< < _ ( " -v, --version Show version information \n " )
< < _ ( " -h, --help Print this message \n " )
< < _ ( " -b, --bindings Print all possible keyboard binding names \n " )
< < _ ( " -c, --name <name> Use a specific jack client name, default is ardour \n " )
< < _ ( " -d, --disable-plugins Disable all plugins in an existing session \n " )
< < _ ( " -D, --debug <options> Set debug flags. Use \" -D list \" to see available options \n " )
< < _ ( " -n, --show-splash Show splash screen \n " )
< < _ ( " -m, --menus file Use \" file \" for Ardour menus \n " )
< < _ ( " -N, --new session-name Create a new session from the command line \n " )
< < _ ( " -O, --no-hw-optimizations Disable h/w specific optimizations \n " )
< < _ ( " -S, --sync Draw the gui synchronously \n " )
2005-09-25 14:42:24 -04:00
# ifdef VST_SUPPORT
2009-10-24 11:43:59 -04:00
< < _ ( " -V, --novst Do not use VST support \n " )
2005-09-25 14:42:24 -04:00
# endif
2009-10-24 11:43:59 -04:00
< < _ ( " -E, --save <file> Load the specified session, save it to <file> and then quit \n " )
< < _ ( " -C, --curvetest filename Curve algorithm debugger \n " )
< < _ ( " -k, --keybindings filename Name of key bindings to load (default is ~/.ardour3/ardour.bindings) \n " )
2005-09-25 14:42:24 -04:00
;
return 1 ;
}
2009-10-24 09:26:26 -04:00
static void
list_debug_options ( )
{
2009-10-28 17:36:40 -04:00
cerr < < _ ( " The following debug options are available. Separate multipe options with commas. \n Names are case-insensitive and can be abbreviated. " ) < < " \n \n " ;
2009-10-24 09:26:26 -04:00
cerr < < " \t MidiSourceIO \n " ;
2009-10-24 09:51:33 -04:00
cerr < < " \t MidiPlaylistIO \n " ;
2009-10-25 10:42:46 -04:00
cerr < < " \t MidiDiskstreamIO \n " ;
2009-10-26 22:24:56 -04:00
cerr < < " \t SnapBBT \n " ;
2009-10-28 17:36:40 -04:00
cerr < < " \t Configuration \n " ;
2009-11-18 12:23:34 -05:00
cerr < < " \t Latency \n " ;
2009-11-19 12:06:00 -05:00
cerr < < " \t Graph \n " ;
2009-10-24 09:26:26 -04:00
}
static int
parse_debug_options ( const char * str )
{
char * p ;
char * sp ;
uint64_t bits = 0 ;
char * copy = strdup ( str ) ;
p = strtok_r ( copy , " , " , & sp ) ;
while ( p ) {
if ( strcasecmp ( p , " list " ) = = 0 ) {
list_debug_options ( ) ;
free ( copy ) ;
return 1 ;
}
2009-10-25 10:42:46 -04:00
if ( strcasecmp ( p , " all " ) = = 0 ) {
ARDOUR : : set_debug_bits ( ~ 0ULL ) ;
free ( copy ) ;
return 0 ;
}
2009-10-28 17:36:40 -04:00
if ( strncasecmp ( p , " midisourceio " , strlen ( p ) ) = = 0 ) {
2009-10-24 09:26:26 -04:00
bits | = ARDOUR : : DEBUG : : MidiSourceIO ;
2009-10-28 17:36:40 -04:00
} else if ( strncasecmp ( p , " midiplaylistio " , strlen ( p ) ) = = 0 ) {
2009-10-24 09:51:33 -04:00
bits | = ARDOUR : : DEBUG : : MidiPlaylistIO ;
2009-10-28 17:36:40 -04:00
} else if ( strncasecmp ( p , " mididiskstreamio " , strlen ( p ) ) = = 0 ) {
2009-10-25 10:42:46 -04:00
bits | = ARDOUR : : DEBUG : : MidiDiskstreamIO ;
2009-10-28 17:36:40 -04:00
} else if ( strncasecmp ( p , " snapbbt " , strlen ( p ) ) = = 0 ) {
2009-10-26 22:24:56 -04:00
bits | = ARDOUR : : DEBUG : : SnapBBT ;
2009-10-28 17:36:40 -04:00
} else if ( strncasecmp ( p , " configuration " , strlen ( p ) ) = = 0 ) {
bits | = ARDOUR : : DEBUG : : Configuration ;
2009-11-18 12:23:34 -05:00
} else if ( strncasecmp ( p , " latency " , strlen ( p ) ) = = 0 ) {
bits | = ARDOUR : : DEBUG : : Latency ;
} else if ( strncasecmp ( p , " processors " , strlen ( p ) ) = = 0 ) {
bits | = ARDOUR : : DEBUG : : Processors ;
2009-11-19 12:06:00 -05:00
} else if ( strncasecmp ( p , " graph " , strlen ( p ) ) = = 0 ) {
bits | = ARDOUR : : DEBUG : : Graph ;
2009-10-25 10:42:46 -04:00
}
2009-10-24 09:26:26 -04:00
p = strtok_r ( 0 , " , " , & sp ) ;
}
free ( copy ) ;
ARDOUR : : set_debug_bits ( bits ) ;
return 0 ;
}
2005-09-25 14:42:24 -04:00
int
2007-10-11 18:07:47 -04:00
ARDOUR_COMMAND_LINE : : parse_opts ( int argc , char * argv [ ] )
2005-09-25 14:42:24 -04:00
{
2009-10-24 09:26:26 -04:00
const char * optstring = " bc:C:dD:hk:E:m:N:nOp:SU:vV " ;
2005-09-25 14:42:24 -04:00
const char * execname = strrchr ( argv [ 0 ] , ' / ' ) ;
2007-10-11 18:07:47 -04:00
if ( getenv ( " ARDOUR_SAE " ) ) {
menus_file = " ardour-sae.menus " ;
2008-02-16 17:43:18 -05:00
keybindings_path = " SAE " ;
2007-10-11 18:07:47 -04:00
}
2005-09-25 14:42:24 -04:00
if ( execname = = 0 ) {
execname = argv [ 0 ] ;
} else {
execname + + ;
}
const struct option longopts [ ] = {
{ " version " , 0 , 0 , ' v ' } ,
{ " help " , 0 , 0 , ' h ' } ,
{ " bindings " , 0 , 0 , ' b ' } ,
2009-10-24 09:26:26 -04:00
{ " debug " , 1 , 0 , ' D ' } ,
2005-09-25 14:42:24 -04:00
{ " show-splash " , 0 , 0 , ' n ' } ,
2007-10-11 18:07:47 -04:00
{ " menus " , 1 , 0 , ' m ' } ,
2005-09-25 14:42:24 -04:00
{ " name " , 1 , 0 , ' c ' } ,
{ " novst " , 0 , 0 , ' V ' } ,
{ " new " , 1 , 0 , ' N ' } ,
2006-06-14 17:17:32 -04:00
{ " no-hw-optimizations " , 0 , 0 , ' O ' } ,
2007-10-11 18:07:47 -04:00
{ " sync " , 0 , 0 , ' S ' } ,
2005-09-25 14:42:24 -04:00
{ " curvetest " , 1 , 0 , ' C ' } ,
2009-10-14 20:57:55 -04:00
{ " save " , 1 , 0 , ' E ' } ,
2005-09-25 14:42:24 -04:00
{ 0 , 0 , 0 , 0 }
} ;
int option_index = 0 ;
int c = 0 ;
while ( 1 ) {
c = getopt_long ( argc , argv , optstring , longopts , & option_index ) ;
if ( c = = - 1 ) {
break ;
}
switch ( c ) {
case 0 :
break ;
2009-10-14 12:10:01 -04:00
2005-09-25 14:42:24 -04:00
case ' v ' :
just_version = true ;
break ;
case ' h ' :
print_help ( execname ) ;
exit ( 0 ) ;
break ;
case ' b ' :
show_key_actions = true ;
break ;
2009-10-14 12:10:01 -04:00
2008-01-10 16:20:59 -05:00
case ' d ' :
ARDOUR : : Session : : set_disable_all_loaded_plugins ( true ) ;
break ;
2005-09-25 14:42:24 -04:00
2009-10-24 09:26:26 -04:00
case ' D ' :
if ( parse_debug_options ( optarg ) ) {
exit ( 0 ) ;
}
break ;
2008-02-21 15:20:40 -05:00
case ' m ' :
menus_file = optarg ;
break ;
2007-10-11 18:07:47 -04:00
2005-09-25 14:42:24 -04:00
case ' n ' :
no_splash = false ;
break ;
2008-01-10 16:20:59 -05:00
case ' p ' :
//undocumented OS X finder -psn_XXXXX argument
finder_invoked_ardour = true ;
break ;
2009-10-14 12:10:01 -04:00
2007-02-19 16:04:37 -05:00
case ' S ' :
// ; just pass this through to gtk it will figure it out
break ;
2005-09-25 14:42:24 -04:00
case ' N ' :
new_session = true ;
session_name = optarg ;
break ;
2006-06-14 17:17:32 -04:00
case ' O ' :
try_hw_optimization = false ;
2005-09-25 14:42:24 -04:00
break ;
2009-10-14 12:10:01 -04:00
2005-09-25 14:42:24 -04:00
case ' V ' :
# ifdef VST_SUPPORT
use_vst = false ;
# endif /* VST_SUPPORT */
break ;
case ' c ' :
jack_client_name = optarg ;
break ;
case ' C ' :
curvetest_file = optarg ;
break ;
2006-12-18 21:41:19 -05:00
case ' k ' :
keybindings_path = optarg ;
break ;
2009-10-14 20:57:55 -04:00
case ' E ' :
immediate_save = optarg ;
break ;
2005-09-25 14:42:24 -04:00
default :
2006-08-08 17:27:41 -04:00
return print_help ( execname ) ;
2005-09-25 14:42:24 -04:00
}
}
if ( optind < argc ) {
2006-08-08 17:27:41 -04:00
if ( new_session ) {
cerr < < " Illogical combination: you can either create a new session, or a load an existing session but not both! " < < endl ;
return print_help ( execname ) ;
}
2005-09-25 14:42:24 -04:00
session_name = argv [ optind + + ] ;
}
return 0 ;
}