Since last post I've decoupled the datatypes from the menu structure.
This makes it possible to define one structure for web and one for
osd. This could be usefull for long category descriptions that are
suitable for web but not for osd.
It also makes it a lot easier to move settings between category 
(I've started to tidy the config).

An unfortunate consequence is that the same setting can be part of
more than one category...

I've translated the local_conf.py.example to xml and changed some
variables from integer (1|0) to boolean (True|False).

Most of the config-options are handled but some of them are really
hard to nail.. I'm thinking of events, printfs and plugins.

I've tried to comment the different parts (but it was hard to write,
so it should be hard to read ;-)

<!DOCTYPE structure SYSTEM "config.dtd">

<config>
  <structures>
    <structure name="web">
      
      <category name="General">
        <settings>
          <setting ref="AUDIO_DEVICE"/>
          <setting ref="AUDIO_INPUT_DEVICE"/>
          <setting ref="MAJOR_AUDIO_CTRL"/>
          <setting ref="CONTROL_ALL_AUDIO"/>
          <setting ref="MAX_VOLUME"/>
          <setting ref="DEFAULT_VOLUME"/>
          <setting ref="TV_IN_VOLUME"/>
          <setting ref="VOLUME_VCR_IN"/>
          <setting ref="DEV_MIXER"/>
          <setting ref="START_FULLSCREEN_X"/>
          <setting ref="ENABLE_SHUTDOWN_SYS"/>
          <setting ref="ROM_DRIVES"/>
          <setting ref="HIDE_UNUSUSABLE_DISCS"/>
          <setting ref="ROM_SPEED"/>
          
I don't know how to do this:
          <!--
          # see src/event.py for a list of all possible events. You can add more 
keybindings
          # by adding them to the correct hash. E.g. pressing 1 should send 'contrast 
-100'
          # to mplayer, just write the folling line to your local_conf.py
          #
          # EVENTS['video']['1'] = Event(VIDEO_SEND_MPLAYER_CMD, arg='contrast -100')
          -->
        </settings>
      </category>


The whole plugin-config is a bit cloudy. Maybe it should be moved to the user-data

      <category name="Plugins">
        <description>
          # you can remove all plugins loaded in freevo_config.py
          #
          # Examples:
          # plugin.remove(plugin_tv) or
          # plugin.remove('tv') will remove the tv module from the main menu
          # plugin.remove(rom_plugins['image']) will remove the rom drives from the
          #   image main menu,
          # plugin.remove('rom_drives.rom_items') will remove the rom drives from all
          #   menus
          
          
          # Use this ivtv_record instead if you have an ivtv based card (PVR-250/350)
          # and want freevo to do everthing for you.  TV_SETTINGS must be set 
          # correctly.  To use you need the following two lines in local_conf.py:
          # plugin.remove('tv.generic_record')
          # plugin_record = plugin.activate('tv.ivtv_record')
          
          # For joystick support:
          # plugin.activate('joy')
          
          # Idlebar plugin:
          
          # plugin.activate('idlebar')
          # plugin.activate('idlebar.mail',    level=10, 
args=('/var/spool/mail/dmeyer', ))
          # plugin.activate('idlebar.tv',      level=20)
          # plugin.activate('idlebar.weather', level=30, args=('EDDW',))
          # plugin.activate('idlebar.clock',   level=50)
          # plugin.activate('idlebar.cdstatus',   level=20)
          # plugin.activate('idlebar.holidays',   level=20)
        </description>
        <settings>

          <!-- plugin.remove(plugin_tv) or -->
          <remove variable="plugin_tv"/>

          <!-- plugin.remove('tv') will remove the tv module from the main menu -->
          <remove plugin="tv"/>
          
          <!-- plugin.remove('tv.generic_record') -->
          <remove plugin="tv.generic_record"/>

          <!-- plugin_record = plugin.activate('tv.ivtv_record') -->
          <set variable="plugin_record">
            <activate plugin="tv.ivtv_record"/>
          </set>
          
          <activate plugin="idlebar"/>
          <activate plugin="idebar.weather"/>
        </settings>
      </category>

      <category name="directory">
        <description>
          <![CDATA[
            You can change all this variables in the folder.fxd on a per folder
            basis
          
            Example:
            <freevo>
              <folder title="Title of the directory" img-cover="nice-cover.png">
                <setvar name="directory_autoplay_single_item" val="0"/>
                <info>
                  <content>A small description of the directory</content>
                </info>
              </folder>
            </freevo>
          ]]>
        </description>
        <settings>
          <setting ref="MOVIE_PLAYLISTS"/>
          <setting ref="DIRECTORY_SORT_BY_DATE"/>
          <setting ref="DIRECTORY_REVERSE_SORT"/>
          <setting ref="DIRECTORY_SMART_SORT"/>
          <setting ref="DIRECTORY_AUTOPLAY_SINGLE_ITEM"/>
          <setting ref="USE_MEDIAID_TAG_NAMES"/>
        </settings>
      </category>
      
      <category name="movie">
        <settings>
          <setting ref="DIR_MOVIES"/>
          <setting ref="DIR_RECORD"/>
          <setting ref="MOVIE_DATA_DIR"/>
          <setting ref="TV_SHOW_DATA_DIR"/>
          <setting ref="COVER_DIR"/>
          <setting ref="ONLY_SCAN_DATADIR"/>
        </settings>
      </category>

      <category name="audio">
        <settings>
          <setting ref="AUDIO_RANDOM_PLAYLIST"/>
          <setting ref="AUDIO_FORMAT_STRING"/>
          <setting ref="DIR_AUDIO"/>
        </settings>
      </category>

      <category name="image viewer">
        <settings>
          <setting ref="DIR_IMAGES"/>
          <setting ref="SUFFIX_IMAGE_SSHOW"/>
        </settings>
      </category>
      
      <category name="Games">
        <description>
          MAME is an emulator for old arcade video games. It supports
          almost 2000 different games! The actual emulator is not included
          in Freevo, you'll need to download and install it
          separately. The main MAME website is at http://www.mame.net, but
          the version that is used here is at http://x.mame.net since the
          regular MAME is for Windows.
          
          SNES stands for Super Nintendo Entertainment System.  Freevo
          relies on other programs that are not included in Freevo to play
          these games.
        </description>
        <settings>
          <setting ref="DIR_GAMES"/>
          <setting ref="GAMES_NICE"/>
          <!--
          MAME_CACHE = '%s/romlist-%s.pickled' % (FREEVO_CACHEDIR, os.getuid())
          -->
        </settings>
      </category>

      <category name="osd">
        <settings>
          <setting ref="FORCE_SKIN_LAYOUT"/>
          <setting ref="SKIN_XML_FILE"/>
          <setting ref="SKIN_START_LAYOUT"/>
          <setting ref="SKIN_FORCE_TEXTVIEW_STYLE"/>
          <setting ref="SKIN_MEDIAMENU_FORCE_TEXTVIEW"/>
          <setting ref="lack_of_descriptive_name_1"/>
        </settings>
      </category>

      <category name="Remote Control">
        <description>
          you need a lircrc file, like this:
          
          begin
          prog = freevo
          button = select
          config = SELECT
          end
          
          Check contrib/lirc for examples and helpers/freevo2lirc.pl for a converter
          script.
        </description>
        <settings>
          <setting ref="LIRCRC"/>
          <setting ref="JOY_DEV"/>
          <!--
          # Supports as many buttons as your controller has,
          # but make sure there is a corresponding entry in JOY_CMDS.
          # You will also need to plugin.activate('joy').
          # FYI: new kernels use /dev/input/jsX, but joy.py will fall back on /dev/jsX
          #
          # JOY_CMDS = {
          #     'up'             : 'UP',
          #     'down'           : 'DOWN',
          #     'left'           : 'LEFT',
          #     'right'          : 'RIGHT',
          #     'button 1'       : 'PLAY',
          #     'button 2'       : 'PAUSE',
          #     'button 3'       : 'STOP',
          #     'button 4'       : 'ENTER',
          #     }
          -->
        </settings>
      </category>

      <category name="MPlayer">
        <settings>
          <setting ref="MPLAYER_AO_DEV"/>
          <setting ref="DVD_LANG_PREF"/>
          <setting ref="DVD_SUBTITLE_PREF"/>
          <setting ref="MPLAYER_NICE"/>

printf-ish syntax are hard to describe...
          <!--
          # MPLAYER_ARGS_DEF     = (('-ac mad, -autosync 100 -nolirc -autoq 100 
-screenw %s '
          #                         + '-screenh %s -fs') % (CONF.width, CONF.height))
          -->

          <!--
          # Mplayer options to use the software scaler. If your CPU is fast enough, you
          # might try a software scaler. You can disable it later for some larger files
          # with the mplayer option '-nosws'. If you have -framedrop or -hardframedrop
          # as mplayer option, the software scaler will also not be used.
          # A good value for this variable is
          # MPLAYER_SOFTWARE_SCALER = "-subfont-text-scale 5 -fs -sws 2 -vf 
scale=%s:-3,"\
          #                           "expand=%s:%s " % ( CONF.width, CONF.width, 
CONF.height )
          # older versions of mplayer may need
          # MPLAYER_SOFTWARE_SCALER = '-xy %s -sws 2 -vop scale:-1:-1:-1:100' % 
CONF.width
          #
          -->

          <setting ref="MPLAYER_ARGS"/>
          <setting ref="MPLAYER_SEEK_TIMEOUT"/>
          <setting ref="MPLAYER_AUTOCROP"/>
          <setting ref="MPLAYER_SET_AUDIO_DELAY"/>
        </settings>
      </category>

      <category name="Xine">
        <description>
          You need xine-ui version greater 0.9.21 to use the all the
          features of the xine plugin
        </description>
        <settings>
          <setting ref="XINE_AO_DEV"/>
          <setting ref="XINE_USE_VCDNAV"/>
        </settings>
      </category>

      <category name="TV">
        <description>
          Watching TV
        </description>
        <settings>
          <setting ref="lack_of_descriptive_name_2"/>
          <setting ref="TIMESHIFT_BUFFER_SIZE"/>

          <!--
          # TIMESHIFT_ENCODE_CMD = 'mp1e -m3 -c%s -p%s -r14,100' % \
          #                        (TV_SETTINGS.split()[3], AUDIO_INPUT_DEVICE) 
          -->
          
          <!--
          # TIMESHIFT_BUFFER = '%s/timeshift.mpeg' % FREEVO_CACHEDIR
          -->
          
          <!--
          # TV_CHANNEL_PROG = './chchan %(channel)s %(norm)s %(freqtable)s'
          -->
          
          <setting ref="TV_DATEFORMAT"/>
          <setting ref="TV_TIMEFORMAT"/>
          <setting ref="VIDEO_GROUPS"/>
        </settings>
      </category>

      <category name="Recording">
        <description>
          XXX Recording is still work in progress. You need to change
          XXX the entire string below to fit your local settings.
          XXX Eventually TV norm (PAL/NTSC) etc will be taken from the
          XXX other flags. VCR_xxx and TV_REC_xxx is not used yet!
          XXX You also need to have the recording daemon running, see
          XXX the website docs or the mailing lists if that fails.
          XXX Example cron script:
          XXX * * * * * /usr/local/freevo/freevo execute src/tv/record_daemon.py
        </description>
        <settings>
          <setting ref="REC_SCHEDULE_FILE"/>

          <!--
          # RECORD_SCHEDULE = '%s/record_schedule.xml' % FREEVO_CACHEDIR
          # if using the persitant record_server
          -->

          <setting ref="RECORD_SERVER_IP"/>
          <setting ref="RECORD_SERVER_PORT"/>

This should be split up:
          <!--
          # XXX Please see the mencoder docs for more info about the settings
          # XXX below. Some stuff must be changed (adevice), others probably
          # XXX should be ("Change"), or could be in some cases ("change?")
          # VCR_CMD = ('/usr/local/bin/mencoder ' +    # Change. Absolute path to the 
runtime
          #            '-tv on:driver=v4l:input=0' +   # Input 0 = Comp. V. in
          #            ':norm=NTSC' +                  # Change
          #            ':channel=%(channel)s' +         # Filled in by Freevo
          #            ':chanlist=us-cable' +          # Change
          #            ':width=320:height=240' +       # Change if needed
          #            ':outfmt=yv12' +                # Prob. ok, yuy2 might be faster
          #            ':device=/dev/video0' +         # CHANGE!
          #            ':adevice=/dev/dsp4' +          # CHANGE!
          #            ':audiorate=32000' +            # 44100 for better sound
          #            ':forceaudio:forcechan=1:' +    # Forced mono for bug in my 
driver
          #            'buffersize=64' +               # 64 Megabyte capture buffer, 
change?
          #            ' -ovc lavc -lavcopts ' +       # Mencoder lavcodec video codec
          #            'vcodec=mpeg4' +                # lavcodec mpeg-4
          #            ':vbitrate=1200:' +             # Change lower/higher, bitrate
          #            'keyint=30 ' +                  # Keyframe every 10 secs, 
change?
          #            '-oac mp3lame -lameopts ' +     # Use Lame for MP3 encoding
          #            'br=128:cbr:mode=3 ' +          # MP3 const. bitrate, 128 kbit/s
          #            '-ffourcc divx ' +              # Force 'divx' ident, better 
compat.
          #            '-endpos %(seconds)s ' +        # only mencoder uses this so do 
it here.
          #            '-o %(filename)s.avi ')                   # Filled in by Freevo
          -->

          <!--
          # XXX Not used yet
          # VCR_SETTINGS = '%s composite1 %s /dev/video0' % (CONF.tv, CONF.chanlist)
          -->

This could be an enum of tuples:
          <!--
          # TV capture size for viewing and recording. Max 768x480 for NTSC,
          # 768x576 for PAL. Set lower if you have a slow computer!
          #
          # For the 'tvtime' TV viewing application, only the horizontal size is used.
          # Set the horizontal size to 400 or 480 if you have a slow (~500MHz) 
computer,
          # it still looks OK, and the picture will not be as jerky.
          # The vertical size is always either fullscreen or 480/576 (NTSC/PAL)
          # for tvtime.
          # TV_VIEW_SIZE = (640, 480)
          -->

Same goes for this:
          <!--
          # XXX Not used yet
          # TV_REC_SIZE = (320, 240)   # Default for slower computers
          -->

I guess this should be an enum, but I don't know the other values...
          <!--
          # Input formats for viewing and recording. The format affect viewing
          # and recording performance. It is specific to your hardware, so read
          # the MPlayer docs and experiment with mplayer to see which one fits
          # your computer best.
          # TV_VIEW_OUTFMT = 'yuy2'   # Better quality, slower on pure FB/X11
          # XXX Not used yet
          # TV_REC_OUTFMT = 'yuy2'
          -->

This could also be split up:
          <!--
          # Settings for ivtv based cards such as the WinTV PVR-250/350.
          #
          # XXX TODO: Add descriptions and valid settings for each option.
          # bitrate in bps
          # stream type
          # Options are: 0 (mpeg2_ps), 1 (mpeg2_ts), 2 (mpeg1), 3 (mpeg2_pes_av),
          #              5 (mpeg2_pes_v), 7 (mpeg2_pes_a), 10 (dvd)
          
          # IVTV_OPTIONS = {
          #     'input'         : 4,
          #     'resolution'    : '720x480',
          #     'aspect'        : 2,
          #     'audio_bitmask' : 233,
          #     'bframes'       : 3,
          #     'bitrate_mode'  : 1,
          #     'bitrate'       : 4000000,
          #     'bitrate_peak'  : 4000000,
          #     'dnr_mode'      : 0,
          #     'dnr_spatial'   : 0,
          #     'dnr_temporal'  : 0,
          #     'dnr_type'      : 0,
          #     'framerate'     : 0,
          #     'framespergop'  : 15,
          #     'gop_closure'   : 1,
          #     'pulldown'      : 0,
          #     'stream_type'   : 10,
          # }
          -->

          <setting ref="FREQUENCY_TABLE"/>
        </settings>
      </category>

      <category name="TV Channels">
        <description>
          # TV Channels. This list contains a mapping from the displayed channel name
          # to the actual channel name as used by the TV watching application.
          # The display name must match the names from the XMLTV guide,
          # and the TV channel name must be what the tuner expects (usually a number).
          #
          # The TV menu is supposed to be supported by the XMLTV application for
          # up to date listings, but can be used without it to just display
          # the available channels.
          #
          # This list also determines the order in which the channels are displayed!
          # N.B.: You must delete the XMLTV cache file (e.g. 
/var/cache/freevo/TV.xml.pickled)
          #       if you make changes here and restart!
          #
          # Format: [('xmltv channel id', 'freevo display name', 'tv channel name'), 
...]
          #
          # If this variable is set to None (default), Freevo will try to auto-detect
          # the channel list based on the xmltv file. This doesn't work for all
          # xmltv grabber, e.g. the German list doesn't contain station lists. In this
          # case Freevo will output the possible list for you to add them manually.
          #
          # If auto-detection doesn't work or you want to edit the list, run
          # freevo tv_grab -query.
          #
          # Setting this variable to [] will deactivate the tv guide. If you don't have
          # a tv card, you may also want to add plugin.remove('tv') to remove the whole
          # tv menu.
          #
          # All channels listed here will be displayed on the TV menu, even if they're
          # not present in the XMLTV listing.
          # 
          #
          # The TV_CHANNELS-list can look like this:
          #
          # TV_CHANNELS = [('21', 'SVT1',              'E5'),
          #                ('22', 'SVT2',              'E3'),
          #                ('26', 'TV3',               'E10'),
          #                ('27', 'TV4',               'E6'),
          #                ('10', 'Kanal 5',           'E7'),
          #                ('60', 'Fox Kids',          'E8', 
('1234567','0600','1659')),
          #                ('16', 'TV6',               'E8', 
('1234567','1700','2359'), 
          #                                                  
('1234567','0000','0300')),
          #                ('14', 'MTV Europe',        'E11') ]
          #
          #
          # It will display "Fox Kids" from 06:00 to 16:59 and "TV6" from 17:00 to 
03:00. 
          # 03:00 to 06:00 it won't be displayed at all.
          #
        </description>
        <settings>
          <setting ref="TV_CHANNELS"/>
        </settings>
      </category>
      
      <category name="EPG">
        <description>
        </description>
        <settings>
          <setting ref="XMLTV_GRABBER"/>
          <setting ref="XMLTV_SORT"/>
          <setting ref="XMLTV_DAYS"/>

        </settings>
      </category>

      <category name="web">
        <description>
          Builtin WWW server settings
          # XXX THIS IS WORK IN PROGRESS! 
          #
          # To activate the build in web server, please activate the www plugin
          # in your local_conf.py:
          #
          # plugin.activate('www')
        </description>
        <settings>
          <setting ref="WWW_PORT"/>
          <setting ref="WWW_USERS"/>
        </settings>
      </category>
    </structure>
  </strctures>
Are you still with me? :-)
Here comes the definition of the datatypes:

  <datatypes>
    <!-- General -->
    <path name="AUDIO_DEVICE" default="/dev/dsp">
      <example>
        /dev/dsp0, /dev/audio, /dev/alsa/?
      </example>
    </path>
    <path name="AUDIO_INPUT_DEVICE" default="/dev/dsp1">
      <example>
        /dev/dsp0, /dev/audio, /dev/alsa/?
      </example>
    </path>
    <enum name="MAJOR_AUDIO_CTRL" default="VOL">
      <description>
        Freevo takes control over one audio ctrl
        'VOL', 'PCM' 'OGAIN' etc.
      </description>
      <value>VOL</value>
      <value>PCM</value>
      <value>OGAIN</value>
    </enum>
    <boolean name="CONTROL_ALL_AUDIO" default="True">
      <description>
        Should Freevo take complete control of audio
      </description>
    </boolean>
    <integer name="MAX_VOLUME" default="90">
      <description>
        Set what you want maximum volume level to be.
      </description>
      <range from="0" to="100" step="5"/>
    </integer>
    <integer name="DEFAULT_VOLUME" default="40">
      <description>
        Set default volume level.
      </description>
      <range from="0" to="100" step="5"/>
    </integer>
    <integer name="TV_IN_VOLUME" default="60">
      <description>
        Set this to your preferred level 0-100.
      </description>
      <range from="0" to="100" step="5"/>
    </integer>
    <integer name="VCR_IN_VOLUME" default="90">
      <description>
        If you use different input from TV
      </description>
      <range from="0" to="100" step="5"/>
    </integer>
    <path name="DEV_MIXER" default="/dev/mixer">
      <description>
        mixer device
      </description>
    </path>
    <boolean name="START_FULLSCREEN_X" default="False">
      <description>
        Start in fullscreen mode if using x11 or xv.
      </description>
    </boolean>
    <boolean name="ENABLE_SHUTDOWN_SYS" default="False">
      <description>
        Performs a whole system shutdown at SHUTDOWN!  For
        standalone boxes.
      </description>
    </boolean>
    <list name="ROM_DRIVES" default="None">
      <description>
        # Physical ROM drives, multiple ones can be specified
        # by adding comma-seperated and quoted entries.
        #
        # Format [ ('mountdir1', 'devicename1', 'displayed name1'),
        #          ('mountdir2', 'devicename2', 'displayed name2'), ...]
        #
        # Set to None to autodetect drives in during startup from /etc/fstab,
        # set to [] to disable rom drive support at all
      </description>
      <tuple>
        <path>
          <description>
            mountdir
          </description>
        </path>
        <path>
          <description>
            devicename
          </description>
        </path>
        <string>
          <description>
            displayed name
          </description>
        </string>
      </tuple>
    </list>
    <boolean name="HIDE_UNUSABLE_DISCS" default="True">
      <description>
        hide discs from the wrong menu (e.g. VCDs in audio menu) and empty discs
      </description>
    </boolean>
    <integer name="ROM_SPEED" default="8">
      <description>
        try to set the drive speed of the rom drive a good value for
        playing movies with a silent drive is 8
      </description>
      <range from="1" to="52"/>
    </integer>

    <!-- Directory -->
    <boolean name="MOVIE_PLAYLISTS" default="False">
      <description>
        Should playlists be available for movies, and all movies in
        a directory be played in succession (unless you press
        STOP/EXIT)?
      </description>
    </boolean>


I don't know if this is the best approach (maybe the source should be
changed to check for 'no', 'yes' or 'no for normal....'):

    <enum name="DIRECTORY_SORT_BY_DATE" default="only for DIR_RECORD">
      <description>
        Should directories sorted by date instead of filename
        0 = no, 
        1 = yes, 
        2 = no for normal menus, yes for DIR_RECORD
      </description>
      <value displayed="no">0</value>
      <value displayed="yes">1</value>
      <value displayed="only for DIR_RECORD">2</value>
    </enum>
    <boolean name="DIRECTORY_REVERSE_SORT" default="False">
      <description>
        Show the items in the list in reverse order
      </description>
    </boolean>
    <boolean name="DIRECTORY_SMART_SORT" default="False">
      <description>
        Should we use "smart" sorting to ignore 'The' and 'A' in directories
      </description>
    </boolean>
    <boolean name="DIRECTORY_AUTOPLAY_SINGLE_ITEM" default="True">
      <description>
        Should freevo autoplay the item if only one item is in the directory
      </description>
    </boolean>
    <boolean name="USE_MEDIAID_TAG_NAMES" default="True">
      <description>
        Use media id tags to generate the name of the item. This
        should be 'True' all the time and only be disabled in
        directories with broken tags
      </description>
    </boolean>

    <!-- Movies -->
    <list name="DIR_MOVIES">
      <description>
        Where the movie files can be found.

        <!--
        # DIR_MOVIES = [ ('action movies', 'movies/action'),
        #                ('funny stuff', 'movies/comedy') ]
        -->
      </description>
      <tuple>
        <string>
          <description>Menu Entry</description>
        </string>
        <path>
          <description>
            Path
          </description>
        </path>
      </tuple>
    </list>
    <path name="DIR_RECORD" default="testfiles/Movies/Recorded">
      <description>
        XXX the path doesn't work from the www cgi scripts!
      </description>
    </path>
    <path name="MOVIE_DATA_DIR" default="movie-data/">
      <description>
        Directory for XML definitions for DVDs and VCDs. Items in
        this directory won't be in the MOVIE MAIN MENU, but will be
        used to find titles and images for the current DVD/VCD
      </description>
    </path>
    <path name="TV_SHOW_DATA_DIR" default="testfiles/tv-show-images/">
      <description>
        Directory containing images for tv shows. A tv show maches
        the regular expression TV_SHOW_REGEXP, e.g. "Name 3x10 -
        Title". If an image name.(png|jpg) (lowercase) is in this
        directory, it will be taken as cover image
      </description>
    </path>
    <path name="COVER_DIR" default="testfiles/Covers/">
      <description>
        Directory for cover images for CD/VCD/DVD and music CDs or
        when you can't add a cover image to the dir you want. Not
        for replacing the normal cover file function.
      </description>
    </path>
    <boolean name="ONLY_SCAN_DATADIR" default="True">
      <description>
        Only scan MOVIE_DATA_DIR and TV_SHOW_DATA_DIR for fxd files
        containing informations about a disc. If you only have the
        fxd files for discs in one of this directories (and
        subdirectories), set this to 1, it will speed up startup, 0
        may be needed if you have fxd files with disc links in your
        normal movie tree.
      </description>
    </boolean>

    <!-- Audio -->
    <boolean name="AUDIO_RANDOM_PLAYLIST" default="True">
      <description>
        Should a Random Playlist be generated for Music?
      </description>
    </boolean>


To make it "editable" in osd I've added alternatives:

    <string name="AUDIO_FORMAT_STRING">
      <description>
        Formatstring for the audio item names, possible strings:
        a = artist, n = tracknumber, t = title, y = year, f = filename
      </description>
      <alternative value="%(t)s">
        <description>
          This is the default - track name only
        </description>
      </alternative>
      <alternative value="%(n)s - %(t)s">
        <description>
          This will show the title and the track number 
        </description>
      </alternative>
    </string>
    <list name="DIR_AUDIO">
      <description>
        Where the Audio (mp3, ogg) files can be found.
        <!--
        # Format: [ ('Title1', 'directory1', 'mplayer options'),
        #           ('Title2', 'directory2'), ... ]
        # The 'mplayer options' field can be omitted.
        #
        # DIR_AUDIO = [ ('Test Files', 'testfiles/Music') ]
        -->
      </description>
      <tuple>
        <string>
          <description>
            Menu Entry
          </description>
        </string>
        <path>
          <description>
            path to directory
          </description>
        </path>
        <string implied="True" default="">
          <description>
            MPlayer options
          </description>
        </string>
      </tuple>
    </list>

    <!-- image viewer -->

    <list name="DIR_IMAGES">
      <description>
        Where the image files can be found.
        
        # DIR_IMAGES = [ ('Arizona 2002', '/video/SlideShows/arizona-2002.ssr'),
        #                ('Carmel 2002',  '/video/SlideShows/carmel.ssr'),
        #                ('Pics',  '/video/SlideShows') ]
      </description>
      <tuple>
        <string>
          <description>
            Menu Entry
          </description>
        </string>
        <path>
          <description>
            Path to images
          </description>
        </path>
      </tuple>
    </list>

      
    <list name="SUFFIX_IMAGE_SSHOW">
      <description>
        The viewer now supports a new type of menu entry, a
        slideshow file.  It also has the slideshow alarm signal
        handler for automated shows.  It uses a new configuration
        option:
        
        # SUFFIX_IMAGE_SSHOW = [ 'ssr' ]
        
        # This defines the file extensions of slideshow playlists. When
        # DIR_IMAGES is parsed, it will look for entries that match the
        # SUFFIX_IMAGE_SSHOW patterns. If it finds a match, then it will
        # classify that entry as a slideshow playlist instead of a
        # directory of images. For example:
      </description>
      <string>
        <description>
          suffix
        </description>
      </string>
    </list>

    <!-- games -->
    <!-- 
    # NEW GAMES SYSTEM :
    # =================
    # The DIR_GAMES structure is now build as follows :
    # <NAME>, <FOLDER>, (<TYPE>, <COMMAND_PATH>, <COMMAND_ARGS>, <IMAGE_PATH>, \
    # [<FILE_SUFFIX_FOR_GENERIC>])
    # where :
    #              - <TYPE> : Internal game types (MAME or SNES) or
    #                         generic one (GENERIC)
    #              - <COMMAND_PATH> : Emulator command
    #              - <COMMAND_ARGS> : Arguments for the emulator
    #              - <IMAGE_PATH>   : Optionnal path to the picture
    #              - <FILE_SUFFIX_FOR_GENERIC> : If the folder use the GENERIC
    #                                            type, then you must specify here
    #                                        the file suffix used by the emulator
    # DIR_GAMES = [ ('MAME', '/home/media/games/xmame/roms',     
    #                ('MAME', '/usr/local/bin/xmame.SDL', '-fullscreen -modenumber 6', 
    #                 '/home/media/games/xmame/shots', None)),
    #               ('SUPER NINTENDO', '/home/media/games/snes/roms', 
    #                ('SNES', '/usr/local/bin/zsnes', '-m -r 3 -k 100 -cs -u', '', 
None )),
    #               ('Visual Boy Advance', '/home/media/games/vba/roms/',
    #                ('GENERIC', '/usr/local/vba/VisualBoyAdvance', '', '', [ 'gba' ] 
)),
    #               ('MEGADRIVE', '/home/media/games/megadrive/roms', 
    #                ('GENESIS', '/usr/local/bin/generator-svgalib', '', '', '' )) ]
    
    # are used for the Mame arcade emulator.
    #
    -->
    <list name="DIR_GAMES">
      <tuple>
        <string>
          <description>
            NAME
          </description>
        </string>
        <path>
          <description>
            FOLDER
          </description>
        </path>
        <tuple>
          <string>
            <description>
        TYPE 
        Internal game types (MAME or SNES) or
        generic one (GENERIC)
            </description>
          </string>
          <path>
            <description>
        COMMAND_PATH
        Emulator command
            </description>
          </path>
          <string>
            <description>
        COMMAND_ARGS
        Arguments for the emulator
            </description>
          </string>
          <string>
            <description>
        IMAGE_PATH
        Optional path to the picture
            </description>
          </string>
          <list>
            <string>
        <description>
          FILE_SUFFIX_FOR_GENERIC

          If the folder use the GENERIC
          type, then you must specify here
          the file suffix used by the emulator
        </description>
            </string>
          </list>
        </tuple>
      </tuple>
    </list>
    <integer name="GAMES_NICE" default="-20">
      <description>
        Priority of the game process. 0 is unchanged,
        <0 is higher prio, >0 lower prio.
        prio <0 has no effect unless run as root.
      </description>
      <range from="-20" to="20"/>
    </integer>

    <!-- osd -->
    <integer name="FORCE_SKIN_LAYOUT" default="-1">
      <description>
        Force the skin to a specific layout number. -1 == no force. 
        The layout toggle with DISPLAY will be disabled
      </description>
      <range from="-1" to="2"/>
    </integer>
    <enum name="SKIN_XML_FILE" default="noia">
      <description>
        XML file for the skin
      </description>
      <value>noia</value>
      <value>info</value>
    </enum>
    <integer name="SKIN_START_LAYOUT" default="0">
      <description>
        Start the new skin with a specific layout. Default is 0,
        DISPLAY toggles between the different layouts. If a menu
        hasn't that layout number, 0 will be taken
      </description>
      <range from="0" to="4"/>
    </integer>
    <integer name="SKIN_FORCE_TEXTVIEW_STYLE" default="1">
      <description>
        Select a way when to switch to text view even if a image menu is there
        Possible values are
        1. force text view when all items have the same image and there are no
        directories
        2. Ignore the directories, always switch to text view when all images
        are the same
      </description>
      <range from="1" to="2"/>
    </integer>
    <boolean name="SKIN_MEDIAMENU_FORCE_TEXTVIEW" default="False">
      <description>
        Force text view for the mediamenu (first menu for video,
        audio, images and games).
      </description>
    </boolean>

I've only grouped these because of the description.
    <group name="lack_of_descriptive_name_1>
      <description>
          The following four variables have different settings in
        freevo_config.py based on the display you use.
      </description>
      <string name="OSD_SDL_EXEC_AFTER_CLOSE" default="">
        <description>
          Exec a script on the osd close.
        </description>
      </string>
      <string name="OSD_SDL_EXEC_AFTER_STARTUP" default="">
        <description>
          Exec a script after startup
        </description>
      </string>
      <boolean name="OVERSCAN_X" default="False"/>
      <boolean name="OVERSCAN_Y" default="False"/>
    </group>

    <!-- remote controll -->
    <path name="LIRCRC" default="/etc/freevo/lircrc"/>
    <integer name="JOY_DEV" default="0">
      <description>
        Set the Joy device to 0 to disable, 1 for js0, 2 for js1, etc...
      </description>
      <range from="0" to="10"/>
    </integer>

    <!-- MPlayer -->
    <string name="MPLAYER_AO_DEV" default="oss:/dev/dsp">
      <example>
        oss,sdl,alsa, see mplayer docs
      </example>
    </string>
    <string name="DVD_LANG_PREF" default="en,se,no">
      <description>
        Order of preferred languages on DVD.
      </description>
    </string>
    <string name="DVD_SUBTITLE_PREF" default="">
      <description> 
        Order of preferred subtitles on DVD.
      </description>
    </string>
    <integer name="MPLAYER_NICE" default="-20">
      <description>
        Priority of mplayer process. 0 is unchanged, <0 is higher
        prio, >0 lower prio.  prio <0 has no effect unless run as
        root.
      </description>
      <range from="-20" to="20"/>
    </integer>
    <dictionary name="MPLAYER_ARGS">
      <description>
        # Mplayer args for the different kinds of files. Possible values are dvd, vcd,
        # cd (audio cd), tv, all extentions and default if nothing matches
        #
        # MPLAYER_ARGS = { 'dvd': '-cache 8192',
        #                  'vcd': '-cache 4096',
        #                  'cd' : '-cache 500 -cdda speed=1',
        #                  'tv' : '-nocache',
        #                  'avi': '-cache 5000 -idx',
        #                  'rm' : '-cache 5000 -forceidx',
        #                  'default': '-cache 5000'
        #                  }
      </description>
      <key>
        <string/>
      </key>
      <value>
        <string/>
      </value>
    </dictionary>
    <integer name="MPLAYER_SEEK_TIMEOUT" default="8">
      <description>
        Number of seconds before seek value times out. This is used
        when seeking to a specified number of minutes into a
        movie. If you make a mistake or change your mind, the seek
        value will timeout after this many seconds
      </description>
      <range from="0" to="60"/>
    </integer>
    <boolean name="MPLAYER_AUTOCROP" default="False">
      <description>
        Autocrop files when playing. This is usefull for files in
        4:3 with black bars on a 16:9 tv
      </description>
    </boolean>
    <boolean name="MPLAYER_SET_AUDIO_DELAY" default="False">
      <description>
        Try to set correct 'delay' and 'mc' values for mplayer based
        on the delay from mmpython. This should correct av sync
        problems with mplayer for some files, but may also break
        things (I don't know, that's why it's disabled as
        default). WARNING: when seeking, the playpack is out of sync
        for some seconds! This only works with mmpython > 0.2
      </description>
    </boolean>

    <!-- Xine -->
    <enum name="XINE_AO_DEV" default="oss">
      <example>
        alsa or oss
      </example>
      <value>alsa</value>
      <value>oss</value>
    </enum>
    <boolean name="XINE_USE_VCDNAV" default="False">
      <description>
        use xine for VCD nav playback
      </description>
    </boolean>

    <!-- TV -->
    <group name="lack_of_descriptive_name_2">
      <description>
        <!--
        # XXX You must change this to fit your local conditions!
        #
        # TV_SETTINGS  = 'NORM INPUT CHANLIST DEVICE'
        # VCR_SETTINGS = 'NORM INPUT CHANLIST DEVICE'
        #
        # NORM: ntsc, pal, secam
        # INPUT: television, composite1
        # CHANLIST: One of the following:
        #
        # us-bcast, us-cable, us-cable-hrc, japan-bcast, japan-cable, europe-west,
        # europe-east, italy, newzealand, australia, ireland, france, china-bcast,
        # southafrica, argentina, canada-cable
        #
        # DEVICE: Usually /dev/video0, but might be /dev/video1 instead for multiple
        # boards.
        #
        # TV_SETTINGS = '%s television %s /dev/video0' % (CONF.tv, CONF.chanlist)
        -->
      </description>
      <enum name="TV_NORM" default="pal">
        <value>ntsc</value>
        <value>pal</value>
        <value>secam</value>
      </string>
      <enum name="TV_INPUT" default="television">
        <value>television</value>
        <value>compsite1</value>
      </enum>
      <enum name="TV_CHANLIST" default="europe-west">
        <value>us-bcast</value>
        <value>us-cable</value>
        <value>us-cable-hrc</value>
        <value>japan-bcast</value>
        <value>japan-cable</value>
        <value>europe-west</value>
        <value>europe-east</value>
        <value>italy</value>
        <value>newzealand</value>
        <value>australia</value>
        <value>ireland</value>
        <value>france</value>
        <value>china-bcast</value>
        <value>southafrica</value>
        <value>argentina</value>
        <value>canada-cable</value>
      </enum>
      <path name="TV_DEVICE">
        <example>
          Usually /dev/video0, but might be /dev/video1 instead for multiple
          boards.
        </example>
      </path>
    </group>
    <integer name="TIMESHIFT_BUFFER_SIZE" default="128">
      <description>
        This is the size (in MB) of the timeshift buffer, ie: how
        long you can pause tv for.  This is set to a low default
        because the default buffer location is under FREEVO_CACHEDIR
        and we don't want to blow /var or /tmp.
      </description>
    </integer>
    <string name="TV_DATEFORMAT" default="%e-%b">
      <alternative value="%e-%b">
        <description>
          Day-Month: 11-Jun
        </description>
      </alternative>
    </string>
    <string name="TV_TIMEFORMAT" default="%H:%M">
      <alternative value="%H:%M">
        <description>
          Hour-Minute 14:05
        </description>
      </alternative>
    </string>
    <list name="VIDEO_GROUPS">
      <videogroup>
        <description>
          explanation....
        </description>
        <path name="vdev">
          <description>
            video device
          </description>
        </path>
        <path name="adev" implied="None">
          <description>
            Audio device
          </description>
        </path>
        <enum name="input_type" default="tuner">
          <value>tuner</value>
          <value>webcam</value>
        </enum>
        <string name="tuner_type" default="external"/>
        <string name="tuner_norm" default="NTSC"/>
        <string name="tuner_chanlist" default="us-cable"/>
        <string name="tuner_chan" default="3"/>
        <string name="external_tuner" default="tv.irtrans_echostar"/>
        <path name="et_conf" default="/etc/lircd-transmit.conf">
          <description>
            ?
          </description>
        </path>
        <path name="et_device" default="/dev/trans">
          <description>
            ?
          </description>
        </path>
        <path name="et_remote" default="JVC_4700">
          <description>
            ?
          </description>
        </path>
        <string name="desc" default="Bell ExpressVu">
          <description>
            ?
          </description>
        </string>
        <boolean name="recordable" default="True">
          <description>
            ?
          </description>
        </boolean>
      </videogroup>
    </list>

    <!-- Recording -->
    <path name="REC_SCHEDULE_FILE" default="/tmp/freevo_record.lst">
      <description>
        if using record_daemon from cron
      </description>
    </path>
    <string name="RECORD_SERVER_IP" default="localhost"/>
    <integer name="RECORD_SERVER_PORT" default="18001"/>
    <dictionary name="FREQUENCY_TABLE">
      <description>
        This is only used when Freevo changes the channel natively.
        This is only the case if you are using V4L2 and any of the following plugins:
        timeshift, ivtv_record, ivtv_basic_tv.
        For the standard frequancy tables see src/tv/freq.py.  To add your own just 
        replace tuner_id in the following example with a valid tuner id (ie: '5' or
        'BBC1') and a frequency in KHz.  You may have as many entries as you like,
        anything here will simply override a coresponding entry in your standard
        frequency table and you can also have entries here that are not present i
        there.

        # FREQUENCY_TABLE = {
        #     'tuner_id'   :    55250,
        # }
      </description>
      <key>
        <string/>
      </key>
      <value>
        <integer/>
      </value>
    </dictionary>

    <!-- TV Channels -->
    <list name="TV_CHANNELS">
      <tuple>
        <string>
          <description>
            ID
          </description>
        </string>
        <string>
          <description>
            Display Name
          </description>
        </string>
        <string>
          <description>
            Frequency?
          </description>
        </string>
        <tuple optional="True">
          <description>
            Timedependent channels:

            As you can see the list takes optional tuples:
            ( 'DAYS', 'START','END')
          </description>            
          <string>
            <description>
              days
            </description>
            <example>
              1234567 in days means all days.
              12345 would mean monday to friday.
            </example>
          </string>
          <clock>
            <description>
              start
            </description>
          </clock>
          <clock>
            <description>
              stop
            </description>
          </clock>
        </tuple>
      </tuple>
    </list>

    <!-- EPG -->
    <string name="XMLTV_GRABBER" default="">
      <description>  
        Program to grab xmltv listings. To get a grabber, you need to download
        xmltv. A possible value for users in the USA is tv_grab_na
        Use the tv_grab helper to grab the listings and cache them. Start
        'freevo tv_grab --help' for more informations.
      </description>
    </string>
    <string name="XMLTV_SORT" default="">
      <description>
        If you want to run tv_sort on your listings add the path to
        tv_sort here.  tv_sort will make sure all your programs have
        proper stop times, otherwise programs might get cut off at
        midnight.
      </description>
    </string>
    <integer name="XMLTV_DAYS" default="3">
      <description>
        Number of days the grabber should get
      </description>
      <range from="1" to="30"/>
    </integer>

    <!-- WEB -->
    <integer name="WWW_PORT" default="8080">
      <description>
        Web server port number. 80 is the standard port, but is
        often taken already by apache, and cannot be used unless the
        server runs as root. Use port 8080 as the default, change to
        80 if needed.  
      </description>
    </integer>
    <dictionary name="WWW_USERS">
      <description>
        Username / Password combinations to login to the web interface.
        These should be overridden in local_conf.py

        # WWW_USERS = { "user1" : "changeme", 
        #            "optional" : "changeme2" }
      </description>
      <key>
        <string/>
      </key>
      <value>
        <password/>
      </value>
    </dictionary>
  </datatypes>
</config>

-- 
Eirik Meland

A: Top posters.
Q: What is the most annoying thing on Usenet?


-------------------------------------------------------
This SF.net email is sponsored by: The SF.net Donation Program.
Do you like what SourceForge.net is doing for the Open
Source Community?  Make a contribution, and help us add new
features and functionality. Click here: http://sourceforge.net/donate/
_______________________________________________
Freevo-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freevo-devel

Reply via email to