]> git.donarmstrong.com Git - lilypond.git/blob - lily/scm-option.cc
e924020aa78624e2e7fa332c23fe054b45d05849
[lilypond.git] / lily / scm-option.cc
1 /*   
2   scm-option.cc --  implement option setting from Scheme
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2001--2002  Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include <iostream.h>
11
12 #include "string.hh"
13 #include "lily-guile.hh"
14 #include "scm-option.hh"
15 #include "warn.hh"
16
17 /*
18   This interface to option setting is meant for setting options are
19   useful to a limited audience. The reason for this interface is that
20   making command line options clutters up the command-line option name
21   space.
22
23
24   preferably, also dont use TESTING_LEVEL_GLOBAL, since it defeats
25   another purpose of this very versatile interface, which is to
26   support multiple debug/testing options concurrently.
27   
28  */
29
30
31 /* Write midi as formatted ascii stream? */
32 bool midi_debug_global_b;
33
34 /* General purpose testing flag */
35 int testing_level_global;
36
37 /*
38   crash if internally the wrong type is used for a grob property.
39  */
40 bool internal_type_checking_global_b;
41
42 /*
43
44 add these as well:
45
46 @item -T,--no-timestamps
47 don't timestamp the output
48
49 @item -t,--test
50 Switch on any experimental features.  Not for general public use.
51
52  */
53
54 LY_DEFINE(set_lily_option,"set-lily-option", 2, 0, 0,  (SCM var, SCM val),
55           "Set a global option for the program. Supported options  include
56
57
58 @table @code
59 @item help
60 List all options.
61 @item midi-debug
62 If set to true, generate human  readable MIDI
63 @end table
64
65 This function is useful to call from the command line: @code{lilypond -e
66 \"(set-lily-option 'midi-debug #t)\"}.
67 ")
68 {
69   /*
70     Scheme option usage:
71     lilypond -e "(set-lily-option 'help 0)"
72    */
73   if (var == ly_symbol2scm ("help"))
74     {
75       cout << _("lilypond -e EXPR means
76
77 evalute EXPR as Scheme after init.scm has been read.  In particular,
78 the function set-lily-option allows for access to some internal
79 variables. Usage:
80
81   (set-lily-option SYMBOL VAL)
82
83 possible options for SYMBOL are :
84 ").ch_C()<<endl;
85       
86       cout << "  help (any-symbol)"<<endl; 
87       cout << "  internal-type-checking (boolean)"<<endl; 
88       cout << "  midi-debug (boolean)"<<endl; 
89       cout << "  testing-level (int)"<<endl; 
90
91       exit (0);
92     }
93   else if (var == ly_symbol2scm ("midi-debug"))
94     {
95       midi_debug_global_b = to_boolean (val);
96     }
97   else if (var == ly_symbol2scm ("testing-level"))
98     {
99      testing_level_global = gh_scm2int (val); 
100     }
101   else if (var == ly_symbol2scm ("internal-type-checking"))
102     {
103      internal_type_checking_global_b = to_boolean (val); 
104     }
105   else if (var == ly_symbol2scm ("find-old-relative"))
106     {
107       /*
108         Seems to have been broken for some time!
109         
110         @item  -Q,--find-old-relative
111         show all changes needed to convert a file to  relative octave syntax.
112
113
114         
115       */
116
117       ;
118     }
119   else
120     {
121       warning (_("Unknown internal option!"));
122     }
123   
124
125   return SCM_UNSPECIFIED;
126 }
127
128
129
130