1
2
3<sect> Options
4<p>
5
6Most aspects of the operation can be customized by changing options.
7This can be enforced by TTSCP commands, in configuration files and
8on the command line.  Basically, an option is an option name/option value
9pair. There are a few possible option types: number, string, yes/no,
10character, and a few enumerated types.
11
12Almost all individual options are documented in <ref id="indivopts"
13name="this document">.  If you strongly suspect this section of
14documentation to be out-of date, the reliable list of all built-in
15long options can be found in <tt>src/options.lst</tt>.  (See approximately
16line 320 and below. Every line represents at most one option for every
17option class as explained below. The option name is quoted; its
18semantics is usually explained following the option.)  You can also
19list the option names and types using <tt>eposd -H</tt>.
20
21<sect1> Option Classes
22<p>
23
24There are four classes of options: static options, global options,
25language options and voice options. For instance, switching a voice
26in fact means switching to another set of voice options, while the language
27options, global options and static options stay the same.
28
29Every voice is language specific (implies a specific language).
30That's why switching the language automatically switches the voice
31to the voice defined as default or the last active one for this particular language.
32(It is of course possible to use the same configuration file to setup
33a similarly sounding voice for every language if desired.)
34It is also important to distinguish between a voice and an inventory.
35An <em/inventory/ is a set of speaker-dependent files used
36as a base for <em/voice/, that is, a mode of speech.  Multiple
37different voices may use the same inventory, and may even sound
38quite different depending on various configuration options.
39A user of moderate expertise will be able to modify the voice dependent
40configuration files, but not the inventory files.  Also, the inventories
41may often be distributed externally to Epos, while sample voices
42based on them may either be included with Epos, or with the
43segment inventory, or their creation may be completely left
44to the user.
45
46A set of voice options should completely describe a voice.
47A set of language options should completely describe a language,
48except for voice-specific behavior. A set of global options
49should cover language independent aspects of operation.
50It should be understood that a set of options may employ various
51references to other information, especially filenames (of language
52dependent transcription rules, voice dependent segment inventories
53etc.)
54
55Some language and/or voice specific options may have suitable defaults
56for all but specific languages/voices. That's why there is a corresponding language
57option for every voice option to default to if unspecified for a given
58voice. Likewise, there is a global option for every language option
59to default to. Therefore, adding a new language or voice options
60doesn't necessarily imply adding them to each language or voice
61configuration file, if a reasonable default can be suggested.
62
63<label id="static">
64The difference between global and static options is subtler
65and not that important for most users.  All voice specific,
66language specific and also global options are implemented
67as user specific, that is, each TTSCP control connection may assign
68a different value to them at the same time.  For some options
69however, which are of even more global impact, this may make
70little sense.  These are termed static.  Assigning a value
71to a static option causes the value to change even for
72other concurrent users.
73
74Whenever an option name is given, it is first understood as a voice option
75(of the current voice); if there is no such voice option, the name
76is treated as a language option, then as a global/static option. To override
77this order, you can prefix an option with "S:", "C:", "L:" or "V:". This will
78restrict the search to static, global, language or voice options, respectively.
79(This is automatically done with configuration files, because every
80configuration file describes either a language or a voice, or it is unrelated
81to the current language and voice altogether.)
82
83<sect1> Option Types
84<p>
85
86Each option has an associated type, which is indicated with each
87option in the documentation.  Mostly these are traditional types
88like booleans, strings, and non-negative numbers.  Others are
89limited to a fixed choice of values (e.g. "mono" or "stereo"),
90yet others are limited to a choice of values which depends on
91other configuration (e.g. on the levels of descriptions, on the
92available encoding mapping files, or on the current list of
93language configurations).  With all these options it is impossible
94to set the option to a syntactically impossible value, although
95it is easy to set the option to a value which makes little sense.
96
97<sect2> Autoconcatenating Options <label id="autoconcatenating">
98<p>
99
100Several string-typed options (especially the language, voice and soft option
101lists) have special behavior if they appear multiple times
102within the configuration (not limited to the configurations files!).
103In contrast with almost all options which take the last value
104offered, these special options concatenate all the supplied values and
105separate them by colons.  This makes sense, as all these option
106values are syntactically colon separated lists of strings.
107
108If you need to set an autoconcatenating option to a different value,
109you need first to reset it first by supplying an empty string to it.
110This does set it to the empty string as opposed to concatenating
111a colon and an empty string to the previous value.
112
113
114<sect1> Configuration Files <label id="cfg-files">
115<p>
116
117Whenever the program starts up, it reads a number of configuration
118files, setting up the initial (default) values of the options.
119These are located under <tt>/usr/local/share/epos</tt> (unless overidden
120at configure/compile time or
121with the <tt>--base&lowbar;dir</tt> option on the command line). By convention,
122configuration file names have the ".ini" suffix.
123
124(On a Windows NT-like operating system, you can use the
125<tt>HKEY&lowbar;LOCAL&lowbar;MACHINE&bsol;SOFTWARE&bsol;Epos&bsol;Setup</tt>
126registry key to set the value of <tt>Path</tt> to a path leading
127to the configuration files.  This value can still be overridden
128by the command line.)
129
130Unless overridden, three files in <tt>/usr/local/share/epos/cfg</tt> will be processed
131to setup the global configuration: <tt>fixed.ini</tt>, <tt>epos.ini</tt> and
132either <tt>ansi.ini</tt> or <tt>rtf.ini</tt> (depending on the preferred
133output format if colored output is turned on -- either ANSI escape sequences
134or RTF are supported at the moment; other markup formats can be added easily).
135By convention, <tt>fixed.ini</tt> contains the standard global and static configuration
136values used by a given installation and rarely or never changes, while
137<tt>epos.ini</tt> contains less permanent parameters and temporary values.
138The global parameters include a list of <em>languages</em>, or language
139configurations which will be parsed when the global configuration is set up.
140Every language <tt>.ini</tt> file in turn contains a list of <em>voices</em> to be
141configured for this particular language. Language configuration files
142are located under <tt>/usr/local/share/epos/lng/*/*.ini</tt>, voice configuration files
143under <tt>/usr/local/share/epos/inv/*/*.ini</tt>, where <tt>*</tt> represents any string
144listed in the list of languages (or voices for a language). Go see the real
145files under <tt>/usr/local/share/epos/cfg/*.ini</tt> for an example.
146
147<sect2> Configuration File Format Overview
148<p>
149
150A configuration file contains one option per line (empty lines are ignored).
151Each option is a name-value pair, separated with whitespace.  A string value
152may be (and sometimes must be, e.g. if it begins with whitespace) enclosed
153in double quotes.  Every configuration
154file is associated with a certain option set, that is, it contains either just
155global options, or options related to some language or voice. (In the latter
156two cases, the <tt>name</tt> option identifies the language or voice properly.)
157
158<sect2> Character Encoding <label id="encoding">
159<p>
160
161Sometimes it is not convenient or possible to encode all configuration files
162in the same character encoding.  For example, a character encoding may be
163language dependent.  But it is even possible for different lines of the
164same file to use different encodings.  You can switch character encodings
165for the same file using the <tt>&commat;charset</tt> directive.
166Charset name must be specified as a parameter and it must be enclosed in
167parentheses.  Epos attempts to load the corresponding unicode character
168mapping file and immediately switches the charset number for the current
169file.  Please note two differences from the <tt/charset/ option:
170the directive only affects the current "logical" file (including included
171files as well as any files it has been included from using the
172<tt>&commat;include</tt> directive), whereas the option doesn't affect it at
173all, but it affects all subsequent files (e.g. for the given language),
174such as the rules file.
175
176You have the following choice of charsets: arbitrary 8-bit encodings
177(provided a Unicode mapping file is present in <tt>cfg/mappings</tt>),
178utf-8, sampa-std (standard SAMPA) and sampa-alt-NAME where NAME is
179a pre-configured SAMPA alternate.
180
181<sect2> Escaping Special Characters <label id="escaping">
182<p>
183
184It is possible to enter some special characters using escape sequences, such
185as <tt>"&bsol; "</tt> for a space, <tt>"&bsol;n"</tt> for a newline, or <tt>"&bsol;&tilde;"</tt>
186for <tt>"..."</tt> or <tt>"dots"</tt> (treated as a single character in Epos).
187The available escape sequences are listed in <ref id="escapes" name="the table of escape sequences">.
188
189<table loc="ht">
190<tabular ca="|l|l|l|l|">
191<hline>
192	<label id="escapes">
193	escape sequence	| interpreted as  | ASCII code | example@
194<hline>
195	&bsol;n  |  newline       |  10  |@
196	&bsol;t  |  tab           |   9  |@
197	&bsol;e  |  escape        |  27  |@
198	&bsol;E  |  escape	      |  27  |@
199	&bsol;&lsqb; |  escape    |  27  |@
200	&bsol;&bsol; |  backslash     |  92  |@
201	&bsol;   |  hard space    | 255  |@
202	&bsol;&num;  |  hash      |  35  |@
203	&bsol;;  |  semicolon     |  59  |@
204	&bsol;&commat; |  at sign |  34  |@
205	&bsol;&tilde;  |  dots	      |  (1) |  No...@
206	&bsol;.  |  decimal point |  (2) |  1.2 kg@
207	&bsol;-  |  range	      |  (3) |  2-3 people@
208	&bsol;m  |  minus         |  (4) |  -1@
209	&bsol;X  |  temporary     | (31) |@
210	&bsol;Y  |  temporary     | (30) |@
211	&bsol;Z  |  temporary     | (29) |@
212	&bsol;W  |  temporary     | (28) |@
213	&bsol;V  |  temporary     | (27) |@
214	&bsol;U  |  temporary     | (26) |@
215<hline>
216</tabular>
217<caption>Escape sequences used in configuration files</caption>
218</table>
219
220(If you suspect this table to be out-of-date, you can consult the <tt>token&lowbar;esc</tt>
221and <tt>value&lowbar;esc</tt> constants in <tt>option.lst</tt>, or the table in
222<tt>parser.h</tt>.) ASCII codes in parentheses are ASCII codes used for different
223purposes by Epos.
224
225<sect2> Comments and the &commat;include Directive <label id="include-directive">
226<p>
227
228A configuration file usually contains various comments. A comment can start
229on any line with a semicolon or hash mark and lasts to the end of line.
230The semicolon (or hash mark) must be located at the beginning of line
231or just after some whitespace. Semicolons in the middle of a word don't
232start a comment.
233
234If a line begins with <tt>&commat;include</tt> (possibly preceded by whitespace),
235it is treated as the <em>include directive</em>.
236The format of the line should be <tt>&commat;include "filename"</tt> and it will
237cause the contents of the <tt>filename</tt> file to be inserted at this place of the
238main <tt>.ini</tt> file. These includes can be nested to any depth up to
239the value of the <tt/max&lowbar;nest/ option; if no or
240relative path is specified, the directory which holds the topmost file is used for
241the lookup.
242
243<sect2> Other Directives
244<p>
245
246Two more directives, <tt>&commat;warn</tt> and <tt>&commat;error</tt> with obvious semantics
247are available for diagnostic purposes.
248
249<sect1> Command Line
250<p>
251
252Command line option values can be passed to Epos
253at server startup, or to the <tt/say-epos/ utility.
254The behavior of these two command lines is very similar, though not identical.
255The monolithic Epos executable should not deviate from the server executable,
256unless specified otherwise.
257
258The options can be specified anywhere on the command line, and are processed
259from left to right before any other text (which is treated as the text to be
260synthesized) on the command line.  Long options, which correspond directly
261to the options specified in configuration files, are preceded with a double dash
262and they take a value, which can be separated
263using the equality sign (<tt/=/), or spacing; the value (<tt/true/ or the empty string)
264can be understood implicitly, if applicable to the option type, and the option
265is followed by another option or comes last at the command line.
266Short options are denoted by single letters, preceded with a single dash, and
267they never take a value.
268
269<sect2> Input Text
270<p>
271
272Technically speaking, this subsection doesn't really concern the options,
273but it is nevertheless included.
274
275The main purpose of the <tt/say-epos/ utility is to convert a specified
276text to speech.  Therefore, any command line text which is not part of an option
277name or option value is concatenated together with spaces, and
278sent to the server for the usual processing (TTS and phonetic
279transcription), after all preceding, intervening or following
280options have been sent to the server.
281
282The same is true for the monolithic Epos executable, but in this
283case, only a single argument of this sort is accepted.  (Just
284enclose the text with quotes to have it treated as a single
285argument.  The sole reason why this is so is the less-than-maintained
286status of the monolithic executable.)
287
288In both cases, quite random defaults are supplied if no input text
289is specified.
290
291It is not possible nor desirable to specify the input text for
292the TTSCP server executable.  It is accepted and silently ignored.
293
294
295<sect2> Long Options
296<p>
297
298The long options are also available through the <tt/say-epos/ utility;
299in such case, the long option is passed to the TTSCP server
300without any effect on the <tt/say-epos/ client.
301
302The ordering of the options on the command line is usually not significant,
303unless the current language or voice is switched during the processing.
304An example:
305
306<tscreen><verb>
307say-epos --language german --pausing "Wie geht es?" --show_segments
308</verb></tscreen>
309
310This sets the default language to German, enables pausing after each
311transformation rule is applied to the text (sets the <tt/pausing/ option
312to <tt/true/, in other words) and prints the segment string generated
313in the process (sets the <tt/show&lowbar;segments/ option to <tt/true/). The string
314to be transcribed and synthesized is given on the command line as well
315(it must be quoted unless it consists of a single word).
316
317The list of all available long options together with their types
318can be obtained with <tt>eposd -H</tt> of the main program (not the client
319stub, sorry).  The semantics of nearly all individual long options is described
320<ref id="indivopts" name="below">.
321
322For turning long boolean options off, it is possible to give their name
323with three dashes. Therefore,
324
325<tscreen><verb>
326say-epos ---show_transcript "Say this, do not show the transcription"
327</verb></tscreen>
328
329is equivalent to
330
331<tscreen><verb>
332say-epos --show_transcript off "Say this, do not show the transcription"
333</verb></tscreen>
334
335Refer to the <ref id="indivopts" name="individual options"> section
336for documentation on available long options.
337
338<sect2> Language and Voice Switching
339<p>
340
341Two pseudo-options <tt/--language/ and <tt/--voice/ can be used to switch
342the current language or voice, or to specify options for other than the
343default language or voice.  There may be multiple options of this kind
344given to the <tt/say-epos/ utility or the monolithic Epos executable, and
345their ordering is important.  For example,
346
347<tscreen><verb>
348say-epos Something. --init_f 80 --voice vichova
349</verb></tscreen>
350
351doesn't do the expected thing, i.e. use the voice named "vichova"
352as modified by setting the neutral pitch for this command to 80.
353Instead, the neutral pitch is set for the default voice, and
354then the voice is switched to the specified one.  To get the
355intended behavior, reorder the command line:
356
357<tscreen><verb>
358say-epos Something. --voice vichova --init_f 80
359</verb></tscreen>
360
361<sect2> Short Options
362<p>
363
364The most frequently used options and occasionally even collections
365of options and/or other stuff are given a shortcut, called a <em>short option</em>.
366A short option is a single letter preceded by a single dash.
367Usual conventions for merging short options into a single string
368are available, and the example above may thus be abbreviated as
369
370<tscreen><verb>
371say-epos --language german -p "Wie geht es?" -d
372</verb></tscreen>
373
374or even
375
376<tscreen><verb>
377say-epos --language german -pd "Wie geht es?"
378</verb></tscreen>
379
380(There is no short option for <tt>--language</tt>.)
381
382The short options are interpreted directly by the <tt/say-epos/ utility;
383that's why the list of short options available with this utility
384is different from the list of short options available with the server
385or the monolithic Epos executable.
386A list of (the most of) the server short options can be obtained with
387<tt>eposd --help</tt>, or <tt>eposd -h</tt>/.  A list of (the most of)
388short options understood by the <tt/say-epos/ utility can be obtained with
389<tt>say-epos -h</tt>.  Such list however includes undocumented options
390which may disappear in the next releases.
391
392Please keep in mind that the <tt>say-epos</tt> utility is only an example of a TTSCP
393client and not a full-fledged controlling interface to Epos.
394
395<sect3> Server Short Options
396<p>
397
398<descrip>
399<tag>-f</tag>
400	Do not fork at startup.  Same as <tt/---forking/.
401<tag>-h</tag>
402	Show a summary of available short options
403<tag>-p</tag>
404	Same as <tt/--pausing/.
405<tag>-v</tag>
406	Show Epos version.
407<tag>-D</tag>
408	Turn on debugging output.  Multiple <tt/-D/ options cause the output to be more
409	verbose: this is equivalent to lowering the <tt/debug&lowbar;level/ option to four
410	minus number of occurences.
411<tag>-H</tag>
412	In addition to a summary of short options, show also a list of all available
413	long options.
414</descrip>
415
416<sect3> Client Short Options
417<p>
418
419<descrip>
420<tag>-k</tag>
421	Shut down the server.
422<tag>-l</tag>
423	List all available languages and available voices for the current language.
424<tag>-m</tag>
425	Write the waveform to a file (said.vox in the client's current directory)
426	instead of writing it to the local sound card; the output doesn't
427	include any header and is in the mu law format.
428<tag>-o</tag>
429	Write the waveform to the standard output.  In this case, no transcription
430	is performed.
431<tag>-u</tag>
432	Turn on utterance chunking.  This option has unintuitive consequences
433	when combined with <tt/-w/.
434<tag>-w</tag>
435	Write the waveform to a file (said.wav in the client's directory) instead
436	of writing it to the local sound card.
437</descrip>
438
439
440<sect1> Setting Options in TTSCP
441<p>
442
443See the <ref id="ttscp" name="TTSCP specification"> for general
444overview of TTSCP and the <tt/set/ command.
445
446<sect2> <tt>restr.ini</tt> File <label id="restricted-options">
447<p>
448
449Setting options in TTSCP can be a security problem, as some options
450can cause the server to access unrelated files. It is therefore
451strongly recommended not to run the Epos daemon with superuser privileges,
452but sometimes a more fine-grained access control mechanism is needed.
453It is authentication and limiting access to specified options
454for some or all users.
455
456By default, all settable parameters can be changed by any outside connection
457(this doesn't affect the value in use for any other connection in any way).
458You can control this privilege by restricting it in <tt>cfg/restr.ini</tt>.
459
460Every line of that file is in the form
461
462<tscreen><verb>
463option_name       access_rights
464</verb></tscreen>
465
466The <em>access rights</em> must be in lowercase and must not contain spaces. They are
467a sequence of <tt/r/, <tt/w/', <tt/&dollar;/ and <tt/&num;/, none of which may be repeated.
468Their order is significant, the interpretation is as follows:
469
470<itemize>
471	<item> if no <tt/r/ is mentioned, nobody can read the option value
472	<item> if no <tt/w/ is mentioned, nobody can change the option value
473	<item>  if a <tt/r/ or <tt/w/ appears without <tt/&dollar;/ or <tt/&num;/ to the left of them,
474		they grant the read and write rights, respectively, to even
475		anonymous connections.
476	<item> following &dollar;, they grant the respective rights to any authenticated user.
477	<item> following &num;, they grant the respective rights to the root only.
478</itemize>
479
480<table loc="ht">
481<tabular ca="|l|l|">
482<hline>
483<tt>r</tt>	| read only@
484<tt>w</tt>	| write only@
485<tt>rw</tt>	| no restriction@
486<tt>&num;w&dollar;r</tt>	| root can write, authenticated users can read@
487<tt>r&num;w</tt>	| anyone can read, root can also write@
488<tt>&num;rw</tt>	| root can read/write@
489<hline>
490</tabular>
491<caption>
492	Examples of option access rights
493</caption>
494</table>
495
496Unknown parameters are considered just not to have been implemented in this
497particular version of Epos and are not reported. Parameters not mentioned
498in <tt>restr.ini</tt> are allowed unlimited access by any connection.
499
500Note that the location of this file can be changed at the command line
501(with <tt/base&lowbar;dir/).
502
503<sect1> Semipermanent Personal Preferences
504<p>
505
506If many users with different needs and aesthetic feelings
507share the same Epos daemon installation, they may choose to
508place the appropriate TTSCP commands into a file and to point
509the <tt>TTSCP&lowbar;USER</tt> environment variable to this file.
510The contents of that file will be transmitted by the client
511to set up the working environment at the beginning of every
512session.
513
514An example:
515
516<tscreen><verb>
517set language czech
518set voice kadlec
519set init_f 90
520set init_i 110
521set language slovak
522</verb></tscreen>
523
524This example will adjust the preferred pitch and volume for a certain
525Czech voice; it will also set the default language to Slovak. See
526the <ref id="ttscp" name="TTSCP specification"> for more info.
527
528<label id="reinitialization">
529<sect1> Reloading Configuration Files
530<p>
531
532Under UNIX, Epos reinitializes itself upon a hangup signal (SIGHUP).
533Existing TTSCP connections are terminated and configuration is reloaded.
534
535<sect1> Soft Options <label id="soft-options">
536<p>
537
538Most options (discussed until this point) have built-in meanings
539and semantics; for most uses this is sufficient and necessary.
540However, the user may also decide to define additional options
541to be provided by a language to its voices. This mechanism is
542called <em>soft options</em>; soft options are always voice options
543and are described at the language level (that is, the name, type
544and default value is supplied with the language, but individual
545voices may choose to specify a value for the option).
546
547The soft options are described by the language option <tt>soft&lowbar;options</tt>.
548It is an autoconcatenating list of colon separated descriptions of individual soft options;
549every item is of the format <tt>name[(type)][=default]</tt>, where <tt>name</tt>
550is an arbitrary option name, <tt>type</tt> is <tt>b</tt>
551(meaning boolean; other possibilities might include
552<tt>s, n, c</tt> for strings, integers and characters, respectively,
553but these don't seem to be useful. The <tt>default</tt> is the default
554value to be used if the option is left unspecified by a voice. It should be
555chosen as a backward compatible value for a new option if applicable.
556
557The type and/or the default may be left unspecified. The default <tt>type</tt> is
558boolean, the default <tt>default</tt> is an empty string.
559
560An example:
561
562<tscreen><verb>
563	soft_options   "colloquial=false"
564	soft_options   "segment_listing_file(s)=traditnl.dph"
565</verb></tscreen>
566
567This example defines two options, a boolean <tt>colloquial</tt> and
568a string <tt>segment&lowbar;listing&lowbar;file</tt>.
569
570The sets of soft options for individual languages are independent and never
571clash with each other. However, built-in option names may not be used
572as soft option names.
573
574Please note the difference between rule file macros and soft options:
575rule file macros are useful for arbitrary string replacement and
576they serve well for concentrating every single idea to a single place
577at the startup time.
578Soft options, on the other hand, are limited to conditioning rules,
579but can change value later just as any other option without the need
580to recompile the rules.  Indeed, multiple users may use the same rules
581with different values of the same soft option simultaneously.
582
583
584<sect1> Level of Description Dependent Options
585<p>
586
587Some options, especially pertaining to parsing the input and
588formatting the output, are set separately for every layer of
589the <ref id="tsr" name="TSR">, so that each of them is actually
590an array of options, indexed using the commercial at character
591(&commat;) followed by a layer name.  For example,
592
593<tscreen><verb>
594	perm&commat;colon	":,"
595</verb></tscreen>
596
597defines the permissible colon terminators.  Since the TSR layer names
598are themselves defined by the <tt/unit&lowbar;levels/ option, the availability
599of such options is dependent on the current value of some other option.
600For other options, such as <tt/default&lowbar;scope/, the value is a layer name,
601and is thus meaningful only after the layers are defined; all such options
602can only be set after the <tt/unit&lowbar;levels/ option has been set correctly.
603
604As level description dependent options (the former type) do not yet exist
605upon program startup, the access control in <tt/restr.ini/ only works
606for the arrays of options, not individual options:
607
608<tscreen><verb>
609	perm	r
610</verb></tscreen>
611
612For these and other reasons, changing the <tt/unit&lowbar;levels/ option is not
613recommended after any of both types of level of description dependent
614options have been set.
615
616
617<sect1> Selected Individual Options <label id="indivopts">
618<p>
619
620Most individual options will be described in this section.  The rest are either
621straightforward or rarely useful. A complete list of options can be obtained
622through <tt/eposd -H/ or in <tt>src/options.lst</tt>.
623
624The type and the semantic class of the argument is indicated for all individual
625options except for truth value (<tt/on//<tt/off/) options.  This is because
626these options, when found without an argument, are automatically interpreted
627as <tt/on/.
628
629Many options may not make any sense to you; indeed, some of them don't
630actually make sense to me.  Such options are usually relics from now
631forgotten ad hoc configurations.  I appreciate any suggestions on how
632to replace any old fashioned configuration mechanisms with more generic
633and/or simpler ones.
634
635<sect2> Overall Options
636<p>
637
638Some options control overall preferences, strategies and assumptions
639to be used by Epos.  Most of them are global booleans.  They are usually
640of technical nature and the output produced by Epos should not change
641with these options changed, but they can be useful in some special
642configurations.  They also get added to resolve some simple software
643engineering dilemmata.
644
645The options in this subsection are not <ref id="static" name="static">
646unless specified otherwise.
647
648<descrip>
649<tag>--comma <sl/delimiter/</tag>
650	This is the delimiter for Epos-generated lists, especially
651	in TTSCP; an arbitrary string is allowed.  Do not change.
652<tag>--default&lowbar;char <sl/character/</tag>
653	The character to replace any unknown characters in the input text.
654	See also the <tt/relax&lowbar;input/ option.
655<tag>--end&lowbar;of&lowbar;file <sl/character/</tag>
656	The character to terminate the input text.  This defaults to the
657	escape character.  The length of the input text is usually
658	defined externally (by the <tt/apply/ command within a control
659	TTSCP connection or by the end of an input), however, there
660	are cases where this is not applicable or desirable for some
661	reason.  The character specified by this option terminates
662	the input text, but not the input stream.  It is also necessary
663	to press <tt/Enter/ after the character. Applies only to the
664	monolithic Epos.
665<tag>--asyncing</tag>
666	Turn on to enable asynchronous close() processing. Usable only
667	on unices; uses fork to delegate the synchronous close()
668	to a child. This option can be useful for eliminating communication
669	delays when closing a sound card file descriptor, but it can cause
670	subsequent references to the same device fail, because the child
671	still hasn't released the device.  The option has no meaning
672	on non-UNIX systems, where the close() is always synchronous.
673<tag>--forking</tag>
674	Turn on to allow forking and fully detaching the Epos daemon.
675	Usable only on unices.  If off, some debugging information will
676	be written to <tt/stdout/ in some configurations.
677<tag>--init&lowbar;time <sl/n/ </tag>
678	If set to a non-zero value under a UNIX, the parent process will
679	wait for at most <sl/n/ seconds for the daemon process to start
680	accepting connections.  One second is likely to be more than enough
681	except when the machine is severely overloaded.  Note that most
682	Epos initialization takes place before the fork, whereas this
683	option is only used after the fork.
684<label id="ml-option">
685<tag>--markup&lowbar;language <sl/ml/</tag>
686	The parameter is either "ansi", "rtf" or "none". This parameter
687	is only effective in <tt>fixed.ini</tt> or on the command
688	line.  Depending on its value, the <tt/ansi.ini/ or <tt/rtf.ini/
689	configuration file is appended to the <tt/fixed.ini/ file during
690	parsing the configuration.  These two files contain the complete
691	output formatting information necessary for printing text in
692	either the ANSI escape sequences (ISO 6429) or the Rich Text
693	Format; they use colors to distinguish between symbols of different
694	levels of description.
695<tag>--pend&lowbar;max <sl/n/ </tag>
696	The maximum number of subtasks waiting in an input queue for
697	a single agent.  If this limit is reached, the preceding
698	agent stops processing further input until only <tt/pend&lowbar;min/
699	subtasks are left in the queue.  Setting this limit higher
700	will consume additional memory, as more processing can happen
701	in advance, but setting it too low may cause unnecessary delays.
702<tag>--pend&lowbar;min <sl/n/ </tag>
703	The minimum desired number of subtasks waiting in an input
704	queue for a single agent.  If the queue length decrements
705	to this limit and the preceding agent has enough input
706	to process, it resumes operation.  This limit should
707	be set roughly to half the <tt/pend&lowbar;max/ value.
708<tag>--memory&lowbar;low</tag>
709	Turn on if you're very low on memory. This mode sacrifices speed
710	for a little bit of saved memory. Basically, turning this on
711	caused various dictionaries to be discarded whenever the rule
712	which has used them has been applied and reloaded the next time
713	it is needed.  Likewise, cached files are released upon the
714	last <tt/unclaim/.  Otherwise these data structures are kept cached
715	in for the next use.
716<tag>--paranoid</tag>
717	With this option on, Epos will tend to detect more errors in
718	various kinds of input files than without.  It will rather
719	try to reject suspicious or formally incorrect inputs,
720	than to do something reasonable with them. Useful for debugging.
721	This option is not static.
722<tag>--pausing</tag>
723	With this option on, Epos will pause and wait for a keypress
724	after every rule is applied.  Of course, this is incompatible
725	with the <tt/forking/ option and some other setups.  Should
726	be only used for debugging.
727<tag>--ptr&lowbar;trusted</tag>
728	One of the checks performed when the <ref id="trusted-option"
729	name="trusted"> option is disabled is checking whether
730	some pointers are actually pointers, that is, very big numbers
731	when cast to an integer.  This can be useful on some machines,
732	but it is absolutely unportable.  It may or may not work with your
733	compiler; enable this option to skip these checks.
734<tag>--relax&lowbar;input</tag>
735	Turn on in real life situations.  When off, Epos will quit parsing
736	any text which contains an unknown character (not listed in one of the
737	<tt/perm*/ or <tt/input&lowbar;perm*/ options).  This option replaces such
738	characters with the value of the <tt/default&lowbar;char/ option before
739	they're classified.
740	This option is not static.
741<tag>--show&lowbar;rule</tag>
742	Print each rule before it is applied.  This is useful mostly for
743	debugging situations (when a text is parsed in an unexpected way
744	and the user is trying to find out which rule has escaped his
745	attention). This option may not work with all setups.
746<label id="profile-option">
747<tag>--profile <sl/filename/ </tag>
748	Setting this option to a file name causes profiling information
749	to be recorded to the file named.  The file is created in the
750	current directory of the server if a relative pathname is given.
751	Each line of the profile log corresponds to one timeslice of
752	an agent.  First, the time spend before running the agent
753	(after the last agent has finished).  Second, agent type.
754	Third, time spent by the agent.  Both time intervals are given
755	in microseconds and their accuracy depends on the
756	<tt/gettimeofday/ system call.  Using the profiler on a loaded
757	machine is going to give almost meaningless results.
758<tag>--handle&lowbar;size <sl/n/ </tag>
759	The TTSCP handle length in character.  The handles are always
760	generated randomly using a 64 character alphabet.  Use small
761	values for debugging the TTSCP implementation manually (and accept
762	the risk of a handle-guessing attack); use higher values in a
763	production environment.
764<tag>--shriek&lowbar;art number</tag>
765	The picture to be printed to <tt/stdshriek/ in case of an error.
766	May or may not work.  Small integers such as 0, 1 or 2 are possible.
767<label id="trusted-option">
768<tag>--trusted</tag>
769	Code related to the <tt/class unit/ often calls its <tt/sanity/ method
770	to detect any serious structure violation before it makes Epos crash
771	mysteriously.  In stable versions, however, these checks are unlikely
772	to be necessary.  Use this option to skip them.
773<tag>--verbose</tag>
774	When the rules are dumped with the <tt/debug/ rule type and this
775	option is set, all of them will be displayed.  Otherwise only the
776	current rule is displayed.  That's all.
777
778<tag>--localsound</tag>
779	Enables the use of the TTSCP <tt>&num;localsound</tt> output module.
780<tag>--readfs</tag>
781	Enables the use of file system based TTSCP input modules.  See
782	the <ref id="pseudorootdir-option" name="pseudo&lowbar;root&lowbar;dir option">
783	for more details.  Note that this option can not be turned on
784	unless the underlying operating system has a fully functional
785	implementation of the <tt/select/ call.
786<tag>--writefs</tag>
787	Enables the use of file system based TTSCP output modules. See
788	the <ref id="pseudorootdir-option" name="pseudo&lowbar;root&lowbar;dir option">
789	for more details.
790
791<tag>--unit&lowbar;levels</tag>
792	Levels of description.  Must be a colon separated list which includes
793	<tt/segm/ and <tt/phone/ as the two lowest levels, and <tt/text/
794	as the highest level of description.  There are reasons why this should not
795	be a language dependent option; you can however define this to be the
796	union of all levels of description needed by any language.
797<tag>--default&lowbar;scope</tag>
798	The default scope level of a rule -- one of the levels of description
799	defined with the <tt/unit&lowbar;levels/ option.
800<tag>--default&lowbar;target</tag>
801	The default target level of a rule -- one of the levels of description
802	defined with the <tt/unit&lowbar;levels/ option.
803
804<tag>--languages <sl/list/</tag>
805	Lists initially available languages. The parameter is a colon separated
806	list of language names. Every language must have its associated <tt/.ini/
807	file; the name of the file is obtained by suffixing <tt/.ini/ to the
808	language name, while the directory name matches the language name and is
809	located under the directory as determined by the <tt/lang&lowbar;base&lowbar;dir/
810	option.	 The first language listed will become the default language.
811	This option <ref id="autoconcatenating" name="autoconcatenates">.
812<tag>--sampa&lowbar;alts <sl/list/</tag>
813	Lists the alternate encodings of SAMPA (i.e. non-SAMPA SAMPA-like
814	notations used by people e.g. for languages where SAMPA is not
815	or was not available at the moment it was needed).  The parameter
816	is a colon separated list of strings.  Every alternate encoding
817	has its associated <tt/sampa-alt-XXX.txt/ file where the <tt/XXX/
818	comes from this list.  These encodings are loaded at Epos startup.
819
820</descrip>
821
822<sect2> Types of Output
823<p>
824When Epos is compiled as a TTSCP server, the variability of data formats
825is controlled by TTSCP rather than by option settings.  However, there
826are some options related to the output formats produced by the monolithic
827binary (executable).  There are also some conventional informative outputs
828that can be produced by the monolithic and server binaries equally.
829
830All options in this subsection are <ref id="static" name="static">.
831
832<descrip>
833<tag>--show&lowbar;phones</tag>
834	Print the sequence of sounds generated from the text processed.
835	Monolithic binary only.
836<tag>--show&lowbar;segments</tag>
837	Print the sequence of segments generated from the text processed.
838	Monolithic binary only.
839<tag>--show&lowbar;raw&lowbar;segs</tag>
840	When used in conjunction with the <tt/show&lowbar;segments/ option, the segments
841	will be not only listed by name, but they will also include the actual
842	numbers generated.  Monolithic binary only.
843<tag>--play&lowbar;segments</tag>
844	Synthesize the waveform and say it through the sound card.
845	Monolithic binary only.
846<tag>--wave&lowbar;header</tag>
847	When dumping the waveform into a file or a TTSCP data connection,
848	put the RIFF wave file header at its beginning.  Regardless of
849	this value, the header is never added when writing the waveform
850	to a sound output device (a file descriptor which understands
851	the usual ioctls).  TTSCP requires this option be always set
852	to <tt/on/; consequently, the option is only reasonably useful with the
853	monolithic binary.
854<tag>--ulaw</tag>
855	Generated waveform uses mu law sample encoding instead of linear encoding.
856<tag>--out&lowbar;sampling&lowbar;rate <sl/Hz/ </tag>
857	Voice dependent option.  May be used to downsample the output by one half.
858<tag>--autofilter</tag>
859	If this option is enabled, an appropriate low band filter is used whenever
860	downsampling.  This is necessary to avoid phantom sounds in the output.
861<tag>--label&lowbar;seg</tag>
862	Output segment (diphone) labels in the output waveform using the appropriate
863	RIFF WAVE chunks.
864<label id="labelphones-option">
865<tag>--label&lowbar;phones</tag>
866	Output phone labels in the output waveform.  This is only possible if
867	phone boundary information is made available for the inventory using
868	the <ref id="snlfile-option" name="snl&lowbar;file option">.  For other voices,
869	this option has no effect.
870<tag>--label&lowbar;sseg</tag>
871	Very experimental.  If used in conjunction with the <tt/label&lowbar;phone/,
872	the phone labels are assigned not the phone level, but the highest
873	level whose boundary is detected at this place.  If you do use this
874	option, be aware that Epos will use a (very slightly) TTSCP 0
875	non-compatible internal representation for the segment (diphone) stream
876	to preserve the necessary suprasegmental unit boundary information.
877	Consequently, network voices provided by different TTSCP servers may
878	fail reporting unexpected segment numbers.
879<tag>--immed&lowbar;segments</tag>
880	Print the sequence of segments generated from the text processed
881	just after the <tt/segments/ rule.  This is useful especially
882	in conjunction with the <tt/neuronet/ option where the segment layer
883	is created, but later to be discarded by the rules.
884	Monolithic binary only.
885<tag>--neuronet</tag>
886	This is normally on.  Turning this off skips the neuronet
887	initialization and makes Epos shutdown if the functionality
888	is requested later.  This may be useful with debugging tools
889	like the Electric Fence.
890<tag>--help</tag>
891	Print a brief synopsis of short options upon startup.  No data processing
892	is performed.
893<tag>--long&lowbar;help</tag>
894	Print a list of long options upon startup.  No data processing is performed.
895<tag>--version</tag>
896	Print the current version number to <tt/stdshriek/ upon startup.
897</descrip>
898
899
900<sect2> Text Output Formatting
901<p>
902
903You can tailor the conventions for printing out processed text quite a lot.
904Basically, we're printing out a <ref id="tsr" name="text structure representation">,
905so that we can see what level of description does a character belong to.  Preserving
906this information in the output is often very desirable; it can either be done
907by inserting delimiters such as custom syllable breaks, or by coloring some levels
908of description.
909
910This family of options can result in a quite complex configuration.
911That's why we provide at least
912two complete sets of settings in <tt/ansi.ini/ and <tt/rtf.ini/. You can use the
913<ref id="ml-option" name="markup&lowbar;language"> option to switch between them
914in  <tt/fixed.ini/.
915
916Some options control the colors used for output.  For the time being,
917these options actually take the escape sequence needed to switch the
918color for the current format (e.g. ANSI escape sequences or RTF).
919In principle, other strings than escape sequences can be printed,
920but such configuration is discouraged.
921
922Some options configure the appearance of the <ref id="tsr" name="TSR">
923to the user.  The model we use is assigning a few colors consistently
924to the individual levels of description and marking up the boundaries
925between units with parentheses, separators or both. The levels of
926description are <ref id="tsr-levels" name="defined"> in compile time.
927The <tt/segment/ and <tt/text/ may not be applicable for some of
928these options. This model of displaying the TSR is not used for
929transmitting the text over TTSCP.
930
931All the options in this subsection are <ref id="static" name="static">.
932
933<descrip>
934<tag>--colored</tag>
935	If disabled, all color manipulating options will be ignored.
936	Many configurations will enable this by default, because the
937	escape sequences are rarely usable directly and never indirectly.
938<tag>--normal&lowbar;color <sl/color/</tag>
939	String to switching to the neutral (default) color. Issued at the end
940	of every colored piece of text.
941<tag>--curr&lowbar;rule&lowbar;color <sl/color/</tag>
942	String to switch to the a <em/bold/ color.  The bold color will
943	be used to highlight the current rule in the list of rules printed
944	by the <ref id="debug-rule" name="debug rule type">.
945<tag>--fatal&lowbar;color <sl/color/</tag>
946	String to switch to the color used for printing out fatal error
947	messages.
948
949<tag>--header <sl/filename/</tag>
950	The value is the file name of a file in the directory specified
951	by the <tt/ini&lowbar;dir/ option, which is to be printed before any
952	phonetic transcription.
953<tag>--footer <sl/filename/</tag>
954	The value is the file name of a file in the directory specified
955	by the <tt/ini&lowbar;dir/ option, which is to be printed after any
956	phonetic transcription.
957<tag>--begin* <sl/string/</tag>
958	The asterisk stands for a &commat;-separated symbolic name of a linguistic description
959	level, such as <tt/phone/, <tt/syll/ or <tt/word/.  The parameter
960	is a string which will be printed before the first unit within this
961	unit, for example before the word-initial syllable in case of
962	<tt/begin&commat;word/).
963<tag>--close* <sl/string/</tag>
964	The asterisk stands for a &commat;-separated symbolic name of a linguistic description
965	level, such as <tt/phone/, <tt/syll/ or <tt/word/.  The parameter
966	is a string which will be printed after the last unit within this
967	unit, for example before the word-final syllable in case of
968	<tt/close&commat;word/).
969<tag>--color* <sl/string/</tag>
970	The asterisk stands for a &commat;-separated symbolic name of a linguistic description
971	level, such as <tt/phone/, <tt/syll/ or <tt/word/.  The parameter
972	is the string to switch the color for this level of description.
973<tag>--separ* <sl/string/</tag>
974	The asterisk stands for a &commat;-separated symbolic name of a linguistic description
975	level, such as <tt/phone/, <tt/syll/ or <tt/word/.  The parameter
976	is a string which will be printed between adjacent units of this
977	level of description, for example between words in case of
978	<tt/separ&commat;word/).
979<tag>--structured</tag>
980	Whether the verbose model of displaying the TSR as described above
981	is used. When off, only the text itself is printed and simple
982	spacing is used to delimit units which do not correspond to
983	actual characters.  This option is orthogonal to the <tt/colored/
984	option.
985<tag>--postfix</tag>
986	If on, the upper level characters (such as punctuation) are printed
987	after the lower level characters (such as letters or sounds)
988	in the phonetic transcription.
989<tag>--prefix</tag>
990	If on, the upper level characters (such as punctuation) are printed
991	before the lower level characters (such as letters or sounds)
992	in the phonetic transcription.  Disabling both <tt/prefix/ and
993	<tt/postfix/ options effectively disables printing other characters
994	than sounds.  This option is orthogonal to the <tt/structured/
995	option.
996<tag>--swallow&lowbar;underbars</tag>
997	Epos uses the low line (<tt/&lowbar;/) character to represent
998	suprasegmental units with no content at their level (e.g. syllables
999	are often only implicitly terminated or even generated
1000	by the rules and have no associated symbol); this option,
1001	when enabled, suppresses them completely.
1002</descrip>
1003
1004
1005<sect2> Limits
1006<p>
1007
1008Most algorithms used in Epos are boundless, avoiding techniques like fixed size
1009arrays or buffers.  On the other hand, there are instances when this is inadequate,
1010especially for speed or space considerations.  In these cases Epos tries to
1011use growable data structures, so that they perform well up to a certain size limit
1012and then somewhat slower, but still correctly.  We call such a limit a <em/soft limit/,
1013as opposed to a <em/hard limit/ which cannot be exceeded.  Most limits in Epos are
1014configurable and soft, but some hard limits have also been imposed. This subsection
1015also covers some time vs. space trade-off configuration parameters, though
1016these are no limits at all. Also some <em/sanity check limits/ are imposed; these
1017act as hard limits, but can be effectively disabled by setting them to absurdly
1018high values, with no direct impact on efficiency in the typical case.
1019
1020In fact, you can ignore this subsection completely, as the few hard limits tend to
1021employ reasonably high values.
1022
1023The options in this subsection are <ref id="static" name="static"> unless
1024specified otherwise.
1025
1026<descrip>
1027<tag>--buffer&lowbar;size <sl/bytes/</tag>
1028	Soft limit. The initial buffer size for a wave file. This value is not
1029	used, if we already know that we will eventually write this waveform
1030	to a sound card device; in this case we use ioctls to find out the size
1031	of its hardware buffer to maximize the chance of getting a smooth
1032	playback.
1033<tag>--ssif&lowbar;buff&lowbar;size <sl/bytes/</tag>
1034	Soft lmit.  The initial buffer size for the SSIF buffer
1035	as SSIF is being extracted from TSR.
1036<tag>--dev&lowbar;text&lowbar;len <sl/bytes/</tag>
1037	Sanity check limit.  When reading from a device, this is the maximum
1038	amount of data which will be read for processing.  This is not necessary
1039	when reading from a file, because the length of a file can be known in
1040	advance.  This option is not static.
1041<tag>--hash&lowbar;search <sl/n/</tag>
1042	Trade-off.  Controls how many multipliers are tried out when
1043	constructing a perfect hash table, for each table size.
1044	The search begins at 1 and continues up to <sl/n/.
1045	If the table still has collisions, hash table size is
1046	increased by one and the search restarts.  This is iterated
1047	until a perfect hash table is found.  As we only use perfect hash
1048	tables for representing constant sets and functions, they are only
1049	constructed during Epos startup.  Setting this option to a small
1050	value (such as 17) speeds up Epos startup, while larger values
1051	can sometimes arrive at a smaller table, thus saving some memory.
1052<tag>--hashes&lowbar;full <sl/percentage/</tag>
1053	Trade-off. Controls how full should a hash table ideally be.
1054	The hash tables used in Epos
1055	are actually quite robust performance-wise, so that even values
1056	like 1000, that is, ten data items per a hash table slot, result
1057	in near-optimal speed. Values somewhere below 100 are the best bet.
1058<tag>--max&lowbar;errors <sl/count/</tag>
1059	Sanity check limit.  If more than <sl/count/ of errors in a rules file
1060	is found, Epos quits parsing the file.
1061<tag>--max&lowbar;nest <sl/depth/</tag>
1062	Sanity check limit.  If the <ref id="include-directive"
1063	name="include directives"> nest deeper than this value,
1064	Epos quits parsing the file on the assumption the inclusion
1065	is cyclic.
1066<tag>--max&lowbar;line&lowbar;len <sl/characters/</tag>
1067	Hard limit. Maximum line length in a text-oriented input file.
1068	Longer lines are truncated.
1069<tag>--max&lowbar;net&lowbar;cmd <sl/characters/</tag>
1070	Hard limit. Maximum TTSCP command length. TTSCP lines longer
1071	than this will be truncated.  The protocol requires this value
1072	to be at least 80, but a few kilobytes is recommended.
1073<tag>--max&lowbar;rule&lowbar;weight <sl/weight/</tag>
1074	Sanity check limit. Maximum rule weight in a choice, as well as the maximum
1075	rule repeat count. Using very large weights can result in memory
1076	exhaustion.  Values on the order of 10000 are still perfectly safe.
1077<tag>--max&lowbar;text&lowbar;size <sl/bytes/</tag>
1078	Sanity check limit.  Maximum amount of space allowed for growable
1079	processing buffers, or for the input text (checked just before parsing).
1080	This option is generally used to avoid memory exhaustion.
1081<tag>--max&lowbar;utterance <sl/bytes/</tag>
1082	A trigger of a hard limit.  If utterance chunking is employed,
1083	Epos tries quite hard to shrink every utterance below this limit
1084	based on a fixed language independent heuristic.
1085<tag>--split&lowbar;utterance <sl/bytes/</tag>
1086	Hard limit.  If utterance chunking is employed
1087	and Epos completely fails to break an utterance below
1088	the <tt/max_utterance/ value, it will simply split the
1089	string after <tt/split_utterance/ bytes.
1090<tag>--multi&lowbar;subst <sl/count/</tag>
1091	Sanity check limit.  How may substitutions will be applied to a unit
1092	during processing of a <tt/subst/ rule.  The rule is applied until
1093	the unit settles down or until this limit is reached.  In the latter
1094	case, the substitution is considered impossible (infinite).
1095<tag>--rules&lowbar;in&lowbar;block <sl/count/</tag>
1096	Soft limit. Number of rules used in a block of of rules.
1097<tag>--scratch&lowbar;size <sl/bytes/</tag>
1098	Hard limit.  Epos uses a temporary internal buffer in a few places.
1099	Usually only very few bytes of the buffer are needed, but overflowing
1100	it is fatal. It is recommended to provide at least a few hundred bytes,
1101	preferably kilobytes, for this buffer.
1102<tag>--seg&lowbar;buff&lowbar;size <sl/segments/</tag>
1103	Soft limit.  Maximum number of segments generated by the diphoniser
1104	and synthesized at once. It more segments have to be generated,
1105	they are synthesized in chunks of <tt/seg&lowbar;buff&lowbar;size/.  If this
1106	option is set to zero, a growable buffer is used instead, and
1107	there is no limit on memory consumed.
1108	This option has no effect in the monolithic Epos.
1109<tag>--variables <sl/count/</tag>
1110	Soft limit. Number of variables used in a set of rules.
1111</descrip>
1112
1113
1114<sect2> Language Dependent Configuration
1115<p>
1116
1117This subsection lists some options defined for each language.  Additional
1118language dependent options are certain directory and file names and possibly
1119others.  As every voice is associated with a single language (two voices
1120may share a multilingual segment inventory if desired), every voice dependent
1121option is also language dependent.
1122
1123<descrip>
1124<tag>--name <sl/voicename/</tag>
1125	This option assigns a name to a newly created language.  If there is no name
1126	specified, this option defaults to the configuration file name (from the
1127	last slash to the nearest dot) the configuration has been loaded from.
1128	The name is then used to refer to the language in TTSCP.  The language name
1129	must begin with an alphabetical character and consist of alphanumerical
1130	characters (dashes and underscores are also allowed).
1131<tag>--voices <sl/list/</tag>
1132	Lists initially available voices. The parameter is a colon separated
1133	list of voice names. Every voice must have its associated <tt/.ini/
1134	file; the name of the file is obtained by suffixing <tt/.ini/ to the voice name
1135	while the directory name matches the voice name and is located under
1136	the directory as determined by the per language (default) <tt/inv&lowbar;dir/
1137	option.  The first voice listed will become the default voice for its
1138	language until switched.
1139	This option <ref id="autoconcatenating" name="autoconcatenates">.
1140<tag>--soft&lowbar;options <sl/list/</tag>
1141	Lists available soft options as described in subsection
1142	<ref id="soft-options" name="soft options">.
1143	This option <ref id="autoconcatenating" name="autoconcatenates">.
1144<tag>--fallback&lowbar;mode <sl/mode/</tag>
1145	Not used under normal circumstances.  Epos initialises its
1146	synthesis type dependent specific structures the first time
1147	it uses a voice.  Should such an initialization fail due
1148	to the reason specified by this option, the current voice will
1149	be switched to the voice specified by the <ref
1150	id="fallbackvoice-option" name="fallback&lowbar;voice"> option
1151	and the initialisation will be retried.  The <sl/mode/
1152	can either be a TTSCP error code of the <tt/4xx/ class,
1153	or a template mode identifier.  In the former case,
1154	the fallback occurs only if the initialization fails
1155	with the specified TTSCP error code.  For the latter
1156	case, the following modes have been defined:
1157   <table loc="h">
1158   <tabular ca="|l|l|">
1159	<tt>0</tt>	| fallbacks are disabled @
1160	<tt>1</tt>	| fallbacks occur on all 4xx class errors @
1161	<tt>4</tt>	| fallbacks occur with uninstalled voices (445) and network errors (47x)@
1162	<tt>7</tt>	| fallbacks occur with network errors (47x)@
1163   </tabular>
1164   </table>
1165<label id="fallbackvoice-option">
1166<tag>--fallback&lowbar;voice <sl/voicename/</tag>
1167	Voice to switch to if another voice fails to initialize.
1168<tag>--rules&lowbar;file <sl/filename/</tag>
1169	The parameter is a filename. The file contains the transformational
1170	rules to be applied for this language.
1171<tag>--perm* <sl/set/</tag>
1172	The asterisk stands for a &commat;-separated symbolic name of a linguistic description
1173	level, such as <tt/phone/, <tt/syll/ or <tt/word/.  The parameter
1174	is a simple sequence of all characters belonging to this level
1175	of description. For example, <tt/perm&commat;phones/ will list letters,
1176	numbers and other segmental symbols.  Punctuation will be assigned
1177	to the higher level sets.  The sets should be disjoint and only the
1178	characters actually processed by the rules should be listed here.
1179	The language independent built-in parser tries to resolve the most
1180	common ambiguities of Latin-based writing systems, like periods.
1181<tag>--perm&lowbar;input* <sl/set/</tag>
1182	Additional permisible characters to the respective lists
1183	specified by the <tt/perm*/ options to be permitted within
1184	an input text in the initial parse.  The characters will
1185	however not be permitted later in re-parses.
1186<tag>--perm&lowbar;working* <sl/set/</tag>
1187	Additional permisible characters to the respective lists
1188	specified by the <tt/perm*/ options to be permitted
1189	during internal re-parses.  The characters will
1190	however not be permitted in the initial parse of the input text.
1191<tag>--downgradables <sl/set/</tag>
1192	Additional permisible characters at the phone level.
1193	Whereas all of the <tt/perm*/ options must specify disjoint
1194	sets of characters for each language, this option typically
1195	consists of characters which are listed as permisible for
1196	higher levels than the phone level, too.  The characters
1197	are parsed at the higher level if possible.  If that would
1198	however constitute an empty suprasegmental unit (i.e. there
1199	are no preceding phones since the beginning of the text or
1200	since the last unit of the same or even higher level),
1201	the character will be parsed at the phone level at this
1202	particular occurence.  This affects both the initial parse
1203	and later re-parses.
1204<tag>--charset <sl/charset/</tag>
1205	The character set to be used with the current language
1206	(especially in rules, voice configuration; also in text
1207	input and output through TTSCP).  If an 8-bit encoding is not
1208	already known to Epos, it's loaded from a corresponding
1209	mapping file within the directory specified by the
1210	<ref id="unimapdir-option" name="unimap&lowbar;dir"> option.
1211	Note that this option doesn't affect the encoding of the
1212	configuration file in which it has been set itself;
1213	see also the <ref id="encoding" name="Character Encoding">
1214	subsection for more details.
1215
1216</descrip>
1217
1218<sect2> Voice Dependent Configuration
1219<p>
1220
1221<descrip>
1222<tag>--name <sl/voicename/</tag>
1223	This option assigns a name to a newly created voice.  If there is no name
1224	specified, this option defaults to the configuration file name (from the
1225	last slash to the nearest dot) the configuration has been loaded from.
1226	The name is then used to refer to the voice in TTSCP.  The voice name
1227	must begin with an alphabetical character and consist of alphanumerical
1228	characters (dashes and underscores are also allowed).
1229<tag>--type <sl/synthtype/</tag>
1230	The parameter, the speech synthesis type, is one of the following:
1231   <table loc="h">
1232   <tabular ca="|l|l|">
1233	<tt>none</tt>		| voice is mute @
1234	<tt>internet</tt>	| voice uses a remote speech synthesizer using TCP/IP@
1235	<tt>lpc-int</tt>	| voice uses an LPC synthesizer (integer based)@
1236	<tt>lpc-float</tt>	| voice uses an LPC synthesizer (floating point based)@
1237	<tt>lpc-vq</tt>		| voice uses an LPC synthesizer (vector quantified)@
1238	<tt>tdp</tt>		| voice uses a time domain synthesizer@
1239	<tt>mbrola</tt>		| voice uses an external MBROLA synthesizer@
1240   </tabular>
1241   </table>
1242	This option may influence other voice dependent options quite significantly,
1243	as some of them are speech synthesis type dependent.
1244<tag>--location <sl/&lsqb;&lsqb;voice&rsqb;&lsqb;.language&rsqb;&commat;&rsqb;hostname&lsqb;:port&rsqb;/ </tag>
1245	If this speech synthesis is of the <tt/internet/ type,
1246	this option can be used to set the hostname of the remote
1247	server.  If the remote server is listening on a non-standard port number
1248	(currently the standard port is considered to be 8778), the
1249	host name may be followed by a colon and the port number
1250	requested.  The desired remote voice and language may be optionally specified
1251	before the host name, separated with a <tt/&commat;/ character
1252	from the host name and with a dot from each other.  If a language name
1253	is specified, while a voice name is not, the language name should be
1254	preceded with a dot.
1255	The defaults for voice, language, and port number are
1256	remote default voice, local current language, and 8778,
1257	respectively.
1258
1259	For other synthesis types, this is a directory
1260	name which holds inventory related files (in the "inv"
1261	subtree), and is subject to normal file naming conventions,
1262	as described in <ref id="file-naming" name="file naming">.
1263<tag>--deadlock&lowbar;timeout <sl/n/</tag>
1264	The value is a time interval in seconds.  This option is meaningless
1265	for voices of type other then <tt/internet/.  For remote voices,
1266	if the remote server is successfully connected to, but doesn't send
1267	any TTSCP session header (nor anything else) to the local server
1268	acting as a TTSCP client, it is either severely misconfigured,
1269	overloaded, deadlocked (e.g. tries to use itself as a remote
1270	server for its current voice), or communicating over a congested, unreliable
1271	or slow network connection.
1272	A value of <tt/0/ is actually a very small positive value and negative
1273	values are not accepted.
1274<tag>--n&lowbar;segs <sl/n/ </tag>
1275	The total number of segments withing the segment inventory.
1276<tag>--models <sl/filename/</tag>
1277	The value is a file name. The file contains the segment inventory
1278	proper. Its format is speech synthesis type dependent.
1279<tag>--counts <sl/filename/</tag>
1280	The value is a file name. The file contains the lengths of individual
1281	segments in this segment inventory.
1282<tag>--dpt&lowbar;file <sl/filename/</tag>
1283	The value is a file name. The file contains the symbolic segment names
1284	for user output; each consists of exactly three characters on a line
1285	(indented with spaces from the left if necessary).  No blank lines
1286	nor comments are allowed.  This file usually comes with a diphone
1287	inventory.
1288<tag>--codebook <sl/filename/</tag>
1289	The value is a file name. The file contains the code book for
1290	the vector quantified LPC speech synthesis (<tt/lpc-vq/ type only).
1291<label id="snlfile-option">
1292<tag>--snl&lowbar;file <sl/filename/</tag>
1293	The value is a file name.  The file contains phone boundary information
1294	for individual segments in this segment inventory.  Each line of the file
1295	contains three space-separated items: segment number, relative position
1296	within the segment (valued from 1 to 1024, e.g. 512 is the middle of the segment)
1297	and the character (phone representation) which is to be associated with
1298	the position.  Lines not conforming to this specification are ignored.
1299	Currently, at most one label may be indicated for one segment, but it
1300	would be easy to get rid of this limit (at a cost of a few extra
1301	processor instructions).
1302	See also <ref id="labelphones-option" name="label&lowbar;phones option">.
1303<tag>--init&lowbar;f <sl/percentage/</tag>
1304	The auditory neutral integer value for the fundamental frequency.
1305	The typical value is 100.
1306<tag>--init&lowbar;i <sl/percentage/</tag>
1307	The auditory neutral integer value for the volume.
1308	The typical value is 100.
1309<tag>--init&lowbar;t <sl/percentage/</tag>
1310	The auditory neutral integer value for the prosodic duration of segments.
1311	The typical value is 100.  Of course, it is segment length relative
1312	(some segments are longer than others), just as the <tt/init&lowbar;f/
1313	and <tt/init&lowbar;i/ options are.
1314<tag>--channel <sl/channeltype/</tag>
1315	The parameter, the output channel type, is one of the following:
1316   <table loc="h">
1317   <tabular ca="|l|l|">
1318	<tt>mono</tt>	| mono output signal @
1319	<tt>left</tt>	| stereo output signal, right channel is mute@
1320	<tt>right</tt>	| stereo output signal, left channel is mute@
1321	<tt>both</tt>	| stereo output signal, two identical channels@
1322   </tabular>
1323   </table>
1324	This option may be used to simulate a dialogue by assigning
1325	different output channels to different speakers.
1326<tag>--inv&lowbar;sampling&lowbar;rate <sl/Hz/</tag>
1327	The sampling rate this segment inventory has been recorded at.
1328	The algorithms we use also imply that we use the same frequency
1329	for the synthesis.
1330<tag>--sample&lowbar;size <sl/bits/</tag>
1331	Number of bits per sample.  If some kind of a stereo output
1332	is turned on, this option sets the number of bits per channel.
1333	Again, this is related to the quality of recording of the
1334	segment inventory.  We currently only support 8 and 16 bits.
1335<tag>--sampa&lowbar;alternate <sl/name/</tag>
1336	For MBROLA voices, you can indicate non-standard SAMPA
1337	variants here; the value of <tt/SAMPA/ means the standard SAMPA; for voices
1338	where there is no SAMPA notation fixed yet,
1339	a different name should be used.  The alternative SAMPA
1340	mapping to Unicode will be loaded from file
1341	<tt/sampa-alt-name.txt/ where <tt/name/ is specified by this
1342	parameter, or <tt/sampa-std.txt/ if it is specified as <tt/SAMPA/.
1343</descrip>
1344
1345
1346<sect2> Prosody Generation
1347<p>
1348
1349The options in this subsection control how the resulting per segment prosodic
1350information is assembled from the prosodic adjustments done to the
1351structural units by the rules.  It actually controls the interpretation
1352of those adjustments themselves.
1353
1354<descrip>
1355<tag>--pros&lowbar;weight* <sl/weight/</tag>
1356	The asterisk stands for a &commat;-separated symbolic name of a linguistic description
1357	level, such as <tt/phone/, <tt/syll/ or <tt/word/.  The parameter
1358	is an integer value primarily used for enabling (1) or disabling (0)
1359	certain levels of description when the total quantities for a segment
1360	are computed.  It must however be understood that when some rules
1361	like <tt/smooth/ are applied, the prosodic values are distributed
1362	down to the target level of such a rule and cannot be distinguished
1363	anymore.  If higher values than 1 are set, that will multiply the
1364	prosodic effect assigned to a level correspondingly.
1365<tag>--pros&lowbar;eff&lowbar;multiply&lowbar;*</tag>
1366	The asterisk stands for a single letter, <tt/f/, <tt/i/ or <tt/t/,
1367	that is, a prosodic quantity symbol.  This option controls how
1368	are the prosodic values for individual levels of description
1369	combined.  If it is off, they are summed up (taking the corresponding <tt/pros&lowbar;neutral&lowbar;*/
1370	as the baseline); if it is on, they get multiplied with each other
1371	(again taking <tt/pros&lowbar;neutral&lowbar;*/ as the neutral value). See <ref id="prosody"
1372	name="prosody modelling"> for more information and examples.
1373<tag>--pros&lowbar;neutral&lowbar;*</tag>
1374	The asterisk stands for a single letter, <tt/f/, <tt/i/ or <tt/t/,
1375	that is, a prosodic quantity symbol.  This option controls what
1376	prosodic value is to be considered neutral for use in Epos. The current
1377	configuration file use 100 and prosodic adjustments are essentially
1378	percentages, but a higher value could be used for more fine grained
1379	prosody control (provided the synthesis algorithms can take advantage
1380	of it).
1381</descrip>
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393<!-- unselected options:
1394.cow, .loaded, .token_esc, .value_esc, .slash_esc, .use_segs, warnings, .input_text,
1395.sd_in, .sd_out,
1396-->
1397
1398
1399
1400
1401
1402
1403<sect2> File Naming <label id="file-naming">
1404<p>
1405In Epos, most of the files ever opened are located in a single directory tree.
1406This tree usually starts at <tt>/usr/local/share/epos</tt>, but it can be changed at
1407configure time.  For example, after issuing
1408
1409<tscreen>
1410<verb>
1411cd src
1412./configure --prefix=/usr/local
1413</verb>
1414</tscreen>
1415
1416and after recompiling and reinstalling Epos, the files will be searched under
1417<tt>/usr/local/lib/epos</tt>.  See <tt>configure --help</tt> for more
1418details on configuring Epos.  It is also possible to use the command
1419line option <tt>base&lowbar;dir</tt> at Epos startup to change the
1420tree base without recompilation.  Files of the same type -- and related
1421to the same language or voice, if applicable -- are located in the same subdirectory
1422by default.  Thus, the path name actually used by Epos consists of the base directory
1423path, the subdirectory (or directory for short) and a relative file name.
1424This makes it possible to move either the whole configuration structure, or
1425a specific part of it, or a single file to another place.
1426
1427The relative file name may contain slashes (directory name separators).
1428If they only occur in the middle of the name, the file name is still
1429relative to the directory it would normally
1430be located in.  However, if the file name begins with a slash or with <tt>./</tt>,
1431the file is treated as absolute or relative to the current working directory
1432of the Epos process, respectively.  The second case is thus slightly unreliable,
1433but the first one allows to place any file in an arbitrary directory.
1434Likewise, if the directory name begins with a slash, it is not considered
1435to be relative to the base directory.
1436
1437Changing these options in run time does not immediately cause re-reading the
1438renamed files.  All of the options in this section are <ref id="static" name="static">
1439unless stated otherwise.
1440
1441<descrip>
1442<tag>--base&lowbar;dir <sl/dirname/</tag>
1443	Only changeable on the command line.
1444	The value is an absolute directory name.  This option can be used to
1445	change the location of the whole configuration structure, which can also be
1446	used for trying out Epos before installing it:
1447<tscreen>
1448<verb>
1449cd src
1450./eposd --base_dir ../cfg
1451</verb>
1452</tscreen>
1453
1454<label id="pseudorootdir-option">
1455<tag>--pseudo&lowbar;root&lowbar;dir <sl/dirname/</tag>
1456	The value is a directory name.  Sets the path prepended
1457	to any file name referenced in the TTSCP <ref id="strm-cmd"
1458	name="stream command">. This subtree cannot be escaped with
1459	cute parent-of-root paths, but you can use symlinks to arbitrary
1460	accessible parts of the kernel name space, again, without
1461	giving access to the rest of the file system. Write access
1462	to this subtree to any user except Epos effectively gives him
1463	the privilege to use the Epos file access rights anywhere
1464	in the system through creating a symlink to the absolute root directory.
1465	This option is not static.
1466<tag>--ini&lowbar;dir <sl/dirname/</tag>
1467	The value is a directory name.  Sets the path to language
1468	independent configuration files.  This option is only changeable
1469	on the command line.
1470<tag>--fixed&lowbar;ini&lowbar;file <sl/filename/</tag>
1471	The value is a file name.  This option can be used to change the file name
1472	of the <tt>fixed.ini</tt> file, which usually contains operating system
1473	independent, relatively fixed default global configuration.  This option
1474	is only changeable on the command line.
1475<tag>--cfg&lowbar;file <sl/filename/</tag>
1476	The value is a file name. This option can be used to change the file name
1477	of the <tt>epos.ini</tt> file.
1478<tag>--local&lowbar;sound&lowbar;device <sl/filename/</tag>
1479	The value is a file name. This option can be used to change the file name
1480	of the local sound card device. In many unices,
1481	setting this to <tt>/dev/dsp</tt> is the recommended way to actually hear
1482	Epos speak. Other unices don't have <tt>/dev/dsp</tt>, however.  If the
1483	sound card has no file name at all, set this to the null device
1484	file name (that may be handled specially by the respective port of
1485	Epos).
1486<tag>--mbrola&lowbar;binary <sl/filename/</tag>
1487	The file name of the mbrola executable file, either absolute
1488	or relative to the location of the voice configuration
1489	(which allows using different binaries with different
1490	voices, although this option is not voice dependent).
1491	Because of a limitation of the interface the binary is spawned
1492	by Epos every time it is needed and so this option is not static.
1493<tag>--input&lowbar;file <sl/filename/</tag>
1494	The value is a file name. This option can be used to change the file name
1495	of the implicit input text used by the monolithic version of Epos.
1496	The value is language dependent.
1497<tag>--stddbg&lowbar;file <sl/filename/</tag>
1498	The value is a file name. This option can be used to change the file name
1499	whereto various debugging output should be written. If not set at all,
1500	<tt/stdout/ will be used.
1501<tag>--stdshriek&lowbar;file <sl/filename/</tag>
1502	The value is a file name. This option can be used to change the file name
1503	whereto output unrelated to the usual output should be printed. It includes
1504	especially error messages.
1505
1506<tag>--rules&lowbar;dir <sl/dirname/</tag>
1507	The language dependent value is a directory name.
1508	The directory shall contain the rules file.
1509<tag>--hash&lowbar;dir <sl/dirname/</tag>
1510	The language dependent value is a directory name.
1511	The directory shall contain any dictionaries used by the rules.
1512<tag>--input&lowbar;dir <sl/dirname/</tag>
1513	The language dependent value is a directory name.
1514	The directory shall contain the implicit input text file for the
1515	monolithic version of Epos.
1516<tag>--lang&lowbar;base&lowbar;dir <sl/dirname/</tag>
1517	The value is a global directory name, not a language dependent one.
1518	It serves as the base directory for looking up the newly constructed
1519	languages.
1520<tag>--voice&lowbar;base&lowbar;dir <sl/dirname/</tag>
1521	The value is a global directory name, not a language dependent one.
1522	It serves as the base directory for looking up the newly constructed
1523	voices.  It is however only used for configuration files, not
1524	for inventories.  A language dependent subdirectory name is
1525	appended to it.
1526<tag>--inv&lowbar;base&lowbar;dir <sl/dirname/</tag>
1527	The value is a global directory name, not a language dependent one.
1528	It serves as the base directory for looking up inventories and
1529	related data.  A voice dependent subdirectory name (the <tt/location/
1530	option) is appended to it.
1531<label id="unimapdir-option">
1532<tag>--unimap&lowbar;dir <sl/dirname/</tag>
1533	The value is global directory name.  It serves as the base
1534	directory for looking up mappings between individual character sets
1535	and the Unicode and also between SAMPA notation and Unicode.
1536<tag>--ttscp&lowbar;help&lowbar;dir <sl/dirname/</tag>
1537	The value is a directory name.  In this directory, TTSCP help files
1538	for individual TTSCP commands and other help topics are located.
1539	The contents of these files is sent to the TTSCP control connection
1540	in reply to a corresponding <tt/help/ command.  This option is not
1541	static.
1542<tag>--wav&lowbar;dir <sl/dirname/</tag>
1543	The value is a global directory name.
1544	Any waveform files created by Epos without explicit directory
1545	specification will be created in this directory.
1546	Applies only to the monolithic Epos.
1547</descrip>
1548
1549
1550<sect2> Daemon Startup Options
1551<p>
1552
1553All options in this subsection are <ref id="static" name="static">.
1554They also usually have no effect if changed during run time;
1555change them in the configuration files instead and request Epos
1556<ref id="reinitialization" name="reinitialization">.
1557
1558<descrip>
1559<tag>--preload&lowbar;voices</tag>
1560	When set, Epos tries to initialize the synthesizer
1561	configurations for all voices during the startup.
1562	This will cause unreachable remote voices and
1563	local voices without a speech inventory installed
1564	to disappear from the configuration.  This option
1565	will cause a considerable increase in memory consumption or
1566	startup time in some cases.
1567<tag>--prefer&lowbar;portaudio</tag>
1568	This option has no effect unless Epos has been compiled
1569	with the <tt>--enable-portaudio=yes</tt> option (a configure
1570	option, not an Epos option).  Epos normally supports an
1571	unlimited number of OSS sound cards, one of them representing
1572	the <tt>&num;localsound</tt> TTSCP output module.  With this
1573	option, Epos will use the PortAudio library for
1574	<tt>&num;localsound</tt> output instead.  Using this option
1575	has adverse impact on some functionality, such as the <tt/intr/
1576	TTSCP command.
1577<label id="daemon-log-option">
1578<tag>--daemon&lowbar;log <sl/filename/</tag>
1579	The value is a file name. This option can be used to set the file
1580	where various information about the Epos process is recorded.
1581	At the moment that is of little practical use except for debugging.
1582<tag>--syslog</tag>
1583	Log all TTSCP error messages with <tt>syslogd</tt>, if the syslog facility
1584	is available.  Due to the internal design of Epos, some of these
1585	messages are never actually sent over TTSCP to anyone - for example,
1586	a fatal misconfiguration condition detected before the first client
1587	connects; but they're logged anyway.
1588<tag>--full&lowbar;syslog</tag>
1589	Log all TTSCP completion messages with <tt>syslogd</tt>, if the syslog facility is
1590	available, including 1xx and 2xx class messages.
1591<label id="authpriv-option">
1592<tag>--authpriv</tag>
1593	Log all security relevant TTSCP completion messages with the
1594	facility <tt/authpriv/ instead of <tt/daemon/.  This includes
1595	messages concerning denial of access or incorrectly specified
1596	resource or password.  In that case, the <tt/err/ message level
1597	is used instead of <tt/warn/.  Notice that network errors
1598	are not affected by this option.
1599<tag>--log&lowbar;codes </tag>
1600	When set, all TTSCP messages are preceded with their numeric codes
1601	as in TTSCP when logging using <tt/syslogd/.
1602<tag>--server&lowbar;pwd&lowbar;file <sl/filename/</tag>
1603	The value is a file name. This option can be used to force the server
1604	to store its internal password to a file.  This password can then
1605	be used for TTSCP authentication in order to issue restricted commands
1606	such as <tt/down/.  If the file can not be created, no error is reported.
1607<tag>--debug&lowbar;password <sl/password/</tag>
1608	The value is a string.  The string may be used instead of the server
1609	password.  Use of this option usually makes TTSCP insecure
1610	and is discouraged.
1611<tag>--restr&lowbar;file <sl/filename/</tag>
1612	The file named by this parameter provides access control in TTSCP to individual
1613	options.  Its syntax is described <ref id="restricted-options" name="above">.
1614	This option can only be changed from the command line.
1615<tag>--listen&lowbar;port <sl/port/</tag>
1616	The TCP port number where the daemon should be listening for incoming
1617	TTSCP connections. The daemon will check if no other service is already
1618	running on that port and refuses to run if the port is already occupied.
1619<tag>--local&lowbar;only </tag>
1620	When this option is set, the daemon accepts no new connections on
1621	network interfaces except the localhost one.  This way, only clients
1622	running on the same machine can connect to the server.  If this option
1623	is not set, the server accepts new connections on all available
1624	interfaces.
1625</descrip>
1626
1627
1628<sect2> Debugging Options
1629<p>
1630
1631Various kinds of debugging information can be printed by Epos to standard
1632output.
1633The amount of it is configurable.  Most debugging information is printed throughout
1634the code using the <tt/D&lowbar;PRINT/ macro; other sources of debugging
1635information are not discussed in this subsection.  The <tt/D&lowbar;PRINT/
1636macro takes three parameters: the <em/severity level/, the
1637<em/format string/ and additional parameters as implied by the format
1638string.  The semantics is fully analogous to the <tt/printf/ family
1639of standard library functions with the additional condition that
1640only information whose severity level is sufficiently high under
1641current settings is printed.  There is also a variant of the macro,
1642<tt/DO&lowbar;PRINT/, which prints its message unconditionally.  This
1643is useful for temporary promotion of individual debugging messages
1644without losing their standard severity levels.  There is one more
1645variant, <tt/DBG/, which can be used for debugging printouts
1646which are not effectively handled by the <tt/printf/-style
1647function like dumping of arrays.
1648
1649Note also that <tt/&num;define DEBUGGING/
1650must be enabled in <tt/interf.h/, else the debugging macros are ignored
1651altogether.
1652
1653The severity level may have one of these values:
1654
1655<table loc="ht">
1656<tabular ca="|l|l|l|l|">
1657<hline>
1658level | debugging messages | easy invocation | typical examples @
1659<hline>
16603 | rare     | -D    | major events, warnings @
16612 | normal   | -DD   | informative messages @
16621 | verbose  | -DDD  | detailed debugging printouts @
16630 | detailed | -DDDD | miscellaneous chaos @
1664<hline>
1665</tabular>
1666<caption>
1667	Severity levels
1668</caption>
1669</table>
1670
1671Both options in this subsection are <ref id="static" name="static">.
1672
1673<descrip>
1674<tag>--debug</tag>
1675	This option must be <tt/on/ to provide any debugging information (except for
1676	daemon activity logging controlled by <ref id="daemon-log-option"
1677	name="the daemon&lowbar;log option"> and syslog logging.
1678<tag>--debug&lowbar;level</tag>
1679	The minimum severity level of debugging messages which should
1680	be printed.
1681</descrip>
1682
1683