9675
|
1 <?xml version="1.0" encoding="iso-8859-1"?>
|
|
2 <appendix id="skin">
|
|
3 <title>MPlayer skin format</title>
|
|
4 <para>
|
|
5 The purpose of this document is to describe the MPlayer skin format.
|
|
6 The information contained here might be wrong, for
|
|
7 <orderedlist>
|
|
8 <listitem><para>It is not me who wrote the GUI.</para></listitem>
|
|
9 <listitem><para>The GUI is not finished.</para></listitem>
|
|
10 <listitem><para>I might be wrong.</para></listitem>
|
|
11 </orderedlist>
|
|
12 So do not be surprised if something does not work as described here.
|
|
13 </para>
|
|
14
|
|
15 <para>Thanks to <emphasis>Zoltán Ponekker</emphasis> for his help.</para>
|
|
16
|
|
17 <para><emphasis>András Mohari <mayday@freemail.hu></emphasis></para>
|
|
18
|
|
19 <sect1 id="skin-overview">
|
|
20 <title>Overview</title>
|
|
21 <para>
|
|
22 It does not really have anything to do with the skin format, but you should
|
|
23 know that MPlayer has <emphasis role="bold">no</emphasis> builtin skin, so
|
|
24 <emphasis role="bold">at least one skin must be installed in order to be able
|
|
25 to use the GUI.</emphasis>
|
|
26 </para>
|
|
27
|
|
28 <sect2 id="skin-overview-directories">
|
|
29 <title>Directories</title>
|
|
30 <para>
|
|
31 The directories searched for skins are (in order):
|
|
32 <orderedlist>
|
|
33 <listitem><para>
|
|
34 <filename class="directory">$(DATADIR)/Skin/</filename>
|
|
35 </para></listitem>
|
|
36 <listitem><para>
|
|
37 <filename class="directory">$(PREFIX)/share/mplayer/Skin/</filename>
|
|
38 </para></listitem>
|
|
39 <listitem><para>
|
|
40 <filename class="directory">~/.mplayer/Skin/</filename>
|
|
41 </para></listitem>
|
|
42 </orderedlist>
|
|
43 </para>
|
|
44
|
|
45 <para>
|
|
46 Note that the first path may vary according to the way MPlayer was configured
|
|
47 (see the <option>--prefix</option> and <option>--datadir</option> arguments of
|
|
48 the <command>configure</command> script).
|
|
49 </para>
|
|
50
|
|
51 <para>
|
|
52 Every skin is installed into its own directory under one of the directories
|
|
53 listed above, for example:
|
|
54 <screen>$(PREFIX)/share/mplayer/Skin/default/</screen>
|
|
55 </para>
|
|
56 </sect2>
|
|
57
|
|
58 <sect2 id="skin-overview-formats">
|
|
59 <title>Image formats</title>
|
|
60 <para>Images must be truecolor (24 or 32 bpp) PNGs.</para>
|
|
61 <para>
|
|
62 In the main window and in the playbar (see below) you can use images with
|
|
63 `transparency': Regions filled with the color #FF00FF (magenta) are fully
|
|
64 transparent when viewed by MPlayer. This means that you can even have shaped
|
|
65 windows if your X server has the XShape extension.
|
|
66 </para>
|
|
67 </sect2>
|
|
68
|
|
69 <sect2 id="skin-overview-components">
|
|
70 <title>Skin components</title>
|
|
71 <para>
|
|
72 Skins are quite free-format (unlike the fixed-format skins of Winamp/XMMS,
|
|
73 for example), so it is up to you to create something great.
|
|
74 </para>
|
|
75
|
|
76 <para>
|
|
77 Currently there are three windows to be decorated: the
|
|
78 <link linkend="skin-file-main">main window</link>, the
|
|
79 <link linkend="skin-file-subwindow">subwindow</link>, the
|
|
80 <link linkend="skin-file-main">playbar</link>, and the
|
|
81 <link linkend="skin-file-menu">skin menu</link> (which can be activated
|
|
82 by a right click).
|
|
83
|
|
84 <itemizedlist>
|
|
85 <listitem><para>
|
|
86 The <emphasis role="bold">main window</emphasis> and/or the
|
|
87 <emphasis role="bold">playbar</emphasis> is where you can control MPlayer.
|
|
88 The background of the window is an image. Various items can (and must) be placed
|
|
89 in the window: <emphasis>buttons</emphasis>, <emphasis>potmeters</emphasis>
|
|
90 (sliders) and <emphasis>labels</emphasis>. For every item, you must specify its
|
|
91 position and size.
|
|
92 </para><para>
|
|
93 A <emphasis role="bold">button</emphasis> has three states (pressed, released,
|
|
94 disabled), thus its image must be divided into three parts vertically. See the
|
|
95 <link linkend="skin-button">button</link> item for details.
|
|
96 </para><para>
|
|
97 A <emphasis role="bold">potmeter</emphasis> (mainly used for the seek bar and
|
|
98 volume/balance control) can have any number of phases by dividing its image
|
|
99 into different parts below each other. See
|
|
100 <link linkend="skin-hpotmeter">hpotmeter</link> and
|
|
101 <link linkend="skin-potmeter">potmeter</link> for details.
|
|
102 </para><para>
|
|
103 <emphasis role="bold">Labels</emphasis> are a bit special: The characters
|
|
104 needed to draw them are taken from an image file, and the characters in the
|
|
105 image are described by a <link linkend="skin-fonts">font description file</link>.
|
|
106 The latter is a plain text file which specifies the x,y position and size of
|
|
107 each character in the image (the image file and its font description file
|
|
108 form a font <emphasis>together</emphasis>). See <link linkend="skin-dlabel">dlabel</link>
|
|
109 and <link linkend="skin-slabel">slabel</link> for details.
|
|
110 </para>
|
|
111 <note><para>All images can have full transparency as described in the section about
|
|
112 <link linkend="skin-overview-formats">image formats</link>. If the X server
|
|
113 doesn't support the XShape extension, the parts marked transparent will be
|
|
114 black. If you'd like to use this feature, the width of the main window's
|
|
115 background image must be dividable by 8.
|
|
116 </para></note>
|
|
117 </listitem>
|
|
118
|
|
119 <listitem><para>
|
|
120 The <emphasis role="bold">subwindow</emphasis> is where the movie appears. It
|
|
121 can display a specified image if there is no movie loaded (it is quite boring
|
|
122 to have an empty window :-)) <emphasis role="bold">Note:</emphasis> transparency
|
|
123 is <emphasis role="bold">not allowed</emphasis> here.
|
|
124 </para></listitem>
|
|
125
|
|
126 <listitem><para>
|
|
127 The <emphasis role="bold">skin menu</emphasis> is just a way to control MPlayer by
|
|
128 means of menu entries. Two images are required for the menu: one of them is
|
|
129 the base image that shows the menu in its normal state, the other one is used
|
|
130 to display the selected entries. When you pop up the menu, the first image is
|
|
131 shown. If you move the mouse over the menu entries, the currently selected
|
|
132 entry is copied from the second image over the menu entry below the mouse pointer
|
|
133 (the second image is never shown as a whole).
|
|
134 </para><para>
|
|
135 A menu entry is defined by its position and size in the image (see the
|
|
136 section about the <link linkend="skin-file-menu">skin menu</link> for details).
|
|
137 </para></listitem>
|
|
138 </itemizedlist>
|
|
139 </para>
|
|
140
|
|
141 <para>
|
|
142 There is an important thing not mentioned yet: For buttons, potmeters and
|
|
143 menu entries to work, MPlayer must know what to do if they are clicked. This
|
|
144 is done by <link linkend="skin-gui">messages</link> (events). For these items
|
|
145 you must define the messages to be generated when they are clicked.
|
|
146 </para>
|
|
147 </sect2>
|
|
148
|
|
149 <sect2 id="skin-files">
|
|
150 <title>Files</title>
|
|
151 <para>
|
|
152 You need the following files to build a skin:
|
|
153 <itemizedlist>
|
|
154 <listitem><para>
|
|
155 The configuration file named <link linkend="skin-file">skin</link> tells
|
|
156 MPlayer how to put different parts of the skin together and what to do if
|
|
157 you click somewhere in the window.
|
|
158 </para></listitem>
|
|
159 <listitem><para>
|
|
160 The background image for the main window.
|
|
161 </para></listitem>
|
|
162 <listitem><para>
|
|
163 Images for the items in the main window (including one or more font
|
|
164 description files needed to draw labels).
|
|
165 </para></listitem>
|
|
166 <listitem><para>
|
|
167 The image to be displayed in the subwindow (optional).
|
|
168 </para></listitem>
|
|
169 <listitem><para>
|
|
170 Two images for the skin menu (they are needed only if you want to create
|
|
171 a menu).
|
|
172 </para></listitem>
|
|
173 </itemizedlist>
|
|
174 With the exception of the skin configuration file, you can name the other
|
|
175 files whatever you want (but note that font description files must have
|
|
176 a <filename>.fnt</filename> extension).
|
|
177 </para>
|
|
178 </sect2>
|
|
179 </sect1>
|
|
180
|
|
181 <sect1 id="skin-file">
|
|
182 <title>The skin file</title>
|
|
183 <para>
|
|
184 As mentioned above, this is the skin configuration file. It is line oriented;
|
|
185 comment lines start with a '<literal>;</literal>' character at the beginning
|
|
186 of the line (only spaces and tabs are allowed before the '<literal>;</literal>').
|
|
187 </para>
|
|
188
|
|
189 <para>
|
|
190 The file is made up of sections. Each section describes the skin for an
|
|
191 application and has the following form:
|
|
192 <programlisting>
|
|
193 section = <replaceable>section name</replaceable>
|
|
194 .
|
|
195 .
|
|
196 .
|
|
197 end
|
|
198 </programlisting>
|
|
199 </para>
|
|
200
|
|
201 <para>
|
10111
|
202 Currently there is only one application, so you need only one section: its name is
|
|
203 <emphasis role="bold">movieplayer</emphasis>.
|
|
204 </para>
|
|
205
|
|
206 <para>
|
|
207 Within this section each window is described by a block of the following form:
|
|
208 <programlisting>
|
|
209 window = <replaceable>window name</replaceable>
|
|
210 .
|
|
211 .
|
|
212 .
|
|
213 end
|
|
214 </programlisting>
|
|
215 </para>
|
|
216
|
|
217 <para>
|
9675
|
218 where <replaceable>window name</replaceable> can be one of these strings:
|
|
219 <itemizedlist>
|
|
220 <listitem><para><emphasis role="bold">main</emphasis> - for the main window</para></listitem>
|
|
221 <listitem><para><emphasis role="bold">sub</emphasis> - for the subwindow</para></listitem>
|
|
222 <listitem><para><emphasis role="bold">menu</emphasis> - for the skin menu</para></listitem>
|
|
223 <listitem><para><emphasis role="bold">playbar</emphasis> - playbar</para></listitem>
|
|
224 </itemizedlist>
|
|
225 </para>
|
|
226
|
|
227 <para>
|
|
228 (The sub and menu blocks are optional - you do not need to create a menu or
|
|
229 decorate the subwindow.)
|
|
230 </para>
|
|
231
|
|
232 <para>
|
|
233 Within a window block, you can define each item for the window by a line in
|
|
234 this form:
|
|
235 <programlisting>item = parameter</programlisting>
|
|
236 Where <literal>item</literal> is a string that identifies the type of the GUI
|
|
237 item, <literal>parameter</literal> is a numeric or textual value (or a list of
|
|
238 values separated by commas).
|
|
239 </para>
|
|
240
|
|
241 <para>
|
|
242 Putting the above together, the whole file looks something like this:
|
|
243 <programlisting>
|
|
244 section = movieplayer
|
|
245 window = main
|
|
246 ; ... items for main window ...
|
|
247 end
|
|
248
|
|
249 window = sub
|
|
250 ; ... items for subwindow ...
|
|
251 end
|
|
252
|
|
253 window = menu
|
|
254 ; ... items for menu ...
|
|
255 end
|
|
256
|
|
257 window = playbar
|
|
258 ; ... items for playbar ...
|
|
259 end
|
|
260 end
|
|
261 </programlisting>
|
|
262 </para>
|
|
263
|
|
264 <para>
|
|
265 The name of an image file must be given without leading directories - images
|
|
266 are searched for in the <filename class="directory">Skin</filename> directory.
|
|
267 You may (but you need not) specify the extension of the file. If the file does
|
|
268 not exist, MPlayer tries to load the file
|
|
269 <filename><filename>.<ext></filename>, where <literal>png</literal>
|
|
270 and <literal>PNG</literal> are tried for <filename><ext></filename>
|
|
271 (in this order). The first matching file will be used.
|
|
272 </para>
|
|
273
|
|
274 <para>
|
|
275 Finally some words about positioning. The main window and the subwindow can
|
|
276 be placed in the different corners of the screen by giving <literal>X</literal> and
|
|
277 <literal>Y</literal> coordinates. <literal>0</literal> is top or left,
|
|
278 <literal>-1</literal> is center and <literal>-2</literal> is right or bottom, as
|
|
279 shown in this illustration:
|
|
280 </para>
|
|
281 <informalfigure>
|
|
282 <screen>
|
|
283 (0, 0)----(-1, 0)----(-2, 0)
|
|
284 | | |
|
|
285 | | |
|
|
286 (0,-1)----(-1,-1)----(-2,-1)
|
|
287 | | |
|
|
288 | | |
|
|
289 (0,-2)----(-1,-2)----(-2,-2)
|
|
290 </screen>
|
|
291 </informalfigure>
|
|
292
|
|
293 <para>
|
|
294 Here is an example to make this clear. Suppose that you have an image called
|
|
295 <filename>main.png</filename> that you use for the main window:
|
|
296 <programlisting>base = main, -1, -1</programlisting>
|
|
297 MPlayer tries to load <filename>main</filename>, <filename>main.png</filename>,
|
|
298 <filename>main.PNG</filename> files.
|
|
299 </para>
|
|
300
|
|
301
|
|
302 <sect2 id="skin-file-main">
|
|
303 <title>Main window and playbar</title>
|
|
304 <para>
|
|
305 Below is the list of entries that can be used in the
|
|
306 '<literal>window = main</literal>' . . . '<literal>end</literal>',
|
|
307 and the '<literal>window = playbar</literal>' . . . '<literal>end</literal>'
|
|
308 blocks.
|
|
309 </para>
|
|
310
|
|
311 <variablelist>
|
|
312 <varlistentry>
|
|
313 <term><literal>
|
|
314 <anchor id="skin-main-base"/>base = image, X, Y
|
|
315 </literal></term>
|
|
316 <listitem><para>
|
|
317 Lets you specify the background image to be used for the main window.
|
|
318 The window will appear at the given <literal>X,Y</literal> position on
|
|
319 the screen The window will have the size of the image.
|
|
320 </para>
|
|
321 <note><para>These coordinates do not currently work for the display window.</para></note>
|
|
322 <warning><para>Transparent regions in the image (colored #FF00FF) appear black
|
|
323 on X servers without the XShape extension. The image's width must be dividable
|
|
324 by 8.</para></warning>
|
|
325 </listitem>
|
|
326 </varlistentry>
|
|
327
|
|
328 <varlistentry>
|
|
329 <term><literal>
|
|
330 <anchor id="skin-button"/>button = image, X, Y, width, height, message
|
|
331 </literal></term>
|
|
332 <listitem><para>
|
|
333 Place a button of <literal>width</literal> * <literal>height</literal> size at
|
|
334 position <literal>X,Y</literal>. The specified <literal>message</literal> is
|
|
335 generated when the button is clicked. The image given by <literal>image</literal>
|
|
336 must have three parts below each other (according to the possible states of the
|
|
337 button), like this:
|
|
338 </para>
|
|
339 <informalfigure>
|
|
340 <screen>
|
|
341 +------------+
|
|
342 | pressed |
|
|
343 +------------+
|
|
344 | released |
|
|
345 +------------+
|
|
346 | disabled |
|
|
347 +------------+
|
|
348 </screen>
|
|
349 </informalfigure>
|
|
350 </listitem>
|
|
351 </varlistentry>
|
|
352
|
|
353 <varlistentry>
|
|
354 <term><literal>
|
|
355 <anchor id="skin-decoration"/>decoration = enable|disable
|
|
356 </literal></term>
|
|
357 <listitem><para>
|
|
358 Enable or disable window manager decoration of the main window. Default is
|
|
359 <emphasis role="bold">disable</emphasis>.
|
|
360 </para>
|
|
361 <note><para>This doesn't work for the display window, there is no need to.</para></note>
|
|
362 </listitem>
|
|
363 </varlistentry>
|
|
364
|
|
365 <varlistentry>
|
|
366 <term><literal>
|
|
367 <anchor id="skin-hpotmeter"/>hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
|
|
368 </literal></term>
|
|
369 <listitem><para>
|
|
370
|
|
371 </para></listitem>
|
|
372 </varlistentry>
|
|
373
|
|
374 <varlistentry>
|
|
375 <term><literal>
|
|
376 <anchor id="skin-vpotmeter"/>vpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
|
|
377 </literal></term>
|
|
378 <listitem><para>
|
|
379 Place a horizontal (hpotmeter) or vertical (vpotmeter) potmeter of
|
|
380 <literal>width</literal> * <literal>height</literal> size at position
|
|
381 <literal>X,Y</literal>. The image can be divided into different parts for the
|
|
382 different phases of the potmeter (for example, you can have a pot for volume
|
|
383 control that turns from green to red while its value changes from the minimum
|
|
384 to the maximum.). <literal>hpotmeter</literal> can have a button that can be
|
|
385 dragged horizontally. The parameters are:
|
|
386 </para>
|
|
387 <itemizedlist>
|
|
388 <listitem><para><literal>button</literal> - the image to be used for the
|
|
389 button (must have three parts below each other, like in case of
|
|
390 <link linkend="skin-button">button</link>)
|
|
391 </para></listitem>
|
|
392 <listitem><para><literal>bwidth</literal>,<literal>bheight</literal> - size
|
|
393 of the button
|
|
394 </para></listitem>
|
|
395 <listitem><para><literal>phases</literal> - the image to be used for the
|
|
396 different phases of the hpotmeter. A special value of <literal>NULL</literal>
|
|
397 can be used if you want no such image. The image must be divided into
|
|
398 <literal>numphasesparts</literal> vertically like this:
|
|
399 </para>
|
|
400 <informalfigure>
|
|
401 <screen>
|
|
402 +------------+
|
|
403 | phase #1 |
|
|
404 +------------+
|
|
405 | phase #2 |
|
|
406 +------------+
|
|
407 ...
|
|
408 +------------+
|
|
409 | phase #n |
|
|
410 +------------+
|
|
411 </screen>
|
|
412 </informalfigure>
|
|
413 </listitem>
|
|
414 <listitem><para><literal>numphases</literal> - number of phases stored in the
|
|
415 <literal>phases</literal> image
|
|
416 </para></listitem>
|
|
417 <listitem><para><literal>default</literal> - default value for hpotmeter
|
|
418 (in the range <literal>0</literal> to <literal>100</literal>)
|
|
419 </para></listitem>
|
|
420 <listitem><para><literal>X</literal>,<literal>Y</literal> - position for the hpotmeter
|
|
421 </para></listitem>
|
|
422 <listitem><para><literal>width</literal>,<literal>height</literal> - width and height
|
|
423 of the <literal>hpotmeter</literal>
|
|
424 </para></listitem>
|
|
425 <listitem><para><literal>message</literal> - the message to be generated when the
|
|
426 value of <literal>hpotmeter</literal> is changed
|
|
427 </para></listitem>
|
|
428 </itemizedlist>
|
|
429
|
|
430 </listitem>
|
|
431 </varlistentry>
|
|
432
|
|
433 <varlistentry>
|
|
434 <term><literal>
|
|
435 <anchor id="skin-potmeter"/>potmeter = phases, numphases, default, X, Y, width, height, message
|
|
436 </literal></term>
|
|
437 <listitem><para>
|
|
438 A <literal>hpotmeter</literal> without a button. (I guess it is meant to be
|
|
439 turned around, but it reacts to horizontal dragging only.) For the description
|
|
440 of the parameters see <link linkend="skin-hpotmeter">hpotmeter</link>.
|
|
441 <literal>phases</literal> can be <literal>NULL</literal>, but it is quite useless,
|
|
442 since you cannot see where the <literal>potmeter</literal> is set.
|
|
443 </para></listitem>
|
|
444 </varlistentry>
|
|
445
|
|
446 <varlistentry>
|
|
447 <term><literal>
|
|
448 <anchor id="skin-font"/>font = fontfile, fontid
|
|
449 </literal></term>
|
|
450 <listitem><para>
|
|
451 Defines a font. <literal>fontfile</literal> is the name of a font description file
|
|
452 with a <filename>.fnt</filename> extension (do not specify the extension here).
|
10111
|
453 <literal>fontid</literal> is used to refer to the font (see <link linkend="skin-dlabel">dlabel</link>
|
9675
|
454 and <link linkend="skin-slabel">slabel</link>). Up to 25 fonts can be defined.
|
|
455 </para></listitem>
|
|
456 </varlistentry>
|
|
457
|
|
458 <varlistentry>
|
|
459 <term><literal>
|
|
460 <anchor id="skin-slabel"/>slabel = X, Y, fontid, "text"
|
|
461 </literal></term>
|
|
462 <listitem><para>
|
|
463 Place a static label at the position <literal>X,Y</literal>. <literal>text</literal>
|
|
464 is displayed using the font identified by <literal>fontid</literal>. The text is
|
|
465 just a raw string (<literal>$x</literal> variables do not work) that must be enclosed
|
|
466 between double quotes (but the " character cannot be part of the text). The
|
|
467 label is displayed using the font identified by <literal>fontid</literal>.
|
|
468 </para></listitem>
|
|
469 </varlistentry>
|
|
470
|
|
471 <varlistentry>
|
|
472 <term><literal>
|
|
473 <anchor id="skin-dlabel"/>dlabel = X, Y, length, align, fontid, "text"
|
|
474 </literal></term>
|
|
475 <listitem>
|
|
476 <para>
|
|
477 Place a dynamic label at the position <literal>X,Y</literal>. The label is called
|
|
478 dynamic because its text is refreshed periodically. The maximum length of the
|
|
479 label is given by <literal>length</literal> (its height is the height of a
|
|
480 character). If the text to be displayed is wider than that, it will be scrolled,
|
|
481 otherwise it is aligned within the specified space by the value of the
|
|
482 <literal>align</literal> parameter: <literal>0</literal> is for right,
|
|
483 <literal>1</literal> is for center, <literal>2</literal> is for left.
|
|
484 </para>
|
|
485 <para>
|
|
486 The text to be displayed is given by <literal>text</literal>: It must be written
|
|
487 between double quotes (but the quot; character cannot be part of the text). The
|
|
488 label is displayed using the font identified by <literal>fontid</literal>. You
|
|
489 can use the following variables in the text:
|
|
490 </para>
|
|
491
|
|
492 <informaltable>
|
|
493 <tgroup cols="2">
|
|
494 <thead>
|
|
495 <row><entry>Variable</entry><entry>Meaning</entry></row>
|
|
496 </thead>
|
|
497 <tbody>
|
|
498 <row>
|
|
499 <entry>$1</entry>
|
|
500 <entry>play time in <emphasis>hh:mm:ss</emphasis> format</entry>
|
|
501 </row>
|
|
502 <row>
|
|
503 <entry>$2</entry>
|
|
504 <entry>play time in <emphasis>mmmm:ss</emphasis> format</entry>
|
|
505 </row>
|
|
506 <row>
|
|
507 <entry>$3</entry>
|
|
508 <entry>play time in <emphasis>hh</emphasis> format (hours)</entry>
|
|
509 </row>
|
|
510 <row>
|
|
511 <entry>$4</entry>
|
|
512 <entry>play time in <emphasis>mm</emphasis> format (minutes)</entry>
|
|
513 </row>
|
|
514 <row>
|
|
515 <entry>$5</entry>
|
|
516 <entry>play time in <emphasis>ss</emphasis> format (seconds)</entry>
|
|
517 </row>
|
|
518 <row>
|
|
519 <entry>$6</entry>
|
|
520 <entry>movie length in <emphasis>hh:mm:ss</emphasis> format</entry>
|
|
521 </row>
|
|
522 <row>
|
|
523 <entry>$7</entry>
|
|
524 <entry>movie length in <emphasis>mmmm:ss</emphasis> format</entry>
|
|
525 </row>
|
|
526 <row>
|
|
527 <entry>$8</entry>
|
|
528 <entry>play time in <emphasis>h:mm:ss</emphasis> format</entry>
|
|
529 </row>
|
|
530 <row>
|
|
531 <entry>$v</entry>
|
|
532 <entry>volume in <emphasis>xxx.xx</emphasis>% format</entry>
|
|
533 </row>
|
|
534 <row>
|
|
535 <entry>$V</entry>
|
|
536 <entry>volume in <emphasis>xxx.xx</emphasis> format</entry>
|
|
537 </row>
|
|
538 <row>
|
|
539 <entry>$b</entry>
|
|
540 <entry>balance in <emphasis>xxx.xx</emphasis>% format</entry>
|
|
541 </row>
|
|
542 <row>
|
|
543 <entry>$B</entry>
|
|
544 <entry>balance in <emphasis>xxx.xx</emphasis> format</entry>
|
|
545 </row>
|
|
546 <row>
|
|
547 <entry>$$</entry>
|
|
548 <entry>the $ character</entry>
|
|
549 </row>
|
|
550 <row>
|
|
551 <entry>$a</entry>
|
|
552 <entry>a character according to the audio type (none: <literal>n</literal>,
|
|
553 mono: <literal>m</literal>, stereo: <literal>t</literal>)</entry>
|
|
554 </row>
|
|
555 <row>
|
|
556 <entry>$t</entry>
|
|
557 <entry>track number (in playlist)</entry>
|
|
558 </row>
|
|
559 <row>
|
|
560 <entry>$o</entry>
|
|
561 <entry>filename</entry>
|
|
562 </row>
|
|
563 <row>
|
|
564 <entry>$f</entry>
|
|
565 <entry>filename in lower case</entry>
|
|
566 </row>
|
|
567 <row>
|
|
568 <entry>$F</entry>
|
|
569 <entry>filename in upper case</entry>
|
|
570 </row>
|
|
571 <row>
|
|
572 <entry>$T</entry>
|
|
573 <entry>a character according to the stream type (file: <literal>f</literal>,
|
|
574 Video CD: <literal>v</literal>, DVD: <literal>d</literal>, URL: <literal>u</literal>)</entry>
|
|
575 </row>
|
|
576 <row>
|
|
577 <entry>$p</entry>
|
|
578 <entry>the <keycap>p</keycap> character (if a movie is playing and the font has
|
|
579 the <keycap>p</keycap> character)</entry>
|
|
580 </row>
|
|
581 <row>
|
|
582 <entry>$s</entry>
|
|
583 <entry>the <keycap>s</keycap> character (if the movie is stopped and the font has
|
|
584 the <keycap>s</keycap> character)</entry>
|
|
585 </row>
|
|
586 <row>
|
|
587 <entry>$e</entry>
|
|
588 <entry>the <keycap>e</keycap> character (if playback is paused and the font has
|
|
589 the <keycap>e</keycap> character)</entry>
|
|
590 </row>
|
|
591 <row>
|
|
592 <entry>$x</entry>
|
|
593 <entry>movie width</entry>
|
|
594 </row>
|
|
595 <row>
|
|
596 <entry>$y</entry>
|
|
597 <entry>movie height</entry>
|
|
598 </row>
|
|
599 <row>
|
|
600 <entry>$C</entry>
|
|
601 <entry>name of the codec used</entry>
|
|
602 </row>
|
|
603
|
|
604 </tbody>
|
|
605 </tgroup>
|
|
606 </informaltable>
|
|
607 </listitem>
|
|
608
|
|
609 </varlistentry>
|
|
610 </variablelist>
|
|
611
|
|
612 <note><para>
|
|
613 The <literal>$a, $T, $p, $s</literal> and <literal>$e</literal>
|
|
614 variables all return characters that should be displayed as special symbols (for
|
|
615 example, <keycap>e</keycap> is for the pause symbol that usually looks something
|
|
616 like ||). You should have a font for normal characters and a different font for
|
|
617 symbols. See the section about <link linkend="skin-fonts-symbols">symbols</link>
|
|
618 for more information.
|
|
619 </para></note>
|
|
620 </sect2>
|
|
621
|
|
622 <sect2 id="skin-file-subwindow">
|
|
623 <title>Subwindow</title>
|
|
624 <para>
|
|
625 The following entries can be used in the
|
|
626 '<literal>window = sub</literal>' . . . '<literal>end</literal>' block.
|
|
627 </para>
|
|
628
|
|
629 <variablelist>
|
|
630 <varlistentry>
|
|
631 <term><literal>
|
|
632 <anchor id="skin-sub-base"/>base = image, X, Y, width, height
|
|
633 </literal></term>
|
|
634 <listitem><para>
|
|
635 The image to be displayed in the window. The window will appear at the given
|
|
636 <literal>X,Y</literal> position on the screen (<literal>0,0</literal> is the
|
|
637 top left corner). You can specify <literal>-1</literal> for center and <literal>-2</literal>
|
|
638 for right (<literal>X</literal>) and bottom (<literal>Y</literal>). The window
|
|
639 will be as large as the image. <literal>width</literal> and <literal>height</literal>
|
|
640 denote the size of the window; they are optional (if they are missing, the
|
|
641 window is the same size as the image).
|
|
642 </para></listitem>
|
|
643 </varlistentry>
|
|
644
|
|
645 <varlistentry>
|
|
646 <term><literal>
|
|
647 <anchor id="skin-background"/>background = R, G, B
|
|
648 </literal></term>
|
|
649 <listitem><para>
|
|
650 Lets you set the background color. It is useful if the image is smaller than
|
|
651 the window. <literal>R</literal>, <literal>G</literal> and <literal>B</literal>
|
|
652 specifies the red, green and blue component of the color (each of them is a
|
|
653 decimal number from 0 to 255).
|
|
654 </para></listitem>
|
|
655 </varlistentry>
|
|
656 </variablelist>
|
|
657 </sect2>
|
|
658
|
|
659 <sect2 id="skin-file-menu">
|
|
660 <title>Skin menu</title>
|
|
661 <para>
|
|
662 As mentioned earlier, the menu is displayed using two images. Normal menu
|
|
663 entries are taken from the image specified by the <literal>base</literal> item,
|
|
664 while the currently selected entry is taken from the image specified by the
|
|
665 <literal>selected</literal> item. You must define the position and size of each
|
|
666 menu entry through the menu item.
|
|
667 </para>
|
|
668
|
|
669 <para>
|
|
670 The following entries can be used in the
|
|
671 '<literal>window = menu</literal>'. . .'<literal>end</literal>' block.
|
|
672 </para>
|
|
673
|
|
674 <variablelist>
|
|
675 <varlistentry>
|
|
676 <term><literal>
|
|
677 <anchor id="skin-menu-base"/>base = image
|
|
678 </literal></term>
|
|
679 <listitem><para>
|
|
680 The image for normal menu entries.
|
|
681 </para></listitem>
|
|
682 </varlistentry>
|
|
683
|
|
684 <varlistentry>
|
|
685 <term><literal>
|
|
686 <anchor id="skin-selected"/>selected = image
|
|
687 </literal></term>
|
|
688 <listitem><para>
|
|
689 The image showing the menu with all entries selected.
|
|
690 </para></listitem>
|
|
691 </varlistentry>
|
|
692
|
|
693 <varlistentry>
|
|
694 <term><literal>
|
|
695 <anchor id="skin-menu"/>menu = X, Y, width, height, message
|
|
696 </literal></term>
|
|
697 <listitem><para>
|
|
698 Defines the <literal>X,Y</literal> position and the size of a menu entry in
|
|
699 the image. <literal>message</literal> is the message to be generated when the
|
|
700 mouse button is released over the entry.
|
|
701 </para></listitem>
|
|
702 </varlistentry>
|
|
703 </variablelist>
|
|
704 </sect2>
|
|
705 </sect1>
|
|
706
|
|
707 <sect1 id="skin-fonts">
|
|
708 <title>Fonts</title>
|
|
709 <para>
|
|
710 As mentioned in the section about the parts of a skin, a font is defined by an
|
|
711 image and a description file. You can place the characters anywhere in the image,
|
|
712 but make sure that their position and size is given in the description file
|
|
713 exactly.
|
|
714 </para>
|
|
715
|
|
716 <para>
|
|
717 The font description file (with <filename>.fnt</filename> extension) can have
|
|
718 comment lines starting with '<literal>;</literal>'. The file must have a line
|
|
719 in the form
|
|
720 <anchor id="skin-font-image"/>
|
|
721 <programlisting>image = <replaceable>image</replaceable></programlisting>
|
|
722 Where <literal><replaceable>image</replaceable></literal> is the name of the
|
|
723 image file to be used for the font (you do not have to specify the extension).
|
|
724 <anchor id="skin-font-char"/>
|
|
725 <programlisting>"char" = X, Y, width, height</programlisting>
|
|
726 Here <literal>X</literal> and <literal>Y</literal> specify the position of the
|
|
727 <literal>char</literal> character in the image (<literal>0,0</literal> is the
|
|
728 upper left corner). <literal>width</literal> and <literal>height</literal> are
|
|
729 the dimensions of the character in pixels.
|
|
730 </para>
|
|
731
|
|
732 <para>
|
|
733 This example defines the A, B, C characters using <filename>font.png</filename>.
|
|
734 <programlisting>
|
|
735 ; Can be "font" instead of "font.png".
|
|
736 image = font.png
|
|
737
|
|
738 ; Three characters are enough for demonstration purposes :-)
|
|
739 "A" = 0,0, 7,13
|
|
740 "B" = 7,0, 7,13
|
|
741 "C" = 14,0, 7,13
|
|
742 </programlisting>
|
|
743 </para>
|
|
744
|
|
745 <sect2 id="skin-fonts-symbols">
|
|
746 <title>Symbols</title>
|
|
747 <para>
|
|
748 Some characters have special meanings when returned by some of the variables
|
|
749 used in <link linkend="skin-dlabel">dlabel</link>. These characters are meant
|
|
750 to be shown as symbols so that things like a nice DVD logo can be displayed
|
|
751 instead of the character '<literal>d</literal>' for a DVD stream.
|
|
752 </para>
|
|
753 <para>
|
|
754 The following table lists all the characters that can be used to display
|
|
755 symbols (and thus require a different font).
|
|
756 </para>
|
|
757
|
|
758 <informaltable>
|
|
759 <tgroup cols="2">
|
|
760 <thead>
|
|
761 <row><entry>Character</entry><entry>Symbol</entry></row>
|
|
762 </thead>
|
|
763 <tbody>
|
|
764 <row><entry><keycap>p</keycap></entry><entry>play</entry></row>
|
|
765 <row><entry><keycap>s</keycap></entry><entry>stop</entry></row>
|
|
766 <row><entry><keycap>e</keycap></entry><entry>pause</entry></row>
|
|
767 <row><entry><keycap>n</keycap></entry><entry>no sound</entry></row>
|
|
768 <row><entry><keycap>m</keycap></entry><entry>mono sound</entry></row>
|
|
769 <row><entry><keycap>t</keycap></entry><entry>stereo sound</entry></row>
|
|
770 <row><entry><keycap>f</keycap></entry><entry>stream is a file</entry></row>
|
|
771 <row><entry><keycap>v</keycap></entry><entry>stream is a Video CD</entry></row>
|
|
772 <row><entry><keycap>d</keycap></entry><entry>stream is a DVD</entry></row>
|
|
773 <row><entry><keycap>u</keycap></entry><entry>stream is a URL</entry></row>
|
|
774 </tbody>
|
|
775 </tgroup>
|
|
776 </informaltable>
|
|
777 </sect2>
|
|
778 </sect1>
|
|
779
|
|
780 <sect1 id="skin-gui">
|
|
781 <title>GUI messages</title>
|
|
782 <para>
|
|
783 These are the messages that can be generated by buttons, potmeters and
|
|
784 menu entries.
|
|
785 </para>
|
|
786 <note><para>
|
|
787 Some of the messages might not work as expected (or not work at all).
|
|
788 As you know, the GUI is under development.
|
|
789 </para></note>
|
|
790
|
|
791 <variablelist>
|
|
792 <title>Playback control:</title>
|
|
793 <varlistentry>
|
|
794 <term><emphasis role="bold">evNext</emphasis></term>
|
|
795 <listitem><para>
|
|
796 Jump to next track in the playlist.
|
|
797 </para></listitem>
|
|
798 </varlistentry>
|
|
799
|
|
800 <varlistentry>
|
|
801 <term><emphasis role="bold">evPause</emphasis></term>
|
|
802 <listitem><para>
|
|
803 Forms a switch together with <literal>evPlaySwitchToPause</literal>. They can
|
|
804 be used to have a common play/pause button. Both messages should be assigned to
|
|
805 buttons displayed at the very same position in the window. This message pauses
|
|
806 playing and the image for the <literal>evPlaySwitchToPause</literal> button is
|
|
807 displayed (to indicate that the button can be pressed to continue playing).
|
|
808 </para></listitem>
|
|
809 </varlistentry>
|
|
810
|
|
811 <varlistentry>
|
|
812 <term><emphasis role="bold">evPlay</emphasis></term>
|
|
813 <listitem><para>
|
|
814 Start playing.
|
|
815 </para></listitem>
|
|
816 </varlistentry>
|
|
817
|
|
818 <varlistentry>
|
|
819 <term><emphasis role="bold">evPlaySwitchToPause</emphasis></term>
|
|
820 <listitem><para>
|
|
821 The opposite of <literal>evPauseSwitchToPlay</literal>. This message starts
|
|
822 playing and the image for the <literal>evPauseSwitchToPlay</literal> button
|
|
823 is displayed (to indicate that the button can be pressed to pause playing).
|
|
824 </para></listitem>
|
|
825 </varlistentry>
|
|
826
|
|
827 <varlistentry>
|
|
828 <term><emphasis role="bold">evPrev</emphasis></term>
|
|
829 <listitem><para>
|
|
830 Jump to previous track in the playlist.
|
|
831 </para></listitem>
|
|
832 </varlistentry>
|
|
833
|
|
834 <varlistentry>
|
|
835 <term><emphasis role="bold">evStop</emphasis></term>
|
|
836 <listitem><para>
|
|
837 Stop playing.
|
|
838 </para></listitem>
|
|
839 </varlistentry>
|
|
840 </variablelist>
|
|
841
|
|
842 <variablelist>
|
|
843 <title>Seeking:</title>
|
|
844 <varlistentry>
|
|
845 <term><emphasis role="bold">evBackward10sec</emphasis></term>
|
|
846 <listitem><para>
|
|
847 Seek backward 10 seconds.
|
|
848 </para></listitem>
|
|
849 </varlistentry>
|
|
850
|
|
851 <varlistentry>
|
|
852 <term><emphasis role="bold">evBackward1min</emphasis></term>
|
|
853 <listitem><para>
|
|
854 Seek backward 1 minute.
|
|
855 </para></listitem>
|
|
856 </varlistentry>
|
|
857
|
|
858 <varlistentry>
|
|
859 <term><emphasis role="bold">evBackward10min</emphasis></term>
|
|
860 <listitem><para>
|
|
861 Seek backward 10 minutes.
|
|
862 </para></listitem>
|
|
863 </varlistentry>
|
|
864
|
|
865 <varlistentry>
|
|
866 <term><emphasis role="bold">evForward10sec</emphasis></term>
|
|
867 <listitem><para>
|
|
868 Seek forward 10 seconds.
|
|
869 </para></listitem>
|
|
870 </varlistentry>
|
|
871
|
|
872 <varlistentry>
|
|
873 <term><emphasis role="bold">evForward1min</emphasis></term>
|
|
874 <listitem><para>
|
|
875 Seek forward 1 minute.
|
|
876 </para></listitem>
|
|
877 </varlistentry>
|
|
878
|
|
879 <varlistentry>
|
|
880 <term><emphasis role="bold">evForward10min</emphasis></term>
|
|
881 <listitem><para>
|
|
882 Seek forward 10 minutes.
|
|
883 </para></listitem>
|
|
884 </varlistentry>
|
|
885
|
|
886 <varlistentry>
|
|
887 <term><emphasis role="bold">evSetMoviePosition</emphasis></term>
|
|
888 <listitem><para>
|
|
889 Seek to position (can be used by a potmeter; the
|
|
890 relative value (0-100%) of the potmeter is used).
|
|
891 </para></listitem>
|
|
892 </varlistentry>
|
|
893 </variablelist>
|
|
894
|
|
895 <variablelist>
|
|
896 <title>Video control:</title>
|
|
897 <varlistentry>
|
|
898 <term><emphasis role="bold">evDoubleSize</emphasis></term>
|
|
899 <listitem><para>
|
|
900 Set the movie window to double size.
|
|
901 </para></listitem>
|
|
902 </varlistentry>
|
|
903 <varlistentry>
|
|
904 <term><emphasis role="bold">evFullScreen</emphasis></term>
|
|
905 <listitem><para>
|
|
906 Switch fullscreen mode on/off.
|
|
907 </para></listitem>
|
|
908 </varlistentry>
|
|
909 <varlistentry>
|
|
910 <term><emphasis role="bold">evNormalSize</emphasis></term>
|
|
911 <listitem><para>
|
|
912 Set the movie window to its normal size.
|
|
913 </para></listitem>
|
|
914 </varlistentry>
|
|
915 </variablelist>
|
|
916
|
|
917 <variablelist>
|
|
918 <title>Audio control:</title>
|
|
919 <varlistentry>
|
|
920 <term><emphasis role="bold">evDecAudioBufDelay</emphasis></term>
|
|
921 <listitem><para>
|
|
922 Decrease audio buffer delay.
|
|
923 </para></listitem>
|
|
924 </varlistentry>
|
|
925
|
|
926 <varlistentry>
|
|
927 <term><emphasis role="bold">evDecBalance</emphasis></term>
|
|
928 <listitem><para>
|
|
929 Decrease balance.
|
|
930 </para></listitem>
|
|
931 </varlistentry>
|
|
932
|
|
933 <varlistentry>
|
|
934 <term><emphasis role="bold">evDecVolume</emphasis></term>
|
|
935 <listitem><para>
|
|
936 Decrease volume.
|
|
937 </para></listitem>
|
|
938 </varlistentry>
|
|
939
|
|
940 <varlistentry>
|
|
941 <term><emphasis role="bold">evIncAudioBufDelay</emphasis></term>
|
|
942 <listitem><para>
|
|
943 Increase audio buffer delay.
|
|
944 </para></listitem>
|
|
945 </varlistentry>
|
|
946
|
|
947 <varlistentry>
|
|
948 <term><emphasis role="bold">evIncBalance</emphasis></term>
|
|
949 <listitem><para>
|
|
950 Increase balance.
|
|
951 </para></listitem>
|
|
952 </varlistentry>
|
|
953
|
|
954 <varlistentry>
|
|
955 <term><emphasis role="bold">evIncVolume</emphasis></term>
|
|
956 <listitem><para>
|
|
957 Increase volume.
|
|
958 </para></listitem>
|
|
959 </varlistentry>
|
|
960
|
|
961 <varlistentry>
|
|
962 <term><emphasis role="bold">evMute</emphasis></term>
|
|
963 <listitem><para>
|
|
964 Mute/unmute the sound.
|
|
965 </para></listitem>
|
|
966 </varlistentry>
|
|
967
|
|
968 <varlistentry>
|
|
969 <term><emphasis role="bold">evSetBalance</emphasis></term>
|
|
970 <listitem><para>
|
|
971 Set balance (can be used by a potmeter; the
|
|
972 relative value (0-100%) of the potmeter is used).
|
|
973 </para></listitem>
|
|
974 </varlistentry>
|
|
975
|
|
976 <varlistentry>
|
|
977 <term><emphasis role="bold">evSetVolume</emphasis></term>
|
|
978 <listitem><para>
|
|
979 Set volume (can be used by a potmeter; the relative
|
|
980 value (0-100%) of the potmeter is used).
|
|
981 </para></listitem>
|
|
982 </varlistentry>
|
|
983 </variablelist>
|
|
984
|
|
985 <variablelist>
|
|
986 <title>Miscellaneous:</title>
|
|
987 <varlistentry>
|
|
988 <term><emphasis role="bold">evAbout</emphasis></term>
|
|
989 <listitem><para>
|
|
990 Open the about window.
|
|
991 </para></listitem>
|
|
992 </varlistentry>
|
|
993
|
|
994 <varlistentry>
|
|
995 <term><emphasis role="bold">evDropSubtitle</emphasis></term>
|
|
996 <listitem><para>
|
|
997 Disables the currently used subtitle.
|
|
998 </para></listitem>
|
|
999 </varlistentry>
|
|
1000
|
|
1001 <varlistentry>
|
|
1002 <term><emphasis role="bold">evEqualizer</emphasis></term>
|
|
1003 <listitem><para>
|
|
1004 Turn the equalizer on/off.
|
|
1005 </para></listitem>
|
|
1006 </varlistentry>
|
|
1007
|
|
1008 <varlistentry>
|
|
1009 <term><emphasis role="bold">evExit</emphasis></term>
|
|
1010 <listitem><para>
|
|
1011 Quit the program.
|
|
1012 </para></listitem>
|
|
1013 </varlistentry>
|
|
1014
|
|
1015 <varlistentry>
|
|
1016 <term><emphasis role="bold">evIconify</emphasis></term>
|
|
1017 <listitem><para>
|
|
1018 Iconify the window.
|
|
1019 </para></listitem>
|
|
1020 </varlistentry>
|
|
1021
|
|
1022 <varlistentry>
|
|
1023 <term><emphasis role="bold">evLoad</emphasis></term>
|
|
1024 <listitem><para>
|
|
1025 Load a file (by opening a file browser window, where you can choose a file).
|
|
1026 </para></listitem>
|
|
1027 </varlistentry>
|
|
1028
|
|
1029 <varlistentry>
|
|
1030 <term><emphasis role="bold">evLoadPlay</emphasis></term>
|
|
1031 <listitem><para>
|
|
1032 Does the same as <literal>evLoad</literal>, but it automatically starts playing after
|
|
1033 the file is loaded.
|
|
1034 </para></listitem>
|
|
1035 </varlistentry>
|
|
1036
|
|
1037 <varlistentry>
|
|
1038 <term><emphasis role="bold">evLoadSubtitle</emphasis></term>
|
|
1039 <listitem><para>
|
|
1040 Loads a subtitle file (with the fileselector)
|
|
1041 </para></listitem>
|
|
1042 </varlistentry>
|
|
1043
|
|
1044 <varlistentry>
|
|
1045 <term><emphasis role="bold">evLoadAudioFile</emphasis></term>
|
|
1046 <listitem><para>
|
|
1047 Loads an audio file (with the fileselector)
|
|
1048 </para></listitem>
|
|
1049 </varlistentry>
|
|
1050
|
|
1051 <varlistentry>
|
|
1052 <term><emphasis role="bold">evNone</emphasis></term>
|
|
1053 <listitem><para>
|
|
1054 Empty message, it has no effect (except maybe in CVS versions :-)).
|
|
1055 </para></listitem>
|
|
1056 </varlistentry>
|
|
1057
|
|
1058 <varlistentry>
|
|
1059 <term><emphasis role="bold">evPlayList</emphasis></term>
|
|
1060 <listitem><para>
|
|
1061 Open/close the playlist window.
|
|
1062 </para></listitem>
|
|
1063 </varlistentry>
|
|
1064
|
|
1065 <varlistentry>
|
|
1066 <term><emphasis role="bold">evPlayDVD</emphasis></term>
|
|
1067 <listitem><para>
|
|
1068 Tries to open the disc in the given DVD-ROM drive.
|
|
1069 </para></listitem>
|
|
1070 </varlistentry>
|
|
1071
|
|
1072 <varlistentry>
|
|
1073 <term><emphasis role="bold">evPlayVCD</emphasis></term>
|
|
1074 <listitem><para>
|
|
1075 Tries to open the disc in the given CD-ROM drive.
|
|
1076 </para></listitem>
|
|
1077 </varlistentry>
|
|
1078
|
|
1079 <varlistentry>
|
|
1080 <term><emphasis role="bold">evPreferences</emphasis></term>
|
|
1081 <listitem><para>
|
|
1082 Open the preferences window.
|
|
1083 </para></listitem>
|
|
1084 </varlistentry>
|
|
1085
|
|
1086 <varlistentry>
|
|
1087 <term><emphasis role="bold">evSetAspect</emphasis></term>
|
|
1088 <listitem><para>
|
|
1089 Sets displayed image aspect.
|
|
1090 </para></listitem>
|
|
1091 </varlistentry>
|
|
1092
|
|
1093 <varlistentry>
|
|
1094 <term><emphasis role="bold">evSetURL</emphasis></term>
|
|
1095 <listitem><para>
|
|
1096 Displays the URL dialog window.
|
|
1097 </para></listitem>
|
|
1098 </varlistentry>
|
|
1099
|
|
1100 <varlistentry>
|
|
1101 <term><emphasis role="bold">evSkinBrowser</emphasis></term>
|
|
1102 <listitem><para>
|
|
1103 Open the skin browser window.
|
|
1104 </para></listitem>
|
|
1105 </varlistentry>
|
|
1106 </variablelist>
|
|
1107
|
|
1108 </sect1>
|
|
1109
|
|
1110 </appendix>
|