/[svn]/jsampler/trunk/src/org/jsampler/LscpTree.java
ViewVC logotype

Contents of /jsampler/trunk/src/org/jsampler/LscpTree.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2288 - (show annotations) (download)
Wed Nov 23 21:19:44 2011 UTC (12 years, 4 months ago) by iliev
File size: 17258 byte(s)
* Added option to select a sampler engine in Add/Edit Instrument dialog
* Moved all Swing dependent code outside the JSampler core

1 /*
2 * JSampler - a java front-end for LinuxSampler
3 *
4 * Copyright (C) 2005-2011 Grigor Iliev <grigor@grigoriliev.com>
5 *
6 * This file is part of JSampler.
7 *
8 * JSampler is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2
10 * as published by the Free Software Foundation.
11 *
12 * JSampler is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with JSampler; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20 * MA 02111-1307 USA
21 */
22
23 package org.jsampler;
24
25 /**
26 * Provides the LSCP grammar represented in a tree structure.
27 * @author Grigor Iliev
28 */
29 public class LscpTree {
30 private static LscpNode rootNode;
31
32 static {
33 LscpNode add = new LscpNode("ADD");
34 LscpNode append = new LscpNode("APPEND");
35 LscpNode clear = new LscpNode("CLEAR", new LscpNode("MIDI_INSTRUMENTS", true, false));
36 LscpNode copy = new LscpNode("COPY");
37 LscpNode create = new LscpNode("CREATE");
38 LscpNode destroy = new LscpNode("DESTROY");
39 LscpNode edit = new LscpNode("EDIT");
40 LscpNode find = new LscpNode("FIND");
41 LscpNode format = new LscpNode("FORMAT", new LscpNode("INSTRUMENTS_DB", true, false));
42 LscpNode get = new LscpNode("GET");
43 LscpNode insert = new LscpNode("INSERT");
44 LscpNode list = new LscpNode("LIST");
45 LscpNode load = new LscpNode("LOAD");
46 LscpNode map = new LscpNode("MAP", new LscpNode("MIDI_INSTRUMENT", true));
47 LscpNode move = new LscpNode("MOVE");
48 LscpNode quit = new LscpNode("QUIT", true, false);
49 LscpNode remove = new LscpNode("REMOVE");
50 LscpNode reset = new LscpNode("RESET", new LscpNode("CHANNEL"), true, false);
51 LscpNode send = new LscpNode("SEND");
52 LscpNode set = new LscpNode("SET");
53 LscpNode subscribe = new LscpNode("SUBSCRIBE");
54 LscpNode unmap = new LscpNode("UNMAP", new LscpNode("MIDI_INSTRUMENT"), true);
55 LscpNode unsubscribe = new LscpNode("UNSUBSCRIBE");
56
57 LscpNode[] cmds = {
58 add, append, clear, copy, create, destroy, edit, find, format, get, insert,
59 list, load, map, move, quit, remove, reset, send, set, subscribe, unmap, unsubscribe
60 };
61
62 rootNode = new LscpNode("", cmds);
63
64 // ADD command
65 LscpNode[] nodes = new LscpNode[5];
66 nodes[0] = new LscpNode("CHANNEL", true, false);
67 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY");
68 LscpNode addDbInstr = new LscpNode("DB_INSTRUMENTS", true);
69 nodes[2] = addDbInstr;
70 nodes[3] = new LscpNode("MIDI_INSTRUMENT_MAP", true);
71 nodes[4] = new LscpNode("SEND_EFFECT_CHAIN", true);
72 add.setChildren(nodes);
73
74 // ADD DB_INSTRUMENTS command
75 nodes = new LscpNode[4];
76 nodes[0] = new LscpNode("FLAT", true);
77 LscpNode addDbInstrnNonModal = new LscpNode("NON_MODAL", true);
78 nodes[1] = addDbInstrnNonModal;
79 nodes[2] = new LscpNode("NON_RECURSIVE", true);
80 nodes[3] = new LscpNode("RECURSIVE", true);
81 addDbInstr.setChildren(nodes);
82
83 // ADD DB_INSTRUMENTS NON_MODAL command
84 nodes = new LscpNode[3];
85 nodes[0] = new LscpNode("FLAT", true);
86 nodes[1] = new LscpNode("NON_RECURSIVE", true);
87 nodes[2] = new LscpNode("RECURSIVE", true);
88 addDbInstrnNonModal.setChildren(nodes);
89
90 // APPEND command
91 nodes = new LscpNode[1];
92 nodes[0] = new LscpNode("SEND_EFFECT_CHAIN", new LscpNode("EFFECT", true));
93 append.setChildren(nodes);
94
95 // COPY command
96 nodes = new LscpNode[2];
97 nodes[0] = new LscpNode("DB_INSTRUMENT", true);
98 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY", true);
99 copy.setChildren(nodes);
100
101 // CREATE command
102 nodes = new LscpNode[4];
103 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
104 nodes[1] = new LscpNode("EFFECT_INSTANCE", true);
105 nodes[2] = new LscpNode("FX_SEND", true);
106 nodes[3] = new LscpNode("MIDI_INPUT_DEVICE", true);
107 create.setChildren(nodes);
108
109 // DESTROY command
110 nodes = new LscpNode[4];
111 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
112 nodes[1] = new LscpNode("EFFECT_INSTANCE", true);
113 nodes[2] = new LscpNode("FX_SEND", true);
114 nodes[3] = new LscpNode("MIDI_INPUT_DEVICE", true);
115 destroy.setChildren(nodes);
116
117 //EDIT command
118 nodes = new LscpNode[1];
119 LscpNode editChn = new LscpNode("CHANNEL", new LscpNode("INSTRUMENT", true, true));
120 nodes[0] = editChn;
121 edit.setChildren(nodes);
122
123
124 // FIND command
125 nodes = new LscpNode[3];
126 LscpNode n = new LscpNode("NON_RECURSIVE", true);
127 nodes[0] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", n, true);
128 n = new LscpNode("NON_RECURSIVE", true);
129 nodes[1] = new LscpNode("DB_INSTRUMENTS", n, true);
130 nodes[2] = new LscpNode("LOST", new LscpNode("DB_INSTRUMENT_FILES", true, false));
131 find.setChildren(nodes);
132
133 // GET command
134 nodes = new LscpNode[41];
135 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", new LscpNode("INFO", true));
136 nodes[1] = new LscpNode("AUDIO_OUTPUT_CHANNEL_PARAMETER", new LscpNode("INFO", true));
137 nodes[2] = new LscpNode("AUDIO_OUTPUT_DEVICE", new LscpNode("INFO", true));
138 nodes[3] = new LscpNode("AUDIO_OUTPUT_DEVICES", true, false);
139 nodes[4] = new LscpNode("AUDIO_OUTPUT_DRIVER", new LscpNode("INFO", true));
140 nodes[5] = new LscpNode("AUDIO_OUTPUT_DRIVER_PARAMETER", new LscpNode("INFO", true));
141 nodes[6] = new LscpNode("AVAILABLE_AUDIO_OUTPUT_DRIVERS", true, false);
142 nodes[7] = new LscpNode("AVAILABLE_EFFECTS", true, false);
143 nodes[8] = new LscpNode("AVAILABLE_ENGINES", true, false);
144 nodes[9] = new LscpNode("AVAILABLE_MIDI_INPUT_DRIVERS", true, false);
145 LscpNode getChn = new LscpNode("CHANNEL");
146 nodes[10] = getChn;
147 nodes[11] = new LscpNode("CHANNELS", true, false);
148 nodes[12] = new LscpNode("DB_INSTRUMENT", new LscpNode("INFO", true));
149 nodes[13] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", true);
150 nodes[14] = new LscpNode("DB_INSTRUMENT_DIRECTORY", new LscpNode("INFO", true));
151 nodes[15] = new LscpNode("DB_INSTRUMENTS", true);
152 nodes[16] = new LscpNode("DB_INSTRUMENTS_JOB", new LscpNode("INFO", true));
153 nodes[17] = new LscpNode("EFFECT", new LscpNode("INFO", true));
154 nodes[18] = new LscpNode("EFFECT_INSTANCE", new LscpNode("INFO", true));
155 nodes[19] = new LscpNode("EFFECT_INSTANCE_INPUT_CONTROL", new LscpNode("INFO", true));
156 nodes[20] = new LscpNode("EFFECT_INSTANCES", true, false);
157 nodes[21] = new LscpNode("ENGINE", new LscpNode("INFO", true));
158 LscpNode getFile = new LscpNode("FILE");
159 nodes[22] = getFile;
160 nodes[23] = new LscpNode("FX_SEND", new LscpNode("INFO", true));
161 nodes[24] = new LscpNode("FX_SENDS");
162 nodes[25] = new LscpNode("MIDI_INPUT_DEVICE", new LscpNode("INFO", true));
163 nodes[26] = new LscpNode("MIDI_INPUT_DEVICES", true, false);
164 nodes[27] = new LscpNode("MIDI_INPUT_DRIVER", new LscpNode("INFO", true));
165 nodes[28] = new LscpNode("MIDI_INPUT_DRIVER_PARAMETER", new LscpNode("INFO", true));
166 nodes[29] = new LscpNode("MIDI_INPUT_PORT", new LscpNode("INFO", true));
167 nodes[30] = new LscpNode("MIDI_INPUT_PORT_PARAMETER", new LscpNode("INFO", true));
168 nodes[31] = new LscpNode("MIDI_INSTRUMENT", new LscpNode("INFO", true));
169 nodes[32] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("INFO", true));
170 nodes[33] = new LscpNode("MIDI_INSTRUMENT_MAPS", true, false);
171 nodes[34] = new LscpNode("MIDI_INSTRUMENTS", new LscpNode("ALL", true, false), true);
172 nodes[35] = new LscpNode("DB_INSTRUMENT_DIRECTORY", new LscpNode("INFO", true));
173 nodes[36] = new LscpNode("SEND_EFFECT_CHAIN", new LscpNode("INFO", true));
174 nodes[37] = new LscpNode("SEND_EFFECT_CHAINS", true);
175 nodes[38] = new LscpNode("STREAMS", true, false);
176 nodes[39] = new LscpNode("VOICES", true, false);
177 nodes[40] = new LscpNode("VOLUME", true, false);
178 get.setChildren(nodes);
179
180 // GET CHANNEL command
181 nodes = new LscpNode[4];
182 LscpNode getChnBufFill = new LscpNode("BUFFER_FILL");
183 nodes[0] = getChnBufFill;
184 nodes[1] = new LscpNode("INFO", true);
185 nodes[2] = new LscpNode("STREAM_COUNT", true);
186 nodes[3] = new LscpNode("VOICE_COUNT", true);
187 getChn.setChildren(nodes);
188
189 // GET CHANNEL BUFFER_FILL command
190 nodes = new LscpNode[2];
191 nodes[0] = new LscpNode("BYTES", true);
192 nodes[1] = new LscpNode("PERCENTAGE", true);
193 getChnBufFill.setChildren(nodes);
194
195 // GET FILE command
196 nodes = new LscpNode[2];
197 nodes[0] = new LscpNode("INSTRUMENT", new LscpNode("INFO", true));
198 nodes[1] = new LscpNode("INSTRUMENTS", true);
199 getFile.setChildren(nodes);
200
201 // INSERT command
202 nodes = new LscpNode[1];
203 nodes[0] = new LscpNode("SEND_EFFECT_CHAIN", new LscpNode("EFFECT", true));
204 insert.setChildren(nodes);
205
206 // LIST command
207 nodes = new LscpNode[15];
208 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICES", true, false);
209 nodes[1] = new LscpNode("AVAILABLE_AUDIO_OUTPUT_DRIVERS", true, false);
210 nodes[2] = new LscpNode("AVAILABLE_EFFECTS", true, false);
211 nodes[3] = new LscpNode("AVAILABLE_ENGINES", true, false);
212 nodes[4] = new LscpNode("AVAILABLE_MIDI_INPUT_DRIVERS", true, false);
213 nodes[5] = new LscpNode("CHANNELS", true, false);
214 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", true);
215 nodes[7] = new LscpNode("DB_INSTRUMENTS", true);
216 nodes[8] = new LscpNode("EFFECT_INSTANCES", true, false);
217 nodes[9] = new LscpNode("FILE", new LscpNode("INSTRUMENTS", true));
218 nodes[10] = new LscpNode("FX_SENDS");
219 nodes[11] = new LscpNode("MIDI_INPUT_DEVICES", true, false);
220 nodes[12] = new LscpNode("MIDI_INSTRUMENT_MAPS", true, false);
221 nodes[13] = new LscpNode("MIDI_INSTRUMENTS", true);
222 nodes[14] = new LscpNode("SEND_EFFECT_CHAINS", true);
223 list.setChildren(nodes);
224
225 // LOAD command
226 nodes = new LscpNode[2];
227 nodes[0] = new LscpNode("ENGINE", true);
228 nodes[1] = new LscpNode("INSTRUMENT", new LscpNode("NON_MODAL"), true);
229 load.setChildren(nodes);
230
231 // MOVE command
232 nodes = new LscpNode[2];
233 nodes[0] = new LscpNode("DB_INSTRUMENT", true);
234 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY", true);
235 move.setChildren(nodes);
236
237 // REMOVE command
238 nodes = new LscpNode[6];
239 nodes[0] = new LscpNode("CHANNEL", true);
240 nodes[1] = new LscpNode("DB_INSTRUMENT", true);
241 nodes[2] = new LscpNode("DB_INSTRUMENT_DIRECTORY", new LscpNode("FORCE", true), true);
242 nodes[3] = new LscpNode("FX_SEND", new LscpNode("EFFECT", true), true);
243 nodes[4] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("ALL", true, false), true);
244 nodes[5] = new LscpNode("SEND_EFFECT_CHAIN", new LscpNode("EFFECT", true), true);
245 remove.setChildren(nodes);
246
247 // SEND command
248 nodes = new LscpNode[1];
249 nodes[0] = new LscpNode("CHANNEL", new LscpNode("MIDI_DATA", true));
250 send.setChildren(nodes);
251
252 // SET command
253 nodes = new LscpNode[14];
254 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL_PARAMETER", true);
255 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_PARAMETER", true);
256 LscpNode setChn = new LscpNode("CHANNEL");
257 nodes[2] = setChn;
258 LscpNode setDbInstr = new LscpNode("DB_INSTRUMENT");
259 nodes[3] = setDbInstr;
260 LscpNode setDbDir = new LscpNode("DB_INSTRUMENT_DIRECTORY");
261 nodes[4] = setDbDir;
262 nodes[5] = new LscpNode("ECHO", true);
263 nodes[6] = new LscpNode("EFFECT_INSTANCE_INPUT_CONTROL", new LscpNode("VALUE", true));
264 LscpNode setFxSend = new LscpNode("FX_SEND");
265 nodes[7] = setFxSend;
266 nodes[8] = new LscpNode("MIDI_INPUT_DEVICE_PARAMETER", true);
267 nodes[9] = new LscpNode("MIDI_INPUT_PORT_PARAMETER", true);
268 nodes[10] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("NAME", true));
269 nodes[11] = new LscpNode("STREAMS", true);
270 nodes[12] = new LscpNode("VOICES", true);
271 nodes[13] = new LscpNode("VOLUME", true);
272 set.setChildren(nodes);
273
274 // SET CHANNEL command
275 nodes = new LscpNode[12];
276 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", true);
277 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
278 nodes[2] = new LscpNode("AUDIO_OUTPUT_TYPE", true);
279 nodes[3] = new LscpNode("MIDI_INPUT", true);
280 nodes[4] = new LscpNode("MIDI_INPUT_CHANNEL", true);
281 nodes[5] = new LscpNode("MIDI_INPUT_DEVICE", true);
282 nodes[6] = new LscpNode("MIDI_INPUT_PORT", true);
283 nodes[7] = new LscpNode("MIDI_INPUT_TYPE", true);
284 nodes[8] = new LscpNode("MIDI_INSTRUMENT_MAP", true);
285 nodes[9] = new LscpNode("MUTE", true);
286 nodes[10] = new LscpNode("SOLO", true);
287 nodes[11] = new LscpNode("VOLUME", true);
288 setChn.setChildren(nodes);
289
290 // SET DB_INSTRUMENT
291 nodes = new LscpNode[3];
292 nodes[0] = new LscpNode("DESCRIPTION", true);
293 nodes[1] = new LscpNode("FILE_PATH", true);
294 nodes[2] = new LscpNode("NAME", true);
295 setDbInstr.setChildren(nodes);
296
297 // SET DB_INSTRUMENT_DIRECTORY
298 nodes = new LscpNode[2];
299 nodes[0] = new LscpNode("NAME", true);
300 nodes[1] = new LscpNode("DESCRIPTION", true);
301 setDbDir.setChildren(nodes);
302
303 // SET FX_SEND command
304 nodes = new LscpNode[5];
305 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", true);
306 nodes[1] = new LscpNode("EFFECT", true);
307 nodes[2] = new LscpNode("LEVEL", true);
308 nodes[3] = new LscpNode("MIDI_CONTROLLER", true);
309 nodes[4] = new LscpNode("NAME", true);
310 setFxSend.setChildren(nodes);
311
312 // SUBSCRIBE command
313 nodes = new LscpNode[30];
314 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE_COUNT", true, false);
315 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_INFO", true, false);
316 nodes[2] = new LscpNode("BUFFER_FILL", true, false);
317 nodes[3] = new LscpNode("CHANNEL_COUNT", true, false);
318 nodes[4] = new LscpNode("CHANNEL_INFO", true, false);
319 nodes[5] = new LscpNode("CHANNEL_MIDI", true, false);
320 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORY_COUNT", true, false);
321 nodes[7] = new LscpNode("DB_INSTRUMENT_DIRECTORY_INFO", true, false);
322 nodes[8] = new LscpNode("DB_INSTRUMENT_COUNT", true, false);
323 nodes[9] = new LscpNode("DB_INSTRUMENT_INFO", true, false);
324 nodes[10] = new LscpNode("DB_INSTRUMENTS_JOB_INFO", true, false);
325 nodes[11] = new LscpNode("DEVICE_MIDI", true, false);
326 nodes[12] = new LscpNode("EFFECT_INSTANCE_COUNT", true, false);
327 nodes[13] = new LscpNode("EFFECT_INSTANCE_INFO", true, false);
328 nodes[14] = new LscpNode("FX_SEND_COUNT", true, false);
329 nodes[15] = new LscpNode("FX_SEND_INFO", true, false);
330 nodes[16] = new LscpNode("GLOBAL_INFO", true, false);
331 nodes[17] = new LscpNode("MIDI_INPUT_DEVICE_COUNT", true, false);
332 nodes[18] = new LscpNode("MIDI_INPUT_DEVICE_INFO", true, false);
333 nodes[19] = new LscpNode("MIDI_INSTRUMENT_COUNT", true, false);
334 nodes[20] = new LscpNode("MIDI_INSTRUMENT_INFO", true, false);
335 nodes[21] = new LscpNode("MIDI_INSTRUMENT_MAP_COUNT", true, false);
336 nodes[22] = new LscpNode("MIDI_INSTRUMENT_MAP_INFO", true, false);
337 nodes[23] = new LscpNode("MISCELLANEOUS", true, false);
338 nodes[24] = new LscpNode("SEND_EFFECT_CHAIN_COUNT", true, false);
339 nodes[25] = new LscpNode("SEND_EFFECT_CHAIN_INFO", true, false);
340 nodes[26] = new LscpNode("STREAM_COUNT", true, false);
341 nodes[27] = new LscpNode("TOTAL_STREAM_COUNT", true, false);
342 nodes[28] = new LscpNode("TOTAL_VOICE_COUNT", true, false);
343 nodes[29] = new LscpNode("VOICE_COUNT", true, false);
344 subscribe.setChildren(nodes);
345
346 // UNSUBSCRIBE command
347 nodes = new LscpNode[30];
348 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE_COUNT", true, false);
349 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_INFO", true, false);
350 nodes[2] = new LscpNode("BUFFER_FILL", true, false);
351 nodes[3] = new LscpNode("CHANNEL_COUNT", true, false);
352 nodes[4] = new LscpNode("CHANNEL_INFO", true, false);
353 nodes[5] = new LscpNode("CHANNEL_MIDI", true, false);
354 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORY_COUNT", true, false);
355 nodes[7] = new LscpNode("DB_INSTRUMENT_DIRECTORY_INFO", true, false);
356 nodes[8] = new LscpNode("DB_INSTRUMENT_COUNT", true, false);
357 nodes[9] = new LscpNode("DB_INSTRUMENT_INFO", true, false);
358 nodes[10] = new LscpNode("DB_INSTRUMENTS_JOB_INFO", true, false);
359 nodes[11] = new LscpNode("DEVICE_MIDI", true, false);
360 nodes[12] = new LscpNode("EFFECT_INSTANCE_COUNT", true, false);
361 nodes[13] = new LscpNode("EFFECT_INSTANCE_INFO", true, false);
362 nodes[14] = new LscpNode("FX_SEND_COUNT", true, false);
363 nodes[15] = new LscpNode("FX_SEND_INFO", true, false);
364 nodes[16] = new LscpNode("GLOBAL_INFO", true, false);
365 nodes[17] = new LscpNode("MIDI_INPUT_DEVICE_COUNT", true, false);
366 nodes[18] = new LscpNode("MIDI_INPUT_DEVICE_INFO", true, false);
367 nodes[19] = new LscpNode("MIDI_INSTRUMENT_COUNT", true, false);
368 nodes[20] = new LscpNode("MIDI_INSTRUMENT_INFO", true, false);
369 nodes[21] = new LscpNode("MIDI_INSTRUMENT_MAP_COUNT", true, false);
370 nodes[22] = new LscpNode("MIDI_INSTRUMENT_MAP_INFO", true, false);
371 nodes[23] = new LscpNode("MISCELLANEOUS", true, false);
372 nodes[24] = new LscpNode("SEND_EFFECT_CHAIN_COUNT", true, false);
373 nodes[25] = new LscpNode("SEND_EFFECT_CHAIN_INFO", true, false);
374 nodes[26] = new LscpNode("STREAM_COUNT", true, false);
375 nodes[27] = new LscpNode("TOTAL_STREAM_COUNT", true, false);
376 nodes[28] = new LscpNode("TOTAL_VOICE_COUNT", true, false);
377 nodes[29] = new LscpNode("VOICE_COUNT", true, false);
378 unsubscribe.setChildren(nodes);
379 }
380
381 /** Forbits the instantiation of this class. */
382 private
383 LscpTree() { }
384
385 /**
386 * Gets the root node of the tree.
387 */
388 public static LscpNode
389 getRoot() { return rootNode; }
390 }

  ViewVC Help
Powered by ViewVC