/[svn]/web/trunk/www.linuxsampler.org/documentation.html
ViewVC logotype

Contents of /web/trunk/www.linuxsampler.org/documentation.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1935 - (show annotations) (download) (as text)
Sun Jul 12 17:35:36 2009 UTC (14 years, 9 months ago) by schoenebeck
File MIME type: text/html
File size: 21802 byte(s)
* added donation / subscription paypal buttons

1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
3 <head>
4 <link rel="stylesheet" type="text/css" href="index.css">
5 <title>The Linux Sampler Project</title>
6
7 <meta http-equiv="content-type"
8 content="text/html; charset=ISO-8859-1">
9
10 <script language="javascript" type="text/javascript">
11 <!--
12 var dir = "gfx/";
13
14 if(document.images) {
15
16 newsover = new Image();
17 newsover.src = dir + "mnewshover.png";
18
19 newsout = new Image();
20 newsout.src = dir + "mnews.png";
21
22 aboutover = new Image();
23 aboutover.src = dir + "mabouthover.png";
24
25 aboutout = new Image();
26 aboutout.src = dir + "mabout.png";
27
28 featuresover = new Image();
29 featuresover.src = dir + "mfeatureshover.png";
30
31 featuresout = new Image();
32 featuresout.src = dir + "mfeatures.png";
33
34 screenshotsover = new Image();
35 screenshotsover.src = dir + "mscreenshotshover.png";
36
37 screenshotsout = new Image();
38 screenshotsout.src = dir + "mscreenshots.png";
39
40 demosover = new Image();
41 demosover.src = dir + "mdemoshover.png";
42
43 demosout = new Image();
44 demosout.src = dir + "mdemos.png";
45
46 downloadsover = new Image();
47 downloadsover.src = dir + "mdownloadshover.png";
48
49 downloadsout = new Image();
50 downloadsout.src = dir + "mdownloads.png";
51
52 supportover = new Image();
53 supportover.src = dir + "msupporthover.png";
54 supportout = new Image();
55 supportout.src = dir + "msupport.png";
56
57 developersover = new Image();
58 developersover.src = dir + "mdevelopershover.png";
59
60 developersout = new Image();
61 developersout.src = dir + "mdevelopers.png";
62
63 instrumentsover = new Image();
64 instrumentsover.src = dir + "minstrumentshover.png";
65
66 instrumentsout = new Image();
67 instrumentsout.src = dir + "minstruments.png";
68
69 linksover = new Image();
70 linksover.src = dir + "mlinkshover.png";
71
72 linksout = new Image();
73 linksout.src = dir + "mlinks.png";
74
75 documentationover = new Image();
76 documentationover.src = dir + "mdocumentationhover.png";
77
78 documentationout = new Image();
79 documentationout.src = dir + "mdocumentation.png";
80
81 creditsover = new Image();
82 creditsover.src = dir + "mcreditshover.png";
83
84 creditsout = new Image();
85 creditsout.src = dir + "mcredits.png";
86
87 faqover = new Image();
88 faqover.src = dir + "mfaqhover.png";
89
90 faqout = new Image();
91 faqout.src = dir + "mfaq.png";
92
93 bugsover = new Image();
94 bugsover.src = dir + "mbugshover.png";
95
96 bugsout = new Image();
97 bugsout.src = dir + "mbugs.png";
98 }
99 -->
100 </script>
101
102 </head>
103
104 <body>
105
106 <div id="mainwindow"><img name="LinuxSampler" src="gfx/lsbackground.jpg" alt="LinuxSampler">
107
108 <h1><span class="hidden">The LinuxSampler Project</span></h1>
109
110 <table border=0 cellspacing=0 cellpadding=0><tr><th colspan=2 align=left>
111 <img name="h1blank" src="gfx/h1blank.png" alt="blank"><span class="hidden">about</span></th></tr>
112 <tr><td valign=top>
113 <a id="news" href="index.php" onmouseover="javascript:if(document.images)document.news.src = newsover.src" onmouseout="javascript:if(document.images)document.news.src = newsout.src"><img name="news" src="gfx/mnews.png" alt="news"></a>
114 <a id="about" href="about.html" onmouseover="javascript:if(document.images)document.about.src = aboutover.src" onmouseout="javascript:if(document.images)document.about.src = aboutout.src"><img name="about" src="gfx/mabout.png" alt="about"></a>
115 <a id="features" href="features.html" onmouseover="javascript:if(document.images)document.features.src = featuresover.src" onmouseout="javascript:if(document.images)document.features.src = featuresout.src"><img name="features" src="gfx/mfeatures.png" alt="features"></a>
116 <a id="screenshots" href="screenshots.html" onmouseover="javascript:if(document.images)document.screenshots.src = screenshotsover.src" onmouseout="javascript:if(document.images)document.screenshots.src = screenshotsout.src"><img name="screenshots" src="gfx/mscreenshots.png" alt="screenshots"></a>
117 <a id="demos" href="demos.html" onmouseover="javascript:if(document.images)document.demos.src = demosover.src" onmouseout="javascript:if(document.images)document.demos.src = demosout.src"><img name="demos" src="gfx/mdemos.png" alt="demos"></a>
118 <a id="downloads" href="downloads.html" onmouseover="javascript:if(document.images)document.downloads.src = downloadsover.src" onmouseout="javascript:if(document.images)document.downloads.src = downloadsout.src"><img name="downloads" src="gfx/mdownloads.png" alt="download"></a>
119 <a id="support" href="support.html" onmouseover="javascript:if(document.images)document.support.src = supportover.src" onmouseout="javascript:if(document.images)document.support.src = supportout.src"><img name="support" src="gfx/msupport.png" alt="support"></a>
120 <a id="developers" href="developers.html" onmouseover="javascript:if(document.images)document.developers.src = developersover.src" onmouseout="javascript:if(document.images)document.developers.src = developersout.src"><img name="developers" src="gfx/mdevelopers.png" alt="developers"></a>
121 <a id="faq" href="faq.html" onmouseover="javascript:if(document.images)document.faq.src = faqover.src" onmouseout="javascript:if(document.images)document.faq.src = faqout.src"><img name="faq" src="gfx/mfaq.png" alt="faq"></a>
122 <a id="documentation" href="documentation.html" onmouseover="javascript:if(document.images)document.documentation.src = documentationover.src" onmouseout="javascript:if(document.images)document.documentation.src = documentationout.src"><img name="documentation" src="gfx/mdocumentation.png" alt="documentation"></a>
123 <a id="bugs" href="http://bugs.linuxsampler.org" onmouseover="javascript:if(document.images)document.bugs.src = bugsover.src" onmouseout="javascript:if(document.images)document.bugs.src = bugsout.src"><img name="bugs" src="gfx/mbugs.png" alt="bugs"></a>
124 <a id="instruments" href="instruments.html" onmouseover="javascript:if(document.images)document.instruments.src = instrumentsover.src" onmouseout="javascript:if(document.images)document.instruments.src = instrumentsout.src"><img name="instruments" src="gfx/minstruments.png" alt="instruments"></a>
125 <a id="links" href="links.html" onmouseover="javascript:if(document.images)document.links.src = linksover.src" onmouseout="javascript:if(document.images)document.links.src = linksout.src"><img name="links" src="gfx/mlinks.png" alt="links"></a>
126 <a id="credits" href="credits.html" onmouseover="javascript:if(document.images)document.credits.src = creditsover.src" onmouseout="javascript:if(document.images)document.credits.src = creditsout.src"><img name="credits" src="gfx/mcredits.png" alt="credits"></a>
127
128 <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="10" height="20">
129
130 <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
131 <input type="hidden" name="cmd" value="_s-xclick">
132 <input type="hidden" name="hosted_button_id" value="6746056">
133 <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
134 <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
135 </form>
136
137 <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
138 <input type="hidden" name="cmd" value="_s-xclick">
139 <input type="hidden" name="hosted_button_id" value="6746149">
140 <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
141 <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
142 </form>
143
144 </td><td valign=top width="100%">
145 <div id="contents">
146
147 <h2>Documentation</h2>
148 <p class="default">
149 This is still quite under construction. Be welcome to help us with writing some documentation!
150 </p>
151
152 <a name="windows"></a>
153 <a name="osx"></a>
154 <a name="debian"></a>
155 <h2>Howtos</h2>
156 <p class="default">
157 To ease new users the first contact with the Linuxsampler applications,
158 we have written the following short Howtos:
159 </p>
160 <table class="decorated">
161 <thead>
162 <tr>
163 <td class="decorated_header">Name</td>
164 <td class="decorated_header">Descripton</td>
165 </tr>
166 </thead>
167 <tbody>
168 <tr>
169 <td class="decorated"><a href="windows.html">Windows HOWTO</a></td>
170 <td class="decorated">
171 LinuxSampler quickstart guide for the MS Windows operating system.
172 </td>
173 </tr>
174 <tr>
175 <td class="decorated"><a href="osx.html">OS X HOWTO</a></td>
176 <td class="decorated">
177 LinuxSampler quickstart guide for the Apple OS X operating system.
178 </td>
179 </tr>
180 <tr>
181 <td class="decorated"><a href="debian.html">Debian HOWTO</a></td>
182 <td class="decorated">
183 Guide for how to build optimized Debian packages of LS &amp;
184 friends for your specific machine.
185 </td>
186 </tr>
187 <tr>
188 <td class="decorated"><a href="msys.html">Windows Build HOWTO</a></td>
189 <td class="decorated">
190 Guide for how to build libgig, linuxsampler and gigedit
191 for Windows by using MSYS.
192 </td>
193 </tr>
194 </tbody>
195 </table>
196
197 <h2>gigedit</h2>
198 <p class="default">
199 This is our graphical instrument editor based on the Gtk toolkit.
200 It can be used stand-alone or in conjunction with LinuxSampler.
201 Read the <a href="http://download.linuxsampler.org/doc/gigedit/quickstart/gigedit_quickstart.html">Gigedit Quickstart</a>
202 for a short tutorial. Please notice that this quickstart document
203 is automatically generated from CVS and thus might reflect
204 features and behaviors only available in the very latest, bleeding
205 edge development version of gigedit from CVS.
206 </p>
207
208 <h2><a name="jsampler">JSampler</a></h2>
209 <p class="default">
210 JSampler is an opensource, platform-independent,
211 GUI front-end for LinuxSampler, written entirely in Java.
212 Read the <a href="jsampler/manual/html/jsampler.html">JSampler manual</a>
213 for more information.<br>
214 For information about using Fantasia with Miditzer in Puppy Linux VTPO
215 read this <a href="http://organs.110mb.com/Fantasia.htm" target="_blank">HOWTO</a>.
216 </p>
217
218 <h2>libgig</h2>
219 <p class="default">
220 libgig is a C++ library used to load and modify Gigasampler format files.
221 If you're a developer and might want to use libgig, here is its
222 <a href="http://download.linuxsampler.org/doc/libgig/api/">API documentation</a>
223 (automatically daily updated from CVS).
224 </p>
225
226 <a name="lscp_spec"></a>
227 <a name="lscp_specs"></a>
228 <h2>liblscp</h2>
229 <p class="default">
230 liblscp is C library as convenient wrapper around the <i>LinuxSampler Control Protocol</i>.
231 If you're a developer and might want to use liblscp, here is its
232 <a href="http://download.linuxsampler.org/doc/liblscp/">API documentation</a>
233 (automatically daily updated from CVS).
234 </p>
235
236 <h2>LSCP Reference</h2>
237 <p class="default">
238 The following documents define the <i>LinuxSampler Control Protocol</i>,
239 a network protocol with which LinuxSampler can be controlled locally as well as remotely.
240 As this is a simple ASCII based protocol it's possible to write a frontend for LinuxSampler in
241 any programming language and GUI library. There's still a big demand especially for a Gtk and
242 ncurses based frontend, so be encouraged and let
243 <a href="http://www.linuxsampler.org/developers.html">us</a> know if you wrote a frontend for
244 LinuxSampler!
245 </p>
246
247 <table class="decorated">
248 <thead>
249 <tr>
250 <td class="decorated_header">Protocol Name</td>
251 <td class="decorated_header">Document Types</td>
252 <td class="decorated_header">Release Date</td>
253 <td class="decorated_header">Description</td>
254 </tr>
255 </thead>
256 <tbody>
257 <tr>
258 <td class="decorated">LSCP&nbsp;draft</td>
259 <td class="decorated">
260 <a href="http://www.linuxsampler.org/api/draft-linuxsampler-protocol.txt">TXT</a>,
261 <a href="http://www.linuxsampler.org/api/draft-linuxsampler-protocol.html">HTML</a>,
262 <a href="http://cvs.linuxsampler.org/cgi-bin/viewcvs.cgi/*checkout*/linuxsampler/Documentation/lscp.xml?rev=HEAD&content-type=text/xml">XML</a>
263 </td>
264 <td class="decorated">unreleased</td>
265 <td class="decorated">
266 Very latest draft of the protocol (which usually reflects the
267 latest development state from CVS or may even not be implemented
268 yet).
269 </td>
270 </tr>
271 <tr>
272 <td class="decorated">LSCP&nbsp;1.3</td>
273 <td class="decorated">
274 <a href="http://www.linuxsampler.org/api/lscp-1.3.txt">TXT</a>,
275 <a href="http://www.linuxsampler.org/api/lscp-1.3.html">HTML</a>,
276 <a href="http://www.linuxsampler.org/api/lscp-1.3.xml">XML</a>
277 </td>
278 <td class="decorated">2007-12-06</td>
279 <td class="decorated">
280 Protocol specification of the latest official release of LinuxSampler (0.5.1).
281 </td>
282 </tr>
283 <tr>
284 <td class="decorated">LSCP&nbsp;1.2</td>
285 <td class="decorated">
286 <a href="http://www.linuxsampler.org/api/lscp-1.2.txt">TXT</a>,
287 <a href="http://www.linuxsampler.org/api/lscp-1.2.html">HTML</a>,
288 <a href="http://www.linuxsampler.org/api/lscp-1.2.xml">XML</a>
289 </td>
290 <td class="decorated">2007-10-15</td>
291 <td class="decorated">
292 Protocol specification of the previous official release of LinuxSampler (0.5.0).
293 </td>
294 </tr>
295 <tr>
296 <td class="decorated">LSCP&nbsp;1.1</td>
297 <td class="decorated">
298 <a href="http://www.linuxsampler.org/api/lscp-1.1.txt">TXT</a>,
299 <a href="http://www.linuxsampler.org/api/lscp-1.1.html">HTML</a>,
300 <a href="http://www.linuxsampler.org/api/lscp-1.1.xml">XML</a>
301 </td>
302 <td class="decorated">2006-11-25</td>
303 <td class="decorated">
304 Protocol specification old LinuxSampler release 0.4.0.
305 </td>
306 </tr>
307 <tr>
308 <td class="decorated">LSCP&nbsp;1.0</td>
309 <td class="decorated">
310 <a href="http://www.linuxsampler.org/api/lscp-1.0.txt">TXT</a>,
311 <a href="http://www.linuxsampler.org/api/lscp-1.0.html">HTML</a>,
312 <a href="http://www.linuxsampler.org/api/lscp-1.0.xml">XML</a>
313 </td>
314 <td class="decorated">2005-07-17</td>
315 <td class="decorated">
316 Protocol specification of ancient LinuxSampler release 0.3.3.
317 </td>
318 </tr>
319 </tbody>
320 </table>
321
322 <p class="default">
323 The protocol will be extended from time to time. You may look at the
324 <a href="features.html#LSCP">features</a> site to see which control
325 commands are already implemented and which are not.
326 </p>
327
328
329 <a name="example_lscp_scripts">
330 <h3>Example LSCP scripts</h3>
331 <p class="default">
332 If you don't want / can't use a GUI frontend you will probably write some LSCP scripts for
333 using with linuxsampler to setup your needed sampler session. It follows some common LSCP
334 examples to give you a good starting point for writing your own ones. Adjust it to your needs
335 and send it to the running linuxsampler application with:
336 </p>
337 <pre class="code">cat yourscript.lscp | netcat localhost 8888</pre>
338 <p class="default">
339 Optionally you can also use a graphical frontend like QSampler one time to setup a working
340 sampler session for your needs and save it. Because you have to know that the files saved
341 by our frontends are actually pure LSCP scripts, thus you can i.e. use those files simply with
342 the mentioned netcat command from above to setup the sampler session without a frontend.
343 </p>
344 <p class="default">
345 Here is a simple LSCP example which uses ALSA as MIDI input and as audio output driver as well,
346 it creates only one sampler channel using the Gigasampler engine and loads a Piano instrument
347 on that sampler channel:
348 </p>
349 <pre class="code">#enable echo mode
350 SET ECHO 1
351
352 # load the ALSA audio driver
353 # (parameter CARD is optional, I use it here to select my 2nd sound card
354 # you can use 'GET AUDIO_OUTPUT_DRIVER_PARAMETER INFO ALSA CARD' to get
355 # all available sound cards)
356 CREATE AUDIO_OUTPUT_DEVICE ALSA CARD='1,0'
357
358 # load the ALSA MIDI driver
359 CREATE MIDI_INPUT_DEVICE ALSA
360
361 # connect my MIDI keyboard which has ALSA seq ID '72:0'
362 # (see 'aconnect -i' for the IDs of your MIDI devices
363 # or use 'GET MIDI_INPUT_PORT_PARAMETER INFO 0 0 ALSA_SEQ_BINDINGS')
364 SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS='72:0'
365
366 # setup a sampler channel
367 ADD CHANNEL
368 LOAD ENGINE gig 0
369 SET CHANNEL AUDIO_OUTPUT_DEVICE 0 0
370 SET CHANNEL MIDI_INPUT_DEVICE 0 0
371 LOAD INSTRUMENT '/home/me/Gigs/PMI Steinway D.gig' 0 0
372
373 # finally show our channel setup (optional of course)
374 GET CHANNEL INFO 0
375
376 # quit connection
377 QUIT</pre>
378 <p class="default">
379 The next example uses JACK as audio output driver instead and automatically connects the two
380 output channels of LS's JACK client to the first two ALSA PCM channels, so you can hear
381 something without having to manually connect it e.g. with qjackctl:
382 </p>
383 <pre class="code">#enable echo mode
384 SET ECHO 1
385
386 # load the JACK audio driver
387 CREATE AUDIO_OUTPUT_DEVICE JACK
388
389 # connect to ALSA playback JACK client so we can hear something
390 # (you can use 'GET AUDIO_OUTPUT_CHANNEL_PARAMETER INFO 0 0 JACK_BINDINGS'
391 # to get all available JACK clients / ports)
392 SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 0 JACK_BINDINGS='alsa_pcm:playback_1'
393 SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 1 JACK_BINDINGS='alsa_pcm:playback_2'
394
395 # load the ALSA MIDI driver
396 CREATE MIDI_INPUT_DEVICE ALSA
397
398 # connect my MIDI keyboard which has ALSA seq ID '72:0'
399 # (see 'aconnect -i' for the IDs of your MIDI devices
400 # or use 'GET MIDI_INPUT_PORT_PARAMETER INFO 0 0 ALSA_SEQ_BINDINGS')
401 SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS='72:0'
402
403 # setup one sampler channel
404 ADD CHANNEL
405 LOAD ENGINE gig 0
406 SET CHANNEL AUDIO_OUTPUT_DEVICE 0 0
407 SET CHANNEL MIDI_INPUT_DEVICE 0 0
408 LOAD INSTRUMENT '/home/me/Gigs/PMI Steinway D.gig' 0 0
409
410 # finally show our channel setup (optional of course)
411 GET CHANNEL INFO 0
412
413 # quit connection
414 QUIT</pre>
415 <p class="default">
416 The next example is a bit more complex.
417 It shows how to setup a more realistic sampler session, handle routing of MIDI input channels,
418 handle routing of audio channels, it uses JACK again as audio
419 output driver, but creates the JACK client with four output channels instead, it creates two
420 sampler channels, loads two different instrument on those two sampler channels and alters
421 the audio channel routing so that the two output channels of sampler channel 1 are routed to
422 the first two JACK output channels and the two output channels of sampler channel 2 are routed
423 the second pair of the JACK client's output channels. That way you could e.g. record the output
424 of those two sampler channels independently or apply independent LADSPA effects on it.
425 </p>
426 <pre class="code"># enable echo mode
427 SET ECHO 1
428
429 # load audio and MIDI driver
430 CREATE AUDIO_OUTPUT_DEVICE JACK
431 CREATE MIDI_INPUT_DEVICE ALSA
432
433 # increase the amount of output channels of the LS"s Jack client e.g. to 4
434 SET AUDIO_OUTPUT_DEVICE_PARAMETER 0 CHANNELS=4
435
436 # connect to MIDI keyboard
437 SET MIDI_INPUT_PORT_PARAMETER 0 0 ALSA_SEQ_BINDINGS="64:0"
438
439 # set up 1st sampler channel (using default output channels, that is 0 and 1)
440 ADD CHANNEL
441 LOAD ENGINE gig 0
442 SET CHANNEL AUDIO_OUTPUT_DEVICE 0 0
443 SET CHANNEL MIDI_INPUT_DEVICE 0 0
444 LOAD INSTRUMENT "/somedir/The Bosendorfer Imperial Grand Version 2.2.gig" 0 0
445 SET CHANNEL VOLUME 0 0.40
446 # by default every sampler channel / engine listens to ALL MIDI channels
447 # but for multi channel setup it makes sense to distinguish the inputs, so
448 # let sampler channel 0 listen to MIDI channel 0 (instead of ALL)
449 SET CHANNEL MIDI_INPUT_CHANNEL 0 0
450
451 # set up 2nd sampler channel (using output channels 2 and 3)
452 ADD CHANNEL
453 LOAD ENGINE gig 1
454 SET CHANNEL AUDIO_OUTPUT_DEVICE 1 0
455 SET CHANNEL MIDI_INPUT_DEVICE 1 0
456 LOAD INSTRUMENT "/home/me/Gigs/NemeSys_1GB_Grand.gig" 0 1
457 SET CHANNEL VOLUME 1 0.40
458 # let sampler channel 1 listen to MIDI channel 1 (instead of ALL)
459 SET CHANNEL MIDI_INPUT_CHANNEL 1 1
460 # this will alter the audio channel routing
461 # connect the engines output channel 0 to JACK clients output 2
462 SET CHANNEL AUDIO_OUTPUT_CHANNEL 1 0 2
463 # connect the engines output channel 1 to JACK clients output 3
464 SET CHANNEL AUDIO_OUTPUT_CHANNEL 1 1 3
465
466 # automatic connection between the four 4 ports of LS's Jack client and the
467 # ALSA PCM JACK client (assuming your sound card has at least 4 outputs ;-)
468 SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 0 JACK_BINDINGS='alsa_pcm:playback_1'
469 SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 1 JACK_BINDINGS='alsa_pcm:playback_2'
470 SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 2 JACK_BINDINGS='alsa_pcm:playback_3'
471 SET AUDIO_OUTPUT_CHANNEL_PARAMETER 0 3 JACK_BINDINGS='alsa_pcm:playback_4'
472
473 # not necessary, just to see our setup
474 GET CHANNEL INFO 0
475 GET CHANNEL INFO 1</pre>
476 <p class="default">
477 For a detailed description about LSCP read the <a href="api/draft-linuxsampler-protocol.html">LSCP reference</a>.
478 Be welcome to ask details on the mailing list.
479 </p>
480
481
482 </div>
483 </td></tr></table>
484
485 </div>
486
487 </body>
488 </html>

  ViewVC Help
Powered by ViewVC