]> git.donarmstrong.com Git - lilypond.git/blob - lily/scm-option.cc
e472f2878e96e70ce2892d58c92084f35edf86b7
[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   TODO: verzin iets tegen optie code bloot
44
45
46   other interesting stuff to add:
47
48 @item -T,--no-timestamps
49 don't timestamp the output
50
51 @item -t,--test
52 Switch on any experimental features.  Not for general public use.
53
54  */
55
56 SCM
57 set_lily_option (SCM var, SCM val)
58 {
59   /*
60     Scheme option usage:
61     lilypond -e "(set-lily-option 'help 0)"
62    */
63   if (var == ly_symbol2scm ("help"))
64     {
65       cout << _("lilypond -e EXPR means
66
67 evalute EXPR as Scheme after init.scm has been read.  In particular,
68 the function set-lily-option allows for access to some internal
69 variables. Usage:
70
71   (set-lily-option SYMBOL VAL)
72
73 possible options for SYMBOL are :
74 ")<<endl;
75       
76       cout << "  help (any-symbol)"<<endl; 
77       cout << "  internal-type-checking (boolean)"<<endl; 
78       cout << "  midi-debug (boolean)"<<endl; 
79       cout << "  testing-level (int)"<<endl; 
80
81       exit (0);
82     }
83   else if (var == ly_symbol2scm ("midi-debug"))
84     {
85       midi_debug_global_b = to_boolean (val);
86     }
87   else if (var == ly_symbol2scm ("testing-level"))
88     {
89      testing_level_global = gh_scm2int (val); 
90     }
91   else if (var == ly_symbol2scm ("internal-type-checking"))
92     {
93      internal_type_checking_global_b = to_boolean (val); 
94     }
95   else if (var == ly_symbol2scm ("find-old-relative"))
96     {
97       /*
98         Seems to have been broken for some time!
99         
100         @item  -Q,--find-old-relative
101         show all changes needed to convert a file to  relative octave syntax.
102
103
104         
105       */
106
107       ;
108     }
109   else
110     {
111       warning (_("Unknown internal option!"));
112     }
113   
114
115   return SCM_UNSPECIFIED;
116 }
117
118
119 static void
120 init_functions ()
121 {
122   scm_c_define_gsubr ("set-lily-option", 2, 0, 0, (Scheme_function_unknown)set_lily_option);
123 }
124
125
126 ADD_SCM_INIT_FUNC (init_functions_sopt, init_functions);
127
128