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