summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--abs/core/LinHES-config/LinHES-release2
-rw-r--r--abs/core/LinHES-config/LinHES.install1
-rw-r--r--abs/core/LinHES-config/PKGBUILD142
-rw-r--r--abs/core/LinHES-config/README4
-rwxr-xr-xabs/core/LinHES-config/mv_advanced.py12
-rwxr-xr-xabs/core/LinHES-config/mv_common.py31
-rwxr-xr-xabs/core/LinHES-config/mv_ddns.py29
-rwxr-xr-xabs/core/LinHES-config/mv_hostype.py5
-rwxr-xr-xabs/core/LinHES-config/mv_ir.py21
-rwxr-xr-xabs/core/LinHES-config/mv_network.py11
-rwxr-xr-xabs/core/LinHES-config/mv_screensaver.py3
-rwxr-xr-xabs/core/LinHES-config/mv_smolt.py3
-rwxr-xr-xabs/core/LinHES-config/mv_software.py14
-rwxr-xr-xabs/core/LinHES-config/mv_webuser.py4
-rw-r--r--abs/core/LinHES-config/mythvantage.cfg21
-rwxr-xr-xabs/core/LinHES-config/restore_default_settings.sh160
-rwxr-xr-xabs/core/LinHES-config/systemconfig.py48
-rwxr-xr-x[-rw-r--r--]abs/core/LinHES-system/LinHES-run44
-rw-r--r--abs/core/LinHES-system/LinHES.install10
-rwxr-xr-x[-rw-r--r--]abs/core/LinHES-system/PKGBUILD62
-rwxr-xr-xabs/core/LinHES-system/bin/mythbackup42
-rwxr-xr-xabs/core/LinHES-system/bin/mythrestore45
-rwxr-xr-xabs/core/LinHES-system/firstboot.sh33
-rwxr-xr-xabs/core/LinHES-system/mythfrontend-start22
-rw-r--r--abs/core/LinHES-system/smolt.cron11
-rwxr-xr-xabs/core/LinHES-system/tvterm.sh25
-rw-r--r--abs/core/LinHES-system/unclutter-toggle.sh5
-rw-r--r--abs/core/atl1e/PKGBUILD27
-rw-r--r--abs/core/atl1e/atl1e.install23
-rw-r--r--abs/core/autoconf/PKGBUILD4
-rw-r--r--abs/core/automake/PKGBUILD6
-rw-r--r--abs/core/catalyst/PKGBUILD153
-rw-r--r--abs/core/catalyst/amdcccle.desktop11
-rw-r--r--abs/core/catalyst/atieventsd.sh41
-rw-r--r--abs/core/catalyst/catalyst.install34
-rw-r--r--abs/core/catalyst/catalyst.sh11
-rw-r--r--abs/core/catalyst/fglrx-2.6.33.patch228
-rw-r--r--abs/core/curl/ChangeLog45
-rw-r--r--abs/core/curl/PKGBUILD32
-rw-r--r--abs/core/diskless-legacy/PKGBUILD4
-rwxr-xr-xabs/core/diskless-legacy/config_diskless_frontend.bash110
-rw-r--r--abs/core/dvb-firmware/PKGBUILD12
-rw-r--r--abs/core/dvb-firmware/dvb-usb-af9015.fwbin0 -> 15913 bytes
-rw-r--r--abs/core/filesystem/PKGBUILD43
-rw-r--r--abs/core/filesystem/__changelog2
-rw-r--r--abs/core/filesystem/nsswitch.conf1
-rw-r--r--abs/core/fluxbox/PKGBUILD10
-rw-r--r--abs/core/fluxbox/fluxbox_fullscreen_focus.patch12
-rw-r--r--abs/core/fluxbox/keys6
-rwxr-xr-xabs/core/hauppauge-hvr-firmware/PKGBUILD10
-rwxr-xr-xabs/core/hdhomerun/PKGBUILD6
-rw-r--r--abs/core/hdparm/PKGBUILD6
-rw-r--r--abs/core/kernel26/PKGBUILD10
-rw-r--r--abs/core/kernel26/coretemp.patch86
-rw-r--r--abs/core/libarchive/PKGBUILD14
-rw-r--r--abs/core/libfetch/Makefile88
-rw-r--r--abs/core/libfetch/PKGBUILD38
-rw-r--r--abs/core/libiec61883/PKGBUILD10
-rw-r--r--abs/core/libiec61883/libiec61883-1.2.0-Makefile.patch25
-rw-r--r--abs/core/libjpeg6/PKGBUILD28
-rw-r--r--abs/core/libjpeg6/libjpeg6.install25
-rw-r--r--abs/core/libvdpau/PKGBUILD27
-rw-r--r--abs/core/lighttpd/PKGBUILD17
-rw-r--r--abs/core/lighttpd/__changelog8
-rw-r--r--abs/core/lighttpd/lighttpd.conf4
-rwxr-xr-xabs/core/lighttpd/lighttpd.install2
-rwxr-xr-xabs/core/linhes-scripts/770-wrapper.sh2
-rw-r--r--abs/core/linhes-scripts/PKGBUILD48
-rw-r--r--abs/core/linhes-scripts/dct700-cc.sh27
-rw-r--r--abs/core/linhes-scripts/install_hulu.sh70
-rwxr-xr-xabs/core/linhes-scripts/limit-mythcommflag.sh95
-rw-r--r--abs/core/linhes-scripts/linhes-scripts.install7
-rw-r--r--abs/core/linhes-scripts/linhes_update.sh19
-rw-r--r--abs/core/linhes-scripts/linhes_update2.sh15
-rw-r--r--abs/core/linhes-scripts/linhes_update3.sh7
-rwxr-xr-xabs/core/linhes-scripts/myth2fuze318
-rwxr-xr-xabs/core/linhes-scripts/mythwelcome-config.py27
-rwxr-xr-xabs/core/linhes-scripts/mythwelcome-set-alarm.sh2
-rwxr-xr-xabs/core/linhes-scripts/qip7100-cc.sh25
-rw-r--r--abs/core/linhes-scripts/remove_php_mythvideo.sh13
-rwxr-xr-xabs/core/linhes-scripts/removecommercials.sh213
-rwxr-xr-xabs/core/linhes-scripts/screenshooter.sh4
-rwxr-xr-xabs/core/linhes-scripts/shootscreens-mythtv.sh14
-rwxr-xr-xabs/core/linhes-scripts/shootscreens.sh23
-rwxr-xr-xabs/core/linhes-scripts/system-cleanup.sh47
-rw-r--r--abs/core/linhes-scripts/update_schema_021_to_022.sh21
-rwxr-xr-xabs/core/linhes-scripts/upgrade_linhes.sh136
-rw-r--r--abs/core/linhes-scripts/upgrade_to_0.22.sh94
-rw-r--r--abs/core/linhes-theme/PKGBUILD19
-rw-r--r--abs/core/lirc-utils/lirc.logrotate3
-rw-r--r--abs/core/lirc/lirc_mod_mce.patch98
-rwxr-xr-xabs/core/local-website/htdocs/404.html25
-rwxr-xr-x[-rw-r--r--]abs/core/local-website/htdocs/index.html227
-rw-r--r--abs/core/local-website/htdocs/linhes/default/header.css123
-rw-r--r--abs/core/local-website/htdocs/linhes/default/menus.css221
-rw-r--r--abs/core/local-website/htdocs/linhes/default/programming.css150
-rw-r--r--abs/core/local-website/htdocs/linhes/default/style.css237
-rw-r--r--abs/core/local-website/htdocs/linhes/default/welcome.css62
-rw-r--r--abs/core/local-website/htdocs/linhes/js/AC_OETags.js269
-rw-r--r--abs/core/local-website/htdocs/linhes/js/flowplayer-3.1.1.min.js24
-rw-r--r--abs/core/local-website/htdocs/linhes/js/pngbehavior.htc97
-rw-r--r--abs/core/local-website/htdocs/linhes/js/prototip/classic_toolbar.gifbin0 -> 2850 bytes
-rw-r--r--abs/core/local-website/htdocs/linhes/js/prototip/close.gifbin0 -> 367 bytes
-rw-r--r--abs/core/local-website/htdocs/linhes/js/prototip/close_hover.gifbin0 -> 366 bytes
-rw-r--r--abs/core/local-website/htdocs/linhes/js/prototip/close_hover_red.gifbin0 -> 371 bytes
-rw-r--r--abs/core/local-website/htdocs/linhes/js/prototip/prototip.css65
-rw-r--r--abs/core/local-website/htdocs/linhes/js/prototip/prototip.js506
-rw-r--r--abs/core/local-website/htdocs/linhes/js/prototype.js4320
-rw-r--r--abs/core/local-website/htdocs/linhes/js/scriptaculous/builder.js136
-rw-r--r--abs/core/local-website/htdocs/linhes/js/scriptaculous/controls.js965
-rw-r--r--abs/core/local-website/htdocs/linhes/js/scriptaculous/dragdrop.js975
-rw-r--r--abs/core/local-website/htdocs/linhes/js/scriptaculous/effects.js1130
-rw-r--r--abs/core/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js750
-rw-r--r--abs/core/local-website/htdocs/linhes/js/scriptaculous/scriptaculous.js60
-rw-r--r--abs/core/local-website/htdocs/linhes/js/scriptaculous/slider.js275
-rw-r--r--abs/core/local-website/htdocs/linhes/js/scriptaculous/sound.js55
-rw-r--r--abs/core/local-website/htdocs/linhes/js/scriptaculous/unittest.js568
-rw-r--r--abs/core/local-website/htdocs/linhes/js/table_sort.js569
-rw-r--r--abs/core/local-website/htdocs/linhes/js/utils.js173
-rw-r--r--abs/core/local-website/htdocs/rrd/index.html4
-rwxr-xr-xabs/core/local-website/htdocs/wap.html118
-rw-r--r--abs/core/lzo2/PKGBUILD6
-rw-r--r--abs/core/mdadm/PKGBUILD16
-rw-r--r--abs/core/media_dirs/PKGBUILD10
-rw-r--r--abs/core/mjpegtools/PKGBUILD8
-rw-r--r--abs/core/mjpegtools/__changelog2
-rw-r--r--abs/core/mplayer-wrapper/PKGBUILD6
-rw-r--r--[-rwxr-xr-x]abs/core/mplayer-wrapper/mplayer-wrapper.pl95
-rw-r--r--abs/core/mysql/PKGBUILD8
-rw-r--r--abs/core/mysql/__changelog5
-rw-r--r--abs/core/mysql/my.cnf11
-rwxr-xr-xabs/core/mythdb-initial/PKGBUILD23
-rw-r--r--abs/core/mythdb-initial/__changelog25
-rw-r--r--abs/core/mythdb-initial/custom.sql3
-rw-r--r--abs/core/mythdb-initial/dvd_transcode_r6.sql105
-rw-r--r--abs/core/mythdb-initial/mc.sql2909
-rwxr-xr-xabs/core/mythdb-initial/mythdb.install35
-rwxr-xr-xabs/core/mythdb-initial/permissions.sql11
-rw-r--r--abs/core/mythstream/PKGBUILD37
-rw-r--r--abs/core/mythstream/mythstream.install23
-rw-r--r--abs/core/mythstream/mythstream.patch12
-rw-r--r--abs/core/mythstream/streams.res281
-rw-r--r--abs/core/mythtv/old/stable-0.21/glass-wide/PKGBUILD15
-rw-r--r--abs/core/mythtv/old/stable-0.21/morethemes/PKGBUILD32
-rw-r--r--abs/core/mythtv/old/stable-0.21/mytharchive/PKGBUILD35
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythbrowser/PKGBUILD33
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythcontrols/PKGBUILD32
-rwxr-xr-xabs/core/mythtv/old/stable-0.21/mythdb-initial/PKGBUILD21
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythdb-initial/__changelog25
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythdb-initial/mc.sql2835
-rwxr-xr-xabs/core/mythtv/old/stable-0.21/mythdb-initial/mythdb.install31
-rwxr-xr-xabs/core/mythtv/old/stable-0.21/mythdb-initial/permissions.sql11
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythflix/PKGBUILD41
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythgallery/PKGBUILD33
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythgame/PKGBUILD32
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythmovies/PKGBUILD33
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythmusic/PKGBUILD35
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythmusic/music_flac.patch293
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythmusic/mythmusic-0.21.patch22
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythnews/PKGBUILD32
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythphone/PKGBUILD32
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythsmolt/PKGBUILD26
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythstream/PKGBUILD35
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythstream/mythstream.diff79
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythstream/mythstream.install23
-rw-r--r--abs/core/mythtv/old/stable-0.21/myththemes/PKGBUILD33
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/2.6.28_dvb_api_version.diff22
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/PKGBUILD98
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/QUICKSTART.archlinux69
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/gnome_screensaver.patch18
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/HOST_SETTINGS.xml94
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/is.xml3
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/library.xml.patch15
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/linhes.xml60
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mainmenu.xml.patch39
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythbackup.xml20
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythrestore.xml20
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/optical_menu.xml.patch15
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/original/create_patch.sh5
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/setup.xml111
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/siriusmenu.xml419
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update.xml20
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update2.xml26
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/util_menu.xml.patch17
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/xmmenu.xml574
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/mpegpspatch66
-rwxr-xr-xabs/core/mythtv/old/stable-0.21/mythtv/mythbackend38
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/mythbackend.lr9
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/mythfrontend.lr9
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.cpp.patch125
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.h.patch25
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/mythtv.install55
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/pretty2
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythtv/smolt_jump.patch9
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythvideo/PKGBUILD41
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythvideo/mtd36
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch151
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo.install20
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythweather/PKGBUILD32
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythweb/PKGBUILD39
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythweb/mythweb.install13
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythweb/patch/2923-mythweb-gallery-English_GB_lang.diff102
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythweb/patch/icons.tar.gzbin0 -> 14759 bytes
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb.pl.diff23
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb_gallery_updated1.diff1657
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythweb/transcoders.patch23
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythweb/wiiweb.tar.bz2bin0 -> 23648 bytes
-rw-r--r--abs/core/mythtv/old/stable-0.21/mythzoneminder/PKGBUILD32
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/clean_all.sh22
-rw-r--r--abs/core/mythtv/old/stable-0.22/morethemes/PKGBUILD51
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/mp_all.sh33
-rw-r--r--abs/core/mythtv/old/stable-0.22/mytharchive/PKGBUILD52
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythbrowser/PKGBUILD52
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythflix/PKGBUILD52
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythgallery/PKGBUILD52
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythgame/PKGBUILD52
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythmovies/PKGBUILD52
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythmusic/PKGBUILD55
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythnews/PKGBUILD52
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythsmolt/PKGBUILD21
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythsmolt/smolt_init_login.sh39
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/myththemes/PKGBUILD54
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/mythtv/PKGBUILD111
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/changeset_r23616.patch38
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/HOST_SETTINGS.xml100
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/is.xml3
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/library.xml.patch12
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/linhes.xml59
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.tv.patch68
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.xml.patch39
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythbackup.xml20
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythrestore.xml20
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/optical_menu.xml.patch16
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/mythtv/menu-xml/original/create_patch.sh5
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/setup.xml111
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/siriusmenu.xml419
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/themeinfo.xml-tv48
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update.xml20
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update2.xml26
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/util_menu.xml.patch16
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/xmmenu.xml574
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/menutheme_fallback.patch18
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/mythtv/myth.sh4
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/mythtv/mythbackend38
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.lr9
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/mythtv/mythbackend.sh117
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/mythfrontend.lr9
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/mythtv/mythtv.install35
-rwxr-xr-xabs/core/mythtv/old/stable-0.22/mythtv/pretty10
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythtv/smolt_jump.patch30
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythvideo/PKGBUILD52
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythweather/PKGBUILD52
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythweb/PKGBUILD50
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythweb/mythweb.install10
-rw-r--r--abs/core/mythtv/old/stable-0.22/mythzoneminder/PKGBUILD52
-rwxr-xr-xabs/core/mythtv/stable-0.23/clean_all.sh22
-rwxr-xr-xabs/core/mythtv/stable-0.23/morethemes/PKGBUILD46
-rw-r--r--abs/core/mythtv/stable-0.23/morethemes/retro-wide_video-ui.xml-filetypes.patch22
-rwxr-xr-xabs/core/mythtv/stable-0.23/mp_all.sh30
-rw-r--r--abs/core/mythtv/stable-0.23/mytharchive/PKGBUILD47
-rw-r--r--abs/core/mythtv/stable-0.23/mythbrowser/PKGBUILD47
-rw-r--r--abs/core/mythtv/stable-0.23/mythgallery/PKGBUILD45
-rw-r--r--abs/core/mythtv/stable-0.23/mythgame/PKGBUILD47
-rw-r--r--abs/core/mythtv/stable-0.23/mythmovies/PKGBUILD48
-rw-r--r--abs/core/mythtv/stable-0.23/mythmusic/PKGBUILD51
-rw-r--r--abs/core/mythtv/stable-0.23/mythnetvision/PKGBUILD47
-rw-r--r--abs/core/mythtv/stable-0.23/mythnews/PKGBUILD47
-rw-r--r--abs/core/mythtv/stable-0.23/mythsmolt/PKGBUILD23
-rw-r--r--abs/core/mythtv/stable-0.23/mythsmolt/mythsmolt.patch8
-rw-r--r--abs/core/mythtv/stable-0.23/mythsmolt/smolt_init_login.sh39
-rwxr-xr-xabs/core/mythtv/stable-0.23/myththemes/PKGBUILD47
-rwxr-xr-xabs/core/mythtv/stable-0.23/mythtv/PKGBUILD96
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/HOST_SETTINGS.xml94
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/is.xml3
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/library.xml.patch12
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/linhes.xml59
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/mainmenu.xml.patch95
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythbackup.xml20
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythrestore.xml20
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/optical_menu.xml.patch16
-rwxr-xr-xabs/core/mythtv/stable-0.23/mythtv/menu-xml/original/create_patch.sh5
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/setup.xml111
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/siriusmenu.xml419
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/update.xml20
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/update2.xml26
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/util_menu.xml.patch16
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/menu-xml/xmmenu.xml574
-rwxr-xr-xabs/core/mythtv/stable-0.23/mythtv/myth.sh4
-rwxr-xr-xabs/core/mythtv/stable-0.23/mythtv/mythbackend38
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/mythbackend.lr9
-rwxr-xr-xabs/core/mythtv/stable-0.23/mythtv/mythbackend.sh117
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/mythfrontend.lr9
-rwxr-xr-xabs/core/mythtv/stable-0.23/mythtv/mythtv.install47
-rwxr-xr-xabs/core/mythtv/stable-0.23/mythtv/pretty9
-rw-r--r--abs/core/mythtv/stable-0.23/mythtv/smolt_jump.patch30
-rw-r--r--abs/core/mythtv/stable-0.23/mythvideo/PKGBUILD47
-rw-r--r--abs/core/mythtv/stable-0.23/mythweather/PKGBUILD47
-rw-r--r--abs/core/mythtv/stable-0.23/mythweb/PKGBUILD46
-rw-r--r--abs/core/mythtv/stable-0.23/mythweb/mythweb.install10
-rw-r--r--abs/core/mythtv/stable-0.23/mythzoneminder/PKGBUILD47
-rwxr-xr-xabs/core/mythtv/trunk/clean_all.sh2
-rw-r--r--abs/core/mythtv/trunk/morethemes/PKGBUILD15
-rwxr-xr-xabs/core/mythtv/trunk/mp_all.sh6
-rw-r--r--abs/core/mythtv/trunk/mytharchive/PKGBUILD3
-rw-r--r--abs/core/mythtv/trunk/mythbrowser/PKGBUILD3
-rw-r--r--abs/core/mythtv/trunk/mythgallery/PKGBUILD3
-rw-r--r--abs/core/mythtv/trunk/mythgame/PKGBUILD3
-rw-r--r--abs/core/mythtv/trunk/mythmovies/PKGBUILD3
-rw-r--r--abs/core/mythtv/trunk/mythmusic/PKGBUILD3
-rw-r--r--abs/core/mythtv/trunk/mythnetvision/PKGBUILD51
-rw-r--r--abs/core/mythtv/trunk/mythnews/PKGBUILD3
-rwxr-xr-xabs/core/mythtv/trunk/myththemes/PKGBUILD3
-rwxr-xr-xabs/core/mythtv/trunk/mythtv/PKGBUILD18
-rw-r--r--abs/core/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml115
-rw-r--r--abs/core/mythtv/trunk/mythtv/menu-xml/library.xml.patch10
-rw-r--r--abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml71
-rw-r--r--abs/core/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch13
-rw-r--r--abs/core/mythtv/trunk/mythtv/menu-xml/mythbackup.xml2
-rw-r--r--abs/core/mythtv/trunk/mythtv/menu-xml/mythrestore.xml2
-rw-r--r--abs/core/mythtv/trunk/mythtv/menu-xml/update.xml20
-rw-r--r--abs/core/mythtv/trunk/mythtv/menu-xml/update2.xml26
-rwxr-xr-xabs/core/mythtv/trunk/mythtv/pretty9
-rw-r--r--abs/core/mythtv/trunk/mythvideo/PKGBUILD3
-rw-r--r--abs/core/mythtv/trunk/mythweather/PKGBUILD3
-rw-r--r--abs/core/mythtv/trunk/mythweb/PKGBUILD8
-rw-r--r--abs/core/mythtv/trunk/mythzoneminder/PKGBUILD3
-rw-r--r--abs/core/nano/PKGBUILD8
-rwxr-xr-xabs/core/ntp/PKGBUILD12
-rw-r--r--abs/core/nvidia-173xx-utils/PKGBUILD62
-rw-r--r--abs/core/nvidia-173xx-utils/nvidia.install6
-rw-r--r--abs/core/nvidia-173xx-utils/supported-cards.txt236
-rw-r--r--abs/core/nvidia-173xx/PKGBUILD34
-rw-r--r--abs/core/nvidia-173xx/nvidia-96.43.11-2.6.30.patch103
-rw-r--r--abs/core/nvidia-173xx/nvidia.install14
-rw-r--r--abs/core/nvidia-71xx-utils/PKGBUILD8
-rw-r--r--abs/core/nvidia-71xx/PKGBUILD11
-rw-r--r--abs/core/nvidia-96xx-utils/PKGBUILD104
-rw-r--r--abs/core/nvidia-96xx-utils/nvidia.install6
-rw-r--r--abs/core/nvidia-96xx/PKGBUILD53
-rw-r--r--abs/core/nvidia-96xx/nvidia-96.43.11-2.6.30.patch103
-rw-r--r--abs/core/nvidia-96xx/nvidia.install14
-rw-r--r--abs/core/nvidia-utils/20-nvidia.conf6
-rw-r--r--abs/core/nvidia-utils/PKGBUILD163
-rw-r--r--abs/core/nvidia/PKGBUILD54
-rw-r--r--abs/core/openssh/PKGBUILD12
-rw-r--r--abs/core/openssh/sshd.patch15
-rw-r--r--abs/core/pacman/PKGBUILD42
-rw-r--r--abs/core/pacman/makepkg.conf107
-rw-r--r--abs/core/pacman/pacman.conf13
-rw-r--r--abs/core/pacman/pacman.install15
-rw-r--r--abs/core/pciutils/PKGBUILD6
-rw-r--r--abs/core/perl_modules/libxml-perl/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-class-factory-util/PKGBUILD27
-rw-r--r--abs/core/perl_modules/perl-datetime-format-builder/PKGBUILD28
-rw-r--r--abs/core/perl_modules/perl-datetime-format-iso8601/PKGBUILD26
-rw-r--r--abs/core/perl_modules/perl-fcgi/PKGBUILD8
-rw-r--r--abs/core/perl_modules/perl-math-round/PKGBUILD22
-rw-r--r--abs/core/perl_modules/perl-parse-yapp/PKGBUILD25
-rw-r--r--abs/core/perl_modules/perl-xml-dom/PKGBUILD23
-rw-r--r--abs/core/perl_modules/perl-xml-parser/PKGBUILD3
-rw-r--r--abs/core/perl_modules/perl-xml-xpath/PKGBUILD23
-rwxr-xr-xabs/core/perl_modules/perl-xml-xql/PKGBUILD34
-rw-r--r--abs/core/perl_modules/perlxml/PKGBUILD29
-rw-r--r--abs/core/php/PKGBUILD14
-rw-r--r--abs/core/php/__changelog2
-rw-r--r--abs/core/php/php.ini2
-rw-r--r--abs/core/pil/PKGBUILD7
-rw-r--r--abs/core/pil/__changelog2
-rwxr-xr-xabs/core/plextor-convertX-driver/PKGBUILD5
-rwxr-xr-xabs/core/plextor-convertX-driver/convertX.install3
-rw-r--r--abs/core/python-pycurl/PKGBUILD20
-rw-r--r--abs/core/python-simplejson/PKGBUILD24
-rwxr-xr-x[-rw-r--r--]abs/core/qt/PKGBUILD25
-rw-r--r--abs/core/qt/QtWebKit_Flash.patch48
-rw-r--r--abs/core/qt/__changelog1
-rw-r--r--abs/core/rsync/PKGBUILD14
-rw-r--r--abs/core/rsync/__changelog1
-rwxr-xr-xabs/core/runit-scripts/PKGBUILD2
-rwxr-xr-xabs/core/runit-scripts/runitscripts/services/ddclient/run8
-rwxr-xr-xabs/core/runit-scripts/runitscripts/services/frontend/finish37
-rwxr-xr-xabs/core/runit-scripts/runitscripts/services/lircd/run88
-rwxr-xr-xabs/core/runit-scripts/runitscripts/services/mdadm/run29
-rwxr-xr-xabs/core/runit-scripts/runitscripts/services/nmbd/run2
-rwxr-xr-xabs/core/runit-scripts/runitscripts/services/postfix/run8
-rwxr-xr-xabs/core/runit-scripts/runitscripts/services/smbd/run2
-rwxr-xr-xabs/core/runit/PKGBUILD9
-rwxr-xr-xabs/core/runit/shutdown.script5
-rw-r--r--abs/core/samba/PKGBUILD129
-rw-r--r--abs/core/sdparm/PKGBUILD9
-rw-r--r--abs/core/setuptools/PKGBUILD8
-rw-r--r--abs/core/sudo/PKGBUILD6
-rw-r--r--abs/core/syslog-ng/PKGBUILD15
-rw-r--r--abs/core/syslog-ng/syslog-ng.logrotate2
-rw-r--r--abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircd-haupgrey-alt.conf199
-rw-r--r--abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircrc-haupgrey-alt533
-rw-r--r--abs/core/system-templates/templates/remotes/hauppauge-grey-alt/preview.jpgbin0 -> 3069 bytes
-rw-r--r--abs/core/system-templates/templates/remotes/imon/lircrc240
-rw-r--r--abs/core/system-templates/templates/remotes/streamzap/lircd.conf.streamzap3
-rw-r--r--abs/core/system-templates/templates/samba/smb.conf.template3
-rw-r--r--abs/core/system-templates/templates/settings/default_1/jumppoints.txt44
-rw-r--r--abs/core/system-templates/templates/settings/default_2/jumppoints.txt44
-rw-r--r--abs/core/system-templates/templates/settings/default_2/settings.txt10
-rw-r--r--[-rwxr-xr-x]abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf432
-rw-r--r--abs/core/system-templates/templates/transmit/motorola_qip7100/lircd.conf81
-rw-r--r--abs/core/system-templates/templates/xorg/modeline.ATSC4
-rw-r--r--abs/core/system-templates/templates/xorg/xorg.conf.ati2
-rw-r--r--abs/core/system-templates/templates/xorg/xorg.conf.intel2
-rwxr-xr-xabs/core/system-templates/templates/xorg/xorg.conf.nvidia2
-rwxr-xr-xabs/core/system-templates/templates/xorg/xorg.conf.vesa2
-rw-r--r--abs/core/system-templates/templates/xorg/xorg.conf.via2
-rwxr-xr-xabs/core/system-templates/templates/xorg/xorg.conf.vmware2
-rw-r--r--abs/core/talloc/PKGBUILD26
-rw-r--r--abs/core/tar/PKGBUILD8
-rw-r--r--abs/core/tdb/PKGBUILD34
-rw-r--r--abs/core/test-pattern/PKGBUILD16
-rwxr-xr-xabs/core/test-pattern/test_pattern.bash326
-rw-r--r--abs/core/tweaker/PKGBUILD4
-rwxr-xr-xabs/core/tweaker/bin/twk_general.pl2
-rwxr-xr-xabs/core/unclutter/PKGBUILD12
-rw-r--r--abs/core/unclutter/unclutter.cfg2
-rw-r--r--abs/core/unzip/PKGBUILD29
-rw-r--r--abs/core/v4l-dvb/PKGBUILD8
-rw-r--r--abs/core/v4l-dvb/hdpvr.diff22
-rw-r--r--abs/core/vdpauinfo-legacy/PKGBUILD26
-rwxr-xr-xabs/core/vdpauinfo-legacy/vdpauinfo2
-rw-r--r--abs/core/vdpauinfo/PKGBUILD24
-rw-r--r--abs/core/vdpauinfo/__changelog2
-rw-r--r--abs/core/xdotool/PKGBUILD13
-rw-r--r--abs/core/xosd/PKGBUILD11
-rw-r--r--abs/core/xosd/__changelog7
-rw-r--r--abs/core/xosd/osd_cat.cfg6
-rw-r--r--abs/core/xz-utils/PKGBUILD30
432 files changed, 35974 insertions, 1221 deletions
diff --git a/abs/core/LinHES-config/LinHES-release b/abs/core/LinHES-config/LinHES-release
index 6a885f4..6fc5aed 100644
--- a/abs/core/LinHES-config/LinHES-release
+++ b/abs/core/LinHES-config/LinHES-release
@@ -1 +1 @@
-LinHES R6.01.00 (Chugu)
+LinHES R6.03.00 (M)
diff --git a/abs/core/LinHES-config/LinHES.install b/abs/core/LinHES-config/LinHES.install
index a0a9d31..2b2d53c 100644
--- a/abs/core/LinHES-config/LinHES.install
+++ b/abs/core/LinHES-config/LinHES.install
@@ -61,6 +61,7 @@ post_upgrade() {
echo "List of packages to ignore" > /etc/blacklist.package
echo "one package per line" >> /etc/blacklist.package
fi
+ cat /etc/LinHES-release > /etc/os_myth_release
}
# arg 1: the old package version
diff --git a/abs/core/LinHES-config/PKGBUILD b/abs/core/LinHES-config/PKGBUILD
index 1e61fdf..655d5c0 100644
--- a/abs/core/LinHES-config/PKGBUILD
+++ b/abs/core/LinHES-config/PKGBUILD
@@ -1,49 +1,51 @@
pkgname=LinHES-config
pkgver=2.1
-pkgrel=1
-conflicts=(MythVantage-config MythVantage-config-dev LinHES-config-dev )
+pkgrel=40
+conflicts=(MythVantage-config MythVantage-config-dev LinHES-config-dev LinHes-config )
pkgdesc="Install and configure your system"
-depends=(bc libstatgrab mysql-python expect curl dnsutils parted
- sg3_utils nmbscan system-templates rsync python-parted
- ddcxinfo python-pexpect python-netifaces LinHES-timezone
- python-iplib mythinstall)
+depends=('bc' 'libstatgrab' 'mysql-python' 'expect' 'curl' 'dnsutils' 'parted'
+ 'sg3_utils' 'nmbscan' 'system-templates' 'rsync' 'python-parted'
+ 'ddcxinfo' 'python-pexpect' 'python-netifaces' 'LinHES-timezone'
+ 'python-iplib' 'mythinstall>=2-10')
arch=('i686')
-source=(mv_install.py
- mv_config.py
- myth_user_call
- file_time_offset.py
- install-ui.xml
- install_proxy.sh
- install_functions.sh
- systemconfig.sh
- install_db_chroot.sh
- restore_default_settings.sh
- xconfig.sh
- timezip.py
- soundconfig.sh
- LinHES-release
- issue
- MythVantage.sh
- create_master.sh
- build_diskless.sh
- networkconfig.sh
- autocard.py
- restore_km_db_chroot.sh
- README
- mv_advanced.py
- mv_common.py
- mv_ir.py
- mv_misc.py
- mv_network.py
- mv_screensaver.py
- mv_smolt.py
- mv_software.py
- mv_webuser.py
- mv_hostype.py
- systemconfig.py
- myth_user_call.py)
+source=(mv_install.py
+ mv_config.py
+ myth_user_call
+ file_time_offset.py
+ install_proxy.sh
+ install_functions.sh
+ systemconfig.sh
+ install_db_chroot.sh
+ restore_default_settings.sh
+ xconfig.sh
+ timezip.py
+ soundconfig.sh
+ LinHES-release
+ issue
+ MythVantage.sh
+ create_master.sh
+ build_diskless.sh
+ networkconfig.sh
+ autocard.py
+ restore_km_db_chroot.sh
+ README
+ mv_advanced.py
+ mv_common.py
+ mv_ddns.py
+ mv_ir.py
+ mv_misc.py
+ mv_network.py
+ mv_screensaver.py
+ mv_smolt.py
+ mv_software.py
+ mv_webuser.py
+ mv_hostype.py
+ systemconfig.py
+ myth_user_call.py
+ mythvantage.cfg)
+backup=(etc/mythvantage.cfg)
install=LinHES.install
build() {
@@ -75,16 +77,18 @@ build() {
install -m 0755 mv_config.py $MVDIR/bin/mv_config.py
install -m 0755 mv_install.py $MVDIR/bin/mv_install.py
install -m 0755 mv_advanced.py $MVDIR/bin/
- install -m 0755 mv_common.py $MVDIR/bin/
- install -m 0755 mv_ir.py $MVDIR/bin/
- install -m 0755 mv_misc.py $MVDIR/bin/
- install -m 0755 mv_network.py $MVDIR/bin/
- install -m 0755 mv_screensaver.py $MVDIR/bin/
- install -m 0755 mv_smolt.py $MVDIR/bin/
- install -m 0755 mv_software.py $MVDIR/bin/
- install -m 0755 mv_webuser.py $MVDIR/bin/
- install -m 0755 mv_hostype.py $MVDIR/bin/
- install -m 0755 systemconfig.py $MVDIR/bin/
+ install -m 0755 mv_common.py $MVDIR/bin/
+ install -m 0755 mv_ddns.py $MVDIR/bin/
+ install -m 0755 mv_ir.py $MVDIR/bin/
+ install -m 0755 mv_misc.py $MVDIR/bin/
+ install -m 0755 mv_network.py $MVDIR/bin/
+ install -m 0755 mv_screensaver.py $MVDIR/bin/
+ install -m 0755 mv_smolt.py $MVDIR/bin/
+ install -m 0755 mv_software.py $MVDIR/bin/
+ install -m 0755 mv_webuser.py $MVDIR/bin/
+ install -m 0755 mv_hostype.py $MVDIR/bin/
+ install -m 0755 systemconfig.py $MVDIR/bin/
+ install -m 0755 mythvantage.cfg $startdir/pkg/etc/
#README file displayed on install
install -m 0755 README $MVDIR/README
@@ -96,6 +100,40 @@ build() {
install -m 0755 LinHES-release $startdir/pkg/etc/LinHES-release
install -m 0755 issue $startdir/pkg/etc/issue
- # copy over the ui files
- install -m 0755 install-ui.xml $startdir/pkg/usr/share/mythtv/themes/default/
}
+
+md5sums=('297441b8d85820698c19e7c0ad5a3dfe'
+ '1a4694fcd694b362c339bda781ed0f3e'
+ 'e36da536dd651ef182e7642337889e77'
+ '3baa23764e1b6bcb2d66d7d859096940'
+ 'd7a8cd4a0060399ae22e69f74e04eb07'
+ '7a45287a07145fde5aa664583d4f6fba'
+ 'f88d2fb88339a4bf8ec9217a3fbcdef7'
+ '8ac1cfd2eca0f641737da0d0aca416a7'
+ '9ae8d79f620c6d19973c55c32a921874'
+ '4620f6f498ef4523398635cb0bd59425'
+ '06188493e5ed79cb501d3c5694dee8ca'
+ 'e459ed069317bccb20351f037a9df3d2'
+ 'e519c47ae24fb65799ec57a4a2050653'
+ '6aff504ed5e860adc1b7317cd0780900'
+ '55fccb1da0417a896b724f7cfc32dd5a'
+ 'ab2aa42c2947148c2b1cac0ade6d1d55'
+ 'd429b59d3cfb37b0624c6a4a71a7c2c0'
+ 'a225143e3df6f56d451c2875e54ddbae'
+ '687555968d4ca688d8f95c8f13e1d8d4'
+ '3d1e4a119f38cff0498bf8a67e94e4b3'
+ '5b41cfc6f4ad5cdbcd28cf980110f135'
+ 'ee7c8e1f025ce1527ecfffabafb26806'
+ '41b03fb1e0a9d9ae7588e3b813212772'
+ 'a9ffe72c3ede99d505fdc97572a7c256'
+ 'df43bce1712320508d4eef8449c5d223'
+ '65d93f15ac85adf8299552581789a731'
+ '4badc3c664c55f87396a473e6c14d4bc'
+ 'e2aa772fe0bf366e26eaaf663f9257bd'
+ 'fe5e31b833cc6707209e9d656b6eb53c'
+ 'd328d63eaa4252f3d4888476c79bbff6'
+ '23d0e12b7ca1cc6ea6b993c1d7ff20b9'
+ '857a831e8627727306208f0e776b1b98'
+ 'cf35353141b70145f3ee8b0bd852c9f1'
+ 'cf60e7ba4cf3467bb5539d5c51da61b6'
+ 'a63ff9ef5250965aeabc74bfa8e43981')
diff --git a/abs/core/LinHES-config/README b/abs/core/LinHES-config/README
index 447678a..e045f2c 100644
--- a/abs/core/LinHES-config/README
+++ b/abs/core/LinHES-config/README
@@ -1,9 +1,9 @@
Thanks for choosing LinHES! At the moment, LinHES is compiled for i686.
-If you have an i586 class system, LinHES won't work for you. I've not seen a great request for i586. If you want it, you have to drum up support for it. The PVR-350 TV out isn't supported at this time. I have to determine if it works with MythTV 0.22 first.
+If you have an i586 class system, LinHES won't work for you. I've not seen a great request for i586. If you want it, you have to drum up support for it.
Support for LinHES can be obtained at:
http://linhes.org
irc.freenode.net #linhes
Bugs can be reported at:
-http://linhes.org/flyspray
+http://linhes.org/bugs
diff --git a/abs/core/LinHES-config/mv_advanced.py b/abs/core/LinHES-config/mv_advanced.py
index 4790fcf..bc0d19e 100755
--- a/abs/core/LinHES-config/mv_advanced.py
+++ b/abs/core/LinHES-config/mv_advanced.py
@@ -224,12 +224,12 @@ def setup_samba(systemconfig,data_config):
else:
Samba_media = systemconfig["Samba_media"]
Samba_home = systemconfig["Samba_home"]
- if systemconfig["Samba_mediareadonly"] == "1":
+ if systemconfig["Samba_mediareadonly"] == "0":
smreadonly = "yes"
else:
smreadonly = "no"
- if systemconfig["Samba_homereadonly"] == "1":
+ if systemconfig["Samba_homereadonly"] == "0":
shreadonly = "yes"
else:
shreadonly = "no"
@@ -310,8 +310,11 @@ create mask = 0755 ''' %(data_config.MYTHHOME,shreadonly)
logging.debug(" %s",homelines)
- mv_common.add_service("nmbd")
+ mv_common.add_service("nmbd")
mv_common.add_service("smbd")
+ mv_common.restart_service("nmbd")
+ mv_common.restart_service("smbd")
+
else:
logging.info(" Removing windows file sharing")
mv_common.remove_service("smbd")
@@ -346,6 +349,9 @@ def setup_dyndns(DDnsEnable):
def setup_advanced(systemconfig,data_config):
+ if mv_common.read_config(mv_common.module_config,"advanced") == False :
+ logging.info("____Skipping of Advanced, config disabled____")
+ return
logging.info("____Start of advanced configuration____")
create_link = False
if systemconfig["SystemType"] == "Master_backend":
diff --git a/abs/core/LinHES-config/mv_common.py b/abs/core/LinHES-config/mv_common.py
index a492597..0272809 100755
--- a/abs/core/LinHES-config/mv_common.py
+++ b/abs/core/LinHES-config/mv_common.py
@@ -1,9 +1,34 @@
# -*- coding: utf-8 -*-
import logging, os, time
import commands
+import ConfigParser
config_file = "mv_config"
data_config = __import__(config_file, globals(), locals(), [])
+module_config = ConfigParser.RawConfigParser()
+try:
+ module_config.read('/etc/mythvantage.cfg')
+except:
+ logging.info("couldn't read mythvantage.cfg")
+
+
+def read_config(module_config,data):
+ rvalue = True
+ section = "mythvantage"
+ try:
+ rvalue = module_config.get(section, data)
+ if rvalue == "False":
+ rvalue = False
+ if rvalue == "no":
+ rvalue = False
+
+
+ except:
+ logging.debug("Couldn't read mythvantage.cfg")
+ rvalue = True
+
+ return rvalue
+
def runcmd(cmd):
if data_config.NOOPDEBUG=="FALSE":
pass
@@ -107,6 +132,8 @@ def pacinstall(pkg):
add_service("webmin")
elif pkg == "fuppes":
pacinstall("fuppes-svn")
+ elif pkg == "mupen64":
+ pacinstall("mupen64plus-svn")
if not pkg_blacklist_check(pkg):
if pkg_installed_check(pkg):
@@ -126,6 +153,10 @@ def pacremove(pkg):
pacremove("libdvdcss")
elif pkg == "webmin":
remove_service("webmin")
+ elif pkg == "fuppes":
+ pacremove("fuppes-svn")
+ elif pkg == "mupen64":
+ pacremove("mupen64plus-svn")
if not pkg_blacklist_check(pkg):
if not pkg_installed_check(pkg):
diff --git a/abs/core/LinHES-config/mv_ddns.py b/abs/core/LinHES-config/mv_ddns.py
new file mode 100755
index 0000000..9695f76
--- /dev/null
+++ b/abs/core/LinHES-config/mv_ddns.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+import logging, mv_common
+import os, re
+
+config_file = "mv_config"
+
+def setup_ddns(systemconfig):
+ if mv_common.read_config(mv_common.module_config,"ddns") == False :
+ logging.info("____Skipping of DDNS, config disabled____")
+ return
+ logging.info("____Start of setup_ddns____")
+
+ if systemconfig["DDnsEnable"] == "1":
+ logging.debug(" Enabling DDNS")
+ mv_common.pacinstall("ddclient")
+ mv_common.cp_and_log("/etc/ddclient/ddclient.conf.dynamic.dyndns.sample",
+ "/etc/ddclient/ddclient.conf")
+ cmd = ''' sed -i -e "s/your-dynamic-dyndns-login/%s/g" /etc/ddclient/ddclient.conf''' %(systemconfig["DDnslogin"])
+ mv_common.runcmd(cmd)
+ cmd = ''' sed -i -e "s/your-dynamic-dyndns-password/%s/g" /etc/ddclient/ddclient.conf''' %(systemconfig["DDnspassword"])
+ mv_common.runcmd(cmd)
+ cmd = ''' sed -i -e "s/your-dynamic-dyndns-host/%s/g" /etc/ddclient/ddclient.conf''' %(systemconfig["DDnshostname"])
+ mv_common.runcmd(cmd)
+ mv_common.add_service("ddclient")
+ else:
+ logging.debug(" Disabling DDNS")
+ mv_common.remove_service("ddclient")
+
+ logging.info("__End of ddns\n")
diff --git a/abs/core/LinHES-config/mv_hostype.py b/abs/core/LinHES-config/mv_hostype.py
index d6ec0ed..4eade73 100755
--- a/abs/core/LinHES-config/mv_hostype.py
+++ b/abs/core/LinHES-config/mv_hostype.py
@@ -124,6 +124,9 @@ def setup_syslog(dbhost):
return
def hostypeprint(systemconfig):
+ if mv_common.read_config(mv_common.module_config,"hostype") == False :
+ logging.info("____Skipping of hostype, config disabled____")
+ return
logging.info("______Start of hostype config_____")
mv_common.services(systemconfig)
install_list=''
@@ -212,7 +215,7 @@ def hostypeprint(systemconfig):
else:
logging.debug(" Will NOT run the frontend")
mv_common.remove_service("frontend")
- mv_common.remove_service("hal")
+ mv_common.add_service("hal")
if data_config.SYSTEMTYPE == "MythVantage":
mv_common.remove_service("ghosd")
diff --git a/abs/core/LinHES-config/mv_ir.py b/abs/core/LinHES-config/mv_ir.py
index bc1ae37..a5e3f3b 100755
--- a/abs/core/LinHES-config/mv_ir.py
+++ b/abs/core/LinHES-config/mv_ir.py
@@ -113,7 +113,7 @@ def setup_ir_remote(Remotetype,templates):
mv_common.add_service("lircd")
-def setup_ir_receiver(ReceiverType,TEMPLATES):
+def setup_ir_receiver(ReceiverType,TEMPLATES,HDHRlirc_device,myip):
logging.info(" Configuring receiver %s", ReceiverType)
if ReceiverType == "Serial":
scrub_modules("/etc/modules.mythvantage","lirc")
@@ -153,6 +153,7 @@ def setup_ir_receiver(ReceiverType,TEMPLATES):
mv_common.runcmd(cmd)
mv_common.remove_service("igdaemon")
mv_common.remove_service("tatir")
+
elif ReceiverType == "iguanaIR-usb":
scrub_modules("/etc/modules.mythvantage","lirc")
mv_common.add_service("igdaemon")
@@ -162,6 +163,12 @@ def setup_ir_receiver(ReceiverType,TEMPLATES):
scrub_modules("/etc/modules.mythvantage","lirc")
mv_common.add_service("tatir")
mv_common.remove_service("igdaemon")
+ elif ReceiverType == "SiliconDust_HDHR":
+ mv_common.remove_service("igdaemon")
+ mv_common.remove_service("tatir")
+ cmd = '''hdhomerun_config %s set /ir/target %s:5000 store''' %(HDHRlirc_device,myip)
+ print cmd
+ mv_common.runcmd(cmd)
else:
logging.debug(" didn't match receiver, using genric case")
@@ -281,7 +288,11 @@ def setup_lcd(LCDtype, TEMPLATES, Remotetype):
logging.debug("__End of setup_lcd")
def setup_ir(systemconfig, data_config):
- rc = False
+ rc = [ False , False ]
+ if mv_common.read_config(mv_common.module_config,"ir") == False :
+ logging.info("____Skipping of IR, config disabled____")
+ return rc
+
logging.info("____Start of IR____")
if systemconfig["Remotetype"] == "tinker":
logging.info(" Tinker mode detected")
@@ -304,9 +315,11 @@ def setup_ir(systemconfig, data_config):
if systemconfig["ReceiverType"]:
setup_ir_receiver(systemconfig["ReceiverType"],
- systemconfig["TEMPLATES"])
+ systemconfig["TEMPLATES"],
+ systemconfig["HDHRlirc_device"],
+ systemconfig["mythip"])
else:
- setup_ir_receiver("unknown", systemconfig["TEMPLATES"])
+ setup_ir_receiver("unknown", systemconfig["TEMPLATES"],'','127.0.0.1')
unload_all_lirc()
setup_blaster_proto(HostBlasterType,
Hostnumblaster,
diff --git a/abs/core/LinHES-config/mv_network.py b/abs/core/LinHES-config/mv_network.py
index b80e4cc..f256785 100755
--- a/abs/core/LinHES-config/mv_network.py
+++ b/abs/core/LinHES-config/mv_network.py
@@ -50,7 +50,7 @@ def get_ip(ifname):
)[20:24])
def get_default_route(iface):
- rcroute = "127.0.0.1"
+ rcroute = "127.0.0.1"
f = open ('/proc/net/route', 'r')
for line in f:
words = string.split (line)
@@ -107,7 +107,7 @@ def setup_MTYH_DNS():
for line in f:
if line.startswith("nameserver"):
print line
- returndns = line.split()[1]
+ returndns = line.split()[1]
break
except:
logging.debug(" Couldn't open /etc/resolv.conf for myth_dns")
@@ -158,7 +158,7 @@ def setup_hostname(systemconfig):
except:
logging.critical(" *Hostname could not be set")
logging.info(" Using default value of me")
- hostname = "me"
+ hostname = "diamonds"
logging.info(" Setting the hostname to %s", hostname)
cmd = ''' echo %s > /etc/hostname ''' %hostname
mv_common.runcmd(cmd)
@@ -168,7 +168,7 @@ def setup_hostname(systemconfig):
logging.debug(" not using dhcp")
cmd = ''' echo 127.0.0.1 localhost > /etc/hosts '''
mv_common.runcmd(cmd)
- cmd = ''' echo %s %s > /etc/hosts ''' %(systemconfig["mythip"], systemconfig["hostname"])
+ cmd = ''' echo %s %s >> /etc/hosts ''' %(systemconfig["mythip"], systemconfig["hostname"])
mv_common.runcmd(cmd)
else:
cmd = ''' echo 127.0.0.1 %s localhost > /etc/hosts ''' %systemconfig["hostname"]
@@ -482,6 +482,9 @@ def hostname_change_check(systemconfig):
def setup_network (systemconfig,this_is_install):
+ if mv_common.read_config(mv_common.module_config,"network") == False :
+ logging.info("____Skipping of network, config disabled____")
+ return False
logging.info("____Start of network____")
logging.info(" Setting up the network")
restartfe = hostname_change_check(systemconfig)
diff --git a/abs/core/LinHES-config/mv_screensaver.py b/abs/core/LinHES-config/mv_screensaver.py
index 2da970c..4068832 100755
--- a/abs/core/LinHES-config/mv_screensaver.py
+++ b/abs/core/LinHES-config/mv_screensaver.py
@@ -163,6 +163,9 @@ def setup_gnome_screensaver(theme,idletime):
def setup_screensaver (systemconfig,data_config):
+ if mv_common.read_config(mv_common.module_config,"screensaver") == False :
+ logging.info("____Skipping of Screensaver, config disabled____")
+ return
logging.info("____Start of screensaver configuration____")
screensavertype = systemconfig["Screensavertype"]
theme = systemconfig["Screensavertheme"]
diff --git a/abs/core/LinHES-config/mv_smolt.py b/abs/core/LinHES-config/mv_smolt.py
index 5fd3722..cfc697e 100755
--- a/abs/core/LinHES-config/mv_smolt.py
+++ b/abs/core/LinHES-config/mv_smolt.py
@@ -20,6 +20,9 @@ def read_release(stype):
def setup_smolt_type(SystemType,Remotetype,RunFrontend,mythhome,stype):
+ if mv_common.read_config(mv_common.module_config,"smolt") == False :
+ logging.info("____Skipping of smolt, config disabled____")
+ return
logging.debug("____Start of setup_smolt_type____")
releasename = read_release(stype)
diff --git a/abs/core/LinHES-config/mv_software.py b/abs/core/LinHES-config/mv_software.py
index aabcf89..c0f5a5b 100755
--- a/abs/core/LinHES-config/mv_software.py
+++ b/abs/core/LinHES-config/mv_software.py
@@ -3,6 +3,10 @@ import logging, mv_common
import os, re
def setup_software(systemconfig, data_config):
+ if mv_common.read_config(mv_common.module_config,"software") == False :
+ logging.info("____Skipping of software, config disabled____")
+ return
+
logging.info("____Start of Software install____")
postfix=''
if data_config.SYSTEMTYPE == "MythVantage":
@@ -13,23 +17,23 @@ def setup_software(systemconfig, data_config):
postfix = "-release-fixes"
else:
postfix = "-svn"
-
+#This section is for MythVantage OS, not LINHES
default_disabled = ("mythphone", "mytharchive", "mythbrowser", "mythnews",
"mythgame", "mythflix", "mythweather",
- "mythzoneminder" )
+ "mythzoneminder","mythnetvision" )
default_installed=("mythcontrols", "mythgallery", "mythmovies",
"mythmusic", "mythsmolt", "mythvideo")
- other_pkg=("miro", "mednafen", "romdb", "xine", "dvdcss", "webmin" , "fuppes", "foldingathome", "mythappletrailers", "mythstream", "mythvodka")
+ other_pkg=("miro", "mednafen", "romdb", "xine", "dvdcss", "webmin" , "fuppes", "foldingathome", "mythappletrailers", "mythstream", "mupen64")
else:
default_disabled = ("mythphone", "mytharchive", "mythbrowser", "mythnews",
"mythgame", "mythflix", "mythweather",
"mythappletrailers", "mythstream", "mythvodka",
- "mythzoneminder" )
+ "mythzoneminder","mythnetvision" )
default_installed=("mythcontrols", "mythgallery", "mythmovies",
"mythmusic", "mythsmolt", "mythvideo")
- other_pkg=("miro", "mednafen", "romdb", "xine", "dvdcss", "webmin" , "fuppes", "foldingathome")
+ other_pkg=("miro", "mednafen", "romdb", "xine", "dvdcss", "webmin" , "fuppes", "foldingathome","mupen64")
for pkg in default_disabled:
pkgname=pkg+postfix
diff --git a/abs/core/LinHES-config/mv_webuser.py b/abs/core/LinHES-config/mv_webuser.py
index a8517a8..3e383f2 100755
--- a/abs/core/LinHES-config/mv_webuser.py
+++ b/abs/core/LinHES-config/mv_webuser.py
@@ -3,6 +3,10 @@ import logging, mv_common
#import os
def setup_web_auth(UseMythWEB_auth):
+ if mv_common.read_config(mv_common.module_config,"webuser") == False :
+ logging.info("____Skipping of webuser, config disabled____")
+ return
+
logging.info("____Start of setup_web_auth____")
if UseMythWEB_auth == str(1):
#enable auth
diff --git a/abs/core/LinHES-config/mythvantage.cfg b/abs/core/LinHES-config/mythvantage.cfg
new file mode 100644
index 0000000..eaa4865
--- /dev/null
+++ b/abs/core/LinHES-config/mythvantage.cfg
@@ -0,0 +1,21 @@
+[mythvantage]
+#change any of the following to False or True
+# True will allow systemconfig to run that module
+# False will skip the module
+misc = True
+sleep = True
+hostype = True
+advanced = True
+audio = True
+network = True
+xorg = True
+webuser = True
+restartfe = True
+reloadfe = True
+ddns = True
+screensaver = True
+ir = True
+user = True
+software = True
+smolt = True
+
diff --git a/abs/core/LinHES-config/restore_default_settings.sh b/abs/core/LinHES-config/restore_default_settings.sh
index dcf5e23..ffd4b0d 100755
--- a/abs/core/LinHES-config/restore_default_settings.sh
+++ b/abs/core/LinHES-config/restore_default_settings.sh
@@ -5,7 +5,7 @@ shopt -s -o nounset
echo $@ >> /tmp/restore.out
#TEMPLATES="/usr/share/templates/settings"
TEMPLATES="$TEMPLATES/settings"
-TABLES="settings keybindings"
+TABLES="settings keybindings jumppoints"
MYTHDBUSER=mythtv
MYTHTVPASSWD=mythtv
declare -r OPTSTRING="c:e:t:d:h:s:a:z:Ho"
@@ -15,12 +15,12 @@ declare -i EVERYTHING=0
function CMD_DEFINE () {
- #add override check
+ #add override check
if [ x$Thistemplate = xsyssettings -a $OVERRIDE -eq 1 ]
then
- MYSQLCMD="mysql --local-infile -s -u$MYTHDBUSER -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec"
- MYSQLCMD_C="mysql -u$MYTHDBUSER -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec"
- MYSQLCMD_UPDATE_HOST="UPDATE settings set data='$oldhostname' where value='HostMyhostname' and hostname=\"$hostname\";"
+ MYSQLCMD="mysql --local-infile -s -u$MYTHDBUSER -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec"
+ MYSQLCMD_C="mysql -u$MYTHDBUSER -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec"
+ MYSQLCMD_UPDATE_HOST="UPDATE settings set data='$oldhostname' where value='HostMyhostname' and hostname=\"$hostname\";"
else
MYSQLCMD="mysql --local-infile -s -u$MYTHDBUSER -p$MYTHTVPASSWD -h$dbhost mythconverg -B --exec"
MYSQLCMD_C="mysql -u$MYTHDBUSER -p$MYTHTVPASSWD -h$dbhost mythconverg -B --exec"
@@ -32,21 +32,21 @@ function SQL_DEFINE () {
thostname=`echo ${hostname}|tr -C [:alpha:] _`
echo "Using $thostname for temp table postfix"
- #$1 is the table name
- if [ $1 = "settings" ]
- then
- ALTERSQL="Alter table temp_${1}_${thostname} add unique ( value )"
- else
- ALTERSQL=";"
- fi
+ #$1 is the table name
+ if [ $1 = "settings" ]
+ then
+ ALTERSQL="Alter table temp_${1}_${thostname} add unique ( value )"
+ else
+ ALTERSQL=";"
+ fi
CREATESQL="create table temp_${1}_${thostname} like $1;"
- COPY_TMP_SQL="replace into temp_${1}_${thostname} (select * from $1 where hostname=\"$hostname\");"
- INSERTSQL="LOAD DATA local INFILE '/tmp/$1.txt' REPLACE INTO TABLE temp_${1}_${thostname} FIELDS TERMINATED BY '\t';"
+ COPY_TMP_SQL="replace into temp_${1}_${thostname} (select * from $1 where hostname=\"$hostname\");"
+ INSERTSQL="LOAD DATA local INFILE '/tmp/$1.txt' REPLACE INTO TABLE temp_${1}_${thostname} FIELDS TERMINATED BY '\t';"
#INSERTSQL="LOAD DATA local INFILE '$TEMPLATES/$Thistemplate/$1.txt' REPLACE INTO TABLE temp_${1}_${hostname} FIELDS TERMINATED BY '\t';"
- DROPSQL="delete from $1 where hostname=\"$hostname\";"
- COPY_BCK_SQL="replace into $1 (select * from temp_${1}_${thostname} where hostname=\"$hostname\");"
- DROP_TABLE="Drop table temp_${1}_${thostname}"
+ DROPSQL="delete from $1 where hostname=\"$hostname\";"
+ COPY_BCK_SQL="replace into $1 (select * from temp_${1}_${thostname} where hostname=\"$hostname\");"
+ DROP_TABLE="Drop table temp_${1}_${thostname}"
}
function ARG_ERR() {
@@ -101,8 +101,8 @@ do
ARG_ERR
Thistemplate=$OPTARG
- if [ x$Thistemplate = x"syssettings" ]
- then
+ if [ x$Thistemplate = x"syssettings" ]
+ then
echo "template is syssettings"
loadhost=false
elif [ x$Thistemplate = x"hostsettings" ]
@@ -128,13 +128,13 @@ do
ARG_ERR
if [ $OVERRIDE = 1 ]
then
- oldhostname=$hostname
+ oldhostname=$hostname
hostname=$OPTARG
else
hostname=$OPTARG
- fi
+ fi
- ;;
+ ;;
s) echo "$SWITCH" "$OPTARG"
ARG_ERR
SYSTEMTYPE=$OPTARG
@@ -144,11 +144,11 @@ do
IP_ADDRESS=$OPTARG
;;
z) echo "$SWITCH" "$OPTARG"
- ARG_ERR
- ZIPCODE=$OPTARG
+ ARG_ERR
+ ZIPCODE=$OPTARG
;;
- o) OVERRIDE=1
- ;;
+ o) OVERRIDE=1
+ ;;
esac
done
@@ -175,10 +175,10 @@ fi
case $OPERATION in
- restore)
- #used to restore settings from syssettings
- if [ -d $TEMPLATES/$Thistemplate ]
- then
+ restore)
+ #used to restore settings from syssettings
+ if [ -d $TEMPLATES/$Thistemplate ]
+ then
cd $TEMPLATES/$Thistemplate
if [ $loadhost = false ]
then
@@ -213,38 +213,42 @@ case $OPERATION in
$MYSQLCMD "$COPY_BCK_SQL"
$MYSQLCMD "$DROP_TABLE "
fi
- else
- echo "couldn't find $TEMPLATES/$Thistemplate"
- fi
- ;;
+ else
+ echo "couldn't find $TEMPLATES/$Thistemplate"
+ fi
+ ;;
- save)
+ save)
+ if [ ! -d $TEMPLATES/$Thistemplate ]
+ then
+ mkdir -p $TEMPLATES/$Thistemplate
+ fi
- if [ ! -d $TEMPLATES/$Thistemplate ]
- then
- mkdir -p $TEMPLATES/$Thistemplate
- fi
+ cd $TEMPLATES/$Thistemplate
+ for i in $TABLES
+ do
+ EXTRACLAUSE=""
+ case $i in
+ settings)
+ EXTRACLAUSE="and not (value like \"BackendServerIP\") and not (value like \"locale\") order by value"
+ SQL="select value,data,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;"
+ # SQL="select * from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;"
+ $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
+ ;;
+ keybindings)
+ SQL="select context,action,description,keylist,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;"
+ $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
+ ;;
+ jumppoints)
+ SQL="select destination,description,keylist,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;"
+ $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
- cd $TEMPLATES/$Thistemplate
- for i in $TABLES
- do
- EXTRACLAUSE=""
- case $i in
- settings)
- EXTRACLAUSE="and not (value like \"BackendServerIP\") and not (value like \"locale\") order by value"
- SQL="select value,data,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;"
- # SQL="select * from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;"
- $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
- ;;
- keybindings)
- SQL="select context,action,description,keylist,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;"
- $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
- ;;
- esac
- # sed -e "s/$hostname/REPLACEME/g" $i > $i.txt && rm $i
+ ;;
+ esac
+ # sed -e "s/$hostname/REPLACEME/g" $i > $i.txt && rm $i
- done
- ;;
+ done
+ ;;
load)
@@ -253,22 +257,22 @@ case $OPERATION in
do
if [ -f $TEMPLATES/$i/settings.txt ]
then
- echo $i
- for tablename in $TABLES
+ echo $i
+ for tablename in $TABLES
do
- #create table
+ #create table
CREATESQL="create table IF NOT EXISTS ${tablename}_${i} like $tablename;"
$MYSQLCMD_C "$CREATESQL"
- #truncate table
+ #truncate table
TRUNCATESQL="truncate ${tablename}_${i} "
$MYSQLCMD_C "$TRUNCATESQL"
- #load table
- INSERTSQL="LOAD DATA local INFILE '$TEMPLATES/$i/$tablename.txt' REPLACE INTO TABLE ${tablename}_${i} FIELDS TERMINATED BY '\t';"
+ #load table
+ INSERTSQL="LOAD DATA local INFILE '$TEMPLATES/$i/$tablename.txt' REPLACE INTO TABLE ${tablename}_${i} FIELDS TERMINATED BY '\t';"
$MYSQLCMD_C "$INSERTSQL"
- #update_hostname
- UPDATEHOSTNAMESQL="update ${tablename}_${i} set hostname='$i' ; "
+ #update_hostname
+ UPDATEHOSTNAMESQL="update ${tablename}_${i} set hostname='$i' ; "
$MYSQLCMD_C "$UPDATEHOSTNAMESQL"
- done
+ done
else
echo "couldn't find $TEMPLATES/$i/settings.txt template to load"
@@ -286,6 +290,14 @@ case $OPERATION in
$MYSQLCMD_C "$CREATESQL"
CREATESQL="create table IF NOT EXISTS keybindings_user3 like keybindings;"
$MYSQLCMD_C "$CREATESQL"
+
+ CREATESQL="create table IF NOT EXISTS jumppoints_user1 like jumppoints;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS jumppoints_user2 like jumppoints;"
+ $MYSQLCMD_C "$CREATESQL"
+ CREATESQL="create table IF NOT EXISTS jumppoints_user3 like jumppoints;"
+ $MYSQLCMD_C "$CREATESQL"
+
done
;;
@@ -302,14 +314,14 @@ case $OPERATION in
if [ $SYSTEMTYPE = "slave" ]
then
$MYSQLCMD_C "delete from settings where value='BackendServerIP' and hostname=\"$hostname\";"
- $MYSQLCMD_C "REPLACE INTO settings set data='${IP_ADDRESS}' , value='BackendServerIP' , hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='${IP_ADDRESS}' , value='BackendServerIP' , hostname=\"$hostname\";"
fi
;;
ZIP)
- $MYSQLCMD_C "delete from settings where value='locale' and hostname=\"$hostname\";"
- $MYSQLCMD_C "REPLACE INTO settings set data='$ZIPCODE' , value='locale' , hostname=\"$hostname\";"
- $MYSQLCMD_C "delete from settings where value='MythMovies.ZipCode' and hostname=\"$hostname\";"
- $MYSQLCMD_C "REPLACE INTO settings set data='$ZIPCODE', value='MythMovies.ZipCode' , hostname=\"$hostname\";"
+ $MYSQLCMD_C "delete from settings where value='locale' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='$ZIPCODE' , value='locale' , hostname=\"$hostname\";"
+ $MYSQLCMD_C "delete from settings where value='MythMovies.ZipCode' and hostname=\"$hostname\";"
+ $MYSQLCMD_C "REPLACE INTO settings set data='$ZIPCODE', value='MythMovies.ZipCode' , hostname=\"$hostname\";"
;;
MUSICFRONT)
ALSADEVICE
@@ -325,7 +337,7 @@ case $OPERATION in
$MYSQLCMD_C "delete from settings where value='MusicAudioDevice' and hostname=\"$hostname\";"
$MYSQLCMD_C "REPLACE INTO settings set data='$SoundDevice', value='MusicAudioDevice' , hostname=\"$hostname\";"
;;
- uhostname)
+ uhostname)
#used when the hostname is changed.
TABLES="settings capturecard keybindings storagegroup recorded"
for i in $TABLES
@@ -353,7 +365,7 @@ case $OPERATION in
SQL="update settings set data='0' where value='Hostaccessuser' and hostname=\"$hostname\" ;"
$MYSQLCMD_C "$SQL"
;;
- esac
+ esac
#SELECT * INTO OUTFILE 'data.txt'
# FIELDS TERMINATED BY ','
diff --git a/abs/core/LinHES-config/systemconfig.py b/abs/core/LinHES-config/systemconfig.py
index c559e09..2e07b2f 100755
--- a/abs/core/LinHES-config/systemconfig.py
+++ b/abs/core/LinHES-config/systemconfig.py
@@ -36,8 +36,11 @@ def usage():
logging.info("tell people how to use this")
def setup_x(systemconfig):
- cmd = "%s/bin/xconfig.sh" %systemconfig["MVROOT"]
- mv_common.runcmd(cmd)
+ if mv_common.read_config(mv_common.module_config,"xorg") == False :
+ logging.info("____Skipping of Xorg, config disabled____")
+ else:
+ cmd = "%s/bin/xconfig.sh" %systemconfig["MVROOT"]
+ mv_common.runcmd(cmd)
def main(argv):
try:
@@ -124,30 +127,40 @@ def main(argv):
if cmdmodule["audio"] == True:
- logging.debug("______Start of Audio Configuration______")
- if not systemconfig["Audiotype"] == "tinker":
- cmd="%s/bin/soundconfig.sh -t real -i %s -d %s" %(MVROOT,systemconfig["Audiotype"],systemconfig["SoundDevice"])
- mv_common.runcmd(cmd)
+ if mv_common.read_config(mv_common.module_config,"audio") == False :
+ logging.info("____Skipping of Audio, config disabled____")
else:
- logging.debug(" Tinker mode(audio), not changing configuration")
- logging.debug("__End of audio")
+ logging.debug("______Start of Audio Configuration______")
+ if not systemconfig["Audiotype"] == "tinker":
+ cmd="%s/bin/soundconfig.sh -t real -i %s -d %s" %(MVROOT,systemconfig["Audiotype"],systemconfig["SoundDevice"])
+ mv_common.runcmd(cmd)
+ else:
+ logging.debug(" Tinker mode(audio), not changing configuration")
+ logging.debug("__End of audio")
if cmdmodule["misc"]:
- import mv_misc
- mv_misc.setup_zip(MVROOT,systemconfig["zipcode"])
- mv_misc.setup_tz(systemconfig["timezone"],systemconfig["TEMPLATES"])
- mv_misc.setup_nfs(systemconfig)
+ if mv_common.read_config(mv_common.module_config,"misc") == False :
+ logging.info("____Skipping of misc, config disabled____")
+ else:
+ import mv_misc
+ mv_misc.setup_zip(MVROOT,systemconfig["zipcode"])
+ mv_misc.setup_tz(systemconfig["timezone"],systemconfig["TEMPLATES"])
+ mv_misc.setup_nfs(systemconfig)
if cmdmodule["sleep"]:
- import mv_misc
- mv_misc.setup_sleep(systemconfig)
+ if mv_common.read_config(mv_common.module_config,"sleep") == False :
+ logging.info("____Skipping of sleep, config disabled____")
+ else:
+ import mv_misc
+ mv_misc.setup_sleep(systemconfig)
if cmdmodule["webuser"]:
import mv_webuser
mv_webuser.setup_web_auth(systemconfig["UseMythWEB_auth"])
if cmdmodule["ddns"]:
- print " LOOK FOR DDNS"
+ import mv_ddns
+ mv_ddns.setup_ddns(systemconfig)
if cmdmodule["screensaver"]:
import mv_screensaver
@@ -162,7 +175,10 @@ def main(argv):
mv_software.setup_software(systemconfig, data_config)
if cmdmodule["advancedX"]:
- setup_x(systemconfig)
+ if mv_common.read_config(mv_common.module_config,"xorg") == False :
+ logging.info("____Skipping of advancedX, config disabled____")
+ else:
+ setup_x(systemconfig)
if cmdmodule["restartfe"]:
mv_common.restartfe(restartlcd)
diff --git a/abs/core/LinHES-system/LinHES-run b/abs/core/LinHES-system/LinHES-run
index 1b91def..d5a3a15 100644..100755
--- a/abs/core/LinHES-system/LinHES-run
+++ b/abs/core/LinHES-system/LinHES-run
@@ -1,13 +1,28 @@
#!/bin/sh
+function msg(){
+ echo -e "$1" | osd_cat --pos=middle --align=center --offset=200 --delay=5 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
+}
+
. /etc/profile
. /etc/systemconfig
-
+. /etc/unclutter.cfg || {
+ idle=1
+ jitter=200
+}
+. /etc/osd_cat.cfg || {
+ color=yellow
+ outline=2
+ outlinecolour=black
+ shadow=0
+ shadowcolour=black
+ font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+}
#keylaunch &
#/usr/bin/tilda &
#move mouse to corner
-xdotool mousemove -10 -10
-/usr/X11R6/bin/unclutter -root -idle 1 -jitter 200 -noevents &
+xdotool mousemove 0 0
+/usr/X11R6/bin/unclutter -root -idle $idle -jitter $jitter -noevents &
if [ x"$Screensavertype" = "xgscreensaver" ]
then
gnome-screensaver &
@@ -23,7 +38,7 @@ mtd &
if [ x$ShowTips = "x1" ]
then
- echo "Alt+h for help" | osd_cat --font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" --shadow=3 --pos=middle --align=centre --offset=200 --color=yellow --delay=5 &
+ msg "Alt+h for help" &
fi
# Run any scripting that applies to special hardware. These brand-specific commands that run
@@ -46,6 +61,13 @@ SpecialHardwareCommands() {
esac
}
+#update apple trailers
+if [[ x$RunFrontend = x1 && -f ~/.configure ]]
+then
+ /usr/bin/php -q /usr/bin/myth_trailers_grabber > /home/mythtv/appletrailer.xml && /usr/bin/fix_aple_url.sh 2>/dev/null &
+fi
+
+
if [ ! $SystemType = "Frontend_only" ]
then
if [ -f ~/.configure ]
@@ -60,12 +82,16 @@ then
else
rm -f ~/.no_meth
fi
- sudo sv stop mythbackend
- xterm -fn *18* -e sudo taskset -c 0 /usr/bin/mythtv-setup
- sudo sv start mythbackend
+ sudo pacman -R myth2ipod myt2xvid3
+ sudo pacman -S --noconfirm myth2ipod myt2xvid3
+ sudo sv stop mythbackend
+ cat /data/database/dvd_transcode_r6.sql | mysql -u root mythconverg
+ xterm -fn *18* -e sudo taskset -c 0 /usr/bin/mythtv-setup
+ sudo sv start mythbackend
sudo chown -R mythtv.mythtv /home/mythtv
- nice -n 19 mythfilldatabase --quiet &
- rm ~/.configure
+ nice -n 19 mythfilldatabase --quiet &
+ msg "Guide data is being loaded. \n Until this completes\n some shows will appear as unknown \n in the program guide."
+ rm ~/.configure
fi
fi
diff --git a/abs/core/LinHES-system/LinHES.install b/abs/core/LinHES-system/LinHES.install
index 2d2bdf2..0f6689e 100644
--- a/abs/core/LinHES-system/LinHES.install
+++ b/abs/core/LinHES-system/LinHES.install
@@ -12,7 +12,10 @@ MVDIR=/usr/LH/bin
# ln -s $MVDIR/backup_job /etc/cron.daily/backup_cron
# ln -s $MVDIR/update_system /etc/cron.daily/xupdate_system_cron
# ln -s $MVDIR/repo_sync.sh /etc/cron.daily/zrepo_sync.sh
- ln -s $MVDIR/myth_mtc.sh /etc/cron.daily/myth_mtc.sh
+ if [ ! -e /etc/cron.daily/myth_mtc.sh ]
+ then
+ ln -s $MVDIR/myth_mtc.sh /etc/cron.daily/myth_mtc.sh
+ fi
#LINE="mythtv ALL = NOPASSWD: /sbin/sv stop mythbackend"
LINE="mythtv ALL=(ALL) NOPASSWD: ALL"
@@ -45,7 +48,12 @@ grep -q "pam_limits.so" /etc/pam.d/su
fi
+# Update mythtv's fluxbox keys files to use the tvterm.sh script to get
+# an xterm. Then signal fluxbox to re-read the keys file.
+sed -i.orig 's/^Mod1 x :.*xterm.*$/Mod1 x :ExecCommand tvterm.sh/g' \
+ ~mythtv/.fluxbox/keys
+pkill -HUP fluxbox
}
diff --git a/abs/core/LinHES-system/PKGBUILD b/abs/core/LinHES-system/PKGBUILD
index 2a10fe0..0e699f4 100644..100755
--- a/abs/core/LinHES-system/PKGBUILD
+++ b/abs/core/LinHES-system/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=LinHES-system
-pkgver=1.0
-pkgrel=69
+pkgver=1.1
+pkgrel=32
arch=('i686')
MVDIR=$startdir/pkg/usr/LH
BINDIR=$startdir/pkg/usr/bin
@@ -8,35 +8,49 @@ install=LinHES.install
pkgdesc="scripts and things related to having a automated system"
depends=(linhes-sounds xdotool)
backup=(etc/modprobe.d/alsa-base)
-binfiles="LinHES-start optimize_mythdb.py myth_mtc.py myth_mtc.sh LinHES-run firstboot.sh load-modules-mythvantage.sh unclutter-toggle.sh myth_mtc.lr"
+binfiles="LinHES-start optimize_mythdb.py myth_mtc.py myth_mtc.sh LinHES-run firstboot.sh load-modules-mythvantage.sh unclutter-toggle.sh tvterm.sh myth_mtc.lr smolt.cron mythfrontend-start"
source=(LinHES-session LinHES-profile.sh $binfiles alsa-base)
build() {
cd $startdir/src
install -m755 -D LinHES-session $startdir/pkg/etc/X11/Sessions/LinHES
- install -m755 -D LinHES-profile.sh $startdir/pkg/etc/profile.d/LinHES-profile.sh
-####### install to /usr/LH/bin
-#mkdir -p $BINDIR
+ install -m755 -D LinHES-profile.sh $startdir/pkg/etc/profile.d/LinHES-profile.sh
+ ####### install to /usr/LH/bin
+ for i in $binfiles
+ do
+ item=$i
+ install -m755 -D $item $MVDIR/bin/$item
+ echo $item
+ done
-for i in $binfiles
-do
- item=$i
- install -m755 -D $item $MVDIR/bin/$item
- echo $item
+ cd $startdir/bin
+ for i in *
+ do
+ item=$i
+ install -m755 -D $item $MVDIR/bin/$item
+ echo $item
+ done
-done
-
-cd $startdir/bin
-for i in *
-do
- item=$i
- install -m755 -D $item $MVDIR/bin/$item
- echo $item
-
-done
-install -m755 -D $startdir/src/alsa-base $startdir/pkg/etc/modprobe.d/alsa-base
-mkdir $startdir/pkg/etc/logrotate.d
-cp $startdir/myth_mtc.lr $startdir/pkg/etc/logrotate.d
+ install -m755 -D $startdir/src/alsa-base $startdir/pkg/etc/modprobe.d/alsa-base
+ install -m755 -D $startdir/src/smolt.cron $startdir/pkg/etc/cron.weekly/smolt.cron
+ mkdir $startdir/pkg/etc/logrotate.d
+ cp $startdir/myth_mtc.lr $startdir/pkg/etc/logrotate.d
}
+
+md5sums=('19934a456d0e112298b8aac3279f9a16'
+ '5881bdb43d578ec3a79d1f77ea58a3db'
+ 'a875ee97f86e46f34a741c2bc455f894'
+ 'cdcbc530224215f8fcf7ebcd93d7eb0b'
+ 'c60b6c66f498809a6e5ca18a8c97d336'
+ 'ccae1296ef248fa52ec3a7cb820a476e'
+ 'b58b59c05faeefd4acbbb7876215c875'
+ '18a884a73344ff6eb74f63b49745e0f5'
+ 'dc3eef2a624754e16805d72bbe488b67'
+ 'dc0be354ce77ba2b89868fc29b942c43'
+ '542e670e78d117657f93141e9689f54d'
+ 'f1870a9522c79e6b248fcbf81dec3280'
+ 'abe887472a170bd1a8e6da6a7b7e93e4'
+ '752488eb8bfb672ce0e4c924f7faf3d1'
+ 'eb879fee9603a05d5420d4ce8ed9e450')
diff --git a/abs/core/LinHES-system/bin/mythbackup b/abs/core/LinHES-system/bin/mythbackup
index d0d028d..3b4edd4 100755
--- a/abs/core/LinHES-system/bin/mythbackup
+++ b/abs/core/LinHES-system/bin/mythbackup
@@ -5,8 +5,32 @@
echo 1>&2 "Can not load common settings!"
exit 1
}
+
+. /etc/osd_cat.cfg || {
+ color=yellow
+ outline=2
+ outlinecolour=black
+ shadow=0
+ shadowcolour=black
+ font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+}
#----------------------------------------------------------------------------
+# Function to display status onscreen
+osd()
+# Arg_1 = display text Arg_2 = delay time Arg_3 = line num
+{
+ TEXT=$1
+ killall -9 osd_cat
+ if [ $3 -gt 1 ]; then
+ for ((i=2; i <= $3 ; i++))
+ do
+ TEXT="\n"$TEXT
+ done
+ fi
+ printf "$TEXT" | osd_cat --lines=6 --pos=middle --align=center --delay=$2 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
+}
+
# Prevent mythshutdown from shutting down the system in the middle...
lock_myth
@@ -14,12 +38,15 @@ lock_myth
play_sound init.wav
# Keep a chain of recent backups,
+export DISPLAY=:0.0
+osd "Rolling over old backups..." 0 1
echo "Starting rollover of old backups, this may take a while..."
[ -f "$BACKUP_SQL" ] && shrink $BACKUP_SQL
[ -f "$BACKUP_TAR" ] && shrink $BACKUP_TAR
backup_roller .19 .18 .17 .16 .15 .14 .13 .12 .11 .10 .9 .8 .7 .6 .5 .4 .3 .2 .1 ''
echo "Rollover completed."
+osd "Checking the database..." 0 2
# Start with the database backup, first we make sure it's healthy, and
# then we can dump it.
# Doing this while the backend is active would be BAD.
@@ -31,10 +58,12 @@ cd $DATABASE_DIR
$MYISAMCHK -f *.MYI
start_mysqld
+osd "Backing up database..." 0 3
# Dumps the $DATABASE database
$MYSQLDUMP -v -c -u root $DATABASE > $BACKUP_SQL
shrink $BACKUP_SQL
+osd "Backing up files..." 0 4
# Now to backup the other files, no fooling around, grab everything in the
# list because you never know what you'll want, and we can always get clever
# about what to restore later...
@@ -49,19 +78,32 @@ shrink $BACKUP_TAR
$CHOWN root:root $BACKUP_TAR* $BACKUP_SQL*
$CHMOD go-rwx $BACKUP_TAR* $BACKUP_SQL*
+osd "Testing backup..." 0 5
echo "Sanity checking your backup..."
play_sound testing.wav
# Play a sound to let you know the outcome.
if check_files_and_tables $BACKUP_LIST ; then
+ osd "Backup completed successfully." 5 6
echo "Backup passes all checks."
+ COMPLETE_MSG="Last backup completed on `date '+%D @ %-I:%M %p'`"
play_sound complete.wav
STATUS=0
else
+ osd "Backup FAILED." 5 6
echo "The backup is bad or already out of date!"
+ COMPLETE_MSG="Last backup FAILED on `date '+%D @ %-I:%M %p'`"
play_sound fail.wav
STATUS=1
fi
+# Add Last backup status to menu item
+if grep "<description>" /usr/share/mythtv/themes/defaultmenu/mythbackup.xml >/dev/null 2>&1
+then
+ sed -i "s_\<description\>.*\<description\>_description\>$COMPLETE_MSG\<\/description_" /usr/share/mythtv/themes/defaultmenu/mythbackup.xml
+else
+ sed -i.orig " /NONE/ i\ \<description\>$COMPLETE_MSG\<\/description\>" /usr/share/mythtv/themes/defaultmenu/mythbackup.xml
+fi
+
# Now we can restart the backend.
start_mythbackend
diff --git a/abs/core/LinHES-system/bin/mythrestore b/abs/core/LinHES-system/bin/mythrestore
index 7fce371..447b0b8 100755
--- a/abs/core/LinHES-system/bin/mythrestore
+++ b/abs/core/LinHES-system/bin/mythrestore
@@ -5,8 +5,32 @@
echo 1>&2 "Can not load common settings!"
exit 1
}
+
+. /etc/osd_cat.cfg || {
+ color=yellow
+ outline=2
+ outlinecolour=black
+ shadow=0
+ shadowcolour=black
+ font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+}
#----------------------------------------------------------------------------
+# Function to display status onscreen
+osd()
+# Arg_1 = display text Arg_2 = delay time Arg_3 = line num
+{
+ TEXT=$1
+ killall -9 osd_cat
+ if [ $3 -gt 1 ]; then
+ for ((i=2; i <= $3 ; i++))
+ do
+ TEXT="\n"$TEXT
+ done
+ fi
+ printf "$TEXT" | osd_cat --lines=6 --pos=middle --align=center --delay=$2 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
+}
+
do_file_updates() { # A function because we need to do this in two places
echo "Doing any needed file updates..."
[ -n "$UPDATE_FILES" -a -f "$UPDATE_FILES" -a -x "$UPDATE_FILES" ] &&
@@ -39,6 +63,7 @@ lock_myth
# Play a sound to let you know I'm starting.
play_sound restore.wav
+export DISPLAY=:0.0
# Doing this while the backend is active could be BAD.
stop_mythbackend
@@ -46,6 +71,7 @@ stop_mythbackend
# If the standard backup file exists we try to restore the files based
# on our restore list.
if compression=$(compression_type "$BACKUP_TAR") ; then
+ osd "Restoring files..." 0 1
echo "Starting the restore of files..."
cd /
expand -c $BACKUP_TAR$compression |
@@ -59,8 +85,11 @@ if compression=$(compression_type "$BACKUP_SQL") ; then
echo "Starting the DB restore, this can take a while..."
echo "Clearing out the existing skeleton..."
#mysql_stdin < $DROP_SQL
+ osd "Recreating database..." 0 2
echo "Recreating the db..."
+ sleep 1
$MYSQLADMIN -u root create $DATABASE
+ osd "Restoring database..." 0 3
echo "Restoring the data (long)..."
expand -c $BACKUP_SQL$compression | mysql_stdin
echo "Doing any needed db updates..."
@@ -69,23 +98,39 @@ if compression=$(compression_type "$BACKUP_SQL") ; then
echo "Completed the DB restore."
fi
+osd "Testing restore..." 0 4
echo "Sanity checking your restore..."
play_sound vr.wav
# Play a sound to let you know the outcome.
if check_files_and_tables $RESTORE_LIST ; then
+ osd "Restore completed successfully." 5 5
echo "Restore passes all checks."
+ COMPLETE_MSG="Last restore completed on `date '+%D @ %-I:%M %p'`"
play_sound restored.wav
STATUS=0
else
+ osd "Restore FAILED." 5 5
echo "The restore failed or was already modified!"
+ COMPLETE_MSG="Last restore FAILED on `date '+%D @ %-I:%M %p'`"
play_sound rf.wav
STATUS=1
fi
+# Add Last restore status to menu item
+if grep "<description>" /usr/share/mythtv/themes/defaultmenu/mythrestore.xml >/dev/null 2>&1
+then
+ sed -i "s_\<description\>.*\<description\>_description\>$COMPLETE_MSG\<\/description_" /usr/share/mythtv/themes/defaultmenu/mythrestore.xml
+else
+ sed -i.orig " /NONE/ i\ \<description\>$COMPLETE_MSG\<\/description\>" /usr/share/mythtv/themes/defaultmenu/mythrestore.xml
+fi
+
# Make any updates _after_ we verify the backup...
do_db_updates
do_file_updates
+#post restore fixup for sshd
+/usr/MythVantage/bin/systemconfig.py -m user
+
# Now it's more or less safe to restart the backend.
start_mythbackend
diff --git a/abs/core/LinHES-system/firstboot.sh b/abs/core/LinHES-system/firstboot.sh
index 47aa0f9..7e2f603 100755
--- a/abs/core/LinHES-system/firstboot.sh
+++ b/abs/core/LinHES-system/firstboot.sh
@@ -1,22 +1,29 @@
#!/bin/bash
. ~/.configured
ATTEMPT=0
+
function try_smolt {
- ((ATTEMPT=ATTEMPT+1))
- status=$(echo "jump mythsmolt" | telnet localhost 6546 2>&1)
- echo $status|grep -q refused
- status=$?
- if [ $status != 0 ]
- then
- fb_status=0
- echo "FB=NO" > ~/.configured
- fi
- if [ $ATTEMPT = 200 ]
- then
- fb_status=0
- fi
+ ((ATTEMPT=ATTEMPT+1))
+ WID=`xdotool search "mythfrontend" | head -1`
+ xdotool windowfocus $WID
+ status=$?
+ if [ $status = 0 ]
+ then
+ sleep 2
+ xdotool key "ctrl+alt+p"
+ xdotool key "ctrl+alt+p"
+ fb_status=0
+ echo "FB=NO" > ~/.configured
+ fi
+
+ if [ $ATTEMPT = 200 ]
+ then
+ fb_status=0
+ fi
+
}
+
if [ ! -e /tmp/debug ]
then
if [ ! -e /tmp/nomfe ]
diff --git a/abs/core/LinHES-system/mythfrontend-start b/abs/core/LinHES-system/mythfrontend-start
new file mode 100755
index 0000000..c92d024
--- /dev/null
+++ b/abs/core/LinHES-system/mythfrontend-start
@@ -0,0 +1,22 @@
+#!/bin/bash
+PIDS=$(pidof mythfrontend)
+P_array=( $PIDS )
+let "instances = ${#P_array[*]}" # Count elements.
+
+if [ $instances -gt 0 ];
+then
+ if [ $instances -eq 1 ]; then
+ diagtext="is already a MythFrontend"
+ else
+ diagtext="are already $instances MythFrontends"
+ fi
+
+ question="There $diagtext running. Do you really want to start another one?"
+ mythvantage -q "${question}"
+ if [ $? = 16 ]
+ then
+ mythfrontend --logfile /var/log/mythtv/mythfrontend.log
+ fi
+else
+ mythfrontend --logfile /var/log/mythtv/mythfrontend.log
+fi
diff --git a/abs/core/LinHES-system/smolt.cron b/abs/core/LinHES-system/smolt.cron
new file mode 100644
index 0000000..f418df1
--- /dev/null
+++ b/abs/core/LinHES-system/smolt.cron
@@ -0,0 +1,11 @@
+#!/bin/bash
+. /etc/profile
+if [ -f /home/mythtv/.mythtv/MythSmolt/hw-uuid ]
+then
+ cd /usr/share/mythtv/mythsmolt/scripts
+ touch /var/log/smolt.update
+ chown mythtv /var/log/smolt.update
+ random=$((RANDOM%2000))
+ sleep $random
+ su mythtv -c "./sendProfile.py -a" > /var/log/smolt.update
+fi
diff --git a/abs/core/LinHES-system/tvterm.sh b/abs/core/LinHES-system/tvterm.sh
new file mode 100755
index 0000000..dfd116b
--- /dev/null
+++ b/abs/core/LinHES-system/tvterm.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+#
+# Create a terminal with a font that mostly fills the width of the screen.
+
+width=$(echo $(xdpyinfo | grep dimensions:) | cut -d' ' -f2 | cut -dx -f1)
+
+if [ -z "$width" ] ; then
+ width=1024
+fi
+
+if [ $width -ge 1920 ] ; then
+ fontsize=24
+elif [ $width -ge 1440 ] ; then
+ fontsize=21
+elif [ $width -ge 1280 ] ; then
+ fontsize=18
+elif [ $width -ge 1024 ] ; then
+ fontsize=14
+elif [ $width -ge 800 ] ; then
+ fontsize=11
+elif [ $width -ge 640 ] ; then
+ fontsize=8
+fi
+
+xterm -fa 'DejaVu Sans Mono' -fs $fontsize
diff --git a/abs/core/LinHES-system/unclutter-toggle.sh b/abs/core/LinHES-system/unclutter-toggle.sh
index 0ead751..aadce50 100644
--- a/abs/core/LinHES-system/unclutter-toggle.sh
+++ b/abs/core/LinHES-system/unclutter-toggle.sh
@@ -1,8 +1,11 @@
#!/bin/bash
PIDUNC=`pidof unclutter`
+jitter=200
+idle=1
+. /etc/unclutter.cfg
if [ -n "${PIDUNC}" ];
then
killall -9 unclutter
else
- /usr/X11R6/bin/unclutter -root -idle 1 -jitter 200 -noevents &
+ /usr/X11R6/bin/unclutter -root -idle $idle -jitter $jitter -noevents &
fi
diff --git a/abs/core/atl1e/PKGBUILD b/abs/core/atl1e/PKGBUILD
new file mode 100644
index 0000000..64acdfe
--- /dev/null
+++ b/abs/core/atl1e/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 5936 2008-07-21 20:24:16Z thomas $
+# Maintainer: Cecil Watson<knoppmyth@gmail.com>
+
+pkgname=atl1e
+_kernver=2.6.28-LinHES
+pkgver=1
+pkgrel=1
+pkgdesc="AR81 Family Linux wireless drivers"
+arch=('i686' 'x86_64')
+license=('GPL2')
+url="http://partner.atheros.com/Drivers.aspx"
+depends=('kernel26')
+makedepends=(kernel-headers)
+install=atl1e.install
+source=('ftp://ftp.knoppmyth.net/R6/sources/AR81Family-Linux-v1.0.1.9.tar.gz')
+
+build() {
+ cd $startdir/src/src/
+ mkdir -p $pkgdir/lib/modules/$(uname -r)/kernel/drivers/net/atl1e
+ mkdir -p $pkgdir/usr/man/man/man7
+ make KERNDIR=/lib/modules/$_kernver/build \
+ INSTDIR=$startdir/pkg KERNELRELEASE=$_kernver || return 1
+ make KERNDIR=/lib/modules/$_kernver/build \
+ INSTDIR=$startdir/pkg/lib/modules/$(uname -r)/kernel/drivers/net/atl1e KERNELRELEASE=$_kernver install || return 1
+ install -D -m 644 atl1e.7.gz $pkgdir/usr/man/man/man7/atl1e.7.gz
+}
+md5sums=('0d07d98e8941da5232768a154de183fa')
diff --git a/abs/core/atl1e/atl1e.install b/abs/core/atl1e/atl1e.install
new file mode 100644
index 0000000..7ae7ed0
--- /dev/null
+++ b/abs/core/atl1e/atl1e.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ KERNEL_VERSION='2.6.28-LinHES'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ KERNEL_VERSION='2.6.28-LinHES'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+
+}
+
+# arg 1: the old package version
+post_remove() {
+ KERNEL_VERSION='2.6.28-LinHES'
+ depmod -ae -v $KERNEL_VERSION > /dev/null 2>&1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/autoconf/PKGBUILD b/abs/core/autoconf/PKGBUILD
index 75bd7ef..1ac8ed6 100644
--- a/abs/core/autoconf/PKGBUILD
+++ b/abs/core/autoconf/PKGBUILD
@@ -2,7 +2,7 @@
# Maintainer: Andreas Radke <adyrtr@archlinux.org>
pkgname=autoconf
-pkgver=2.63
+pkgver=2.66
pkgrel=1
pkgdesc="A GNU tool for automatically configuring source code"
arch=(i686 x86_64)
@@ -12,7 +12,6 @@ groups=('base-devel')
depends=('awk' 'm4' 'diffutils' 'bash')
install=autoconf.install
source=(ftp://ftp.gnu.org/pub/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz)
-md5sums=('43d76649fb86cd21d64f68c48d5abdcf')
build() {
cd ${srcdir}/${pkgname}-${pkgver}
@@ -23,3 +22,4 @@ build() {
# conflict with bintuils
rm -f ${pkgdir}/usr/share/info/standards.info
}
+md5sums=('fb00d77cbc468994c55919298af1ff02')
diff --git a/abs/core/automake/PKGBUILD b/abs/core/automake/PKGBUILD
index 2943f44..0b3a6f2 100644
--- a/abs/core/automake/PKGBUILD
+++ b/abs/core/automake/PKGBUILD
@@ -3,17 +3,16 @@
# Maintainer: Andreas Radke <andyrtr@archlinux.org>
pkgname=automake
-pkgver=1.10.2
+pkgver=1.11.1
pkgrel=1
pkgdesc="A GNU tool for automatically creating Makefiles"
arch=(i686 x86_64)
license=('GPL')
url="http://www.gnu.org/software/automake"
groups=('base-devel')
-depends=('perl' 'bash' 'texinfo')
+depends=('perl' 'bash' 'texinfo' 'autoconf>=2.60')
install=automake.install
source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
-md5sums=('ede3e08c696861a01f4d2c6a2e822053')
build() {
cd ${srcdir}/${pkgname}-${pkgver}
@@ -23,3 +22,4 @@ build() {
rm -f ${pkgdir}/usr/share/info/dir
}
+md5sums=('4ee7f0ff5f0e467d58b6bd5da96b1c74')
diff --git a/abs/core/catalyst/PKGBUILD b/abs/core/catalyst/PKGBUILD
new file mode 100644
index 0000000..c9f315e
--- /dev/null
+++ b/abs/core/catalyst/PKGBUILD
@@ -0,0 +1,153 @@
+# Maintainer: Vi0L0 <vi0l093@gmail.com>
+# Contributor: Eduardo "kensai" Romero
+# Contributor: Anssi Hannula
+# Contributor: Stefan Bühler
+# Contributor: baghera
+# Contributor: Arlekino
+
+_kernver=`uname -r`
+
+pkgname=catalyst
+pkgver=10.1
+pkgrel=5
+pkgdesc="AMD/ATI drivers for Radeon brand cards. Stock kernel"
+arch=('i686' 'x86_64')
+url="http://www.ati.amd.com"
+license=('custom')
+depends=('xorg-server<1.7.0' 'kernel26>=2.6.28' 'kernel26<2.6.34' 'kernel-headers' 'netkit-bsd-finger' 'libstdc++5' 'libxrandr' 'libsm' 'fontconfig' 'libxcursor' 'libxi' 'gcc-libs')
+
+conflicts=('catalyst' 'catalyst-utils' 'nvidia' 'libgl' 'catalyst-leaked' 'xf86-input-evdev>2.2.5-1' 'xf86-input-keyboard>1.3.2-2' 'xf86-input-mouse>1.4.0-2' 'xf86-input-synaptics>1.1.3-1' 'xf86-video-vesa>2.2.0-1' 'xf86-video-ati' 'xf86-video-radeonhd' 'ati-dri')
+provides=('catalyst' 'libgl')
+install=catalyst.install
+source=(http://www2.ati.com/drivers/linux/ati-driver-installer-${pkgver/./-}-x86.x86_64.run
+ catalyst.sh amdcccle.desktop atieventsd.sh fglrx-2.6.33.patch)
+md5sums=('1edfe45ddf9d9315dec80ff3cc848ca3'
+ 'bdafe749e046bfddee2d1c5e90eabd83'
+ '4efa8414a8fe9eeb50da38b5522ef81d'
+ 'f729bf913613f49b0b9759c246058a87'
+ 'c5eb5571782fed5232461f59a789fb08')
+
+build() {
+/bin/sh ./ati-driver-installer-${pkgver/./-}-x86.x86_64.run --extract archive_files
+
+##Build kernel modules
+
+if [ "${CARCH}" = "x86_64" ]; then
+BUILDARCH=x86_64
+_archdir=x86_64
+fi
+if [ "${CARCH}" = "i686" ]; then
+BUILDARCH=i386
+_archdir=x86
+fi
+
+##patching for kernel 2.6.33 or 2.6.34 support
+if [ `uname -r |grep -c "2.6.33"` != 0 ] || [ `uname -r |grep -c "2.6.34"` != 0 ]; then
+cd "${srcdir}/archive_files/"
+patch -Np1 -i ../fglrx-2.6.33.patch || return 1
+fi
+
+cd "${srcdir}/archive_files/common/lib/modules/fglrx/build_mod"
+cp "${srcdir}/archive_files/arch/${_archdir}/lib/modules/fglrx/build_mod/libfglrx_ip.a.GCC4" . || return 1
+cp 2.6.x/Makefile . || return 1
+
+make -C /lib/modules/${_kernver}/build SUBDIRS="`pwd`" ARCH=${BUILDARCH} modules || return 1
+
+install -m755 -d "${pkgdir}/lib/modules/${_kernver}/video/"
+install -m644 fglrx.ko "${pkgdir}/lib/modules/${_kernver}/video/" || return 1
+install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}"
+
+sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/" $startdir/*.install
+
+##Install catalyst utilities
+
+# Create directories
+install -m755 -d "${pkgdir}/etc/ati"
+install -m755 -d "${pkgdir}/etc/rc.d"
+install -m755 -d "${pkgdir}/etc/profile.d"
+install -m755 -d "${pkgdir}/etc/acpi/events"
+
+install -m755 -d "${pkgdir}/usr/lib/xorg/modules/dri"
+install -m755 -d "${pkgdir}/usr/lib/xorg/modules/drivers"
+install -m755 -d "${pkgdir}/usr/lib/xorg/modules/extensions"
+install -m755 -d "${pkgdir}/usr/lib/xorg/modules/linux"
+
+install -m755 -d "${pkgdir}/usr/bin"
+install -m755 -d "${pkgdir}/usr/sbin"
+
+install -m755 -d "${pkgdir}/usr/include/X11/extensions"
+install -m755 -d "${pkgdir}/usr/include/GL"
+
+install -m755 -d "${pkgdir}/usr/share/applications"
+install -m755 -d "${pkgdir}/usr/share/ati/amdcccle"
+install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}"
+install -m755 -d "${pkgdir}/usr/share/man/man8"
+install -m755 -d "${pkgdir}/usr/share/pixmaps"
+
+# X driver installation
+if [ "${CARCH}" = "i686" ]; then
+cd "${srcdir}/archive_files/x740/usr/X11R6/lib/modules" || return 1
+elif [ "${CARCH}" = "x86_64" ]; then
+cd "${srcdir}/archive_files/x740_64a/usr/X11R6/lib64/modules" || return 1
+fi
+
+install -m644 *.a "${pkgdir}/usr/lib/xorg/modules/" || return 1
+install -m755 *.so "${pkgdir}/usr/lib/xorg/modules/" || return 1
+install -m755 drivers/*.so "${pkgdir}/usr/lib/xorg/modules/drivers/" || return 1
+install -m755 linux/*.so "${pkgdir}/usr/lib/xorg/modules/linux/" || return 1
+install -m755 extensions/libglx.so "${pkgdir}/usr/lib/xorg/modules/extensions/" || return 1
+#install -m755 extensions/libdri.so "${pkgdir}/usr/lib/xorg/modules/extensions/libdri.ati" || return 1
+
+# Controlcenter / library installation
+if [ "${CARCH}" = "i686" ]; then
+cd "${srcdir}/archive_files/arch/x86/usr" || return 1
+_lib=lib
+elif [ "${CARCH}" = "x86_64" ]; then
+cd "${srcdir}/archive_files/arch/x86_64/usr" || return 1
+_lib=lib64
+fi
+
+install -m755 X11R6/bin/* "${pkgdir}/usr/bin/" || return 1
+install -m755 sbin/* "${pkgdir}/usr/sbin/" || return 1
+install -m755 X11R6/${_lib}/*.so* "${pkgdir}/usr/lib/" || return 1
+install -m644 X11R6/${_lib}/*.a "${pkgdir}/usr/lib/" || return 1 # really needed?
+install -m644 X11R6/${_lib}/*.cap "${pkgdir}/usr/lib/" || return 1
+install -m755 X11R6/${_lib}/modules/dri/*.so "${pkgdir}/usr/lib/xorg/modules/dri/" || return 1
+install -m755 ${_lib}/*.so* "${pkgdir}/usr/lib/" || return 1
+
+ln -sf /usr/lib/xorg/modules/dri ${pkgdir}/usr/lib/dri
+ln -sf libfglrx_dm.so.1.0 "${pkgdir}/usr/lib/libfglrx_dm.so.1"
+ln -sf libfglrx_pp.so.1.0 "${pkgdir}/usr/lib/libfglrx_pp.so.1"
+ln -sf libfglrx_tvout.so.1.0 "${pkgdir}/usr/lib/libfglrx_tvout.so.1"
+ln -sf libfglrx_gamma.so.1.0 "${pkgdir}/usr/lib/libfglrx_gamma.so.1"
+ln -sf libGL.so.1.2 "${pkgdir}/usr/lib/libGL.so.1"
+ln -sf libGL.so.1.2 "${pkgdir}/usr/lib/libGL.so"
+
+cd "${srcdir}"/archive_files/common
+install -m644 etc/ati/* "${pkgdir}/etc/ati/" || return 1
+chmod 755 "${pkgdir}/etc/ati/authatieventsd.sh" || return 1
+
+install -m644 usr/X11R6/include/X11/extensions/*.h "${pkgdir}/usr/include/X11/extensions/" || return 1
+install -m644 usr/X11R6/bin/amdupdaterandrconfig "${pkgdir}/usr/bin/" || return 1
+install -m644 usr/include/GL/*.h "${pkgdir}/usr/include/GL/" || return 1
+install -m755 usr/sbin/*.sh "${pkgdir}/usr/sbin/" || return 1
+install -m644 usr/share/ati/amdcccle/* "${pkgdir}/usr/share/ati/amdcccle/" || return 1 # ? what are these files for?
+# install -m644 usr/share/gnome/apps/amdcccle.desktop "${pkgdir}/usr/share/applications/" || return 1
+install -m644 usr/share/icons/*.xpm "${pkgdir}/usr/share/pixmaps/" || return 1
+install -m644 usr/share/man/man8/*.8 "${pkgdir}/usr/share/man/man8/" || return 1
+install -m644 "${srcdir}/amdcccle.desktop" "${pkgdir}/usr/share/applications/" || return 1
+
+# ACPI example files
+install -m755 usr/share/doc/fglrx/examples/etc/acpi/*.sh "${pkgdir}/etc/acpi/" || return 1
+sed -i -e 's/usr\/X11R6/usr/g' "${pkgdir}/etc/acpi/ati-powermode.sh" || return 1
+install -m644 usr/share/doc/fglrx/examples/etc/acpi/events/* "${pkgdir}/etc/acpi/events/" || return 1
+
+# Add ATI Events Daemon launcher
+install -m755 "${srcdir}/atieventsd.sh" "${pkgdir}/etc/rc.d/atieventsd" || return 1
+
+# thanks to cerebral, we dont need that damned symlink
+install -m755 "${srcdir}/catalyst.sh" "${pkgdir}/etc/profile.d/" || return 1
+
+# License
+install -m644 "${srcdir}/archive_files/ATI_LICENSE.TXT" "${pkgdir}/usr/share/licenses/${pkgname}/" || return 1
+}
diff --git a/abs/core/catalyst/amdcccle.desktop b/abs/core/catalyst/amdcccle.desktop
new file mode 100644
index 0000000..ba2ed4a
--- /dev/null
+++ b/abs/core/catalyst/amdcccle.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=ATI Catalyst Control Center
+Comment=ATI graphics adapter settings
+Name[de]=ATI Catalyst Control Center
+Comment[de]=ATI grafics adapter settings
+Icon=ccc_large
+MiniIcon=ccc_small
+Exec=amdcccle
+Type=Application
+Terminal=false
+Categories=Settings;DesktopSettings;
diff --git a/abs/core/catalyst/atieventsd.sh b/abs/core/catalyst/atieventsd.sh
new file mode 100644
index 0000000..16bd9a4
--- /dev/null
+++ b/abs/core/catalyst/atieventsd.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+ATID_PID=`pidof -o %PPID /usr/sbin/atieventsd`
+
+case "$1" in
+ start)
+ rc=0
+ stat_busy "Starting ATI Events Daemon"
+ [ -z "$ATID_PID" ] && /usr/sbin/atieventsd
+ rc=$(($rc+$?))
+ if [ $rc -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon atieventsd
+ stat_done
+ fi
+ ;;
+ stop)
+ rc=0
+ stat_busy "Stopping ATI Events Daemon"
+ kill $ATID_PID &>/dev/null
+ rc=$(($rc+$?))
+ if [ $rc -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon atieventsd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/catalyst/catalyst.install b/abs/core/catalyst/catalyst.install
new file mode 100644
index 0000000..11bf0a7
--- /dev/null
+++ b/abs/core/catalyst/catalyst.install
@@ -0,0 +1,34 @@
+KERNEL_VERSION=2.6.28-LinHES
+
+pre_install() {
+ if [ ! -e /usr/lib/xorg/modules/extensions/libdri.so ]; then
+ ln -sf /usr/lib/xorg/modules/extensions/libdri.xorg /usr/lib/xorg/modules/extensions/libdri.so
+ fi
+}
+
+post_install() {
+ depmod $KERNEL_VERSION
+ if [ ! -e /usr/lib/xorg/modules/extensions/libdri.so ]; then
+ ln -sf /usr/lib/xorg/modules/extensions/libdri.xorg /usr/lib/xorg/modules/extensions/libdri.so
+ fi
+ echo "--------------------------------------------------------------"
+ echo "You can use the tool 'aticonfig' to generate an xorg.conf file."
+ echo "Remember to add fglrx to the MODULES list in /etc/rc.conf."
+ echo "--------------------------------------------------------------"
+}
+
+post_upgrade() {
+ depmod $KERNEL_VERSION
+ if [ ! -e /usr/lib/xorg/modules/extensions/libdri.so ]; then
+ ln -sf /usr/lib/xorg/modules/extensions/libdri.xorg /usr/lib/xorg/modules/extensions/libdri.so
+ fi
+}
+
+post_remove() {
+ depmod $KERNEL_VERSION
+ # If the symlink is dead, remove it
+ if [ ! -e /usr/lib/xorg/modules/extensions/libdri.so ]; then
+ ln -sf /usr/lib/xorg/modules/extensions/libdri.xorg /usr/lib/xorg/modules/extensions/libdri.so
+ fi
+ echo "NOTE: Don't forget to recover your original xorg.conf file."
+}
diff --git a/abs/core/catalyst/catalyst.sh b/abs/core/catalyst/catalyst.sh
new file mode 100644
index 0000000..7aedd4f
--- /dev/null
+++ b/abs/core/catalyst/catalyst.sh
@@ -0,0 +1,11 @@
+if [ $LIBGL_DRIVERS_PATH ]
+then
+ if ! set | grep LIBGL_DRIVERS_PATH | grep /usr/lib/xorg/modules/dri/ > /dev/null
+ then
+ LIBGL_DRIVERS_PATH=$LIBGL_DRIVERS_PATH:/usr/lib/xorg/modules/dri/
+ export LIBGL_DRIVERS_PATH
+ fi
+else
+ LIBGL_DRIVERS_PATH=/usr/lib/xorg/modules/dri/
+ export LIBGL_DRIVERS_PATH
+fi
diff --git a/abs/core/catalyst/fglrx-2.6.33.patch b/abs/core/catalyst/fglrx-2.6.33.patch
new file mode 100644
index 0000000..7ba9ecd
--- /dev/null
+++ b/abs/core/catalyst/fglrx-2.6.33.patch
@@ -0,0 +1,228 @@
+Index: ati10.1/common/lib/modules/fglrx/build_mod/drmP.h
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/drmP.h
++++ ati10.1/common/lib/modules/fglrx/build_mod/drmP.h 2010-01-28 19:57:07.562644291 +0200
+@@ -42,7 +42,12 @@
+ * can build the DRM (part of PI DRI). 4/21/2000 S + B */
+ #include <asm/current.h>
+ #endif /* __alpha__ */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/kernel.h>
+ #include <linux/miscdevice.h>
+@@ -51,7 +56,6 @@
+ #include <linux/init.h>
+ #include <linux/file.h>
+ #include <linux/pci.h>
+-#include <linux/version.h>
+ #include <linux/sched.h>
+ #include <linux/smp_lock.h> /* For (un)lock_kernel */
+ #include <linux/mm.h>
+Index: ati10.1/common/lib/modules/fglrx/build_mod/firegl_public.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/firegl_public.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/firegl_public.c 2010-01-29 14:21:58.687999115 +0200
+@@ -28,7 +28,11 @@
+ #error Kernel versions older than 2.6.0 are no longer supported by this module.
+ #endif
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+
+ #if !defined(CONFIG_X86)
+ #if !defined(CONFIG_X86_PC)
+@@ -163,8 +167,12 @@
+
+ // For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h.
+ #ifndef UTS_RELEASE
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/utsrelease.h>
++#else
+ #include <linux/utsrelease.h>
+ #endif
++#endif
+
+ #if defined(__i386__)
+ #ifndef do_div
+@@ -1472,7 +1472,16 @@
+ #ifndef __HAVE_ARCH_CMPXCHG
+ return __fgl_cmpxchg(ptr,old,new,size);
+ #else
+- return __cmpxchg(ptr,old,new,size);
++ switch (size) {
++ case 1: { volatile u8 *_ptr = ptr; return cmpxchg(_ptr, old, new); }
++ case 2: { volatile u16 *_ptr = ptr; return cmpxchg(_ptr, old, new); }
++ case 4: { volatile u32 *_ptr = ptr; return cmpxchg(_ptr, old, new); }
++#ifdef __x86_64__
++ case 8: { volatile u64 *_ptr = ptr; return cmpxchg(_ptr, old, new); }
++#endif
++ default:
++ return old;
++ }
+ #endif
+ }
+
+
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_acpi.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_acpi.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_acpi.c 2010-01-28 19:57:17.897225045 +0200
+@@ -15,7 +15,11 @@
+ ****************************************************************************/
+
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/acpi.h>
+
+ #include "kcl_config.h"
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_agp.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_agp.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_agp.c 2010-01-28 19:57:26.104892082 +0200
+@@ -31,7 +31,11 @@
+ */
+
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/pci.h>
+ #include <linux/agp_backend.h>
+ #include <linux/string.h>
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_io.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_io.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_io.c 2010-01-28 19:57:34.337558105 +0200
+@@ -37,7 +37,11 @@
+ */
+
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/poll.h>
+ #include <linux/signal.h>
+ #include <asm/io.h>
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_osconfig.h
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_osconfig.h
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_osconfig.h 2010-01-28 19:57:43.599182385 +0200
+@@ -20,7 +20,11 @@
+ #define KCL_OSCONFIG_H
+
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+
+ // Choose modern way to call 32-on-64 IOCTLs if configured in the kernel
+ #if defined(CONFIG_COMPAT) && LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_pci.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_pci.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_pci.c 2010-01-28 19:57:51.295870149 +0200
+@@ -31,7 +31,11 @@
+ */
+
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/pci.h>
+
+ #include "kcl_config.h"
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_str.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_str.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_str.c 2010-01-28 19:57:59.728528058 +0200
+@@ -30,7 +30,12 @@
+ *
+ */
+
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/string.h>
+ #include <linux/module.h>
+
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_wait.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_wait.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_wait.c 2010-01-28 19:58:08.936154527 +0200
+@@ -31,7 +31,11 @@
+ */
+
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/wait.h>
+ #include <linux/highmem.h>
+ #include <linux/sched.h>
+Index: ati10.1/common/lib/modules/fglrx/build_mod/make.sh
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/make.sh
++++ ati10.1/common/lib/modules/fglrx/build_mod/make.sh 2010-01-28 19:55:10.849378991 +0200
+@@ -218,8 +218,15 @@
+ # UTS-define is in external version-*.h files, i.e. linux-2.2.14-5.0-RedHat does this flaw
+ kernel_release=`cat $linuxincludes/linux/version-*.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2`
+ else
+- # For 2.6.18 or higher, UTS-define is defined in utsrelease.h.
+- kernel_release=`cat $linuxincludes/linux/utsrelease.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2`
++ UTS_REL_COUNT=`cat $linuxincludes/generated/utsrelease.h 2>/dev/null | grep UTS_RELEASE -c`
++
++ if [ $UTS_REL_COUNT -gt 0 ]; then
++ # 2.6.33+
++ kernel_release=`cat $linuxincludes/generated/utsrelease.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2`
++ else
++ # For 2.6.18 to 2.6.32, UTS-define is defined in utsrelease.h.
++ kernel_release=`cat $linuxincludes/linux/utsrelease.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2`
++ fi
+ fi
+ fi
+ fi
+@@ -302,7 +309,8 @@
+ # 3
+ # linux/autoconf.h may contain this: #define CONFIG_SMP 1
+
+-src_file=$linuxincludes/linux/autoconf.h
++src_file=$linuxincludes/generated/autoconf.h
++[ -e $src_file ] || src_file=$linuxincludes/linux/autoconf.h
+
+ if [ ! -e $src_file ]; then
+ echo "Warning:" >> $logfile
+@@ -355,7 +363,8 @@
+ MODVERSIONS=0
+
+ # linux/autoconf.h may contain this: #define CONFIG_MODVERSIONS 1
+-src_file=$linuxincludes/linux/autoconf.h
++src_file=$linuxincludes/generated/autoconf.h
++[ -e $src_file ] || src_file=$linuxincludes/linux/autoconf.h
+ if [ ! -e $src_file ];
+ then
+ echo "Warning:" >> $logfile
diff --git a/abs/core/curl/ChangeLog b/abs/core/curl/ChangeLog
index a508322..02635bf 100644
--- a/abs/core/curl/ChangeLog
+++ b/abs/core/curl/ChangeLog
@@ -1,3 +1,48 @@
+2009-11-04 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.19.7-1
+ * Upstream update
+
+2009-10-03 Robson Peixoto <robsonpeixoto@gmail.com>
+
+ * curl 7.19.6-2
+ * Compile with ca-path like Debian and Gentoo
+
+2009-08-12 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.19.6-1
+ * Upstream update
+
+2009-05-18 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.19.5-1
+ * Upstream update
+
+2009-03-03 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.19.4-1
+ * Upstream update
+
+2009-01-21 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.19.3-1
+ * Upstream update
+
+2008-11-14 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.19.2-1
+ * Upstream update
+
+2008-11-08 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.19.1-1
+ * Upstream update
+
+2008-09-20 Eric Belanger <eric@archlinux.org>
+
+ * curl 7.19.0-1
+ * Upstream update
+
2008-06-04 Eric Belanger <eric@archlinux.org>
* curl 7.18.2-1
diff --git a/abs/core/curl/PKGBUILD b/abs/core/curl/PKGBUILD
index cfac1fe..bee1fcb 100644
--- a/abs/core/curl/PKGBUILD
+++ b/abs/core/curl/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 2514 2008-06-05 23:10:19Z eric $
+# $Id: PKGBUILD 58157 2009-11-05 05:13:33Z eric $
# Maintainer: Eric Belanger <eric@archlinux.org>
# Contributor: Lucien Immink <l.immink@student.fnt.hvu.nl>
pkgname=curl
-pkgver=7.18.2
+pkgver=7.19.7
pkgrel=1
pkgdesc="An URL retrival utility and library"
arch=('i686' 'x86_64')
@@ -12,14 +12,28 @@ license=('MIT')
depends=('zlib' 'openssl>=0.9.8b' 'bash' 'ca-certificates')
options=('!libtool')
source=(http://curl.haxx.se/download/${pkgname}-${pkgver}.tar.bz2)
-md5sums=('c389be5b0525276e58865956b7465562')
-sha1sums=('0a4d6878d6be22bb2d701a6cf9bf665f66fc8b87')
+md5sums=('79a8fbb2eed5464b97bdf94bee109380')
+sha1sums=('c306ebf0f65fb90df3c9c9a12fb04fb77cc29e2c')
build() {
- cd ${startdir}/src/${pkgname}-${pkgver}
- ./configure --prefix=/usr --without-libidn --disable-ldap \
- --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt || return 1
+ cd "${srcdir}/${pkgname}-${pkgver}"
+
+ # Thanks Debian and Gentoo =)
+ ./configure \
+ --with-random=/dev/urandom \
+ --prefix=/usr \
+ --mandir=/usr/share/man \
+ --disable-dependency-tracking \
+ --enable-ipv6 \
+ --disable-ldaps \
+ --disable-ldap \
+ --enable-manual \
+ --enable-versioned-symbols \
+ --with-ca-path=/etc/ssl/certs \
+ --without-libidn || return 1
+
make || return 1
- make DESTDIR=${startdir}/pkg install || return 1
- install -D -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING || return 1
+ make DESTDIR="${pkgdir}" install || return 1
+ install -D -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" || return 1
+ install -D -m644 docs/libcurl/libcurl.m4 "${pkgdir}/usr/share/aclocal/libcurl.m4" || return 1
}
diff --git a/abs/core/diskless-legacy/PKGBUILD b/abs/core/diskless-legacy/PKGBUILD
index 6b7cea7..85cfc3a 100644
--- a/abs/core/diskless-legacy/PKGBUILD
+++ b/abs/core/diskless-legacy/PKGBUILD
@@ -2,15 +2,13 @@
# Maintainer: Greg Frost <gregfrost1@bigpond.com>
pkgname=diskless-legacy
pkgver=1
-pkgrel=1
+pkgrel=3
pkgdesc="Script for configuring a diskless mythtv frontends using NFS root."
arch=i686
depends=(tftp-hpa dhcp)
source=(config_diskless_frontend.bash)
-md5sums=('825fbc61ef209dc47f17dbaab5829779')
build() {
install -D -m755 ${srcdir}/config_diskless_frontend.bash \
${pkgdir}/usr/local/bin/config_diskless_frontend.bash
}
-md5sums=('825fbc61ef209dc47f17dbaab5829779')
diff --git a/abs/core/diskless-legacy/config_diskless_frontend.bash b/abs/core/diskless-legacy/config_diskless_frontend.bash
index ffd1afd..24d5fc1 100755
--- a/abs/core/diskless-legacy/config_diskless_frontend.bash
+++ b/abs/core/diskless-legacy/config_diskless_frontend.bash
@@ -3,21 +3,18 @@
# frontend can boot from it.
function backtitle() { # no arguments.
- BT="${0##*/}"
- KMV_F1='/KNOPPIX/KnoppMyth-version'
- KMV_F2='/etc/LinHES-release'
- if [ -f "$KMV_F1" ]; then
- BT="-= $(cat $KMV_F1) $BT =-"
- elif [ -f "$KMV_F2" ]; then
- BT="-= $(cat $KMV_F2) $BT =-"
- fi
+ BT="${0##*/}"
+ KMV='/etc/LinHES-release'
+ if [ -f "$KMV" ]; then
+ BT="-= $(cat $KMV) $BT =-"
+ fi
}
function must_be_root() { # no arguments.
- test $(id -u) == 0 && return
- MSG="\Z1ERROR\Zn: This script \Z4should\Zn be run by \Z1root\Zn."
- dialog --backtitle "$BT" --colors --msgbox "$MSG" 5 45
- exit 4
+ test $(id -u) == 0 && return
+ MSG="\Z1ERROR\Zn: This script \Z4should\Zn be run by \Z1root\Zn."
+ dialog --backtitle "$BT" --colors --msgbox "$MSG" 5 45
+ exit 4
}
backtitle
@@ -319,13 +316,10 @@ fixed-address ${frontend_ips[$fe]};}" >> \
done
/sbin/add_service.sh dhcpd
- /sbin/sv restart dhcpd
}
setup_tftpd() {
-
/sbin/add_service.sh tftpd
- /sbin/sv restart tftpd
}
check_delete_of_existing_nfsroot() {
@@ -386,13 +380,37 @@ export_mounts() {
else
echo "Already added line for /data/var/cache/pacman in /etc/exports"
fi
+
+ # Ensure that the montpoints that are used as storage groups are exported.
+
+ for storage_mount in ${storage_mounts[@]} ; do
+
+ if ! grep -q ^${storage_mount}[[:space:]] /etc/exports ; then
+ echo "Adding line for ${storage_mount} in /etc/exports"
+ echo "${storage_mount} *(rw,async,no_subtree_check)" >> /etc/exports
+ else
+ echo "Already added line for ${storage_mount} in /etc/exports"
+ fi
+ done
}
-enable_nfs() {
- # Enable NFS.
+find_storage_mounts() {
+ unset storage_mounts
+ for group in $(mysql -sB mythconverg -e \
+ "select dirname from storagegroup where hostname = '$(hostname)'") ; do
- /sbin/add_service.sh nfsd
+ group_mount=$group
+ while ! mountpoint -q $group_mount ; do
+ group_mount=$(dirname $group_mount)
+ done
+
+ echo Storage group $group mountpoint is $group_mount
+ storage_mounts=( "${storage_mounts[@]}" $group_mount )
+ done
+}
+enable_nfs() {
+ /sbin/add_service.sh nfsd
}
restart_nfs (){
@@ -427,10 +445,10 @@ create_tftpboot_directory() {
if [ ! -e /tftpboot/kernel26.img ] ; then
echo "Building kernel miniroot"
- if [ -z "$(awk -F\" '$1 ~ /^MODULES=/ && $2 ~ /nfs/' /etc/mkinitcpio.conf)" ] ; then
- cp /etc/mkinitcpio.conf /etc/mkinitcpio.conf~
- sed -e '/^MODULES=/s/\"$/ nfs\"/' < /etc/mkinitcpio.conf~ > /etc/mkinitcpio.conf
- fi
+# if [ -z "$(awk -F\" '$1 ~ /^MODULES=/ && $2 ~ /nfs/' /etc/mkinitcpio.conf)" ] ; then
+# cp /etc/mkinitcpio.conf /etc/mkinitcpio.conf~
+# sed -e '/^MODULES=/s/\"$/ nfs\"/' < /etc/mkinitcpio.conf~ > /etc/mkinitcpio.conf
+# fi
if [ -z "$(awk -F\" '$1 ~ /^HOOKS=/ && $2 ~ /net/' /etc/mkinitcpio.conf)" ] ; then
cp /etc/mkinitcpio.conf /etc/mkinitcpio.conf~
sed -e '/^HOOKS=/s/\"$/ net\"/' < /etc/mkinitcpio.conf~ > /etc/mkinitcpio.conf
@@ -485,29 +503,28 @@ create_new_nfsroot() {
echo "Creating the $NFSROOT directory."
mkdir -p $NFSROOT
for DIR in /* ; do
- if [[ "$DIR" != /myth && \
- "$DIR" != /mnt && \
- "$DIR" != /bin && \
- "$DIR" != /sbin && \
- "$DIR" != /tmp && \
+ if [[ "$DIR" != /mnt && \
"$DIR" != /data && \
"$DIR" != /media && \
- "$DIR" != /proc && \
- "$DIR" != /sys && \
+ "$DIR" != /tmp && \
+ "$DIR" != /etc.old && \
"$DIR" != /storage && \
"$DIR" != /var && \
"$DIR" != /nfsroot && \
"$DIR" != /tftpboot && \
"$DIR" != /cdrom ]]
then
- echo " Copying $DIR to $NFSROOT"
- cp -ax $DIR $NFSROOT
+ if mountpoint -q $DIR && [ "$DIR" != "/dev" ] ; then
+ echo " Making mountpoint dir $DIR"
+ cd $NFSROOT
+ tar c $DIR --exclude=$DIR/* 2> /dev/null | tar x 2> /dev/null
+ else
+ echo " Copying $DIR to $NFSROOT"
+ cp -ax $DIR $NFSROOT
+ fi
fi
done
- cp -alx /bin $NFSROOT
- cp -alx /sbin $NFSROOT
-
cd $NFSROOT
# Exclude specific bits of /var
@@ -519,7 +536,7 @@ create_new_nfsroot() {
--exclude=/var/lib/named \
2> /dev/null | tar x 2> /dev/null
- for DIR in /myth /mnt /data /tmp /proc /media /sys /cdrom /var/lib/mlocate ; do
+ for DIR in /mnt /data /tmp /media /cdrom /var/lib/mlocate ; do
echo " Creating $DIR"
tar c $DIR --exclude=$DIR/* 2> /dev/null | tar x 2> /dev/null
done
@@ -534,11 +551,12 @@ create_new_nfsroot() {
chroot $NFSROOT /sbin/remove_service.sh nmbd
chroot $NFSROOT /sbin/remove_service.sh smbd
chroot $NFSROOT /sbin/remove_service.sh tftpd
+ chroot $NFSROOT /sbin/remove_service.sh avahi
# Update the fstab.
cp $NSFROOT/etc/fstab $NFSROOT/etc/fstab~
- cat $NFSROOT/etc/fstab~ | grep -v ext3 |
+ cat $NFSROOT/etc/fstab~ | grep -v ext[34] | grep -v xfs |
grep -v ^UUID= > $NFSROOT/etc/fstab
echo "\
@@ -547,6 +565,12 @@ $BACKEND_IP:/myth /myth nfs defaults,nolock,auto,noatime 0 0
$BACKEND_IP:/data/var/cache/pacman /data/var/cache/pacman nfs defaults,nolock,auto,noatime 0 0
" >> $NFSROOT/etc/fstab
+ for storage_mount in ${storage_mounts[@]} ; do
+ echo "\
+$BACKEND_IP:${storage_mount} ${storage_mount} nfs auto,noatime,nolock,rsize=32768,wsize=32768 0 0" \
+ >> $NFSROOT/etc/fstab
+ done
+
cp $NFSROOT/etc/rc.sysinit $NFSROOT/etc/rc.sysinit~
sed -e '/^\/sbin\/minilogd/s/$/\n\n# Mount NFS early\n\/bin\/mount -a -t nfs/' \
< $NFSROOT/etc/rc.sysinit~ > $NFSROOT/etc/rc.sysinit
@@ -580,7 +604,13 @@ $BACKEND_IP:/data/var/cache/pacman /data/var/cache/pacman nfs defaults,nolock,au
chown mythtv:mythtv $NFSROOT/home/mythtv/.mythtv/mysql.txt
-# echo > $NFSROOT/etc/mythtv/Cards
+ # Check if the user has a diskless_tweak.<frontend_name> file in root's
+ # home directory. If they do, run it inside the chroot of the NFS root.
+
+ if [[ -x ~/diskless_tweak.$FRONTEND ]] ; then
+ echo Running tweak file ~/diskless_tweak.$FRONTEND
+ chroot $NFSROOT bash -v ~/diskless_tweak.$FRONTEND
+ fi
create_default_pxelinux_entry
export_nfsroot
@@ -589,11 +619,8 @@ $BACKEND_IP:/data/var/cache/pacman /data/var/cache/pacman nfs defaults,nolock,au
dialog "${DOPTS[@]}" --msgbox "Boot your diskless FE
and then re-run this script ($0) so that the MAC address
of the Diskless FE can be obtained." 0 0
-
}
-
-
##########################################
##########################################
##
@@ -602,8 +629,6 @@ $BACKEND_IP:/data/var/cache/pacman /data/var/cache/pacman nfs defaults,nolock,au
##########################################
##########################################
-
-
check_for_default_fe
find_existing_diskless_fes
@@ -612,6 +637,7 @@ get_network_info
setup_tftpd
setup_dhcpd
enable_mysql_and_backend_networking
+find_storage_mounts
export_mounts
create_tftpboot_directory
enable_nfs
diff --git a/abs/core/dvb-firmware/PKGBUILD b/abs/core/dvb-firmware/PKGBUILD
index 5531f86..3a84167 100644
--- a/abs/core/dvb-firmware/PKGBUILD
+++ b/abs/core/dvb-firmware/PKGBUILD
@@ -3,18 +3,20 @@
pkgname=dvb-firmware
pkgver=1
-pkgrel=8
+pkgrel=9
pkgdesc="Firmware for DVB cards"
arch=('i586' 'i686' 'x86_64')
url="http://linuxtv.org/"
source=(ftp://ftp.knoppmyth.net/R6/sources/dvb-firmware.tar.bz2
http://dl.ivtvdriver.org/ivtv/firmware/cx18-firmware.tar.gz
xc3028-v27.fw
- dvb-usb-dib0700-1.20.fw)
+ dvb-usb-dib0700-1.20.fw
+ dvb-usb-af9015.fw)
md5sums=('6932d0b4f763424e35b7fa3a6cc82a2e'
- '667fa0ee6b79e054736beef922966333'
- '293dc5e915d9a0f74a368f8a2ce3cc10'
- 'f42f86e2971fd994003186a055813237')
+ '667fa0ee6b79e054736beef922966333'
+ '293dc5e915d9a0f74a368f8a2ce3cc10'
+ 'f42f86e2971fd994003186a055813237'
+ 'dccbc92c9168cc629a88b34ee67ede7b')
build() {
cd $startdir/src/
diff --git a/abs/core/dvb-firmware/dvb-usb-af9015.fw b/abs/core/dvb-firmware/dvb-usb-af9015.fw
new file mode 100644
index 0000000..0014181
--- /dev/null
+++ b/abs/core/dvb-firmware/dvb-usb-af9015.fw
Binary files differ
diff --git a/abs/core/filesystem/PKGBUILD b/abs/core/filesystem/PKGBUILD
index 02649c3..aca2a86 100644
--- a/abs/core/filesystem/PKGBUILD
+++ b/abs/core/filesystem/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=filesystem
pkgver=2009.01
-pkgrel=2
+pkgrel=4
pkgdesc="Base filesystem"
arch=(i686 x86_64)
license=('GPL')
@@ -18,25 +18,6 @@ backup=(etc/fstab etc/crypttab etc/group etc/hosts etc/ld.so.conf etc/passwd
source=(group issue nsswitch.conf securetty host.conf ld.so.conf
passwd shadow fstab crypttab hosts motd resolv.conf shells
gshadow services protocols profile modprobe.d.usb-load-ehci-first)
-md5sums=('f4cf8d0a2de2658165148d5f64d81675'
- '1bdc5dba66947d74866a5df8ce9ef3b1'
- '775464ba7588b4976e0c2a02b83123f4'
- '655071da46d2ac03e0fb8a071bf193ea'
- 'f28150d4c0b22a017be51b9f7f9977ed'
- '2c24792d97ef3cf0d73b60d4c429730b'
- '8a9042a2cedf6b6b47eb8973f14289cb'
- '019e5c24f9befef395a28e7ef2e4e5b9'
- 'c4f23a66a1bcc08fd164639bdafbc60a'
- 'e5d8323a4dbee7a6d0d2a19cbf4b819f'
- '81b3cb42a6ddabc2ed2310511ee9c859'
- 'd41d8cd98f00b204e9800998ecf8427e'
- '6f48288b6fcaf0065fcb7b0e525413e0'
- '40dac0de4c6b99c8ca97effbd7527c84'
- 'ab9c2a40eba287b2918589ab8e0b2fbf'
- 'f436d2e0ed02b7b73bd10c6693e95ac3'
- '65d78e621ed69eed69f854c3ee2e5942'
- '288a2e8d63c5ea2c2d852c7147e59d28'
- '8098ffd9fbf890468d3198277596b85a')
build()
{
@@ -75,7 +56,7 @@ build()
chown root:50 ${startdir}/pkg/var/games
cd $startdir/src
- cp fstab crypttab group host.conf hosts issue ld.so.conf motd nsswitch.conf \
+ cp fstab crypttab group host.conf hosts ld.so.conf motd nsswitch.conf \
passwd protocols resolv.conf securetty services shadow shells profile \
$startdir/pkg/etc/
install -m 600 $startdir/src/gshadow $startdir/pkg/etc/gshadow
@@ -92,3 +73,23 @@ build()
# Add /etc/modprobe.d/
install -D -m644 ${srcdir}/modprobe.d.usb-load-ehci-first ${pkgdir}/etc/modprobe.d/usb-load-ehci-first
}
+
+md5sums=('f4cf8d0a2de2658165148d5f64d81675'
+ '1bdc5dba66947d74866a5df8ce9ef3b1'
+ '042ab2ae8ee489908ae87e0598070a11'
+ '655071da46d2ac03e0fb8a071bf193ea'
+ 'f28150d4c0b22a017be51b9f7f9977ed'
+ '2c24792d97ef3cf0d73b60d4c429730b'
+ '8a9042a2cedf6b6b47eb8973f14289cb'
+ '019e5c24f9befef395a28e7ef2e4e5b9'
+ 'c4f23a66a1bcc08fd164639bdafbc60a'
+ 'e5d8323a4dbee7a6d0d2a19cbf4b819f'
+ '81b3cb42a6ddabc2ed2310511ee9c859'
+ 'd41d8cd98f00b204e9800998ecf8427e'
+ '6f48288b6fcaf0065fcb7b0e525413e0'
+ '40dac0de4c6b99c8ca97effbd7527c84'
+ 'ab9c2a40eba287b2918589ab8e0b2fbf'
+ 'f436d2e0ed02b7b73bd10c6693e95ac3'
+ '65d78e621ed69eed69f854c3ee2e5942'
+ '288a2e8d63c5ea2c2d852c7147e59d28'
+ '8098ffd9fbf890468d3198277596b85a')
diff --git a/abs/core/filesystem/__changelog b/abs/core/filesystem/__changelog
new file mode 100644
index 0000000..6b2fd86
--- /dev/null
+++ b/abs/core/filesystem/__changelog
@@ -0,0 +1,2 @@
+remove /etc/issue
+
diff --git a/abs/core/filesystem/nsswitch.conf b/abs/core/filesystem/nsswitch.conf
index 7d86691..ec84725 100644
--- a/abs/core/filesystem/nsswitch.conf
+++ b/abs/core/filesystem/nsswitch.conf
@@ -15,5 +15,6 @@ ethers: db files
rpc: db files
netgroup: db files
+automount:files
# End /etc/nsswitch.conf
diff --git a/abs/core/fluxbox/PKGBUILD b/abs/core/fluxbox/PKGBUILD
index b3a9a41..3873ff1 100644
--- a/abs/core/fluxbox/PKGBUILD
+++ b/abs/core/fluxbox/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=fluxbox
pkgver=1.1.1
-pkgrel=6
+pkgrel=11
pkgdesc="A lightweight and highly-configurable window manager"
arch=('i686' 'x86_64')
url="http://www.fluxbox.org"
@@ -13,9 +13,11 @@ depends=('libxft' 'libxpm' 'libxinerama' 'libxrandr' 'gcc-libs' 'bash' 'imlib2')
makedepends=('pkgconfig')
options=('!makeflags')
source=(http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2 \
- fluxbox.desktop keys)
+ fluxbox.desktop keys fluxbox_fullscreen_focus.patch)
build() {
+ echo "==> Patching Fluxbox with fullscreen focus patch..."
+ patch < fluxbox_fullscreen_focus.patch ${srcdir}/${pkgname}-${pkgver}/src/Window.cc || return 1
cd ${srcdir}/${pkgname}-${pkgver}
./configure --prefix=/usr \
--enable-kde --enable-gnome \
@@ -29,3 +31,7 @@ build() {
install -D -m644 ../keys ${pkgdir}/usr/share/fluxbox/keys || return 1
install -D -m644 COPYING ${pkgdir}/usr/share/licenses/$pkgname/COPYING || return 1
}
+md5sums=('fa9fa8fe9a44f86522de5754f8b285ca'
+ 'eeae9c88a2526ac0bd8afcd9ce97f9ed'
+ 'bb9f812c559263b4bf1d722628a11ca8'
+ '82dac089f2d42bb9592debc93291846d')
diff --git a/abs/core/fluxbox/fluxbox_fullscreen_focus.patch b/abs/core/fluxbox/fluxbox_fullscreen_focus.patch
new file mode 100644
index 0000000..1a8c233
--- /dev/null
+++ b/abs/core/fluxbox/fluxbox_fullscreen_focus.patch
@@ -0,0 +1,12 @@
+--- src/Window.cc.orig 2010-04-12 16:45:00.750585365 -0500
++++ src/Window.cc 2010-04-12 16:45:38.719755786 -0500
+@@ -2042,8 +2042,7 @@
+ FluxboxWindow *cur = FocusControl::focusedFbWindow();
+ WinClient *client = FocusControl::focusedWindow();
+ if (ret && cur && getRootTransientFor(&from) != getRootTransientFor(client))
+- ret = !(cur->isFullscreen() && getOnHead() == cur->getOnHead()) &&
+- !cur->isTyping();
++ ret = !cur->isTyping();
+
+ if (!ret)
+ Fluxbox::instance()->attentionHandler().addAttention(from);
diff --git a/abs/core/fluxbox/keys b/abs/core/fluxbox/keys
index fbacf75..d0091eb 100644
--- a/abs/core/fluxbox/keys
+++ b/abs/core/fluxbox/keys
@@ -17,11 +17,13 @@ Mod1 F9 :Workspace 9
Mod1 F10 :Workspace 10
Mod1 F11 :Workspace 11
Mod1 F12 :Workspace 12
-Mod1 x :ExecCommand xterm -fn *18*
+Mod1 x :ExecCommand tvterm.sh
Mod1 s :ExecCommand sudo taskset -c 0 mythtv-setup
-Mod1 m :ExecCommand mythfrontend --logfile /var/log/mythtv/mythfrontend.log
+#Mod1 m :ExecCommand mythfrontend --logfile /var/log/mythtv/mythfrontend.log
+Mod1 m :ExecCommand /usr/LH/bin/mythfrontend-start
Mod1 1 :ExecCommand sudo sv start mythbackend
Mod1 2 :ExecCommand sudo sv stop mythbackend
Mod1 3 :ExecCommand sudo sv restart mythbackend
Mod1 h :ExecCommand MythVantage -h
Mod1 Control u :ExecCommand /usr/LH/bin/unclutter-toggle.sh
+Mod1 Escape :GotoWindow {1}
diff --git a/abs/core/hauppauge-hvr-firmware/PKGBUILD b/abs/core/hauppauge-hvr-firmware/PKGBUILD
index ef38191..f9a488d 100755
--- a/abs/core/hauppauge-hvr-firmware/PKGBUILD
+++ b/abs/core/hauppauge-hvr-firmware/PKGBUILD
@@ -1,12 +1,14 @@
pkgname=hauppauge-hvr-firmware
pkgver=1
-pkgrel=1
+pkgrel=3
pkgdesc="firmware needed for the hvr cards"
arch=(i686 x86_64)
url=""
makedepends='unzip'
-source=("http://steventoth.net/linux/hvr1800/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip")
-
+source=("http://steventoth.net/linux/hvr1800/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip"
+ "http://steventoth.net/linux/hvr1400/xc3028L-v36.fw")
+md5sums=('7fe395c1a398f079d98e416ee7be3777'
+ '5260975b76ade7a1d37270129b6d6372')
build() {
cd $startdir || return 1
@@ -17,4 +19,6 @@ build() {
mv hcw85enc.rom v4l-cx23885-enc.fw
mv hcw85mlC.rom v4l-cx23885-avcore-01.fw
cp -rp *.fw $startdir/pkg/lib/firmware
+ cd $startdir/src/
+ cp *.fw $startdir/pkg/lib/firmware
}
diff --git a/abs/core/hdhomerun/PKGBUILD b/abs/core/hdhomerun/PKGBUILD
index 3e1a064..51186e0 100755
--- a/abs/core/hdhomerun/PKGBUILD
+++ b/abs/core/hdhomerun/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=hdhomerun
-pkgver=20090806
+pkgver=20100213
pkgrel=1
pkgdesc="utils and firmware needed for the hdhomerun"
arch=(i686 x86_64)
@@ -20,3 +20,7 @@ build() {
mkdir -p $startdir/pkg/lib/firmware
cp $startdir/src/*.bin $startdir/pkg/lib/firmware/
}
+md5sums=('c69f46d0a671e3d7aaacc82ad393644a'
+ '8b23724c2afb04cd909d3c1ff392d287'
+ '369be2b2c95c2c93e0f2b09fcc01edfb'
+ '9e83fbf8a74d6b8f746cc9f1414e9167')
diff --git a/abs/core/hdparm/PKGBUILD b/abs/core/hdparm/PKGBUILD
index de29521..2e1a441 100644
--- a/abs/core/hdparm/PKGBUILD
+++ b/abs/core/hdparm/PKGBUILD
@@ -2,8 +2,8 @@
# Maintainer: Paul Mattal <paul@archlinux.org>
pkgname=hdparm
-pkgver=8.9
-pkgrel=10
+pkgver=9.29
+pkgrel=1
pkgdesc="A shell utility for manipulating Linux IDE drive/driver parameters"
arch=(i686 x86_64)
depends=('glibc')
@@ -30,4 +30,4 @@ build() {
# installs empty /usr/share, which we let it do since it causes
# no harm and it might put something there someday
}
-md5sums=('19fa013956612581af7d00907990ac84')
+md5sums=('6575aba60e5adee628414cac76549c9b')
diff --git a/abs/core/kernel26/PKGBUILD b/abs/core/kernel26/PKGBUILD
index 8248fc5..0095428 100644
--- a/abs/core/kernel26/PKGBUILD
+++ b/abs/core/kernel26/PKGBUILD
@@ -5,7 +5,7 @@
pkgname=kernel26
_basekernel=2.6.28
pkgver=2.6.28.5
-pkgrel=4
+pkgrel=5
_pkgrel=1
_patchname="patch-${pkgver}-${_pkgrel}-ARCH"
_fbpatchname="fbcondecor-0.9.5-2.6.28.patch"
@@ -35,7 +35,8 @@ source=(ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-$_basekernel.tar.bz2
kernel26.preset
logo_linux_clut224.ppm
serial.diff
- ext4.patch)
+ ext4.patch
+ coretemp.patch)
optdepends=('crda: to set the correct wireless channels of your country')
md5sums=('d351e44709c9810b85e29b877f50968a'
'6e63a5f54c142f42de7e59fc5f75eab2'
@@ -44,7 +45,8 @@ md5sums=('d351e44709c9810b85e29b877f50968a'
'959b317feb974d8906c5e15e7c76ad8f'
'ceb38003807a5aa1a00c8d4b9f028893'
'7bdfe2e1daedb324fdfdfa95ba4e2430'
- 'd66b5cc1e1c2ce40d06d77167f36dfd9')
+ 'd66b5cc1e1c2ce40d06d77167f36dfd9'
+ '695a2d6f1b0b4c7001bf665d5f667a5d')
build() {
KARCH=x86
@@ -55,6 +57,8 @@ build() {
patch -Np1 -i ${srcdir}/${_patchname} || return 1
patch -Np1 -i ${srcdir}/${_fbpatchname} || return 1
patch -Np1 -i ${srcdir}/ext4.patch || return 1
+ patch -Np1 -i ${srcdir}/coretemp.patch || return 1
+# patch -Np1 -i ${srcdir}/patch-2.6.28.5 || return 1
# patch -p0 < ../../serial.diff
if [ "$CARCH" = "x86_64" ]; then
diff --git a/abs/core/kernel26/coretemp.patch b/abs/core/kernel26/coretemp.patch
new file mode 100644
index 0000000..07ce434
--- /dev/null
+++ b/abs/core/kernel26/coretemp.patch
@@ -0,0 +1,86 @@
+diff -ubr orig/linux-2.6.28/Documentation/hwmon/coretemp linux-2.6.28/Documentation/hwmon/coretemp
+--- orig/linux-2.6.28/Documentation/hwmon/coretemp 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28/Documentation/hwmon/coretemp 2009-07-18 07:29:37.000000000 +0200
+@@ -4,7 +4,7 @@
+ Supported chips:
+ * All Intel Core family
+ Prefix: 'coretemp'
+- CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17
++ CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17, 0x1c
+ Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual
+ Volume 3A: System Programming Guide
+ http://softwarecommunity.intel.com/Wiki/Mobility/720.htm
+@@ -14,10 +14,11 @@
+ Description
+ -----------
+
+-This driver permits reading temperature sensor embedded inside Intel Core CPU.
+-Temperature is measured in degrees Celsius and measurement resolution is
+-1 degree C. Valid temperatures are from 0 to TjMax degrees C, because
+-the actual value of temperature register is in fact a delta from TjMax.
++This driver permits reading temperature sensor embedded inside Intel
++Core and Intel Atom CPUs. Temperature is measured in degrees Celsius
++and measurement resolution is 1 degree C. Valid temperatures are from 0
++to TjMax degrees C, because the actual value of temperature register is
++in fact a delta from TjMax.
+
+ Temperature known as TjMax is the maximum junction temperature of processor.
+ Intel defines this temperature as 85C or 100C. At this temperature, protection
+@@ -35,4 +36,5 @@
+
+ The TjMax temperature is set to 85 degrees C if undocumented model specific
+ register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as
+-(sometimes) documented in processor datasheet.
++(sometimes) documented in processor datasheet. The Intel Atom has TjMax 95C
++as per the specification.
+diff -ubr orig/linux-2.6.28/drivers/hwmon/coretemp.c linux-2.6.28/drivers/hwmon/coretemp.c
+--- orig/linux-2.6.28/drivers/hwmon/coretemp.c 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28/drivers/hwmon/coretemp.c 2009-07-18 08:12:16.000000000 +0200
+@@ -1,7 +1,7 @@
+ /*
+ * coretemp.c - Linux kernel module for hardware monitoring
+ *
+- * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
++ * Copyright (C) 2007, 2008 Rudolf Marek <r.marek@assembler.cz>
+ *
+ * Inspired from many hwmon drivers
+ *
+@@ -244,8 +244,14 @@
+ }
+ }
+
++ /* Intel Atom has only fixed TjMax at 95C */
++
++ if (c->x86_model == 0x1c) {
++ data->tjmax = 95000;
++ } else {
++ /* Adjust the TjMax for the rest of Core2 family */
+ data->tjmax = adjust_tjmax(c, data->id, &pdev->dev);
+- platform_set_drvdata(pdev, data);
++ }
+
+ /* read the still undocumented IA32_TEMPERATURE_TARGET it exists
+ on older CPUs but not in this register */
+@@ -265,6 +271,8 @@
+ }
+ }
+
++ platform_set_drvdata(pdev, data);
++
+ if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
+ goto exit_dev;
+
+@@ -413,11 +421,11 @@
+ for_each_online_cpu(i) {
+ struct cpuinfo_x86 *c = &cpu_data(i);
+
+- /* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A */
++ /* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A, 0x1C */
+ if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
+ !((c->x86_model == 0xe) || (c->x86_model == 0xf) ||
+ (c->x86_model == 0x16) || (c->x86_model == 0x17) ||
+- (c->x86_model == 0x1A))) {
++ (c->x86_model == 0x1A) || (c->x86_model == 0x1C))) {
+
+ /* supported CPU not found, but report the unknown
+ family 6 CPU */
diff --git a/abs/core/libarchive/PKGBUILD b/abs/core/libarchive/PKGBUILD
index c8209a7..1c29cd2 100644
--- a/abs/core/libarchive/PKGBUILD
+++ b/abs/core/libarchive/PKGBUILD
@@ -1,16 +1,17 @@
-# $Id: PKGBUILD 24591 2009-01-18 20:59:48Z dan $
+# $Id: PKGBUILD 50484 2009-08-27 22:33:42Z thomas $
# Maintainer: Dan McGee <dan@archlinux.org>
# Maintainer: Aaron Griffin <aaron@archlinux.org>
pkgname=libarchive
-pkgver=2.6.1
+pkgver=2.7.1
pkgrel=1
pkgdesc="library that can create and read several streaming archive formats"
arch=(i686 x86_64)
-url="http://people.freebsd.org/~kientzle/libarchive/"
+url="http://libarchive.googlecode.com/"
license=('BSD')
groups=('base')
-depends=('zlib' 'bzip2' 'acl')
+depends=('zlib' 'bzip2' 'xz-utils' 'acl' 'openssl')
source=(http://libarchive.googlecode.com/files/libarchive-$pkgver.tar.gz)
+sha256sums=('a7e066ef857d3db0211e2d916ca14aafc48a4776c4fa108fd67092ce862a7ba8')
# pacman.static build fails unless we keep the libtool files (or unless we link
# the missing symbols inside the libarchive .a static lib, but that is dirty)
@@ -18,7 +19,7 @@ options=(libtool)
build() {
cd $startdir/src/$pkgname-$pkgver
- ./configure --prefix=/usr --without-lzmadec
+ ./configure --prefix=/usr
make || return 1
make DESTDIR=$startdir/pkg install
@@ -27,6 +28,3 @@ build() {
mkdir -p $startdir/pkg/usr/share/licenses/libarchive
install -m644 COPYING $startdir/pkg/usr/share/licenses/libarchive/
}
-
-md5sums=('9d9f83947ee9d5732289ed48d00e3743')
-sha256sums=('4d0ad4e5c33aa9725c7d92a42ae605815781372db949cd9906945e6c0d85c179')
diff --git a/abs/core/libfetch/Makefile b/abs/core/libfetch/Makefile
new file mode 100644
index 0000000..15df96e
--- /dev/null
+++ b/abs/core/libfetch/Makefile
@@ -0,0 +1,88 @@
+prefix = /usr
+DESTDIR =
+DEBUG = false
+FETCH_WITH_INET6 = true
+FETCH_WITH_OPENSSL = true
+
+WARNINGS = -Wall -Wstrict-prototypes -Wsign-compare -Wchar-subscripts \
+ -Wpointer-arith -Wcast-align -Wsign-compare
+CFLAGS = -O2 -pipe -I. -fPIC $(WARNINGS) \
+ -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES
+
+CFLAGS += -DFTP_COMBINE_CWDS -DNETBSD
+
+ifeq ($(strip $(FETCH_WITH_INET6)), true)
+CFLAGS+= -DINET6
+endif
+
+ifeq ($(strip $(FETCH_WITH_OPENSSL)), true)
+CFLAGS+= -DWITH_SSL
+LDFLAGS= -lssl -lcrypto
+endif
+
+ifeq ($(strip $(DEBUG)), true)
+CFLAGS += -g -DDEBUG
+else
+CFLAGS += -UDEBUG
+endif
+
+CC = gcc
+LD = gcc
+AR = ar
+RANLIB = ranlib
+INSTALL = install -c -D
+
+OBJS= fetch.o common.o ftp.o http.o file.o
+INCS= fetch.h common.h
+GEN = ftperr.h httperr.h
+MAN = libdownload.3
+
+#pretty print!
+E = @/bin/echo
+Q = @
+
+all: libfetch.so libfetch.a
+ $(E) " built with: " $(CFLAGS)
+.PHONY: all
+
+%.o: %.c $(INCS) $(GEN)
+ $(E) " compile " $@
+ $(Q) $(CC) $(CFLAGS) -c $<
+
+ftperr.h: ftp.errors
+ $(E) " generate " $@
+ $(Q) ./errlist.sh ftp_errlist FTP ftp.errors > $@
+
+httperr.h: http.errors
+ $(E) " generate " $@
+ $(Q) ./errlist.sh http_errlist HTTP http.errors > $@
+
+libfetch.so: $(GEN) $(INCS) $(OBJS)
+ $(E) " build " $@
+ $(Q) rm -f $@
+ $(Q) $(LD) $(LDFLAGS) *.o -shared -o $@
+
+libfetch.a: $(GEN) $(INCS) $(OBJS)
+ $(E) " build " $@
+ $(Q) rm -f $@
+ $(Q) $(AR) rcs $@ *.o
+ $(Q) $(RANLIB) $@
+
+clean:
+ $(E) " clean "
+ $(Q) rm -f libfetch.so libfetch.a *.o $(GEN)
+.PHONY: clean
+
+install: all
+ $(Q) $(INSTALL) -m 755 libfetch.so $(DESTDIR)$(prefix)/lib/libfetch.so
+ $(Q) $(INSTALL) -m 644 libfetch.a $(DESTDIR)$(prefix)/lib/libfetch.a
+ $(Q) $(INSTALL) -m 644 fetch.h $(DESTDIR)$(prefix)/include/fetch.h
+ $(Q) $(INSTALL) -m 644 fetch.3 $(DESTDIR)$(prefix)/share/man/man3/fetch.3
+.PHONY: install
+
+uninstall:
+ $(Q) rm -f $(DESTDIR)$(prefix)/lib/libfetch.so
+ $(Q) rm -f $(DESTDIR)$(prefix)/lib/libfetch.a
+ $(Q) rm -f $(DESTDIR)$(prefix)/include/fetch.h
+ $(Q) rm -f $(DESTDIR)$(prefix)/share/man/man3/fetch.3
+.PHONY: uninstall
diff --git a/abs/core/libfetch/PKGBUILD b/abs/core/libfetch/PKGBUILD
new file mode 100644
index 0000000..8cdbd2c
--- /dev/null
+++ b/abs/core/libfetch/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id$
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: Xavier Chantry <shiningxc@gmail.com>
+
+pkgname=libfetch
+pkgver=2.26
+pkgrel=1
+pkgdesc="URL based download library"
+arch=('i686' 'x86_64')
+license=('BSD')
+groups=('base')
+depends=('openssl')
+url="http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/net/libfetch/"
+source=(Makefile
+ ftp://ftp.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz)
+
+# source PKGBUILD && mksource
+mksource() {
+ export CVSROOT=:pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot
+ D=pkgsrc/net/libfetch
+ [ -d "$D" ] && cvs up "$D" || cvs co "$D"
+ pushd "$D"
+ dirname=$(sed -n 's/DISTNAME=.*\(libfetch-.*$\)/\1/p' Makefile)
+ cp -r files $dirname
+ tar -czv --exclude=CVS -f ../../../$dirname.tar.gz $dirname
+ rm -r $dirname
+ popd
+}
+
+build() {
+ cd $srcdir/${pkgname}-${pkgver}
+ cp ../Makefile .
+ make || return 1
+ make DESTDIR=$pkgdir install
+}
+
+md5sums=('cea609a8d6fd97761e364f7203e6d609'
+ '2dc53c0b5480d3dd5157482379820806')
diff --git a/abs/core/libiec61883/PKGBUILD b/abs/core/libiec61883/PKGBUILD
index 8159d36..dbb0b49 100644
--- a/abs/core/libiec61883/PKGBUILD
+++ b/abs/core/libiec61883/PKGBUILD
@@ -5,19 +5,23 @@
pkgname=libiec61883
pkgver=1.2.0
-pkgrel=2
+pkgrel=3
pkgdesc="A higher level API for streaming DV, MPEG-2 and audio over Linux IEEE 1394"
arch=('i686' 'x86_64')
url="http://www.linux1394.org/"
license=('LGPL')
depends=('libraw1394')
options=('!libtool')
-source=(http://www.linux1394.org/dl/$pkgname-$pkgver.tar.gz)
+source=(http://www.kernel.org/pub/linux/libs/ieee1394/$pkgname-$pkgver.tar.gz)
md5sums=('8af39fff74988073c3ad53fbab147da9')
build() {
cd $startdir/src/$pkgname-$pkgver
+ patch -p0 <$startdir/libiec61883-1.2.0-Makefile.patch
./configure --prefix=/usr
make || return 1
- make DESTDIR=$startdir/pkg install
+ make DESTDIR=$startdir/pkg install || return 1
+# mkdir -p $startdir/pkg/usr/bin/.libs
+# cp $startdir/src/$pkgname-$pkgver/examples/test-mpeg2 $startdir/pkg/usr/bin || return 1
+# cp $startdir/src/$pkgname-$pkgver/examples/.libs/lt-test-mpeg2 $startdir/pkg/usr/bin/.libs || return 1
}
diff --git a/abs/core/libiec61883/libiec61883-1.2.0-Makefile.patch b/abs/core/libiec61883/libiec61883-1.2.0-Makefile.patch
new file mode 100644
index 0000000..59166ce
--- /dev/null
+++ b/abs/core/libiec61883/libiec61883-1.2.0-Makefile.patch
@@ -0,0 +1,25 @@
+--- examples/Makefile.in.orig 2010-01-01 03:30:47.294012274 +0000
++++ examples/Makefile.in 2010-01-01 03:35:31.530650431 +0000
+@@ -33,8 +33,8 @@
+ build_triplet = @build@
+ host_triplet = @host@
+ noinst_PROGRAMS = test-amdtp$(EXEEXT) test-dv$(EXEEXT) \
+- test-mpeg2$(EXEEXT) test-plugs$(EXEEXT)
+-bin_PROGRAMS = plugreport$(EXEEXT) plugctl$(EXEEXT)
++ test-plugs$(EXEEXT)
++bin_PROGRAMS = plugreport$(EXEEXT) plugctl$(EXEEXT) test-mpeg2$(EXEEXT)
+ subdir = examples
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+
+--- examples/Makefile.am.orig 2010-01-01 03:30:57.440678420 +0000
++++ examples/Makefile.am 2010-01-01 03:33:34.714412431 +0000
+@@ -1,6 +1,6 @@
+
+-noinst_PROGRAMS = test-amdtp test-dv test-mpeg2 test-plugs
+-bin_PROGRAMS = plugreport plugctl
++noinst_PROGRAMS = test-amdtp test-dv test-plugs
++bin_PROGRAMS = plugreport plugctl test-mpeg2
+ man_MANS = plugreport.1 plugctl.1
+ EXTRA_DIST = plugreport.1 plugctl.1
+
diff --git a/abs/core/libjpeg6/PKGBUILD b/abs/core/libjpeg6/PKGBUILD
new file mode 100644
index 0000000..659aaf6
--- /dev/null
+++ b/abs/core/libjpeg6/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=libjpeg6
+pkgver=6b
+pkgrel=11
+pkgdesc="Library of JPEG support functions"
+arch=('i686' 'x86_64')
+url="http://ijg.org"
+license=('custom')
+depends=('glibc')
+makedepends=('libtool')
+options=(!libtool)
+install=libjpeg6.install
+source=(ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v$pkgver.tar.gz)
+md5sums=('dbd5f3b47ed13132f04c685d608a7547')
+
+build() {
+ cd $srcdir/jpeg-$pkgver
+ cp /usr/share/libtool/config/config.{guess,sub} .
+ sed -i "s#./libtool#libtool#" configure
+ ./configure --prefix=/opt/libjpeg6 --enable-shared --enable-static
+ make || return 1
+ mkdir -p $pkgdir/opt/libjpeg6/{bin,lib,include,man/man1}
+ make prefix=$pkgdir/opt/libjpeg6 mandir=$pkgdir/usr/share/man/man1 install
+ install -m644 jpegint.h $pkgdir/opt/libjpeg6/include
+ install -Dm644 README $pkgdir/opt/libjpeg6/share/licenses/libjpeg/README
+}
diff --git a/abs/core/libjpeg6/libjpeg6.install b/abs/core/libjpeg6/libjpeg6.install
new file mode 100644
index 0000000..0d3173d
--- /dev/null
+++ b/abs/core/libjpeg6/libjpeg6.install
@@ -0,0 +1,25 @@
+# arg 1: the new package version
+post_install() {
+ grep -v libjpeg6 /etc/ld.so.conf > /tmp/ld.so.conf
+ mv /tmp/ld.so.conf /etc/ld.so.conf
+ echo "/opt/libjpeg6/lib" >> /etc/ld.so.conf
+ ldconfig
+}
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ grep -v libjpeg6 /etc/ld.so.conf > /tmp/ld.so.conf
+ mv /tmp/ld.so.conf /etc/ld.so.conf
+ echo "/opt/libjpeg6/lib" >> /etc/ld.so.conf
+ ldconfig
+}
+# arg 1: the old package version
+post_remove() {
+ grep -v libjpeg6 /etc/ld.so.conf > /tmp/ld.so.conf
+ mv /tmp/ld.so.conf /etc/ld.so.conf
+ ldconfig
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/libvdpau/PKGBUILD b/abs/core/libvdpau/PKGBUILD
new file mode 100644
index 0000000..3c44363
--- /dev/null
+++ b/abs/core/libvdpau/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libvdpau
+pkgver=0.4
+pkgrel=1
+pkgdesc="NVIDIA VDPAU library"
+arch=(i686 x86_64)
+url=http://cgit.freedesktop.org/~aplattner/libvdpau
+depends=('gcc-libs>=4.3.3')
+conflicts=('nvidia-utils<190.42-2')
+options=('!libtool' 'force')
+license=('custom')
+source=(http://people.freedesktop.org/~aplattner/vdpau/${pkgname}-${pkgver}.tar.gz)
+makedepends=('libx11')
+sha256sums=('530c630e0784cc65bc31e5b487bd11fccd4049bc861d16844702048821262faa')
+
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR="${pkgdir}" install || return 1
+
+ install -d -m755 "${pkgdir}/usr/share/licenses/${pkgname}"
+ install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/" || return 1
+}
diff --git a/abs/core/lighttpd/PKGBUILD b/abs/core/lighttpd/PKGBUILD
index cec41d4..ed6d01e 100644
--- a/abs/core/lighttpd/PKGBUILD
+++ b/abs/core/lighttpd/PKGBUILD
@@ -3,8 +3,8 @@
pkgname=lighttpd
pkgver=1.4.26
-pkgrel=7
-pkgdesc='a secure, fast, compliant and very flexible web-server'
+pkgrel=16
+pkgdesc='A secure, fast, compliant and very flexible web-server'
license=('custom')
arch=('i686' 'x86_64')
url="http://www.lighttpd.net/"
@@ -16,12 +16,12 @@ optdepends=('libxml2: mod_webdav' \
'sqlite3: mod_webdav' \
'gdbm: mod_trigger_b4_dl' \
)
-backup=('etc/lighttpd/lighttpd.conf' 'etc/logrotate.d/lighttpd' 'etc/lighttpd/auth-inc.conf')
+backup=(etc/lighttpd/lighttpd.conf etc/logrotate.d/lighttpd etc/lighttpd/auth-inc.conf etc/lighttpd/conf.include etc/lighttpd/html.include)
options=('!libtool' 'emptydirs')
source=("http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${pkgver}.tar.bz2" \
'lighttpd.rc.d' 'lighttpd.logrotate.d' 'lighttpd.conf' 'auth-inc.conf' \
'openssl-0.9.8m.patch')
-install='lighttpd.install'
+#install='lighttpd.install'
build() {
cd $srcdir/$pkgname-$pkgver
@@ -65,13 +65,20 @@ build() {
-e 's|#server.pid-file = "/var/run/lighttpd.pid"|server.pid-file = "/var/run/lighttpd/lighttpd.pid"|' \
-e 's|/usr/local/bin/php-cgi|/usr/bin/php-cgi|' \
-e 's|"^/mythweb|"^/{1,2}mythweb|' \
+ -e 's|# "mod_proxy",| "mod_proxy",|' \
+ -e 's|# "mod_ssi",| "mod_ssi",|' \
+ -e 's|#ssi.extension = ( ".shtml" )|ssi.extension = ( ".shtml" )|' \
-i ${pkgdir}/etc/lighttpd/lighttpd.conf || return 1
+ /bin/touch $pkgdir/etc/lighttpd/{conf,html}.include || return 1
+ /bin/echo 'include "/etc/lighttpd/conf.include"' >> $pkgdir/etc/lighttpd/lighttpd.conf || return 1
+ /bin/echo 'include "/etc/lighttpd/html.include"' >> $pkgdir/etc/lighttpd/lighttpd.conf || return 1
+
install -D -m644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING
}
md5sums=('a682c8efce47a2f4263a247ba0813c9b'
'bd690eee0d9e51857448770a151023b0'
'857e174643fd7761a2f0d8431a679f6c'
- 'fe078f9b8ee701ed21278789cad90acf'
+ '11fbec7ff7ca1b0d5575445681e8f60e'
'c6e361131000ceec085f40b310ef4a2c'
'84c884b8dadd724afe2bc6529e9d4485')
diff --git a/abs/core/lighttpd/__changelog b/abs/core/lighttpd/__changelog
index a96d942..0fe6415 100644
--- a/abs/core/lighttpd/__changelog
+++ b/abs/core/lighttpd/__changelog
@@ -4,3 +4,11 @@ modified auth to require valid user (include auth-inc.conf)
# by mihanson:
upgraded to 1.4.26 to address http://linhes.org/flyspray/index.php?do=details&task_id=624
Added -e 's|"^/mythweb|"^/{1,2}mythweb|' \ to the sed command to work around lighttpd no longer honoring // in a url and/or to work around mythweb producing url's with a // for streaming and downloading.
+
+changed lightttpd.conf to user perl for .cgi (needed for monx)_
+added 404 page
+
+bummped to version 13 to test redmine #690
+
+# by mihanson
+Added etc/lighttpd/conf.include and etc/lighttpd/html.include to backup array
diff --git a/abs/core/lighttpd/lighttpd.conf b/abs/core/lighttpd/lighttpd.conf
index 0c55f52..f437484 100644
--- a/abs/core/lighttpd/lighttpd.conf
+++ b/abs/core/lighttpd/lighttpd.conf
@@ -145,7 +145,7 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#server.bind = "127.0.0.1"
## error-handler for status 404
-#server.error-handler-404 = "/error-handler.html"
+server.error-handler-404 = "/404.html"
#server.error-handler-404 = "/error-handler.php"
## to help the rc.scripts
@@ -235,7 +235,7 @@ server.groupname = "http"
)
#### CGI module
cgi.assign = ( ".pl" => "/usr/bin/perl",
- ".cgi" => "/bin/bash" )
+ ".cgi" => "/usr/bin/perl" )
url.rewrite-once = (
"^/mythweb/(css|data|images|js|themes|skins|[a-z_]+\.(php|pl)).*" => "$0",
diff --git a/abs/core/lighttpd/lighttpd.install b/abs/core/lighttpd/lighttpd.install
index 0e32a66..a921b0f 100755
--- a/abs/core/lighttpd/lighttpd.install
+++ b/abs/core/lighttpd/lighttpd.install
@@ -2,6 +2,6 @@ pre_upgrade() {
mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.old
}
post_upgrade() {
- sed -i 's|"^/mythweb|"/{1,2}mythweb|g' /etc/lighttpd/lighttpd.conf
+ sed -i 's|"^/mythweb|"^/{1,2}mythweb|g' /etc/lighttpd/lighttpd.conf
touch /etc/lighttpd/lighttpd.user
}
diff --git a/abs/core/linhes-scripts/770-wrapper.sh b/abs/core/linhes-scripts/770-wrapper.sh
index 65573f4..3095541 100755
--- a/abs/core/linhes-scripts/770-wrapper.sh
+++ b/abs/core/linhes-scripts/770-wrapper.sh
@@ -26,7 +26,7 @@ fi
# Transcode the file
-perl /usr/local/bin/770-encode.pl -q -p mplayer $VIDEODIR/$FILENAME $DIROUT/$TITLE-$STARTTIME.avi
+perl /usr/bin/tablet-encode -q -p mplayer $VIDEODIR/$FILENAME $DIROUT/$TITLE-$STARTTIME.avi
chmod 664 $DIROUT/$TITLE-$STARTTIME.avi
diff --git a/abs/core/linhes-scripts/PKGBUILD b/abs/core/linhes-scripts/PKGBUILD
index 4b3244f..d4bdc50 100644
--- a/abs/core/linhes-scripts/PKGBUILD
+++ b/abs/core/linhes-scripts/PKGBUILD
@@ -3,12 +3,13 @@
pkgname=linhes-scripts
pkgver=1
-pkgrel=35
+pkgrel=77
pkgdesc="Various scripts that help to make LinHES, LinHES."
arch=('i686' 'x86_64')
license=('GPL2')
depends=('xosd' 'cpulimit')
url="http://linhes.org/"
+install="linhes-scripts.install"
source=(
myth2xvid
shootscreens.sh
@@ -23,6 +24,7 @@ pause-mythcommflag.sh
myth2x264
770-wrapper.sh
mythwelcome-set-alarm.sh
+mythwelcome-config.py
pause_mythcommflag
limit-mythcommflag.sh
vdpau-detector
@@ -32,12 +34,21 @@ run-limit-mythcommflag
linhes_update.sh
linhes_update2.sh
linhes_update3.sh
+install_hulu.sh
+update_schema_021_to_022.sh
+upgrade_linhes.sh
+remove_php_mythvideo.sh
+removecommercials.sh
+system-cleanup.sh
+myth2fuze
+dct700-cc.sh
+qip7100-cc.sh
)
build() {
cd $startdir/src
mkdir -p $startdir/pkg/usr/LH/bin
- install -D -m755 myt* 770* idle.sh imp* shoo* *commflag*sh mplayer* vdpau* screen* linhes_* $startdir/pkg/usr/LH/bin
+ install -D -m755 myt* 770* *.sh imp* shoo* *commflag*sh mplayer* vdpau* screen* linhes_* install_hulu.sh $startdir/pkg/usr/LH/bin
mkdir -p $startdir/pkg/etc/sv/pause-mythcommflag/supervise
cp run-pause-mythcommflag $startdir/pkg/etc/sv/pause-mythcommflag/run
mkdir -p $startdir/pkg/etc/sv/limit-mythcommflag/supervise
@@ -45,3 +56,36 @@ build() {
mkdir -p $startdir/pkg/etc/logrotate.d/
cp pause_mythcommflag $startdir/pkg/etc/logrotate.d/
}
+
+md5sums=('f56985b2d602e11dc1e10d3e7848b2a5'
+ '9a2181cdc0bc9cc8b42101f19620def8'
+ '9ae2cd7a0c42d57ad8b5f515d7d60196'
+ '1274bad3fb7296f00acd2d44804bad14'
+ '47225fa9b6c953d56f6ede84d921a300'
+ '6b6e7d34a4bda6d608d150039adefd07'
+ '3fe554dbbf7d09e1f9925032ba888bf5'
+ '18263972b6326e140bbef0bb7dfa2da9'
+ '410795ef9039e4c6c0484e706ecfd567'
+ '0750d7c65109d12aa536f312a38410d1'
+ 'ac2a4a6b4100f4d7bfb9ecd9356c8c6e'
+ 'd2b475821f902c5e081e7da43a35e6ac'
+ '95c092f67036a361ef7a57436f44332e'
+ 'a87e7394bfb3fcc5c2419a2f9ae9b9aa'
+ '3b776bbff68906ddc2f62b7e0dde3fe4'
+ '15f3143d2b1369da431e4268029aba40'
+ '3d0adf26280cde55a0c47188fff34826'
+ '93aaa2940e33ec9ebb305b839ac46a3e'
+ '27a8b3680f3c631a582064fd26ab8746'
+ 'b527b01d119d3bc33b8fa69bdf1082bb'
+ 'c537c44156d8404016cc4b405b092d45'
+ '4e66f302a77f1a857476e7f289d0c157'
+ 'be324dba44ae96676973a74421944853'
+ 'ccca6bdbbd86b203a3eecdbbe363e701'
+ '65629302a4d2c3adf88cdf0ebc10d493'
+ '2734054f08c4c885bb9070dce239d4c3'
+ '87b0dc855181f98516acb18a7d551601'
+ '25c1baeb97a49656456ae33f7e7a9f06'
+ '2fb25aef03ffd1282414d8cca3df7056'
+ 'd2a29444ab9036fb385bbf044daf1ff5'
+ 'df727c98350a64e2171c950bbefc9c5d'
+ '7b890e7044db38e8d439f67e398af206')
diff --git a/abs/core/linhes-scripts/dct700-cc.sh b/abs/core/linhes-scripts/dct700-cc.sh
new file mode 100644
index 0000000..c8d8cf6
--- /dev/null
+++ b/abs/core/linhes-scripts/dct700-cc.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+#Script to control DCT 700/2524 on emitter #1 of CommandIR
+irsend set_transmitters 1
+REMOTE_NAME=DCT700
+cmd="$1"
+irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME menu
+sleep 1
+irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME exit
+sleep 1
+
+case $cmd in
+ [0-9]*)
+ for digit in $(echo $1 | sed -e 's/./& /g'); do
+ irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME $digit
+ sleep .2
+ # If things work OK with sleep 1, try this for faster channel changes:
+ # sleep 0.3
+ done
+ irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME ok
+sleep .3
+ irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME exit
+ ;;
+
+ *)
+ irsend SEND_ONCE $REMOTE_NAME $cmd
+ ;;
+esac
diff --git a/abs/core/linhes-scripts/install_hulu.sh b/abs/core/linhes-scripts/install_hulu.sh
new file mode 100644
index 0000000..9b06b2e
--- /dev/null
+++ b/abs/core/linhes-scripts/install_hulu.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+#install_hulu.sh
+if [ -e /tmp/huludesktop_i386.deb ]
+then
+cd /tmp
+deb2targz huludesktop_i386.deb
+tar -xzvf huludesktop_i386.tar.gz -C /
+else
+echo "Cannot find huludesktop_i386.deb."
+echo "Please download it from http://www.hulu.com/labs/hulu-desktop-linux"
+echo "Then copy (or move) it to /tmp"
+exit
+fi
+if grep -q Hulu /usr/share/mythtv/themes/defaultmenu/is.xml
+then
+echo "Hulu Desktop exist in Online Streams!"
+else
+ mv /usr/share/mythtv/themes/defaultmenu/is.xml /tmp
+ grep -v -e /mythmenu /tmp/is.xml > /tmp/is.xml.tmp
+ echo "<!--#Hulu-->" >> /tmp/is.xml.tmp
+ echo " <button>" >> /tmp/is.xml.tmp
+ echo " <type>STREAM</type>" >> /tmp/is.xml.tmp
+ echo " <text>Hulu Desktop</text>" >> /tmp/is.xml.tmp
+ echo " <action>EXEC huludesktop</action>" >> /tmp/is.xml.tmp
+ echo " </button>" >> /tmp/is.xml.tmp
+ echo "<!--#Hulu-->" >> /tmp/is.xml.tmp
+ echo "" >> /tmp/is.xml.tmp
+ echo "</mythmenu>" >> /tmp/is.xml.tmp
+ mv /tmp/is.xml.tmp /usr/share/mythtv/themes/defaultmenu/is.xml
+echo "Hulu Desktop has been added to Online Streams!"
+fi
+if [ -e /home/mythtv/.huludesktop ]
+then
+echo "Found existing Hulu configuration file."
+else
+cat >> /home/mythtv/.huludesktop << EOF
+[display]
+fullscreen = TRUE
+width = 1024
+height = 576
+pos_x = 201
+pos_y = 179
+
+[remote]
+lirc_device = /dev/lircd
+lirc_remote_identifier = mceusb
+lirc_release_suffix = _UP
+lirc_repeat_threshold = 10
+button_name_up = Up
+button_name_down = Down
+button_name_left = Left
+button_name_right = Right
+button_name_select = OK
+button_name_menu = Home
+
+[flash]
+flash_location = /usr/lib/mozilla/plugins/libflashplayer.so
+
+[screensaver]
+suspend_script = /usr/bin/xscreensaver-command -deactivate
+resume_script = /usr/bin/xscreensaver-command -activate
+
+[version]
+latest = (null)
+eula_version = 0
+EOF
+chown mythtv.mythtv /home/mythtv/.huludesktop
+fi
+echo "Integration of Hulu Desktop is now complete!"
+echo "Thanks for using LinHES!"
diff --git a/abs/core/linhes-scripts/limit-mythcommflag.sh b/abs/core/linhes-scripts/limit-mythcommflag.sh
index 8ca61c7..5cd81bb 100755
--- a/abs/core/linhes-scripts/limit-mythcommflag.sh
+++ b/abs/core/linhes-scripts/limit-mythcommflag.sh
@@ -1,6 +1,7 @@
#!/bin/bash
-# limit-mythcommflag.sh v0.1 05/17/09
-# Utility to automatically limit mythcommflag if CPU usage is above a certain level.
+# limit-mythcommflag.sh v0.2 03/2/10
+# Utility to automatically limit mythcommflag if CPU system load is above a certain level
+# and if backend usage is above a certain level
# Uses cpulimit from http://cpulimit.sourceforge.net/
# Free for any use.
# Installation:
@@ -8,47 +9,83 @@
# chmod +x /usr/LH/bin/limit-mythcommflag.sh
# Usage: Executed from runit limit-mythcommflag at boot
-# Threshold for when mythcommflag will be paused
-CPUTHRESHOLD=43
-
-# Limit mythcommflag to percentage
-LIMITCPU=20
-
-# Log file to write (use /dev/null for no log)
-#LOG=/var/log/mythtv/limit-mythcommflag.log
-LOG=/dev/null
-
+#-----OPTIONS______
# Number of seconds to wait between checking for mythcommflag process
SLEEP=5
+# Backend and Frontend thresholds above which mythcommflag is stopped
+BETHRESHOLD=30
+FETHRESHOLD=55
-#sleep $SLEEP
+# FUNCTIONS
+limit_cpu()
+# Arg_1 = LimitedRangeNum; Arg_2 = CPULimitPercent; Arg_3 = Commflag PID
+{
+if [ $ALREADYLIMITED -ne $1 ] ; then
+ if [ $cpulimit_pid -ne 0 ]; then
+ kill $cpulimit_pid
+ fi
+ cpulimit -p $3 -l $2 &
+ cpulimit_pid=$!
+ ALREADYLIMITED=$1
+fi
+}
-touch $LOG
+stop_limit()
+{
+if [ $ALREADYLIMITED -ne 0 ]; then
+ if [ $cpulimit_pid -ne 0 ]; then
+ kill $cpulimit_pid
+ cpulimit_pid=0
+ fi
+ ALREADYLIMITED=0
+fi
+}
ALREADYLIMITED=0
+STOPPED=0
+cpulimit_pid=0
while true; do
PROCCOMMFLAG=`pidof mythcommflag`
- if [ -n "${PROCCOMMFLAG}" ]
- then
- FRONTENDCPU=`top -bn1u mythtv | grep mythfrontend | awk '{ print $9 }'`
- if [ "$FRONTENDCPU" -ge "$CPUTHRESHOLD" ]
- then
- echo "$(date) FE CPU $FRONTENDCPU% is greater than $CPUTHRESHOLD%, LIMIT Commflagging" # >> $LOG
- if [ $ALREADYLIMITED -eq 0 ]; then
- cpulimit -e mythcommflag -l $LIMITCPU &
- cpulimit_pid=$!
- ALREADYLIMITED=1
+ if [ -n "${PROCCOMMFLAG}" ]; then
+ BACKENDCPU=`top -bn1u mythtv | grep -m 1 mythbackend | awk '{ print $9 }'`
+ FRONTENDCPU=`top -bn1u mythtv | grep -m 1 mythfrontend | awk '{ print $9 }'`
+ if [ "$FRONTENDCPU" = "" ]; then
+ FRONTENDCPU=0
+ fi
+ if [ "$BACKENDCPU" -ge "$BETHRESHOLD" ]; then
+ if [ "$FRONTENDCPU" -ge $FETHRESHOLD ]; then
+ if [ $STOPPED -eq 0 ]; then
+ kill -s STOP $PROCCOMMFLAG
+ STOPPED=1
+ fi
+ else
+ if [ $STOPPED -eq 1 ]; then
+ kill -s CONT $PROCCOMMFLAG
+ STOPPED=0
+ fi
+ stop_limit
fi
else
- echo "$(date) FE CPU $FRONTENDCPU% is less than $CPUTHRESHOLD%, UNLIMIT Commflagging" #>> $LOG
- if [ $ALREADYLIMITED -eq 1 ]; then
- kill $cpulimit_pid
- ALREADYLIMITED=0
+ if [ $STOPPED -eq 1 ]; then
+ kill -s CONT $PROCCOMMFLAG
+ STOPPED=0
fi
+ case $FRONTENDCPU in
+ [0-9]|[0-3][0-9] )
+ stop_limit;;
+ [4-5][0-9] )
+ limit_cpu "1" "70" $PROCCOMMFLAG;;
+ [6-7][0-9] )
+ limit_cpu "2" "50" $PROCCOMMFLAG;;
+ [8-9][0-9] )
+ limit_cpu "3" "20" $PROCCOMMFLAG;;
+ [1][0-9][0-9] )
+ limit_cpu "4" "10" $PROCCOMMFLAG;;
+ esac
fi
# else
-# echo "No COMMFLAG Process Active" >> $LOG
+# echo "No COMMFLAG Process Active"
fi
sleep $SLEEP
done
diff --git a/abs/core/linhes-scripts/linhes-scripts.install b/abs/core/linhes-scripts/linhes-scripts.install
new file mode 100644
index 0000000..f554bd0
--- /dev/null
+++ b/abs/core/linhes-scripts/linhes-scripts.install
@@ -0,0 +1,7 @@
+
+post_upgrade() {
+ . /etc/profile
+ /usr/LH/bin/remove_php_mythvideo.sh
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core/linhes-scripts/linhes_update.sh b/abs/core/linhes-scripts/linhes_update.sh
index 3b455e0..39d2817 100644
--- a/abs/core/linhes-scripts/linhes_update.sh
+++ b/abs/core/linhes-scripts/linhes_update.sh
@@ -1,26 +1,27 @@
#!/bin/bash
dsply () {
- if grep -q Updates\ Available /usr/share/mythtv/linhes.xml
+ if grep -q Updates\ Available /usr/share/mythtv/themes/defaultmenu/linhes.xml
then
- killall osd_cat
+ killall -9 osd_cat
echo -e "Updates available!\n Exit and reenter Service Menu\n to perform updates." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 10 -A centre
exit
else
+ killall -9 osd_cat
echo -e "Checking for updates." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 300 -A centre &
fi
}
chck () {
sudo pacman -Sy
- sudo pacman -Qu > /tmp/check_update
- sudo grep Target /tmp/check_update > /tmp/to_be_upgraded
+ sudo pacman -Qu > /tmp/to_be_upgraded
+# sudo grep Target /tmp/check_update > /tmp/to_be_upgraded
if grep -q no\ upgrades\ found /tmp/check_update
then
- killall osd_cat
+ killall -9 osd_cat
echo -e "No updates available\n at this time." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 5 -A centre
else
- mv /usr/share/mythtv/linhes.xml /tmp/linhes.xml.tmp
- sed -e '/\#Check/,/\#Check/d' < /tmp/linhes.xml.tmp > /usr/share/mythtv/linhes.xml
- mv /usr/share/mythtv/linhes.xml /tmp
+ mv /usr/share/mythtv/themes/defaultmenu/linhes.xml /tmp/linhes.xml.tmp
+ sed -e '/\#Check/,/\#Check/d' < /tmp/linhes.xml.tmp > /usr/share/mythtv/themes/defaultmenu/linhes.xml
+ mv /usr/share/mythtv/themes/defaultmenu/linhes.xml /tmp
grep -v -e /mythmenu /tmp/linhes.xml > /tmp/linhes.xml.tmp
echo "<!--#UpdatesAvailable-->" >> /tmp/linhes.xml.tmp
echo " <button>" >> /tmp/linhes.xml.tmp
@@ -30,7 +31,7 @@ chck () {
echo " </button>" >> /tmp/linhes.xml.tmp
echo "<!--#UpdatesAvailable-->" >> /tmp/linhes.xml.tmp
echo "</mythmenu>" >> /tmp/linhes.xml.tmp
- mv /tmp/linhes.xml.tmp /usr/share/mythtv/linhes.xml
+ mv /tmp/linhes.xml.tmp /usr/share/mythtv/themes/defaultmenu/linhes.xml
dsply
fi
}
diff --git a/abs/core/linhes-scripts/linhes_update2.sh b/abs/core/linhes-scripts/linhes_update2.sh
index 20f32b9..80945eb 100644
--- a/abs/core/linhes-scripts/linhes_update2.sh
+++ b/abs/core/linhes-scripts/linhes_update2.sh
@@ -1,14 +1,16 @@
#!/bin/bash
+killall -9 osd_cat
echo -e "Performing updates." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 300000 -A centre &
-sudo pacman -Syuf --noconfirm && sudo killall -9 osd_cat
-if grep -q Check\ for\ updates /usr/share/mythtv/linhes.xml
+sudo pacman -Suf --noconfirm && sudo killall -9 osd_cat
+if grep -q Check\ for\ updates /usr/share/mythtv/themes/defaultmenu/linhes.xml
then
rm -fr /tmp/to_be_upgraded
+killall -9 osd_cat
echo -e "Update complete." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 5 -A centre
else
-mv /usr/share/mythtv/linhes.xml /tmp/linhes.xml.tmp
-sed -e '/\#UpdatesAv/,/\#UpdatesAv/d' < /tmp/linhes.xml.tmp > /usr/share/mythtv/linhes.xml
-mv /usr/share/mythtv/linhes.xml /tmp
+mv /usr/share/mythtv/themes/defaultmenu/linhes.xml /tmp/linhes.xml.tmp
+sed -e '/\#UpdatesAv/,/\#UpdatesAv/d' < /tmp/linhes.xml.tmp > /usr/share/mythtv/themes/defaultmenu/linhes.xml
+mv /usr/share/mythtv/themes/defaultmenu/linhes.xml /tmp
grep -v -e /mythmenu /tmp/linhes.xml > /tmp/linhes.xml.tmp
echo "<!--#Check for updates-->" >> /tmp/linhes.xml.tmp
echo " <button>" >> /tmp/linhes.xml.tmp
@@ -19,7 +21,8 @@ echo " </button>" >> /tmp/linhes.xml.tmp
echo "<!--#Check for updates-->" >> /tmp/linhes.xml.tmp
echo "" >> /tmp/linhes.xml.tmp
echo "</mythmenu>" >> /tmp/linhes.xml.tmp
-mv /tmp/linhes.xml.tmp /usr/share/mythtv/linhes.xml
+mv /tmp/linhes.xml.tmp /usr/share/mythtv/themes/defaultmenu/linhes.xml
rm -fr /tmp/to_be_upgraded
+killall -9 osd_cat
echo -e "Update complete." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 5 -A centre
fi
diff --git a/abs/core/linhes-scripts/linhes_update3.sh b/abs/core/linhes-scripts/linhes_update3.sh
index 56e8612..5dc0b4d 100644
--- a/abs/core/linhes-scripts/linhes_update3.sh
+++ b/abs/core/linhes-scripts/linhes_update3.sh
@@ -8,3 +8,10 @@ if [ $COUNT -lt 20 ]
else
cat /tmp/to_be_upgraded2 | osd_cat -p top -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 1 -A centre -l 20 -w
fi
+if grep kernel26 /tmp/to_be_upgraded2
+then
+ killall -9 osd_cat
+ echo -e "Please note:\The kernel will be upgraded.\nThis will require a reboot.\nPlease do so when no jobs are running." | osd_cat -p middle -s 5 -f"-adobe-courier-bould-*-*-*-34-*-*-*-*-*" -d 10 -A centre
+else
+ exit
+fi
diff --git a/abs/core/linhes-scripts/myth2fuze b/abs/core/linhes-scripts/myth2fuze
new file mode 100755
index 0000000..9e8fc3c
--- /dev/null
+++ b/abs/core/linhes-scripts/myth2fuze
@@ -0,0 +1,318 @@
+#!/bin/bash
+# convert recording to avi compatable with San Disk Sansa Fuze
+# Based on and/or inspired by myth2xvid, the video4fuze project:
+# http://code.google.com/p/video4fuze
+# and the fuzemux project:
+# http://code.google.com/p/fuzemux
+#
+# version 0.2
+#
+# usage:
+# first parameter must be %DIR%/%FILE% of the recording
+# second parameter must be the %TITLE% for the output filename
+# third parameter must be the %SUBTITLE% for the output filename
+# fourth parameter must be %CHANID% if you set USECUTLIST=Y
+# fifth parameter must be %STARTTIME% for USECUTLIST=Y and output filename
+# sixth parameter must be %JOBID% for the User Job status to be updated
+# in MythTV
+# In the mythtv setup screen invoke this script like this:
+# MYTHTV User Job Command:
+# /usr/LH/bin/myth2fuze "%DIR%/%FILE%" "%TITLE%" "%SUBTITLE%" "%CHANID%" "%STARTTIME%" "%JOBID%"
+
+# options:
+USECUTLIST=Y # Y or N
+
+# check prerequesites
+for APP in {fuzemux,mencoder,ffmpeg,mythcommflag,mythtranscode,mysql}; do
+ /usr/bin/which ${APP} &>/dev/null
+ ERROR=$?
+ if [ $ERROR -ne 0 ]; then
+ echo "${APP} not found in your PATH! Aborting! ERROR: ${ERROR}" >> ${LOGFILE}
+ update_status 304
+ update_comment "${APP} not found in your PATH! Aborting! Exit status: ${ERROR}"
+ exit 1
+ fi
+done
+
+# where the converted video is stored
+OUT_DIR=/myth/video/fuze
+
+# Ensure output directory exists
+if [ ! -d ${OUT_DIR} ] ; then
+ mkdir -p -m777 ${OUT_DIR}
+fi
+
+# database settings
+BACKEND_HOSTNAME=${BACKEND_HOSTNAME:-"localhost"}
+DBUSERNAME=${DBUSERNAME:-"mythtv"}
+DBPASSWORD=${DBPASSWORD:-"mythtv"}
+SQLCMD="mysql -u ${DBUSERNAME} --password=${DBPASSWORD} -h ${BACKEND_HOSTNAME} mythconverg -e"
+
+# create temp filename so multiple instances won't conflict
+TMPNAME=toFUZE-$$
+TMPDIR=/myth/tmp
+TMPFILE=${TMPDIR}/${TMPNAME}.avi
+TMPCUTFILE=${TMPDIR}/${TMPNAME}.mpg
+MENINPUTFILE=${1}
+TWOPASSFILE=/tmp/${TMPNAME}-2pass.log
+STATUSFILE=/tmp/${TMPNAME}-status.log
+MENCODER_RETURN_CODE=/tmp/${TMPNAME}-mencoder_return_code
+MENCODER_RETURN_CODE_2=/tmp/${TMPNAME}-mencoder_return_code_2
+
+# Ensure temp directory exists
+if [ ! -d ${TMPDIR} ] ; then
+ mkdir -p -m777 ${TMPDIR}
+fi
+
+#------FUNCTIONS---------------
+update_comment()
+# Arg_1 = COMMENT
+{
+if [ ${NO_JOBID} = 0 ]; then
+ `${SQLCMD} "update jobqueue set comment=\"${1}\" where id=\"${JOBID}\";"`
+fi
+}
+
+update_status()
+# Arg_1 = status code
+{
+if [ ${NO_JOBID} = 0 ]; then
+ `${SQLCMD} "update jobqueue set status=\"${1}\" where id=\"${JOBID}\";"`
+fi
+}
+
+check_background_progress()
+# check mencoder progress in background
+# Arg_1 = PROGRESS CALCULATION
+{
+while [ `tail -1 ${STATUSFILE} | grep -cE "^Audio stream:|^Video stream:"` = 0 ]
+do
+ sleep 10
+ check_myth_jobcmds
+ current_status=`tail -1 ${STATUSFILE} | grep "([ 0-9]\{1,\}%)"`
+ prog_percent=`echo ${current_status} | sed 's_.*(\([ 0-9][ 0-9]\)%).*_\1_'`
+ current_FPS=`echo ${current_status} | sed 's_.*\([ 0-9][ 0-9].[ 0-9][ 0-9]\)fps.*_\1_'`
+ if [ -n ${prog_percent} ]; then
+ prog_percent=`expr ${prog_percent} / ${1}`
+ echo "${prog_percent}% Completed @ ${current_FPS} fps"
+ update_comment "${prog_percent}% Completed @ ${current_FPS} fps"
+ fi
+ sleep 10
+done
+}
+
+check_myth_jobcmds()
+# check the myth database for stop pause or resume commands
+{
+if [ ${NO_JOBID} = 0 ]; then
+ CURRENT_CMD=`${SQLCMD} "select cmds from jobqueue where id=\"${JOBID}\";" | sed '/[0-9]/!d'`
+ case ${CURRENT_CMD} in
+ # JOB_RUN
+ 0) ;;
+ # JOB_PAUSE
+ 1) update_status 6
+ kill -s STOP ${mencoder_pid} ;;
+ # JOB_RESUME
+ 2) update_status 4
+ `${SQLCMD} "update jobqueue set cmds=\"0\" where id=\"${JOBID}\";"`
+ kill -s CONT ${mencoder_pid} ;;
+ # JOB_STOP
+ 4) update_status 5
+ `${SQLCMD} "update jobqueue set cmds=\"0\" where id=\"${JOBID}\";"`
+ kill -9 ${mencoder_pid} ${command_pid}
+ clean_up_files
+ echo "Encode Cancelled" >> ${LOGFILE}
+ update_status 320
+ exit ;;
+ esac
+fi
+}
+
+get_mencoder_pid()
+{
+process_name=""
+i1=1
+while [ "$process_name" != "found" ]; do
+ if [ "`ps ${mencoder_pid} | grep mencoder | sed 's_.*\(mencoder\).*_\1_'`" = "mencoder" ]; then
+ process_name="found"
+ else
+ mencoder_pid=`expr ${mencoder_pid} + 1`
+ fi
+ i1=`expr $i1 + 1`
+ if [ $i1 -gt 20 ]; then
+ break
+ fi
+done
+}
+
+run_fuzemux()
+# Remux avi to fuze compatable avi
+{
+/usr/bin/nice -n19 /usr/bin/fuzemux ${TMPFILE} ${OUTPUTFILE} >> ${LOGFILE} || return 1
+}
+
+create_thumbnail()
+# Create a thumbnail image for the fuze
+{
+/usr/bin/nice -n19 /usr/bin/ffmpeg -y -v -1 -i ${OUTPUTFILE} -t 1 -ss 3 \
+-s 224x176 -f image2 ${OUTPUTFILE%.*}.thm >> ${LOGFILE}
+}
+
+clean_up_files()
+# clean up left over files
+{
+unlink ${TMPFILE} 2> /dev/null
+unlink ${TMPCUTFILE} 2> /dev/null
+unlink ${TMPCUTFILE}.map 2> /dev/null
+unlink ${TWOPASSFILE} 2> /dev/null
+unlink ${TWOPASSFILE}.tmp 2> /dev/null
+unlink ${STATUSFILE} 2> /dev/null
+unlink ${MENCODER_RETURN_CODE} 2> /dev/null
+unlink ${MENCODER_RETURN_CODE_2} 2> /dev/null
+}
+
+#-------MAIN SCRIPT------------
+
+# check if %JOBID% is passed from command line
+JOBID=${6}
+if [ -z ${JOBID} ]; then
+ NO_JOBID=1
+else
+ NO_JOBID=0
+fi
+
+# log file location
+LOGFILE=/var/log/mythtv/myth2fuze.log
+CDate="`date`"
+echo "" >> ${LOGFILE}
+echo ${CDate} >> ${LOGFILE}
+echo "File to encode: ${MENINPUTFILE} Name: ${2} - ${3}" >> ${LOGFILE}
+
+# start timer
+beforetime="$(date +%s)"
+
+check_myth_jobcmds
+
+# check if using cutlist
+if [ ${USECUTLIST} = Y ]; then
+ MYTHCOMMFRAMES=$( mythcommflag --getcutlist -f ${MENINPUTFILE} | grep 'Cutlist:' | cut -d \ -f 2 )
+ if [ -n "$MYTHCOMMFRAMES" ]; then
+ echo "Extracting Cutlist..." >> ${LOGFILE}
+ update_comment "Extracting Cutlist"
+ /usr/bin/nice -n19 /usr/bin/mythtranscode --chanid ${4} --starttime ${5} --outfile ${TMPCUTFILE} --mpeg2 --honorcutlist
+ MENINPUTFILE=${TMPCUTFILE}
+ fi
+fi
+
+# run mencoder in background to do 1st pass conversion
+echo "Encoding 1st Pass for the Fuze..." >> ${LOGFILE}
+( /usr/bin/nice -n19 /usr/bin/mencoder ${MENINPUTFILE} -passlogfile \
+${TWOPASSFILE} -ffourcc DX50 -ofps 20 \
+-vf pp=li,expand=:::::224/176,scale=224:176,harddup -ovc lavc \
+-lavcopts vcodec=mpeg4:vbitrate=683:vmax_b_frames=0:keyint=15:turbo:vpass=1 \
+-nosound -o /dev/null > ${STATUSFILE} 2>&1 ; echo $? > \
+${MENCODER_RETURN_CODE} ) &
+mencoder_pid=$!
+command_pid=${mencoder_pid}
+get_mencoder_pid
+
+check_background_progress "2"
+
+if [ `cat ${MENCODER_RETURN_CODE}` -ne 0 ]; then
+ echo "Mencoder pass #1 exited with error ${MENCODER_RETURN_CODE}. Encoding failed!"
+ update_status 304
+ update_comment "ERROR: Mencoder pass #1 exited with error ${MENCODER_RETURN_CODE}"
+ clean_up_files
+ exit 1
+fi
+
+# run mencoder in background to do 2nd pass conversion
+echo "Encoding 2nd Pass for the Fuze..." >> ${LOGFILE}
+( /usr/bin/nice -n19 /usr/bin/mencoder ${MENINPUTFILE} -passlogfile \
+${TWOPASSFILE} -ffourcc DX50 -ofps 20 \
+-vf pp=li,expand=:::::224/176,scale=224:176,harddup -ovc lavc \
+-lavcopts vcodec=mpeg4:vbitrate=683:vmax_b_frames=0:keyint=15:vpass=2 \
+-srate 44100 -af resample=44100:0:1,format=s16le -oac mp3lame \
+-lameopts cbr:br=128 -o ${TMPFILE} > ${STATUSFILE} 2>&1 ; echo $? \
+> ${MENCODER_RETURN_CODE_2} ) &
+mencoder_pid=$!
+command_pid=${mencoder_pid}
+get_mencoder_pid
+
+check_background_progress "2 + 50"
+
+if [ `cat ${MENCODER_RETURN_CODE_2}` -ne 0 ]; then
+ echo "Mencoder pass #1 exited with error ${MENCODER_RETURN_CODE}. Encoding failed!"
+ update_status 304
+ update_comment "ERROR: Mencoder pass #1 exited with error ${MENCODER_RETURN_CODE_2}"
+ clean_up_files
+ exit 1
+fi
+
+# make output filename unique, remove punctuation and "special" characters,
+# replace spaces with underscores and force lowercase names
+OAD=$( echo ${5} | cut -b 1-8 )
+FILENAME=$( echo "${2} ${OAD} ${3}" | tr -d '[:punct:]' \
+ | tr -s '[:blank:]' '[_]' | tr '[:upper:]' '[:lower:]' )_fuze.avi
+
+OUTPUTFILE=${OUT_DIR}/${FILENAME}
+ERROR=$?
+
+if [ ${ERROR} -ne 0 ]; then
+ echo "Setting output file name exited with error ${ERROR}" >> ${LOGFILE}
+ update_status 304
+ update_comment "ERROR: Setting output file name exited with error ${ERROR} Job failed!"
+ clean_up_files
+ exit 1
+fi
+
+run_fuzemux
+ERROR=$?
+
+if [ ${ERROR} -ne 0 ]; then
+ echo "Fuzemux exited with error ${ERROR}" >> ${LOGFILE}
+ update_status 304
+ update_comment "ERROR: Fuzemux exited with error ${ERROR} Job Failed!"
+ clean_up_files
+ exit 1
+fi
+
+# ensure mythtv owns the final avi
+chown mythtv ${OUTPUTFILE}
+ERROR=$?
+
+if [ ${ERROR} -ne 0 ]; then
+ echo "Changing ownership of avi to mythtv exited with error ${ERROR}"
+ update_status 304
+ update_comment "ERROR: Changing ownership of avi to mythtv exited with error ${ERROR} Job failed!"
+ clean_up_files
+ exit 1
+fi
+
+create_thumbnail
+
+# ensure mythtv owns the thumbnail
+chown mythtv ${OUTPUTFILE%.*}.thm
+ERROR=$?
+
+if [ ${ERROR} -ne 0 ]; then
+ echo "Changing ownership of thumbnail to mythtv exited with error ${ERROR}"
+ update_status 304
+ update_comment "ERROR: Changing ownership of thumbnail to mythtv exited with error ${ERROR} Job failed!"
+ clean_up_files
+ exit 1
+fi
+
+# stop timer
+aftertime="$(date +%s)"
+seconds="$(expr $aftertime - $beforetime)"
+ echo "File Encoded Successfully: ${OUTPUTFILE}" >> ${LOGFILE}
+ hours=$((seconds / 3600))
+ seconds=$((seconds % 3600))
+ minutes=$((seconds / 60))
+ seconds=$((seconds % 60))
+ echo "Encoding took $hours hour(s) $minutes minute(s) $seconds second(s) @ $current_FPS fps." >> ${LOGFILE}
+ update_status 272
+ update_comment "Encode Successful. Encoding Time: $hours hour(s) $minutes minute(s) $seconds second(s)"
+
+clean_up_files
diff --git a/abs/core/linhes-scripts/mythwelcome-config.py b/abs/core/linhes-scripts/mythwelcome-config.py
new file mode 100755
index 0000000..c7bf10b
--- /dev/null
+++ b/abs/core/linhes-scripts/mythwelcome-config.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+
+# This script will configure the myth db to allow MythWelcome to wake and shutdown the system.
+
+from socket import gethostname
+from MythTV import MythDB
+mythdb = MythDB()
+localhostname = gethostname()
+
+# mythwelcome --setup
+mythdb.settings[localhostname].MythShutdownNvramCmd = u'sudo sh -c \"/usr/LH/bin/mythwelcome-set-alarm.sh $time\"'
+mythdb.settings[localhostname].MythShutdownWakeupTimeFmt = u'time_t'
+mythdb.settings[localhostname].MythShutdownNvramRestartCmd = u''
+mythdb.settings[localhostname].MythShutdownReboot = u'sudo /sbin/reboot'
+mythdb.settings[localhostname].MythShutdownPowerOff = u'sudo /sbin/poweroff'
+mythdb.settings[localhostname].MythShutdownXTermCmd = u'xterm'
+mythdb.settings[localhostname].MythWelcomeStartFECmd = u'/usr/LH/bin/mythfrontend-start'
+
+
+# mythtv-setup Shutdown/Wakeup options
+if mythdb.settings[localhostname].idleTimeoutSecs == u'0':
+ mythdb.settings[localhostname].idleTimeoutSecs = u'40'
+
+mythdb.settings.NULL.WakeupTimeFormat = u'yyyy-MM-ddThh:mm:ss'
+mythdb.settings.NULL.SetWakeuptimeCommand = u'/usr/bin/mythshutdown --setwakeup $time'
+mythdb.settings.NULL.ServerHaltCommand = u'/usr/bin/mythshutdown --shutdown'
+mythdb.settings.NULL.preSDWUCheckCommand = u'/usr/bin/mythshutdown --check'
diff --git a/abs/core/linhes-scripts/mythwelcome-set-alarm.sh b/abs/core/linhes-scripts/mythwelcome-set-alarm.sh
index 6dbd39e..990adf7 100755
--- a/abs/core/linhes-scripts/mythwelcome-set-alarm.sh
+++ b/abs/core/linhes-scripts/mythwelcome-set-alarm.sh
@@ -13,7 +13,7 @@
# Configure mythtv-setup Shutdown/Wakeup Options page:
# Idletimeout (secs): any value greater that 0
-# Wakeup time format: yyyy-MM-dd:hh:mm
+# Wakeup time format: yyyy-MM-ddThh:mm:ss
# Set wakeup time command: /usr/bin/mythshutdown --setwakeup $time
# Server Halt command: /usr/bin/mythshutdown --shutdown
# Pre shutdown check command: /usr/bin/mythshutdown --check
diff --git a/abs/core/linhes-scripts/qip7100-cc.sh b/abs/core/linhes-scripts/qip7100-cc.sh
new file mode 100755
index 0000000..029e25c
--- /dev/null
+++ b/abs/core/linhes-scripts/qip7100-cc.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+#Script to control DCT 700/2524 on emitter #1 of CommandIR
+irsend set_transmitters 2
+sleep .5
+#REMOTE_NAME=DCT2524
+REMOTE_NAME=Motorola_QIP6200-2
+cmd="$1"
+
+case $cmd in
+ [0-9]*)
+ for digit in $(echo $1 | sed -e 's/./& /g'); do
+ irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME $digit
+ sleep .4
+ # If things work OK with sleep 1, try this for faster channel changes:
+ sleep 0.3
+ done
+ irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME ok
+sleep .3
+ irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME exit
+ ;;
+
+ *)
+ irsend SEND_ONCE $REMOTE_NAME $cmd
+ ;;
+esac
diff --git a/abs/core/linhes-scripts/remove_php_mythvideo.sh b/abs/core/linhes-scripts/remove_php_mythvideo.sh
new file mode 100644
index 0000000..d9d53a0
--- /dev/null
+++ b/abs/core/linhes-scripts/remove_php_mythvideo.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+. /etc/systemconfig
+
+if [ $SystemType != Frontend_only ] && [ $SystemType != Slave_backend ] ; then
+
+mysql mythconverg <<EOF
+delete from videotypes where extension='php';
+insert into videotypes(extension,f_ignore) values('php','1');
+EOF
+
+else
+ exit 0
+fi
diff --git a/abs/core/linhes-scripts/removecommercials.sh b/abs/core/linhes-scripts/removecommercials.sh
new file mode 100755
index 0000000..70e2e52
--- /dev/null
+++ b/abs/core/linhes-scripts/removecommercials.sh
@@ -0,0 +1,213 @@
+#!/bin/sh
+# remove commercials from recordings using the user generated cutlist or
+# optionally using the mythcommflag generated cutlist.
+# version 0.2 3/24/2010
+
+# usage:
+# first parameter must be %DIR% of the recording
+# second parameter must be %FILE% of the recording
+# third parameter must be %CHANID%
+# fourth parameter must be %STARTTIME%
+# fifth parameter must be %JOBID% for the User Job status to be updated in MythTV
+# in the mythtv setup screen invoke this script like this:
+# MYTHTV User Job Command:
+# /usr/LH/bin/removecommercials.sh "%DIR%" "%FILE%" "%CHANID%" "%STARTTIME%" "%JOBID%"
+
+#-------OPTIONS----------------
+# If no cutlist is found USE_MYTHCOMMFLAG_CUTLIST=YES will use mythcommflag
+# to generate a cutlist.
+# WARNING: Using this option could result in part of the recording being cut if
+# mythcommflag incorrectly flagged the commercial.
+USE_MYTHCOMMFLAG_CUTLIST=NO
+
+# Auguments passed from command line
+VIDEODIR=$1
+FILENAME=$2
+CHANID=$3
+STARTTIME=$4
+JOBID=$5
+
+# database settings
+BACKEND_HOSTNAME=${BACKEND_HOSTNAME:-"localhost"}
+DBUSERNAME=${DBUSERNAME:-"mythtv"}
+DBPASSWORD=${DBPASSWORD:-"mythtv"}
+SQLCMD="mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -e"
+
+LOG="/var/log/mythtv/removecommercials.log"
+
+#------FUNCTIONS---------------
+update_comment()
+# Arg_1 = COMMENT
+{
+if [ $NO_JOBID = 0 ]; then
+ `$SQLCMD "update jobqueue set comment=\"$1\" where id=\"$JOBID\";"`
+fi
+}
+
+update_status()
+# Arg_1 = status code
+{
+if [ $NO_JOBID = 0 ]; then
+ `$SQLCMD "update jobqueue set status=\"$1\" where id=\"$JOBID\";"`
+fi
+}
+
+check_myth_jobcmds()
+# check the myth database for stop pause or resume commands
+{
+if [ $NO_JOBID = 0 ]; then
+ CURRENT_CMD=`$SQLCMD "select cmds from jobqueue where id=\"$JOBID\";" | sed '/[0-9]/!d'`
+ case "$CURRENT_CMD" in
+ # JOB_RUN
+ 0) ;;
+ # JOB_PAUSE
+ 1) update_status 6
+ kill -s STOP $TPID ;;
+ # JOB_RESUME
+ 2) update_status 4
+ `$SQLCMD "update jobqueue set cmds=\"0\" where id=\"$JOBID\";"`
+ kill -s CONT $TPID ;;
+ # JOB_STOP
+ 4) update_status 5
+ `$SQLCMD "update jobqueue set cmds=\"0\" where id=\"$JOBID\";"`
+ kill -9 $TPID
+ clean_up_files
+ echo "Cancelled"
+ update_status 320
+ exit ;;
+ esac
+fi
+}
+
+check_background_progress()
+#check progress in background
+{
+while [ `tail -1 $STATUSFILE | grep -c "Done"` = 0 ]
+do
+ sleep 5
+ check_myth_jobcmds
+ current_status=`tail -1 $STATUSFILE`
+ if [ `expr match "$current_status" '.*\complete'` -ne 0 ]; then
+ prog_percent=`echo "$current_status" | awk '{print $3}'`
+ if [ -n "$prog_percent" ]; then
+ echo "Removing Commercials - $prog_percent Completed"
+ update_comment "Removing Commercials - $prog_percent Completed"
+ fi
+ fi
+done
+}
+
+get_pid()
+{
+process_name=""
+i1=1
+while [ "$process_name" != "found" ]; do
+ if [ "`ps $TPID | grep mythtranscode | sed 's_.*\(mythtranscode\).*_\1_'`" = "mythtranscode" ]; then
+ process_name="found"
+ else
+ TPID=`expr $TPID + 1`
+ fi
+ i1=`expr $i1 + 1`
+ if [ $i1 -gt 20 ]; then
+ break
+ fi
+done
+}
+
+clean_up_files()
+# clean up left over files
+{
+unlink $TMPFILE 2> /dev/null
+unlink $TMPFILE.map 2> /dev/null
+unlink $STATUSFILE 2> /dev/null
+unlink $VIDEODIR/$FILENAME.tmp 2> /dev/null
+}
+
+#-------MAIN SCRIPT------------
+# check if %JOBID% is passed from command line
+JOBID=$5
+if [ -z "$JOBID" ]; then
+ NO_JOBID=1
+else
+ NO_JOBID=0
+fi
+# check if file is a .mpg
+if [ `expr match "$FILENAME" '.*\.mpg'` -ne 0 ]; then
+ MPEG="--mpeg2"
+else
+ MPEG=""
+fi
+
+# create temp filename so multiple instances won't conflict
+TMPNAME=rmvCOMMS-$$
+TMPFILE=$VIDEODIR/$FILENAME-$$
+STATUSFILE=/myth/tmp/$TMPNAME-status.log
+
+touch $STATUSFILE
+
+update_status 4
+
+check_myth_jobcmds
+
+# check for cutlist
+MYTHCOMMFRAMES=`mythcommflag --getcutlist -f $VIDEODIR/$FILENAME | grep 'Cutlist:' | cut -d \ -f 2`
+
+if [ $USE_MYTHCOMMFLAG_CUTLIST=YES ] && [ -z "$MYTHCOMMFRAMES" ]; then
+ echo "Generating cutlist..."
+ update_comment "Generating cutlist..."
+ /usr/bin/nice -n19 /usr/bin/mythcommflag --gencutlist -f $VIDEODIR/$FILENAME
+ MYTHCOMMFRAMES=`mythcommflag --getcutlist -f $VIDEODIR/$FILENAME | grep 'Cutlist:' | cut -d \ -f 2`
+fi
+
+if [ -n "$MYTHCOMMFRAMES" ]; then
+ echo "Removing Commercials..."
+ update_comment "Removing Commercials..."
+ ( /usr/bin/nice -n19 /usr/bin/mythtranscode -c $CHANID -s $STARTTIME -o $TMPFILE $MPEG --honorcutlist --showprogress > $STATUSFILE 2>&1 ; echo "Done" >> $STATUSFILE ) &
+ TPID=$!
+ get_pid
+ check_background_progress
+ ERROR=$?
+ if [ $ERROR -ne 0 ]; then
+ echo "Transcoding failed for ${FILENAME} with error $ERROR"
+ exit $ERROR
+ fi
+
+ check_myth_jobcmds
+ # move temp file to output location
+ echo "Moving file..."
+ update_comment "Moving file..."
+ if [ `$SQLCMD "select data from settings where value='SaveTranscoding';" | sed '/[0-9]/!d'` = 1 ]; then
+ echo "DB is set to save transcoding"
+ mv $VIDEODIR/$FILENAME $VIDEODIR/$FILENAME.old
+ fi
+ mv $TMPFILE $VIDEODIR/$FILENAME
+
+ # file has changed, rebuild index
+ echo "Rebuilding index..."
+ update_comment "Rebuilding index..."
+ mythcommflag -c $CHANID -s $STARTTIME --rebuild
+ ERROR=$?
+ if [ $ERROR -ne 0 ]; then
+ echo "Rebuilding seek list failed for ${FILENAME} with error $ERROR"
+ exit $ERROR
+ fi
+
+ # remove old cutlist
+ echo "Removing old cutlist..."
+ update_comment "Removing old cutlist..."
+ mythcommflag -c $CHANID -s $STARTTIME --clearcutlist
+ ERROR=$?
+ if [ $ERROR -eq 0 ]; then
+ # Fix the database entry for the file
+ `$SQLCMD UPDATE recorded SET cutlist = 0, filesize = $(ls -l $VIDEODIR/$FILENAME | awk '{print $5}') WHERE basename = '$FILENAME';` > /dev/null
+ else
+ echo "Clearing cutlist failed for ${FILENAME} with error $ERROR"
+ exit $ERROR
+ fi
+ clean_up_files
+ echo "Commercials Removed"
+ update_status 272
+ update_comment "Sucessfully Completed."
+else
+ echo "No cutlist found."
+fi
diff --git a/abs/core/linhes-scripts/screenshooter.sh b/abs/core/linhes-scripts/screenshooter.sh
index 94ea6fd..3bacac1 100755
--- a/abs/core/linhes-scripts/screenshooter.sh
+++ b/abs/core/linhes-scripts/screenshooter.sh
@@ -135,7 +135,7 @@ if [ "$EXTENSION_CHECK" == "1" ]; then
# if [ "$VERBOSE" == "1" ]; then
# echo "Importing $VIDEO_FILENAME in to database."
# fi
- # mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "insert into videometadata (intid, title, director, plot, rating, inetref, year, userrating, length, showlevel, filename, coverfile, childid, browse, playcommand, category) values (' ', '$VIDEO_FILENAME', 'Unknown', 'Unknown', 'NR', '00000000', 1895, 0.0, 0, 1, '$VIDEO_PATHNAME', 'No Cover', -1, 1, ' ', 0);"
+ # mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "insert into videometadata (intid, title, director, plot, rating, inetref, year, userrating, length, showlevel, filename, coverfile, childid, browse, playcommand, category) values (' ', '$VIDEO_FILENAME', 'Unknown', 'Unknown', 'NR', '00000000', 1895, 0.0, 0, 1, '$VIDEO_PATHNAME', '', -1, 1, ' ', 0);"
fi
fi
fi
@@ -145,7 +145,7 @@ if [ "$CLOBBER" -eq 0 ]; then
SQL_CMD="select coverfile from videometadata where filename=\"$VIDEO_PATHNAME\";"
CURRENT_COVERFILE=`mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -B -e "$SQL_CMD" | tail -1`
- if [[ "$CURRENT_COVERFILE" != "" ]] && [[ "$CURRENT_COVERFILE" != "No Cover" ]]; then
+ if [[ "$CURRENT_COVERFILE" != "" ]] && [[ "$CURRENT_COVERFILE" != "" ]]; then
# there's already a cover file for this video
if [ "$VERBOSE" == "1" ]; then
echo "$VIDEO_FILENAME has cover file, skipping."
diff --git a/abs/core/linhes-scripts/shootscreens-mythtv.sh b/abs/core/linhes-scripts/shootscreens-mythtv.sh
index db01147..111b980 100755
--- a/abs/core/linhes-scripts/shootscreens-mythtv.sh
+++ b/abs/core/linhes-scripts/shootscreens-mythtv.sh
@@ -1,11 +1,19 @@
#! /bin/bash
-# available sizes: 34, 25, 24, 20, 18, 17, 14, 12, 11, 10
-export FONT="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+
+. /etc/osd_cat.cfg || {
+ color=yellow
+ outline=2
+ outlinecolour=black
+ shadow=0
+ shadowcolour=black
+ font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+}
+
echo "This could take several minutes," > /tmp/screens
echo "depending on your hardware and the" >> /tmp/screens
echo "number and type of videos you have." >> /tmp/screens
echo "It will only work on videos scanned" >> /tmp/screens
echo "with Video Manager." >> /tmp/screens
-cat /tmp/screens | osd_cat --font=$FONT --shadow=3 --pos=middle --align=centre --offset=200 --color=yellow --delay=0 &
+cat /tmp/screens | osd_cat --pos=middle --align=center --delay=0 --offset=200 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
shootscreens.sh 1
/bin/rm -f /tmp/screens \ No newline at end of file
diff --git a/abs/core/linhes-scripts/shootscreens.sh b/abs/core/linhes-scripts/shootscreens.sh
index 7b1260c..bb45252 100755
--- a/abs/core/linhes-scripts/shootscreens.sh
+++ b/abs/core/linhes-scripts/shootscreens.sh
@@ -10,6 +10,14 @@
if [ "$1" == "1" ]; then
OSD=1
+ . /etc/osd_cat.cfg || {
+ color=yellow
+ outline=2
+ outlinecolour=black
+ shadow=0
+ shadowcolour=black
+ font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+ }
else
OSD=0
fi
@@ -23,15 +31,14 @@ fi
increment=$(expr 100 / $vidcount)
for vid in `mysql -u root mythconverg -B -e "select filename from videometadata where coverfile=\"No Cover\";" | grep -v -e "^filename$"`
do
- if [ $OSD == 1 ]; then
- osd_cat --barmode=percentage --percentage=$percentage --pos=middle --align=center --color=white --text="Generating Video Thumbnails..." --font=$FONT --shadow=3 --color=yellow --delay=0 &
- percentage=$(expr $percentage + $increment)
- fi
-
- screenshooter.sh -v $vid
+ if [ $OSD == 1 ]; then
+ osd_cat --barmode=percentage --percentage=$percentage --pos=middle --align=center --text="Generating Video Thumbnails..." --delay=0 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
+ percentage=$(expr $percentage + $increment)
+ fi
+ screenshooter.sh -v $vid
done
if [ $OSD == 1 ]; then
- killall -9 osd_cat
- osd_cat --barmode=percentage --percentage=100 --pos=middle --align=center --color=white --text="Video Thumbnails Generated!" --font=$FONT --shadow=3 --color=yellow --delay=3 &
+ killall -9 osd_cat
+ osd_cat --barmode=percentage --percentage=100 --pos=middle --align=center --text="Video Thumbnails Generated!" --delay=3 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
fi
} \ No newline at end of file
diff --git a/abs/core/linhes-scripts/system-cleanup.sh b/abs/core/linhes-scripts/system-cleanup.sh
new file mode 100755
index 0000000..59a4ebb
--- /dev/null
+++ b/abs/core/linhes-scripts/system-cleanup.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# This script cleans up some SVN stuff that the build process leaves
+# in /usr/share/mythtv, along with ownership and file permsisions on the
+# themes and the mythstream stuff. There are bunch of files which are
+# left executable for no good reason, although I can think of several
+# potentially bad reasons for it.
+
+find /usr/share/mythtv -name .svn -print0 | xargs -0 rm -rf
+find /usr/share/mythtv -name CVS -print0 | xargs -0 rm -rf
+
+THEMES=/usr/share/mythtv/themes
+
+chown -R root:root $THEMES
+chmod -R +r $THEMES
+find $THEMES -type f -print0 | xargs -0 chmod a-x
+
+
+chown -R mythtv:users /myth
+chown -R root:root /myth/backup/
+chown -R root:root /etc/sv
+
+chown -R http:users /data/srv/httpd/
+
+# None of thes files should be executable.
+for ext in gif png jpg xml htm html php ; do
+ find / -type f -name "*.$ext" -print0 | xargs -0 chmod a-x
+done
+
+# These files should be owned by root and not writable to anybody else
+
+#chown root:root /usr/share/mythtv/*.xml /usr/share/mythtv/*.ttf
+chown root:root /usr/share/mythtv/*.ttf
+
+chown -R root:root \
+ /usr/share/mythtv/i18n \
+ /usr/share/mythtv/mytharchive \
+ /usr/share/mythtv/mythflix \
+ /usr/share/mythtv/mythnews \
+ /usr/share/mythtv/mythvideo \
+ /usr/share/mythtv/mythweather \
+ /usr/LH
+
+
+
+# Report any remaining orphans...
+find / /myth -xdev \( -nouser -o -nogroup \) -ls
diff --git a/abs/core/linhes-scripts/update_schema_021_to_022.sh b/abs/core/linhes-scripts/update_schema_021_to_022.sh
new file mode 100644
index 0000000..4157fb4
--- /dev/null
+++ b/abs/core/linhes-scripts/update_schema_021_to_022.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+mysql mythconverg <<EOF
+update gameplayers set commandline = '/usr/bin/sdlmame -rp /myth/games/xmame/roms %s' where commandline = '/usr/game/mame -rp /myth/games/xmame/roms %s';
+update settings set data = '/myth/video_stuff/coverart' where value = 'VideoArtworkDir';
+update settings set data = '/myth/video_stuff/fanart' where value = 'mythvideo.fanartDir';
+update settings set data = '/myth/video_stuff/screenshots' where value = 'mythvideo.screenshotDir';
+update settings set data = '/myth/video_stuff/banners' where value = 'mythvideo.bannerDir';
+update settings set data = '/myth/video_stuff/trailers' where value = 'mythvideo.TrailersDir';
+update settings set data = '1' where value = 'mythvideo.TrailersRandomEnabled';
+update settings set data = '1' where value = 'mythvideo.EnableAlternatePlayer';
+update settings set data = '/myth/video_stuff/screenshots' where value = 'ScreenShotPath';
+update settings set data = '/myth/games/screenshots' where value = 'mythgame.screenshotdir';
+update settings set data = '/myth/games/fanart' where value = 'mythgame.fanartdir';
+update settings set data = '/myth/games/boxart' where value = 'mythgame.boxartdir';
+update settings set data = '3' where value = 'OverrideExitMenu';
+update settings set data = 'sudo sv start mythbackend' where value = 'BackendStartCommand';
+update settings set data = 'sudo sv stop mythbackend' where value = 'BackendStopCommand';
+update settings set data = '/usr/share/mythtv/mythvideo/scripts/tmdb.pl -M' where value = 'MovieListCommandLine';
+update settings set data = replace(data, 'imdb.pl', 'tmdb.pl');
+EOF
diff --git a/abs/core/linhes-scripts/upgrade_linhes.sh b/abs/core/linhes-scripts/upgrade_linhes.sh
new file mode 100755
index 0000000..91a46e6
--- /dev/null
+++ b/abs/core/linhes-scripts/upgrade_linhes.sh
@@ -0,0 +1,136 @@
+#!/bin/bash
+#Script to facilitate easy upgrade to latest LinHES.
+clear
+if [ "$(id -u)" != "0" ]; then
+ echo "This script must be run as root" 1>&2
+ exit 1
+fi
+function pause(){
+ read -p "$*"
+}
+echo "The script will guide you thru the process of upgrading to the latest LinHES."
+pause 'Press <ENTER> to continue...'
+echo
+echo "Sync'n with the repos..."
+echo
+pacman -Sy &>/dev/null
+pacman -Qu > /tmp/linhes_upgrade
+if [ ! -s /tmp/linhes_upgrade ]
+then
+ echo "No upgrades found. This could mean the repository is busy."
+ echo "Or your system is already up to date."
+ echo "If you have not upgrade, please try again later."
+ echo "Starting the backend."
+ sv start mythbackend &>/dev/null
+ exit 1
+fi
+if grep -E "Master|Stand" /etc/systemconfig &>/dev/null
+ then
+ echo "Stopping the backend."
+ sv stop mythbackend &>/dev/null
+fi
+if pacman -Qs mythvodka &>/dev/null
+ then
+ echo "Removing MythVodka if installed as it is no longer compatible with MythTV."
+ echo
+ pacman -R mythvodka &>/dev/null
+fi
+echo
+echo "Backing up Online Streams listings."
+echo
+cp /usr/share/mythtv/is.xml /usr/share/mythtv/is.xml.021
+echo "Removing mythcontrol and mythphone if installed."
+echo
+if pacman -Qs mythcontrols &>/dev/null
+ then
+ pacman -R mythcontrols &>/dev/null
+fi
+if pacman -Qs mythphone &>/dev/null
+ then
+ pacman -R mythphone &>/dev/null
+fi
+if grep -q kernel26 /tmp/linhes_upgrade
+then
+ echo "Upgrading the kernel."
+ echo
+ if pacman -Qs v4l-dvb &>/dev/null
+ then
+ pacman -Sf --noconfirm kernel26 &>/dev/null && pacman -Sf --noconfirm v4l-dvb
+ else
+ pacman -S kernel26 --noconfirm &>/dev/null
+ fi
+fi
+if grep -q v4l-dvb /tmp/linhes_upgrade
+then
+ pacman -Sf --noconfirm v4l-dvb &>/dev/null
+fi
+echo "Checking for VDPAU packages and upgrading if needed."
+echo
+if pacman -Qs vdpinfo-71xx &>/dev/null
+ then
+ pacman -Rd vdpinfo-71xx &>/dev/null
+fi
+if pacman -Qs vdpinfo-96xx &>/dev/null
+ then
+ pacman -Rd vdpinfo-96xx &>/dev/null
+fi
+if pacman -Qs vdpinfo &>/dev/null
+ then
+ pacman -Rd vdpinfo &>/dev/null && pacman -S --noconfirm nvidia &>/dev/null && pacman -S --noconfirm vdpauinfo &>/dev/null
+fi
+echo "Performing complete system upgrade."
+echo "This may take some time depending on your connection speed."
+echo "Server bandwidth utilization will also have an affect."
+echo "Please be patient."
+echo
+pacman -Suf --noconfirm &>/dev/null
+echo "Restoring Online Streams listings."
+echo
+cp /usr/share/mythtv/is.xml.021 /usr/share/mythtv/is.xml
+if grep -E "Master|Stand" /etc/systemconfig &>/dev/null
+ then
+ echo "Starting the backend. This will automatically update the schema."
+ sv start mythbackend &>/dev/null
+ echo "I'll launch an xterm so you watch output backend log."
+ echo "Once the schema updates are complete, switch back to this xterm."
+ echo -e "\033[1mWhen you see \"Upgrading to MythTV schema version 1254\"\033[0m"
+ echo "You can switch back to this xterm."
+ echo -e "\033[1mNote:After pressing <ENTER>, I'll be asleep for 30 secs...\033[0m"
+ echo -e "\033[1mThis will give the schema time to upgrade.\033[0m"
+ pause 'Press <ENTER> to continue...'
+ xterm -fn *18* -e tail -f /var/log/mythtv/mythbackend.log &
+ #Sleeping for 30 seconds to give the schema time to upgrade....
+ sleep 30
+ read -p "Press <ENTER> to continue once the schema upgrade is complete."
+ echo
+ echo -e "\033[1mNow, the frontend will launch to update the schema for any plugins.\033[0m"
+ echo -e "\033[1mOnce the this is done, please exit the frontend.\033[0m"
+ pause 'Press <ENTER> to continue...'
+ xterm -e mythfrontend
+ echo
+ echo "Performing LinHES specific schema updates."
+ echo
+ /usr/LH/bin/update_schema_021_to_022.sh
+ cat /data/database/dvd_transcode_r6.sql | mysql -u root mythconverg
+ /usr/LH/bin/mythwelcome-config.py
+fi
+echo "All done!"
+echo -e "\033[5mThanks for choosing LinHES!\033[0m"
+if grep -q kernel26 /tmp/linhes_upgrade
+then
+ echo "The kernel was upgraded, we need to reboot."
+ pause "Press <ENTER> to reboot."
+ reboot
+else
+ if grep -q v4l-dvb /tmp/linhes_upgrade
+ then
+ echo "The V4L\DVB modules were upgraded."
+ pause "Press <ENTER> to reboot."
+ reboot
+ else
+ echo "Launching mythfrontend once again!"
+ echo "Enjoy the latest version!"
+ sleep 5
+ mythfrontend
+fi
+fi
diff --git a/abs/core/linhes-scripts/upgrade_to_0.22.sh b/abs/core/linhes-scripts/upgrade_to_0.22.sh
new file mode 100644
index 0000000..8536a05
--- /dev/null
+++ b/abs/core/linhes-scripts/upgrade_to_0.22.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+#Script to facilitate easy upgrade to MythTV 0.22 in LinHES.
+if [ "$(id -u)" != "0" ]; then
+ echo "This script must be run as root" 1>&2
+ exit 1
+fi
+function pause(){
+ read -p "$*"
+}
+clear
+echo "The script will guide you thru the process of upgrading LinHES to MythTV 0.22."
+pause 'Press <ENTER> to continue...'
+if grep -E "Master|Stand" /etc/systemconfig &>/dev/null
+ then
+ echo "Stopping the backend."
+ sv stop mythbackend &>/dev/null
+fi
+echo "Sync'n with the repos..."
+pacman -Sy &>/dev/null
+echo "Removing MythVodka if installed as it is no longer compatible with MythTV."
+if pacman -Qs mythvodka &>/dev/null
+ then
+ pacman -R mythvodka &>/dev/null
+fi
+echo "Backing up Online Streams listings."
+cp /usr/share/mythtv/is.xml /usr/share/mythtv/is.xml.021
+echo "Removing mythcontrol, mythphone and mythsmolt if installed."
+if pacman -Qs mythcontrols &>/dev/null
+ then
+ pacman -R mythcontrols &>/dev/null
+fi
+if pacman -Qs mythphone &>/dev/null
+ then
+ pacman -R mythphone &>/dev/null
+fi
+if pacman -Qs mythsmolt &>/dev/null
+ then
+ pacman -R mythsmolt &>/dev/null
+fi
+echo "Upgrading the kernel."
+if pacman -Qs v4l-dvb &>/dev/null
+ then
+ pacman -Sf --noconfirm kernel26 &>/dev/null && pacman -Sf --noconfirm v4l-dvb
+ else
+ pacman -S kernel26 --noconfirm &>/dev/null
+fi
+echo "Checking for VDPAU packages and upgrading if needed."
+if pacman -Qs vdpinfo-71xx &>/dev/null
+ then
+ pacman -Rd vdpinfo-71xx &>/dev/null
+fi
+if pacman -Qs vdpinfo-96xx &>/dev/null
+ then
+ pacman -Rd vdpinfo-96xx &>/dev/null
+fi
+if pacman -Qs vdpinfo &>/dev/null
+ then
+ pacman -Rd vdpinfo &>/dev/null && pacman -S --noconfirm nvidia &>/dev/null && pacman -S --noconfirm vdpauinfo &>/dev/null
+fi
+echo "Performing complete system upgrade."
+echo "This may take some time depending on your connection speed."
+echo "Server bandwidth utilization will also have an affect."
+echo "Please be patient."
+pacman -Su --noconfirm &>/dev/null
+echo "Restoring Online Streams listings."
+cp /usr/share/mythtv/is.xml.021 /usr/share/mythtv/is.xml
+clear
+if grep -E "Master|Stand" /etc/systemconfig &>/dev/null
+ then
+ echo "Starting the backend. This will automatically update the schema."
+ sv start mythbackend &>/dev/null
+ echo "I'll launch an xterm so you watch output backend log."
+ echo "Once the schema updates are complete, switch back to this xterm."
+ echo -e "\033[1mWhen you see \"Upgrading to MythTV schema version 1244\"\033[0m"
+ echo "You can switch back to this xterm."
+ echo -e "\033[1mNote:After pressing <ENTER>, I'll be asleep for 30 secs...\033[0m"
+ echo -e "\033[1mThis will give the schema time to upgrade.\033[0m"
+ pause 'Press <ENTER> to continue...'
+ xterm -fn *18* -e tail -f /var/log/mythtv/mythbackend.log &
+ #Sleeping for 30 seconds to give the schema time to upgrade....
+ sleep 30
+ read -p "Press <ENTER> to continue once the schema upgrade is complete."
+ echo -e "\033[1mNow, the frontend will launch to update the schema for any plugins.\033[0m"
+ echo -e "\033[1mOnce the this is done, please exit the frontend.\033[0m"
+ pause 'Press <ENTER> to continue...'
+ xterm -e mythfrontend
+ echo "Performing LinHES specific schema updates."
+ /usr/LH/bin/update_schema_021_to_022.sh
+ cat /data/database/dvd_transcode_r6.sql | mysql -u root mythconverg
+fi
+echo "All done!"
+echo -e "\033[5mThanks for choosing LinHES!\033[0m"
+pause "Press <ENTER> to reboot."
+reboot
diff --git a/abs/core/linhes-theme/PKGBUILD b/abs/core/linhes-theme/PKGBUILD
new file mode 100644
index 0000000..1d289cd
--- /dev/null
+++ b/abs/core/linhes-theme/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 5936 2008-07-21 20:24:16Z thomas $
+# Maintainer: Cecil Watson<knoppmyth@gmail.com>
+
+pkgname=linhes-theme
+pkgver=1
+pkgrel=12
+pkgdesc="Default LinHES theme."
+arch=('i686' 'x86_64')
+license=('GPL2')
+url="http://linhes.org/"
+source=(ftp://ftp.knoppmyth.net/R6/sources/linhes-theme-1.2.tar.bz2)
+
+build() {
+ cd $startdir/src/
+ mkdir -p $startdir/pkg/usr/share/mythtv/themes
+ cp -a LinHES $startdir/pkg/usr/share/mythtv/themes
+}
+
+md5sums=('805cd304b07a0020ff4990077b2f65d5')
diff --git a/abs/core/lirc-utils/lirc.logrotate b/abs/core/lirc-utils/lirc.logrotate
index 623c4f3..df97c60 100644
--- a/abs/core/lirc-utils/lirc.logrotate
+++ b/abs/core/lirc-utils/lirc.logrotate
@@ -2,4 +2,7 @@
missingok
notifempty
delaycompress
+ postrotate
+ /usr/bin/killall -HUP -q lircd
+ endscript
}
diff --git a/abs/core/lirc/lirc_mod_mce.patch b/abs/core/lirc/lirc_mod_mce.patch
index 314f2d7..1dc6644 100644
--- a/abs/core/lirc/lirc_mod_mce.patch
+++ b/abs/core/lirc/lirc_mod_mce.patch
@@ -1,6 +1,6 @@
-diff -Naru lirc_mod_mce.orig/lirc_mod_mce.c lirc_mod_mce/lirc_mod_mce.c
---- lirc_mod_mce.orig/lirc_mod_mce.c 2008-04-18 02:12:28.000000000 +0930
-+++ lirc_mod_mce/lirc_mod_mce.c 2009-05-28 07:53:10.000000000 +0930
+diff -Naru lirc_mod_mce/lirc_mod_mce.c lirc_mod_mce_new/lirc_mod_mce.c
+--- lirc_mod_mce/lirc_mod_mce.c 2008-04-18 02:12:28.000000000 +0930
++++ lirc_mod_mce_new/lirc_mod_mce.c 2009-11-22 18:45:24.000000000 +1030
@@ -171,17 +171,76 @@
#define VENDOR_TATUNG 0x1460
#define VENDOR_GATEWAY 0x107b
@@ -86,7 +86,97 @@ diff -Naru lirc_mod_mce.orig/lirc_mod_mce.c lirc_mod_mce/lirc_mod_mce.c
};
static unsigned char usb_kbd_keycode[256] = {
-@@ -1108,7 +1167,7 @@
+@@ -252,6 +311,8 @@
+ struct semaphore lock;
+ char name[NAME_BUFSIZE];
+ char phys[NAME_BUFSIZE];
++
++ unsigned int carrier_freq;
+ };
+
+ /* init strings */
+@@ -889,6 +950,51 @@
+ }
+ }
+
++/* Sets the send carrier frequency */
++static int set_send_carrier(struct irctl *ir, int carrier)
++{
++ int clk = 10000000;
++ int prescaler = 0, divisor = 0;
++ unsigned char cmdbuf[] = { 0x9F, 0x06, 0x01, 0x80 };
++
++ /* Carrier is changed */
++ if (ir->carrier_freq != carrier) {
++
++ if (carrier <= 0) {
++ ir->carrier_freq = carrier;
++ dprintk(DRIVER_NAME "[%d]: SET_CARRIER disabling "
++ "carrier modulation\n", ir->devnum);
++ request_packet_async(ir, ir->usb_ep_out,
++ cmdbuf, sizeof(cmdbuf),
++ PHILUSB_OUTBOUND);
++ return carrier;
++ }
++
++ for (prescaler = 0; prescaler < 4; ++prescaler) {
++ divisor = (clk >> (2 * prescaler)) / carrier;
++ if (divisor <= 0xFF) {
++ ir->carrier_freq = carrier;
++ cmdbuf[2] = prescaler;
++ cmdbuf[3] = divisor;
++ dprintk(DRIVER_NAME "[%d]: SET_CARRIER "
++ "requesting %d Hz\n",
++ ir->devnum, carrier);
++
++ /* Transmit new carrier to mce device */
++ request_packet_async(ir, ir->usb_ep_out,
++ cmdbuf, sizeof(cmdbuf),
++ PHILUSB_OUTBOUND);
++ return carrier;
++ }
++ }
++
++ return -EINVAL;
++
++ }
++
++ return carrier;
++}
++
+ static int input_open(struct input_dev *id)
+ {
+ return 0;
+@@ -945,6 +1051,18 @@
+ if(lvalue!=(LIRC_MODE_PULSE&LIRC_CAN_SEND_MASK)) return -EINVAL;
+ break;
+
++ case LIRC_SET_SEND_CARRIER:
++ /* Retrieve lirc_plugin data for the device */
++ ir=lirc_get_pdata(filep);
++ if (!ir && !ir->usb_ep_out) return -EFAULT;
++
++ result = get_user(ivalue, (unsigned int *) arg);
++ if (result)
++ return result;
++
++ set_send_carrier(ir, ivalue);
++ break;
++
+ default:
+ return -ENOIOCTLCMD;
+ }
+@@ -1047,7 +1165,8 @@
+ plugin->minor = -1;
+ plugin->features = LIRC_CAN_SEND_PULSE |
+ LIRC_CAN_SET_TRANSMITTER_MASK |
+- LIRC_CAN_REC_MODE2;
++ LIRC_CAN_REC_MODE2 |
++ LIRC_CAN_SET_SEND_CARRIER;
+ plugin->data = ir;
+ plugin->rbuf = rbuf;
+ plugin->set_use_inc = &set_use_inc;
+@@ -1108,7 +1227,7 @@
input_dev->name = ir->name;
input_dev->phys = ir->phys;
usb_to_input_id(dev, &input_dev->id);
diff --git a/abs/core/local-website/htdocs/404.html b/abs/core/local-website/htdocs/404.html
new file mode 100755
index 0000000..41219b0
--- /dev/null
+++ b/abs/core/local-website/htdocs/404.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
+ <meta content="Cecil Watson" name="author">
+ <title>LinHES 404</title>
+ <!-- Generated by: /usr/local/bin/rrd_Configure.sh -->
+ <link href="/KnoppMyth.css" rel="stylesheet" type="text/css" />
+ <p align="center"><a href="http://www.mysettopbox.tv">
+ <img src="/header.png" alt="Tux with a Remote" align="middle" border="0"></a>
+ </p>
+ <table align="center" border="0" cellpadding="5">
+ <tbody>
+ <tr>
+ <td style="vertical-align: top;">
+ <p class="headerimage" align="center"><b>The Linux Home Entertainment System Release 6</b></p>
+ <p align=center>
+<font size="+2">OOPS</font><br>
+<font size="+1"> The page you requested is missing!<br>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</body>
+</html>
diff --git a/abs/core/local-website/htdocs/index.html b/abs/core/local-website/htdocs/index.html
index 9c46aac..5e6ec81 100644..100755
--- a/abs/core/local-website/htdocs/index.html
+++ b/abs/core/local-website/htdocs/index.html
@@ -1,125 +1,118 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <base href="/linhes/">
+ <title>Welcome to LinHES!</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <meta name="robots" content="noindex, nofollow">
+ <script type="text/javascript" src="/linhes/js/prototype.js"></script>
+ <script type="text/javascript" src="/linhes/js/prototip/prototip.js"></script>
+ <link rel="stylesheet" type="text/css" href="/linhes/js/prototip/prototip.css">
-
- <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
+ <script type="text/javascript" src="/linhes/js/utils.js"></script>
+ <script type="text/javascript" src="/linhes/js/AC_OETags.js"></script>
+ <script type="text/javascript" src="/linhes/js/table_sort.js"></script>
-
- <meta content="Cecil Watson" name="author">
+ <link rel="stylesheet" type="text/css" href="/linhes/default/style.css">
+ <link rel="stylesheet" type="text/css" href="/linhes/default/header.css">
+ <link rel="stylesheet" type="text/css" href="/linhes/default/menus.css">
+ <link rel="stylesheet" type="text/css" href="/linhes/default/programming.css">
-
-
-
-
- <title>LinHES R6</title><link href="KnoppMyth.css" rel="stylesheet" type="text/css"></head>
-<body>
-<p align="center"><a href="http://www.mysettopbox.tv/">
- <img src="header.png" alt="Tux with a Remote" align="middle" border="0"></a>
- </p>
-
-
-
-<table align="center" border="0" cellpadding="5">
-
- <tbody>
-
- <tr>
-
- <td style="vertical-align: top;">
-
- <p class="headerimage" align="center"><b>The Linux Home Entertainment System Release 6</b></p>
-
-
- <p><a href="mythweb/mythweb.php"><b>MythWeb</b></a>: <br>
-
- &nbsp; &nbsp; The MythWeb allows you to use a web page to control
- aspects of your MythTV system. MythWeb is a separate application,
- but it is dependent upon MythTV being installed and operational."
- </p>
-
-
- <p><a href="remote/index.html"><b>MythTV Web Virtual Remote</b></a>: <br>
-
- &nbsp; &nbsp; A web based virtual remote control for MythTV.
- &nbsp;In order for this to work, you must enable
- "Network Remote Control interface". &nbsp; See:
- <b>Utilities/Setup -&gt; Setup -&gt; General -&gt; Fourth Page</b>.
- </p>
-
-
- <p><a href="mythtv-doc/mythtv-HOWTO.html"><b>MythTV Documentation</b></a>: <br>
-
- &nbsp; &nbsp; The MythTV Installation / User's Guide.
- </p>
-
-
- <p><a href="mythtv-doc/keys.txt"><b>MythTV Keybindings</b></a>: <br>
-
- &nbsp; &nbsp; The keybindings for the normal MythTV interface.
- </p>
-
-
- <p><a href="linhes.html"><b>LinHES</b></a>: <br>
+ <link rel="stylesheet" type="text/css" href="/linhes/default/welcome.css">
+</head>
- &nbsp; &nbsp; Describes how "The Project Leader" setup multiple systems
- to form a <b>Lin</b>ux <b>H</b>ome <b>E</b>ntertainment <b>S</b>ystem.
- </p>
-
-
- <p><a href="http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&amp;teamnum=50975"><b>Folding@home</b></a>: <br>
-
- &nbsp; &nbsp; KnoppMyth Team status for the folding@home effort. Install via the Service Menu.
- </p>
-
- <p><a href="foldingathome/"><b>My Folding Status</b></a>: <br>
-
- &nbsp; &nbsp; Status of the folding@home work for the local user.
- </p>
-
-
- <p><a href="ipodfeed/feed.php"><b>iPod Feeds</b></a> <br>
-
- &nbsp; &nbsp; Transcodes ready for the ipod (if any). &nbsp;Additionally, you can delete unwanted files using this <a href="/ipodfeed/m2iweb.php">link</a>. &nbsp;Note: &nbsp;If you have no recordings, you will see a warning issued from PHP.</p>
-<a href="archive/feed.php"><b>XviD Feed dir</b></a> <br>
-&nbsp; &nbsp; Any programs you have transcoded to XviD.
-&nbsp;Additionally, you can delete unwanted files using this <a href="/archive/archive.php">link</a>. &nbsp;Note: &nbsp;If you have no recordings, you will see a warning issued from PHP.
- <p><a style="font-weight: bold;" href="fuppes.php"><span style="text-decoration: underline;">FUPPES</span></a><br>
-&nbsp;&nbsp;&nbsp; FUPPES - Free UPnP Entertainment Service. &nbsp;A
-UPnP to be used inplace of the UPnP server that comes with MythTV.
-&nbsp;If the UPnP that comes with MythTV doesn't work for you, you can
-try FUPPES. Install via the Service Menu.</p><p><a style="font-weight: bold;" href="mediaserv.php"><span style="text-decoration: underline;">Mediaserv</span></a><br>
-&nbsp;&nbsp;&nbsp; Mediaserv - A on-demand transcoding server for
-videos. &nbsp;Mediaserv is designed to transcode video in a format
-playable on the Nokia Internet Tablets. &nbsp;However it works well at
-transcoding and streaming&nbsp;to any device. &nbsp;As longs as the
-device will playback AVIs (think streaming to any browser!). &nbsp;By
-default, we have it set to link to
-TV recordings (pretty) and your video directory. &nbsp;Additionally if
-you want it to stream contents from a network share, it will! &nbsp;ln
--s /path/to/share /myth/mediaserv/media/ </p><p><a href="rrd/index.html"><b>RRDTool</b></a>: <br>
-
- &nbsp; &nbsp; Hardware status graphs. Install via the Service Menu.
- </p>
-
-
- <p><a href="javascript:void(0)" onclick="window.open('mythweb/data/mp3player.html','linkname','height=100, width=260,scrollbars=no')"><b>KnoppMyth Radio</b></a>: <br>
-
- &nbsp; &nbsp; Your music must be encoded as MP3 in MythMusic for this to work.</p>
-
- <p><a style="font-weight: bold;" href="zm/"><span style="text-decoration: underline;">ZoneMinder</span></a><br>
- &nbsp;&nbsp;&nbsp; Video camera security software with motion detection. Install via the Service Menu.
- </p>
- </td>
-
- </tr>
-
- <tr>
- <td style="vertical-align: top;"></td>
- </tr>
- </tbody>
-
+<body>
+<div id="page_header" style="position:relative; text-align:center;">
+ <div id="logo_box">
+ <a id="LinHES_logo" href="http://linhes.org/">
+ <img src="/header.png" alt="Tux with a Remote" class="body">
+ </a>
+ </div>
+</div>
+
+<table width="100%" border="0" cellspacing="2" cellpadding="0">
+<tr>
+ <td colspan="2" class="menu menu_border_t menu_border_b">
+ <table class="body" width="100%" border="0" cellspacing="2" cellpadding="2">
+ <td align="center">
+ <a href="http://linhes.org" <b>The Linux Home Entertainment System Release 6</b></a>
+ </td>
+ </table>
+ </td>
+</tr>
</table>
-</body></html>
+
+<script type="text/javascript">
+<!--
+
+ var visible_module = 'media';
+ function show_module_info(module) {
+ if (visible_module == module)
+ return;
+ // Change the outline on the list item
+ $('module_'+ visible_module).removeClassName('selected');
+ $('module_'+ module).addClassName('selected');
+ // Show and hide the appropriate info boxes
+ $('info_' + visible_module).hide();
+ $('info_' + visible_module).addClassName('hidden');
+ $('info_' + module).show();
+ $('info_' + module).removeClassName('hidden');
+ // Keep track of what's visible now
+ visible_module = module;
+ }
+
+// -->
+</script>
+
+<div id="modules" class="clearfix">
+
+ <div id="module_names">
+ <ul>
+ <li id="module_media" class="selected" onmouseover="show_module_info('media')">Media</li>
+ <li id="module_status" onmouseover="show_module_info('status')">Status</li>
+ <li id="module_help" onmouseover="show_module_info('help')">Help</li>
+ </ul>
+ </div>
+
+ <div id="module_info">
+ <div id="info_media">
+ <ul>
+ <li><a href="/mythweb/">MythWeb</a> - MythWeb provides a frontend for scheduling and managing recordings on your MythBox from a web browser.<br></li>
+ <li><a href="/remote/index.html">MythTV Web Virtual Remote</a> - A web based virtual remote control for MythTV. For this to work, you must enable "Network Remote Control interface" in Service Menu -> MythTV Configuration -> Setup -> General -> Remote Control.<br></li>
+ <li><a href="/ipodfeed/feed.php">iPod Feeds</a> - Transcodes ready for the iPod. If you have no recordings, you will see a warning issued from PHP.<br></li>
+ <li><a href="/ipodfeed/m2iweb.php">Delete iPod Transcodes</a><br></li>
+ <li><a href="/archive/feed.php">XviD Feeds</a> - Programs you have transcoded to XviD. If you have no recordings, you will see a warning issued from PHP.<br></li>
+ <li><a href="/archive/archive.php">Delete XviD Transcodes</a><br></li>
+ <li><a href="/fuppes.php">FUPPES</a> - Free UPnP Entertainment Service. A UPnP to be used inplace of the UPnP server that comes with MythTV. Install via the Service Menu.<br></li>
+ <li><a href="/mediaserv.php">Mediaserv</a> - A on-demand transcoding server for videos. Mediaserv is designed to transcode video in a format playable on the Nokia Internet Tablets. However it works well at transcoding and streaming to any device that will playback AVIs (think streaming to any browser!). By default, we have it set to link to TV recordings (pretty) and your video directory. Additionally if you want it to stream contents from a network share, it will! ln -s /path/to/share /myth/mediaserv/media/<br></li>
+ <li><a href="/mythweb/data/mp3player.html">Radio</a> - Music in MythMusic must be encoded as MP3s.<br></li>
+ </ul>
+ </div>
+ <div id="info_status" class="hidden">
+ <ul>
+ <li><a href="/rrd/index.html">RRDTool</a> - Hardware status graphs.</li>
+ <li><a href="/monitorix/">Monitorix</a> - A system monitoring perl script that uses rrd databases to log system data.<br></li>
+ <li><a href="http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&amp;teamnum=50975">KnoppMyth Folding@home Team Status</a></li>
+ <li><a href="/foldingathome/">My Folding@home Status</a></li>
+ </ul>
+ </div>
+ <div id="info_help" class="hidden">
+ <ul>
+ <li><a href="http://www.mythtv.org/docs/">MythTV Documentation</a></li>
+ <li><a href="/mythtv-doc/keys.txt">MythTV Default Keybindings</a></li>
+ <li><a href="http://www.mythtv.org/support">MythTV Support</a></li>
+ <li><a href="http://www.schedulesdirect.org/">Schedules Direct</a> - Provides U.S./Canadian TV listing data.<br></li>
+ <li><a href="/linhes.html">LinHES</a> - Describes how "The Project Leader" setup multiple systems to form a <b>Lin</b>ux <b>H</b>ome <b>E</b>ntertainment <b>S</b>ystem.<br></li>
+ <li><a href="http://linhes.org/phpBB2/">LinHES Forum</a></li>
+ <li><a href="http://www.google.com/advanced_search?q=+site:mysettopbox.tv/phpBB2&hl=en&lr=&as_qdr=all">Search LinHES Forum</a></li>
+ <li><a href="http://www.knoppmythwiki.org/">KnoppMyth Wiki</a></li>
+ <li><a href="http://linhes.org/bugs/projects/linhes/wiki">LinHES Wiki</a></li>
+ <li><a href="http://linhes.org/bugs">LinHES Bug Tracker</a></li>
+ </ul>
+ </div>
+
+</body>
+</html>
diff --git a/abs/core/local-website/htdocs/linhes/default/header.css b/abs/core/local-website/htdocs/linhes/default/header.css
new file mode 100644
index 0000000..d4b2802
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/header.css
@@ -0,0 +1,123 @@
+#page_header {
+ margin: 5px;
+}
+
+#logo_box {
+}
+#mythtv_logo {
+ margin: 0px 5px;
+ padding: 5px;
+ height: 48px;
+ width: 180px;
+ float: left;
+ text-align: center;
+}
+
+#sections {
+ white-space: nowrap;
+}
+#sections a {
+ float: left;
+ margin: 0px 5px;
+ padding: 5px;
+ background-color: #347;
+ border-top: 1px solid #8ad;
+ border-right: 1px solid #003;
+ border-bottom: 1px solid #000;
+ border-left: 1px solid #79c;
+ -moz-border-radius: 8px;
+ text-align: center;
+ height: 48px;
+ width: 48px;
+}
+#sections a:hover {
+ background-color: #458;
+}
+#sections a img {
+ border: none;
+ display: inline !important;
+}
+
+#sections a.current_section {
+ background-color: #164;
+ border-top: 1px solid #7b9;
+ border-right: 1px solid #030;
+ border-bottom: 1px solid #000;
+ border-left: 1px solid #6a8;
+}
+#sections a.current_section:hover {
+ background-color: #275;
+}
+
+#tv_link {
+}
+#music_link {
+}
+#video_link {
+}
+#weather_link {
+}
+#settings_link {
+}
+
+#extra_header {
+ margin-left: 550px;
+ padding: 0px 5px;
+ height: 58px;
+}
+
+/*
+ * IE sucks: true-height is supposed to be height+padding+margin+border, but IE
+ * doesn't add in padding, so we have to create a wrapper container and use
+ * margin instead of padding to make the "padding" that we need.
+ */
+#help_wrapper {
+ height: 21px;
+ margin-bottom: 3px;
+ background-color: #247;
+ border-top: 1px solid #013;
+ border-right: 1px solid #79c;
+ border-bottom: 1px solid #68b;
+ border-left: 1px solid #002;
+ -moz-border-radius: 6px;
+ min-width: 225px;
+}
+#help_box {
+ margin: 4px 5px 2px 5px;
+ height: 15px;
+ overflow: hidden;
+ white-space: nowrap;
+}
+#search {
+ margin-top: 2px;
+ padding: 3px 5px;
+ height: 26px;
+ background-color: #247;
+ border-top: 1px solid #013;
+ border-right: 1px solid #79c;
+ border-bottom: 1px solid #68b;
+ border-left: 1px solid #002;
+ -moz-border-radius: 8px;
+ min-width: 225px;
+ white-space: nowrap;
+}
+#simple_search {
+ padding-top: 1px;
+}
+
+
+#search_text {
+ position: relative;
+ top: -1px;
+ width: 150px;
+ margin-right: 3px;
+ padding: 0px 3px;
+ font-size: 9pt;
+}
+#search_submit {
+ position: relative;
+ top: 1px;
+ width: 64px;
+ font-size: 9pt;
+}
+
diff --git a/abs/core/local-website/htdocs/linhes/default/menus.css b/abs/core/local-website/htdocs/linhes/default/menus.css
new file mode 100644
index 0000000..d4e793a
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/menus.css
@@ -0,0 +1,221 @@
+/* popup and menu classes */
+.popup {
+ font-size: 9pt;
+}
+
+.popup table {
+ font-size: 9pt;
+}
+
+.popup dl {
+ min-width: 40em;
+ color: #dedede;
+ background-color: #265990;
+ border: 2px ridge #127;
+ padding: 5px;
+}
+
+/*
+
+ This other stuff isn't used quite yet, but is here as a placeholder so I don't lose the necessary styles
+
+div.popup_menu {
+ position: absolute;
+ visibility: hidden;
+ top: 0px;
+ left: 0px;
+ color: #000036;
+ background-color: #40A0B0;
+ border-right: 2px groove #289;
+ border-bottom: 2px groove #289;
+ border-left: 1px solid #289;
+ border-top: 1px solid #289;
+ padding: 10px;
+ font-size: 13px;
+}
+div.popup_menu A, div.popup_menu A:link, div.popup_menu A:visited {
+ color: #000036;
+ text-decoration: none;
+}
+div.popup_menu A:hover, div.popup_menu_hover {
+ color: #000036;
+ text-decoration: underline;
+}
+div.popup_menu_item, div.popup_menu_item A, div.popup_menu_item A:link, div.popup_menu_item A:visited {
+ font-size: 13px;
+ color: #003040;
+ padding: 5px;
+ display: block;
+ text-decoration: none;
+}
+div.popup_menu_item A:hover, div.popup_menu_item A:active {
+ background-color: #70D0F0;
+ text-decoration: underline;
+}
+div.popup_menu_sep {
+ border-bottom: 1px ridge #208090;
+}
+
+ul.tree_item_menu {
+ width: 20px;
+ height: 20px;
+}
+
+ul.popup_menu {
+ display: block;
+ list-style-type: none;
+ margin: 0px;
+ padding: 0px;
+ font-size: 10pt;
+}
+ul.popup_menu li {
+ font-weight: bold;
+ color: #cce;
+ padding: 3px 0px 0px 4px;
+ margin: -3px 0px 0px 0px;
+ cursor: default;
+ white-space: nowrap;
+ list-style-type: none;
+ height: 20px;
+}
+ul.popup_menu.vertical li {
+ width: 20px;
+ list-style-type: none;
+}
+
+ul.popup_menu li.active {
+ background-color: #607090;
+}
+ul.popup_menu li a {
+ text-decoration: none;
+ color: #cde !important;
+}
+ul.popup_menu ul {
+ position: absolute;
+ visibility: hidden;
+ text-align: left;
+ background-color: #304060;
+ border: 1px solid #020;
+ width: 11em;
+ margin: 2px 0px 0px 0px;
+ padding: 0px;
+}
+ul.popup_menu ul li.sep {
+ border-top: 1px solid #6090d0;
+}
+ul.popup_menu ul li, ul.popup_menu.vertical ul li, ul.popup_menu.horizontal ul li {
+ margin: 0px;
+ padding: 3px 0px 0px 0px;
+ border-bottom: 1px solid #00191a;
+ border-right: none;
+ white-space: normal;
+ width: 11em;
+ height: 18px;
+}
+ul.popup_menu ul li a {
+ margin-top: -3px !important;
+ display: block;
+ width: 9em;
+ color: #cde;
+ text-decoration: none;
+ padding: 3px 1em;
+}
+ul.popup_menu ul li a:hover {
+ color: #def;
+ background-color: #205980;
+}
+
+ul.popup_menu ul li.active {
+ background-color: #105053;
+ color: white;
+}
+
+#menu {
+ display: block;
+ list-style-type: none;
+ margin: 0px 220px 0px 0px;
+ padding: 0em 0em;
+ font-size: 10pt;
+ background-color: #103949;
+ height: 20px;
+ border-bottom: 1px solid black;
+}
+#menu li {
+ font-weight: bold;
+ color: #cce;
+ padding: 0em 1em;
+ margin: 0em;
+ cursor: default;
+ white-space: nowrap;
+ list-style-type: none;
+ height: 18px;
+ padding-top: 3px;
+}
+#menu li span.subtext {
+ font-weight: normal;
+}
+#menu.horizontal li {
+ float: left;
+ border-right: 1px solid #002;
+}
+
+#menu.vertical {
+ width: 8em;
+ border-right: 1px solid #600;
+ border-top: 1px solid #600;
+}
+#menu.vertical li {
+ width: 7em;
+ border-bottom: 1px solid #600;
+ list-style-type: none;
+}
+
+#menu li.active {
+ background-color: #205060;
+}
+#menu li a {
+ text-decoration: none;
+ color: #cce;
+}
+#menu ul {
+ position: absolute;
+ visibility: hidden;
+ text-align: left;
+ background-color: #103A39;
+ border: 1px solid #020;
+ width: 13em;
+ margin: 0px;
+ padding: 0px;
+}
+#menu ul li.sep {
+ border-top: 1px solid #609A99;
+}
+#menu ul li, #menu.vertical ul li, #menu.horizontal ul li {
+ border-right: none;
+ padding: 0;
+ white-space: normal;
+ margin: 0px;
+ border-bottom: 1px solid #001A19;
+ padding-top: 3px;
+ height: 18px;
+ width: 13em;
+}
+#menu ul li a {
+ margin-top: -3px !important;
+ display: block;
+ width: 11em;
+ color: #cce;
+ text-decoration: none;
+ padding: 3px 1em;
+}
+#menu ul li a:hover {
+ color: #DDF;
+ background-color: #206A59;
+}
+
+#menu ul li.active {
+ background-color: #105350;
+ color: white;
+}
+
+*/
diff --git a/abs/core/local-website/htdocs/linhes/default/programming.css b/abs/core/local-website/htdocs/linhes/default/programming.css
new file mode 100644
index 0000000..60042a7
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/programming.css
@@ -0,0 +1,150 @@
+/*
+ *
+ * The following subclasses are used for list displays that deal with tv
+ * programming.
+ *
+/*/
+
+/* some classes for various list displays */
+ .list { background-color: #191c26 }
+ .list_separator {
+ background-color: #203670;
+ border-top: 4px;
+ }
+
+/* The category legend, and its associated popup */
+ #command_choices a {
+ white-space: nowrap;
+ }
+
+ #category_legend_popup {
+ position: absolute;
+ visibility: hidden;
+ top: 0px;
+ left: 0px;
+ padding: 2px;
+ white-space: nowrap;
+ }
+ #category_legend_popup table {
+ font-size: 9pt;
+ }
+
+/* A class for the left-cleared <dl> lists used for program details popups */
+ dl.details_list {
+ font-size: 9pt;
+ margin: .125em;
+ max-width: 41em;
+ }
+ dl.details_list dt {
+ clear: left;
+ float: left;
+ width: 9em;
+ padding-top: 3px;
+ text-align: right;
+ color: #ffe;
+ white-space: nowrap;
+ }
+ dl.details_list dd {
+ padding-top: 3px;
+ margin-left: 9.5em;
+ }
+
+/* Control the look of the text-based HDTV stamp throughout MythWeb */
+ .hdtv_icon {
+ font-size: 9pt;
+ float: right;
+ color: yellow;
+ display: inline;
+ font-weight: bold;
+ }
+
+/* a class for the the cells containing recorded programs in recorded_programs.php */
+.scheduled { background-color: #506090; }
+.conflict { background-color: #806050; }
+.duplicate { background-color: #304050; }
+.deactivated { background-color: #508060; }
+
+.will_record { border: 1px solid #00F000 !important; }
+.record_weekly { border: 1px solid #00F000 !important; }
+.record_timeslot { border: 1px solid #00F000 !important; }
+.record_once { border: 1px solid #00F000 !important; }
+.record_channel { border: 1px solid #00F000 !important; }
+.record_always { border: 1px solid #00F000 !important; }
+.record_conflicting { border: 1px solid #FF0000 !important; }
+.record_duplicate { border: 2px dashed #90B0A0 !important; }
+.record_old_duplicate { border: 1px dashed #90B0A0 !important; }
+.record_suppressed { border: 2px dotted #60B0B0 !important; }
+.record_override_suppress { border: 2px dotted #D03060 !important; }
+.record_override_record { border: 2px solid #00FF90 !important; }
+
+
+/* There should be exactly one class in the next section corresponding to
+ each possible value of RecStatus_Types as defined in
+ includes/programs.php */
+.rec_class {
+ background: transparent;
+ text-align: center;
+}
+.rec_class.WillRecord { font-weight: bold; }
+.rec_class.Recording { font-weight: bold; }
+.Recording { color: #00FF00; border-width: 2px }
+.WillRecord { color: #00FF00; }
+.PreviousRecording { color: #90B0A0; }
+.CurrentRecording { color: #90D0A0; }
+.Repeat { color: #90B0A0; }
+.EarlierShowing { color: #90FFA0; }
+.LaterShowing { color: #90FFA0; }
+.TooManyRecordings { color: #60B0B0; }
+.Cancelled { color: #60B0B0; }
+.Conflicting { color: #FF0000; }
+.LowDiskSpace { color: #60B0B0; }
+.TunerBusy { color: #60B0B0; }
+.ManualOverride { color: #D03060; }
+.Overlap { color: #FF0000; }
+
+.cat_Action { background-color: #906020; }
+.cat_Adult { background-color: #702020; }
+.cat_Animals { background-color: #609060; }
+.cat_Art_Music { background-color: #801060; }
+.cat_Business { background-color: #703010; }
+.cat_Children { background-color: #B00010; }
+.cat_Comedy { background-color: #006080; }
+.cat_Crime_Mystery { background-color: #105050; }
+.cat_Documentary { background-color: #504020; }
+.cat_Drama { background-color: #400060; }
+.cat_Educational { background-color: #606060; }
+.cat_Food { background-color: #208040; }
+.cat_Game { background-color: #701010; }
+.cat_Health_Medical { background-color: #806060; }
+.cat_History { background-color: #807020; }
+.cat_HowTo { background-color: #A0A000; }
+.cat_Horror { background-color: #101040; }
+.cat_Misc { background-color: #403060; }
+.cat_News { background-color: #606040; }
+.cat_Reality { background-color: #304040; }
+.cat_Romance { background-color: #A02050; }
+.cat_Science_Nature { background-color: #008050; }
+.cat_SciFi_Fantasy { background-color: #606090; }
+.cat_Shopping { background-color: #103010; }
+.cat_Soaps { background-color: #508080; }
+.cat_Spiritual { background-color: #804080; }
+.cat_Sports { background-color: #005030; }
+.cat_Talk { background-color: #203040; }
+.cat_Travel { background-color: #2060B0; }
+.cat_War { background-color: #B06050; }
+.cat_Western { background-color: #806040; }
+.cat_Unknown { background-color: #303030; }
+
+.cat_movie { background-color: #809090 !important; }
+.cat_series { }
+.cat_tvshow { }
+
+/* deprecated show categories that need to be integreted into the above list via regex, or have new categories created for them */
+.tv_Cine { background-color: blue; }
+.tv_Classic { background-color: gray; }
+.tv_Collectibles { background-color: #708090; }
+.tv_Magazine { background-color: #48D1CC; }
+.tv_Movies { background-color: blue; }
+.tv_Serie { background-color: #9932CC; }
+.tv_SHOW { background-color: #A0522D; }
+.tv_Tiempo { background-color: #33ff99; }
diff --git a/abs/core/local-website/htdocs/linhes/default/style.css b/abs/core/local-website/htdocs/linhes/default/style.css
new file mode 100644
index 0000000..2fbb26e
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/style.css
@@ -0,0 +1,237 @@
+/*
+ * Global page handlers.
+/*/
+
+ html,body {
+ border: 0;
+ margin: 0;
+ padding: 0;
+ font-size: 9pt;
+ font-family: Arial, Helvetica, sans-serif;
+ background-color: #191c26;
+ color: #dedede;
+ }
+
+ /* For some reason, settings for the main body element doesn't always work for
+ * text inside of tables
+ /*/
+ .body {
+ font-size: 12px;
+ font-family: Arial, Helvetica, sans-serif;
+ }
+
+/*
+ * We should try to keep links and labels looking consistent across the app.
+/*/
+
+ a, a:link, .link { color: #E0E0FF; text-decoration: none; cursor: pointer;}
+ a:active { color: #990033; text-decoration: none; }
+ a:visited { color: #E0E0FF; text-decoration: none; }
+ a:hover { color: #F0F000; text-decoration: underline; }
+
+ label { color: #E0E0FF; text-decoration: none; }
+ label:hover { color: #F0F000; text-decoration: underline; }
+
+/* a class for the menu across the top of the page as well as menu headers throughout the page */
+ .menu { background-color: #265990 }
+ .menu_border_t { border-top: 2px solid #9090B0 }
+ .menu_border_b { border-bottom: 2px solid #9090B0 }
+ .menu_border_l { border-left: 2px solid #9090B0 }
+ .menu_border_r { border-right: 2px solid #9090B0 }
+
+/* a class for commands and other user input boxes */
+
+/* @deprecated old classes */
+.command { background-color: #1040A0 }
+.command_border_t { border-top: 2px solid #9090B0 }
+.command_border_b { border-bottom: 2px solid #9090B0 }
+.command_border_l { border-left: 2px solid #9090B0 }
+.command_border_r { border-right: 2px solid #9090B0 }
+.activecommand { background-color: #108040 }
+
+/* New command classes */
+
+ /* Box to hold commands */
+ .commandbox {
+ background-color: #102923;
+ color: #E0E0FF;
+ border: 1px solid #9090B0;
+ }
+
+ /* Commands themselves */
+
+ .commands { /* Placeholder for handling sub-elements */ }
+
+ .commands input.x-submit {
+ border: 2px outset #7b8;
+ padding: 0 .5em;
+ height: 2em;
+ background-color: #263;
+ color: #E0E0FF;
+ }
+ .commands input.x-submit:hover {
+ border: 1px outset #9da;
+ background-color: #485;
+ color: #F0F000;
+ text-decoration: underline;
+ }
+
+ .commands a {
+ font-weight: bold;
+ border: 1px solid #7b8;
+ padding: .15em .5em;
+ background-color: #263;
+ }
+ .commands a:hover {
+ border: 1px solid #9da;
+ background-color: #485;
+ }
+
+/*
+ * The following styles refer to forms and form elements throughout MythWeb
+/*/
+
+ /* Avoid those nasty extra linefeeds in IE </form> tags */
+ form { display: inline; }
+
+ /* A special class for submit buttons */
+ .submit {
+ border: 2px outset #7b8;
+ padding: 0 .5em;
+ background-color: #263;
+ color: #E0E0FF;
+ font-weight: bold;
+ height: 2em;
+ }
+ .submit:hover {
+ border: 2px outset #9da;
+ background-color: #485;
+ color: #F0F000;
+ text-decoration: underline;
+ }
+
+ /* A special class for radio buttons and check boxes because some browsers render them weirdly */
+ .radio {
+ height: 14px !important;
+ width: 14px !important;
+ color: #002000;
+ background-color: #C0D0C0;
+ }
+
+ /* Default styles for form fields */
+ select {
+ font-family: Arial, Helvetica, sans-serif;
+ color: #002000;
+ background-color: #C0D0C0;
+ font-size: 9pt;
+ }
+
+ input {
+ padding-left: .25em;
+ font-family: Arial, Helvetica, sans-serif;
+ color: #002000;
+ background-color: #C0D0C0;
+ font-size: 9pt;
+ }
+
+ textarea {
+ font-family: courier, courier-new;
+ color: #002000;
+ background-color: #C0D0C0;
+ font-size: 9pt;
+ }
+
+ /* Quantity-sized elements look better with the text centered */
+ input.quantity {
+ width: 2em !important;
+ text-align: center;
+ }
+
+/*
+ * A special class for error stuff, so all page errors look the same.
+/*/
+
+ #error, .error {
+ color: #F03030;
+ background-color: #360000;
+ border-color: #F03030;
+ border: thin groove #F03030;
+ padding: 8px;
+ }
+
+/*
+ * The following represent some global classes to accommodate minor but
+ * oft-used manipulations like font sizes.0
+/*/
+
+ /* font size classes */
+ .tiny { font-size: 9px; }
+ .small { font-size: 9pt; }
+ .normal { font-size: 10pt; }
+ .large { font-size: 12pt; }
+ .huge { font-size: 24px; }
+
+ /* fony style classes */
+ .bold, .bold a, .bold a:link, .bold a:visited, .bold a:active, .bold a:hover {
+ font-weight: bold !important;
+ }
+ .italic, .italic a, .italic a:link, .italic a:visited, .italic a:active, .italic a:hover {
+ font-style: italic !important;
+ }
+
+ /* Handy for, well, hiding things.. Also for mouseover popup menus */
+ .hidden {
+ visibility: hidden;
+ display: none;
+ }
+
+/*
+ * clearfix -- see http://positioniseverything.net/easyclearing.html for details on how/why this works
+/*/
+
+ .clearfix:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+ }
+ .clearfix {display: inline-block;}
+ /* Hides from IE-mac \*/
+ * html .clearfix {height: 1%;}
+ .clearfix {display: block;}
+ /* End hide from IE-mac */
+
+ /* Ajax little popup request thing style */
+ #ajax_working {
+ position: fixed;
+ background-color: green;
+ bottom: 0px;
+ left: 1em;
+ padding: 1em;
+ width: 10em;
+ text-align: center;
+ }
+
+ .link {
+ cursor: pointer;
+ }
+
+/* I don't think we have a single image with a border in the default template, so disable it */
+ a img {
+ border: 0px;
+ }
+
+ .nowrap {
+ white-space: nowrap;
+ }
+
+#feed_buttons {
+ padding-top: 1em;
+ padding-bottom: 1em;
+ padding-left: 1.35em;
+}
+
+#feed_buttons a {
+ padding-right: 1em;
+}
diff --git a/abs/core/local-website/htdocs/linhes/default/welcome.css b/abs/core/local-website/htdocs/linhes/default/welcome.css
new file mode 100644
index 0000000..6e47ed9
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/welcome.css
@@ -0,0 +1,62 @@
+#modules {
+ width: 600px;
+ margin: 100px auto;
+}
+
+#module_names {
+ margin: 0px;
+ padding: 0px;
+ float: left;
+ width: 7em;
+ font-size: 2em;
+ min-height: 15em;
+}
+
+#module_names ul {
+ margin: 0px;
+ padding: 0px;
+ list-style-type: none;
+ text-align: right;
+}
+
+#module_names li {
+ position: relative;
+ z-index: 2;
+ margin: 0px -6px 0px 0px;
+ padding: 0px .5em .15em 0px;
+ border: 2px solid transparent;
+ white-space: nowrap;
+}
+#module_names li.selected {
+ background-color: #475;
+ border-top: 2px solid #48f;
+ border-right: 2px solid #688;
+ border-bottom: 2px solid #48f;
+ border-left: 2px solid #48f;
+ -moz-border-radius: 8px;
+}
+#module_names li.selected a {
+ display: block;
+}
+
+#module_info {
+ background-color: #355;
+ margin-left: 14em;
+ border: 2px solid #48f;
+ min-width: 314px;
+ height: 30em;
+ padding: .5em 1em;
+ -moz-border-radius: 8px;
+}
+
+.module_icon {
+ display: block;
+ margin: auto;
+}
+
+#mythtv_link {
+ float: left;
+ width: 14em;
+ text-align: center;
+ margin-top: -1.5em;
+}
diff --git a/abs/core/local-website/htdocs/linhes/js/AC_OETags.js b/abs/core/local-website/htdocs/linhes/js/AC_OETags.js
new file mode 100644
index 0000000..f72d7e2
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/AC_OETags.js
@@ -0,0 +1,269 @@
+// Flash Player Version Detection - Rev 1.5
+// Detect Client Browser type
+// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
+var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
+var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
+var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
+
+function ControlVersion()
+{
+ var version;
+ var axo;
+ var e;
+
+ // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
+
+ try {
+ // version will be set for 7.X or greater players
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 6.X players only
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+
+ // installed player is some revision of 6.0
+ // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
+ // so we have to be careful.
+
+ // default to the first public version
+ version = "WIN 6,0,21,0";
+
+ // throws if AllowScripAccess does not exist (introduced in 6.0r47)
+ axo.AllowScriptAccess = "always";
+
+ // safe to call for 6.0r47 or greater
+ version = axo.GetVariable("$version");
+
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 4.X or 5.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 3.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = "WIN 3,0,18,0";
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 2.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ version = "WIN 2,0,0,11";
+ } catch (e) {
+ version = -1;
+ }
+ }
+
+ return version;
+}
+
+// JavaScript helper required to detect Flash Player PlugIn version information
+function GetSwfVer(){
+ // NS/Opera version >= 3 check for Flash plugin in plugin array
+ var flashVer = -1;
+
+ if (navigator.plugins != null && navigator.plugins.length > 0) {
+ if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
+ var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
+ var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
+ var descArray = flashDescription.split(" ");
+ var tempArrayMajor = descArray[2].split(".");
+ var versionMajor = tempArrayMajor[0];
+ var versionMinor = tempArrayMajor[1];
+ if ( descArray[3] != "" ) {
+ tempArrayMinor = descArray[3].split("r");
+ } else {
+ tempArrayMinor = descArray[4].split("r");
+ }
+ var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
+ var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
+ }
+ }
+ // MSN/WebTV 2.6 supports Flash 4
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
+ // WebTV 2.5 supports Flash 3
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
+ // older WebTV supports Flash 2
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
+ else if ( isIE && isWin && !isOpera ) {
+ flashVer = ControlVersion();
+ }
+ return flashVer;
+}
+
+// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
+function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
+{
+ versionStr = GetSwfVer();
+ if (versionStr == -1 ) {
+ return false;
+ } else if (versionStr != 0) {
+ if(isIE && isWin && !isOpera) {
+ // Given "WIN 2,0,0,11"
+ tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
+ tempString = tempArray[1]; // "2,0,0,11"
+ versionArray = tempString.split(","); // ['2', '0', '0', '11']
+ } else {
+ versionArray = versionStr.split(".");
+ }
+ var versionMajor = versionArray[0];
+ var versionMinor = versionArray[1];
+ var versionRevision = versionArray[2];
+
+ // is the major.revision >= requested major.revision AND the minor version >= requested minor
+ if (versionMajor > parseFloat(reqMajorVer)) {
+ return true;
+ } else if (versionMajor == parseFloat(reqMajorVer)) {
+ if (versionMinor > parseFloat(reqMinorVer))
+ return true;
+ else if (versionMinor == parseFloat(reqMinorVer)) {
+ if (versionRevision >= parseFloat(reqRevision))
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+function AC_AddExtension(src, ext)
+{
+ if (src.indexOf('?') != -1)
+ return src.replace(/\?/, ext+'?');
+ else
+ return src + ext;
+}
+
+function AC_Generateobj(objAttrs, params, embedAttrs)
+{
+ var str = '';
+ if (isIE && isWin && !isOpera)
+ {
+ str += '<object ';
+ for (var i in objAttrs)
+ str += i + '="' + objAttrs[i] + '" ';
+ for (var i in params)
+ str += '><param name="' + i + '" value="' + params[i] + '" /> ';
+ str += '></object>';
+ } else {
+ str += '<embed ';
+ for (var i in embedAttrs)
+ str += i + '="' + embedAttrs[i] + '" ';
+ str += '> </embed>';
+ }
+
+ document.write(str);
+}
+
+function AC_FL_RunContent(){
+ var ret =
+ AC_GetArgs
+ ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+ , "application/x-shockwave-flash"
+ );
+ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
+}
+
+function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
+ var ret = new Object();
+ ret.embedAttrs = new Object();
+ ret.params = new Object();
+ ret.objAttrs = new Object();
+ for (var i=0; i < args.length; i=i+2){
+ var currArg = args[i].toLowerCase();
+
+ switch (currArg){
+ case "classid":
+ break;
+ case "pluginspage":
+ ret.embedAttrs[args[i]] = args[i+1];
+ break;
+ case "src":
+ case "movie":
+ args[i+1] = AC_AddExtension(args[i+1], ext);
+ ret.embedAttrs["src"] = args[i+1];
+ ret.params[srcParamName] = args[i+1];
+ break;
+ case "onafterupdate":
+ case "onbeforeupdate":
+ case "onblur":
+ case "oncellchange":
+ case "onclick":
+ case "ondblClick":
+ case "ondrag":
+ case "ondragend":
+ case "ondragenter":
+ case "ondragleave":
+ case "ondragover":
+ case "ondrop":
+ case "onfinish":
+ case "onfocus":
+ case "onhelp":
+ case "onmousedown":
+ case "onmouseup":
+ case "onmouseover":
+ case "onmousemove":
+ case "onmouseout":
+ case "onkeypress":
+ case "onkeydown":
+ case "onkeyup":
+ case "onload":
+ case "onlosecapture":
+ case "onpropertychange":
+ case "onreadystatechange":
+ case "onrowsdelete":
+ case "onrowenter":
+ case "onrowexit":
+ case "onrowsinserted":
+ case "onstart":
+ case "onscroll":
+ case "onbeforeeditfocus":
+ case "onactivate":
+ case "onbeforedeactivate":
+ case "ondeactivate":
+ case "type":
+ case "codebase":
+ case "id":
+ ret.objAttrs[args[i]] = args[i+1];
+ break;
+ case "width":
+ case "height":
+ case "align":
+ case "vspace":
+ case "hspace":
+ case "class":
+ case "title":
+ case "accesskey":
+ case "name":
+ case "tabindex":
+ ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
+ break;
+ default:
+ ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
+ }
+ }
+ ret.objAttrs["classid"] = classid;
+ if (mimeType) ret.embedAttrs["type"] = mimeType;
+ return ret;
+}
+
+
diff --git a/abs/core/local-website/htdocs/linhes/js/flowplayer-3.1.1.min.js b/abs/core/local-website/htdocs/linhes/js/flowplayer-3.1.1.min.js
new file mode 100644
index 0000000..5e14062
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/flowplayer-3.1.1.min.js
@@ -0,0 +1,24 @@
+/*
+ * flowplayer.js 3.1.1. The Flowplayer API
+ *
+ * Copyright 2009 Flowplayer Oy
+ *
+ * This file is part of Flowplayer.
+ *
+ * Flowplayer is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Flowplayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Flowplayer. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Date: 2009-02-25 16:24:29 -0500 (Wed, 25 Feb 2009)
+ * Revision: 166
+ */
+(function(){function g(o){console.log("$f.fireEvent",[].slice.call(o))}function k(q){if(!q||typeof q!="object"){return q}var o=new q.constructor();for(var p in q){if(q.hasOwnProperty(p)){o[p]=k(q[p])}}return o}function m(t,q){if(!t){return}var o,p=0,r=t.length;if(r===undefined){for(o in t){if(q.call(t[o],o,t[o])===false){break}}}else{for(var s=t[0];p<r&&q.call(s,p,s)!==false;s=t[++p]){}}return t}function c(o){return document.getElementById(o)}function i(q,p,o){if(typeof p!="object"){return q}if(q&&p){m(p,function(r,s){if(!o||typeof s!="function"){q[r]=s}})}return q}function n(s){var q=s.indexOf(".");if(q!=-1){var p=s.substring(0,q)||"*";var o=s.substring(q+1,s.length);var r=[];m(document.getElementsByTagName(p),function(){if(this.className&&this.className.indexOf(o)!=-1){r.push(this)}});return r}}function f(o){o=o||window.event;if(o.preventDefault){o.stopPropagation();o.preventDefault()}else{o.returnValue=false;o.cancelBubble=true}return false}function j(q,o,p){q[o]=q[o]||[];q[o].push(p)}function e(){return"_"+(""+Math.random()).substring(2,10)}var h=function(t,r,s){var q=this;var p={};var u={};q.index=r;if(typeof t=="string"){t={url:t}}i(this,t,true);m(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","),function(){var v="on"+this;if(v.indexOf("*")!=-1){v=v.substring(0,v.length-1);var w="onBefore"+v.substring(2);q[w]=function(x){j(u,w,x);return q}}q[v]=function(x){j(u,v,x);return q};if(r==-1){if(q[w]){s[w]=q[w]}if(q[v]){s[v]=q[v]}}});i(this,{onCuepoint:function(x,w){if(arguments.length==1){p.embedded=[null,x];return q}if(typeof x=="number"){x=[x]}var v=e();p[v]=[x,w];if(s.isLoaded()){s._api().fp_addCuepoints(x,r,v)}return q},update:function(w){i(q,w);if(s.isLoaded()){s._api().fp_updateClip(w,r)}var v=s.getConfig();var x=(r==-1)?v.clip:v.playlist[r];i(x,w,true)},_fireEvent:function(v,y,w,A){if(v=="onLoad"){m(p,function(B,C){if(C[0]){s._api().fp_addCuepoints(C[0],r,B)}});return false}A=A||q;if(v=="onCuepoint"){var z=p[y];if(z){return z[1].call(s,A,w)}}if(v=="onStart"||v=="onUpdate"||v=="onResume"){i(A,y);if(!A.duration){A.duration=y.metaData.duration}else{A.fullDuration=y.metaData.duration}}var x=true;m(u[v],function(){x=this.call(s,A,y,w)});return x}});if(t.onCuepoint){var o=t.onCuepoint;q.onCuepoint.apply(q,typeof o=="function"?[o]:o);delete t.onCuepoint}m(t,function(v,w){if(typeof w=="function"){j(u,v,w);delete t[v]}});if(r==-1){s.onCuepoint=this.onCuepoint}};var l=function(p,r,q,t){var s={};var o=this;var u=false;if(t){i(s,t)}m(r,function(v,w){if(typeof w=="function"){s[v]=w;delete r[v]}});i(this,{animate:function(y,z,x){if(!y){return o}if(typeof z=="function"){x=z;z=500}if(typeof y=="string"){var w=y;y={};y[w]=z;z=500}if(x){var v=e();s[v]=x}if(z===undefined){z=500}r=q._api().fp_animate(p,y,z,v);return o},css:function(w,x){if(x!==undefined){var v={};v[w]=x;w=v}r=q._api().fp_css(p,w);i(o,r);return o},show:function(){this.display="block";q._api().fp_showPlugin(p);return o},hide:function(){this.display="none";q._api().fp_hidePlugin(p);return o},toggle:function(){this.display=q._api().fp_togglePlugin(p);return o},fadeTo:function(y,x,w){if(typeof x=="function"){w=x;x=500}if(w){var v=e();s[v]=w}this.display=q._api().fp_fadeTo(p,y,x,v);this.opacity=y;return o},fadeIn:function(w,v){return o.fadeTo(1,w,v)},fadeOut:function(w,v){return o.fadeTo(0,w,v)},getName:function(){return p},getPlayer:function(){return q},_fireEvent:function(w,v,x){if(w=="onUpdate"){var y=q._api().fp_getPlugin(p);if(!y){return}i(o,y);delete o.methods;if(!u){m(y.methods,function(){var A=""+this;o[A]=function(){var B=[].slice.call(arguments);var C=q._api().fp_invoke(p,A,B);return C=="undefined"?o:C}});u=true}}var z=s[w];if(z){z.apply(o,v);if(w.substring(0,1)=="_"){delete s[w]}}}})};function b(o,t,z){var E=this,y=null,x,u,p=[],s={},B={},r,v,w,D,A,q;i(E,{id:function(){return r},isLoaded:function(){return(y!==null)},getParent:function(){return o},hide:function(F){if(F){o.style.height="0px"}if(y){y.style.height="0px"}return E},show:function(){o.style.height=q+"px";if(y){y.style.height=A+"px"}return E},isHidden:function(){return y&&parseInt(y.style.height,10)===0},load:function(F){if(!y&&E._fireEvent("onBeforeLoad")!==false){m(a,function(){this.unload()});x=o.innerHTML;if(x&&!flashembed.isSupported(t.version)){o.innerHTML=""}flashembed(o,t,{config:z});if(F){F.cached=true;j(B,"onLoad",F)}}return E},unload:function(){try{if(!y||y.fp_isFullscreen()){return E}}catch(F){return E}if(x.replace(/\s/g,"")!==""){if(E._fireEvent("onBeforeUnload")===false){return E}y.fp_close();y=null;o.innerHTML=x;E._fireEvent("onUnload")}return E},getClip:function(F){if(F===undefined){F=D}return p[F]},getCommonClip:function(){return u},getPlaylist:function(){return p},getPlugin:function(F){var H=s[F];if(!H&&E.isLoaded()){var G=E._api().fp_getPlugin(F);if(G){H=new l(F,G,E);s[F]=H}}return H},getScreen:function(){return E.getPlugin("screen")},getControls:function(){return E.getPlugin("controls")},getConfig:function(F){return F?k(z):z},getFlashParams:function(){return t},loadPlugin:function(I,H,K,J){if(typeof K=="function"){J=K;K={}}var G=J?e():"_";E._api().fp_loadPlugin(I,H,K,G);var F={};F[G]=J;var L=new l(I,null,E,F);s[I]=L;return L},getState:function(){return y?y.fp_getState():-1},play:function(G,F){function H(){if(G!==undefined){E._api().fp_play(G,F)}else{E._api().fp_play()}}if(y){H()}else{E.load(function(){H()})}return E},getVersion:function(){var G="flowplayer.js 3.1.1";if(y){var F=y.fp_getVersion();F.push(G);return F}return G},_api:function(){if(!y){throw"Flowplayer "+E.id()+" not loaded when calling an API method"}return y},setClip:function(F){E.setPlaylist([F]);return E},getIndex:function(){return w}});m(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error").split(","),function(){var F="on"+this;if(F.indexOf("*")!=-1){F=F.substring(0,F.length-1);var G="onBefore"+F.substring(2);E[G]=function(H){j(B,G,H);return E}}E[F]=function(H){j(B,F,H);return E}});m(("pause,resume,mute,unmute,stop,toggle,seek,getStatus,getVolume,setVolume,getTime,isPaused,isPlaying,startBuffering,stopBuffering,isFullscreen,toggleFullscreen,reset,close,setPlaylist,addClip").split(","),function(){var F=this;E[F]=function(H,G){if(!y){return E}var I=null;if(H!==undefined&&G!==undefined){I=y["fp_"+F](H,G)}else{I=(H===undefined)?y["fp_"+F]():y["fp_"+F](H)}return I=="undefined"?E:I}});E._fireEvent=function(O){if(typeof O=="string"){O=[O]}var P=O[0],M=O[1],K=O[2],J=O[3],I=0;if(z.debug){g(O)}if(!y&&P=="onLoad"&&M=="player"){y=y||c(v);A=y.clientHeight;m(p,function(){this._fireEvent("onLoad")});m(s,function(Q,R){R._fireEvent("onUpdate")});u._fireEvent("onLoad")}if(P=="onLoad"&&M!="player"){return}if(P=="onError"){if(typeof M=="string"||(typeof M=="number"&&typeof K=="number")){M=K;K=J}}if(P=="onContextMenu"){m(z.contextMenu[M],function(Q,R){R.call(E)});return}if(P=="onPluginEvent"){var F=M.name||M;var G=s[F];if(G){G._fireEvent("onUpdate",M);G._fireEvent(K,O.slice(3))}return}if(P=="onPlaylistReplace"){p=[];var L=0;m(M,function(){p.push(new h(this,L++,E))})}if(P=="onClipAdd"){if(M.isInStream){return}M=new h(M,K,E);p.splice(K,0,M);for(I=K+1;I<p.length;I++){p[I].index++}}var N=true;if(typeof M=="number"&&M<p.length){D=M;var H=p[M];if(H){N=H._fireEvent(P,K,J)}if(!H||N!==false){N=u._fireEvent(P,K,J,H)}}m(B[P],function(){N=this.call(E,M,K);if(this.cached){B[P].splice(I,1)}if(N===false){return false}I++});return N};function C(){if($f(o)){$f(o).getParent().innerHTML="";w=$f(o).getIndex();a[w]=E}else{a.push(E);w=a.length-1}q=parseInt(o.style.height,10)||o.clientHeight;if(typeof t=="string"){t={src:t}}r=o.id||"fp"+e();v=t.id||r+"_api";t.id=v;z.playerId=r;if(typeof z=="string"){z={clip:{url:z}}}if(typeof z.clip=="string"){z.clip={url:z.clip}}z.clip=z.clip||{};if(o.getAttribute("href",2)&&!z.clip.url){z.clip.url=o.getAttribute("href",2)}u=new h(z.clip,-1,E);z.playlist=z.playlist||[z.clip];var F=0;m(z.playlist,function(){var H=this;if(typeof H=="object"&&H.length){H={url:""+H}}m(z.clip,function(I,J){if(J!==undefined&&H[I]===undefined&&typeof J!="function"){H[I]=J}});z.playlist[F]=H;H=new h(H,F,E);p.push(H);F++});m(z,function(H,I){if(typeof I=="function"){j(B,H,I);delete z[H]}});m(z.plugins,function(H,I){if(I){s[H]=new l(H,I,E)}});if(!z.plugins||z.plugins.controls===undefined){s.controls=new l("controls",null,E)}s.canvas=new l("canvas",null,E);t.bgcolor=t.bgcolor||"#000000";t.version=t.version||[9,0];t.expressInstall="http://www.flowplayer.org/swf/expressinstall.swf";function G(H){if(!E.isLoaded()&&E._fireEvent("onBeforeClick")!==false){E.load()}return f(H)}x=o.innerHTML;if(x.replace(/\s/g,"")!==""){if(o.addEventListener){o.addEventListener("click",G,false)}else{if(o.attachEvent){o.attachEvent("onclick",G)}}}else{if(o.addEventListener){o.addEventListener("click",f,false)}E.load()}}if(typeof o=="string"){flashembed.domReady(function(){var F=c(o);if(!F){throw"Flowplayer cannot access element: "+o}else{o=F;C()}})}else{C()}}var a=[];function d(o){this.length=o.length;this.each=function(p){m(o,p)};this.size=function(){return o.length}}window.flowplayer=window.$f=function(){var p=null;var o=arguments[0];if(!arguments.length){m(a,function(){if(this.isLoaded()){p=this;return false}});return p||a[0]}if(arguments.length==1){if(typeof o=="number"){return a[o]}else{if(o=="*"){return new d(a)}m(a,function(){if(this.id()==o.id||this.id()==o||this.getParent()==o){p=this;return false}});return p}}if(arguments.length>1){var r=arguments[1];var q=(arguments.length==3)?arguments[2]:{};if(typeof o=="string"){if(o.indexOf(".")!=-1){var t=[];m(n(o),function(){t.push(new b(this,k(r),k(q)))});return new d(t)}else{var s=c(o);return new b(s!==null?s:o,r,q)}}else{if(o){return new b(o,r,q)}}}return null};i(window.$f,{fireEvent:function(){var o=[].slice.call(arguments);var q=$f(o[0]);return q?q._fireEvent(o.slice(1)):null},addPlugin:function(o,p){b.prototype[o]=p;return $f},each:m,extend:i});if(typeof jQuery=="function"){jQuery.prototype.flowplayer=function(q,p){if(!arguments.length||typeof arguments[0]=="number"){var o=[];this.each(function(){var r=$f(this);if(r){o.push(r)}});return arguments.length?o[arguments[0]]:new d(o)}return this.each(function(){$f(this,k(q),p?k(p):{})})}}})();(function(){var e=typeof jQuery=="function";function i(){if(c.done){return false}var k=document;if(k&&k.getElementsByTagName&&k.getElementById&&k.body){clearInterval(c.timer);c.timer=null;for(var j=0;j<c.ready.length;j++){c.ready[j].call()}c.ready=null;c.done=true}}var c=e?jQuery:function(j){if(c.done){return j()}if(c.timer){c.ready.push(j)}else{c.ready=[j];c.timer=setInterval(i,13)}};function f(k,j){if(j){for(key in j){if(j.hasOwnProperty(key)){k[key]=j[key]}}}return k}function g(j){switch(h(j)){case"string":j=j.replace(new RegExp('(["\\\\])',"g"),"\\$1");j=j.replace(/^\s?(\d+)%/,"$1pct");return'"'+j+'"';case"array":return"["+b(j,function(m){return g(m)}).join(",")+"]";case"function":return'"function()"';case"object":var k=[];for(var l in j){if(j.hasOwnProperty(l)){k.push('"'+l+'":'+g(j[l]))}}return"{"+k.join(",")+"}"}return String(j).replace(/\s/g," ").replace(/\'/g,'"')}function h(k){if(k===null||k===undefined){return false}var j=typeof k;return(j=="object"&&k.push)?"array":j}if(window.attachEvent){window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){}})}function b(j,m){var l=[];for(var k in j){if(j.hasOwnProperty(k)){l[k]=m(j[k])}}return l}function a(q,s){var o=f({},q);var r=document.all;var m='<object width="'+o.width+'" height="'+o.height+'"';if(r&&!o.id){o.id="_"+(""+Math.random()).substring(9)}if(o.id){m+=' id="'+o.id+'"'}o.src+=((o.src.indexOf("?")!=-1?"&":"?")+Math.random());if(o.w3c||!r){m+=' data="'+o.src+'" type="application/x-shockwave-flash"'}else{m+=' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'}m+=">";if(o.w3c||r){m+='<param name="movie" value="'+o.src+'" />'}o.width=o.height=o.id=o.w3c=o.src=null;for(var j in o){if(o[j]!==null){m+='<param name="'+j+'" value="'+o[j]+'" />'}}var n="";if(s){for(var l in s){if(s[l]!==null){n+=l+"="+(typeof s[l]=="object"?g(s[l]):s[l])+"&"}}n=n.substring(0,n.length-1);m+='<param name="flashvars" value=\''+n+"' />"}m+="</object>";return m}function d(l,o,k){var j=flashembed.getVersion();f(this,{getContainer:function(){return l},getConf:function(){return o},getVersion:function(){return j},getFlashvars:function(){return k},getApi:function(){return l.firstChild},getHTML:function(){return a(o,k)}});var p=o.version;var q=o.expressInstall;var n=!p||flashembed.isSupported(p);if(n){o.onFail=o.version=o.expressInstall=null;l.innerHTML=a(o,k)}else{if(p&&q&&flashembed.isSupported([6,65])){f(o,{src:q});k={MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title};l.innerHTML=a(o,k)}else{if(l.innerHTML.replace(/\s/g,"")!==""){}else{l.innerHTML="<h2>Flash version "+p+" or greater is required</h2><h3>"+(j[0]>0?"Your version is "+j:"You have no flash plugin installed")+"</h3>"+(l.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='http://www.adobe.com/go/getflashplayer'>here</a></p>");if(l.tagName=="A"){l.onclick=function(){location.href="http://www.adobe.com/go/getflashplayer"}}}}}if(!n&&o.onFail){var m=o.onFail.call(this);if(typeof m=="string"){l.innerHTML=m}}if(document.all){window[o.id]=document.getElementById(o.id)}}window.flashembed=function(k,l,j){if(typeof k=="string"){var m=document.getElementById(k);if(m){k=m}else{c(function(){flashembed(k,l,j)});return}}if(!k){return}var n={width:"100%",height:"100%",allowfullscreen:true,allowscriptaccess:"always",quality:"high",version:null,onFail:null,expressInstall:null,w3c:false};if(typeof l=="string"){l={src:l}}f(n,l);return new d(k,n,j)};f(window.flashembed,{getVersion:function(){var l=[0,0];if(navigator.plugins&&typeof navigator.plugins["Shockwave Flash"]=="object"){var k=navigator.plugins["Shockwave Flash"].description;if(typeof k!="undefined"){k=k.replace(/^.*\s+(\S+\s+\S+$)/,"$1");var m=parseInt(k.replace(/^(.*)\..*$/,"$1"),10);var q=/r/.test(k)?parseInt(k.replace(/^.*r(.*)$/,"$1"),10):0;l=[m,q]}}else{if(window.ActiveXObject){try{var o=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(p){try{o=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");l=[6,0];o.AllowScriptAccess="always"}catch(j){if(l[0]==6){return}}try{o=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(n){}}if(typeof o=="object"){k=o.GetVariable("$version");if(typeof k!="undefined"){k=k.replace(/^\S+\s+(.*)$/,"$1").split(",");l=[parseInt(k[0],10),parseInt(k[2],10)]}}}}return l},isSupported:function(j){var l=flashembed.getVersion();var k=(l[0]>j[0])||(l[0]==j[0]&&l[1]>=j[1]);return k},domReady:c,asString:g,getHTML:a});if(e){jQuery.tools=jQuery.tools||{version:{}};jQuery.tools.version.flashembed="1.0.2";jQuery.fn.flashembed=function(k,j){var l=null;this.each(function(){l=flashembed(this,k,j)});return k.api===false?this:l}}})(); \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/pngbehavior.htc b/abs/core/local-website/htdocs/linhes/js/pngbehavior.htc
new file mode 100644
index 0000000..4d664d9
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/pngbehavior.htc
@@ -0,0 +1,97 @@
+/**
+ * This is a slightly modified version of Eric Advidsson's pngbehavior.htc
+ * script at http://webfx.eae.net/dhtml/pngbehavior/pngbehavior.html
+ *
+ * For usage see license at http://webfx.eae.net/license.html
+ *
+ * It also includes some printing fixes from:
+ * http://www.scss.com.au/family/andrew/webdesign/pngbehavior/
+ *
+ * As well as restricting the versions of IE that it will match, since IE 7 now
+ * deals properly with transparent PNGs.
+ *
+ * @url $URL$
+ * @date $Date: 2006-11-13 18:57:43 +0000 (Mon, 13 Nov 2006) $
+ * @version $Revision: 11730 $
+ * @author $Author: xris $
+ *
+/**/
+
+<public:component>
+<public:attach event="onpropertychange" onevent="propertyChanged()" />
+<public:attach event="onbeforeprint" for="window" onevent="beforePrint()" />
+<public:attach event="onafterprint" for="window" onevent="afterPrint()" />
+
+<script type="text/javascript">
+
+// Set this to the URL of your 1x1 transparent gif
+ var blankSrc = "/skins/default/img/spacer.gif";
+
+// Only interact with valid browsers. Everything after IE 6 supports
+// transparent PNGs natively (yay!)
+ var supported = /MSIE (5\.5|6)/.test(navigator.userAgent) && navigator.platform == "Win32";
+
+/******************************************************************************/
+
+ var realSrc;
+
+ if (supported)
+ fixImage();
+
+ function propertyChanged() {
+ if (supported && event.propertyName == 'src') {
+ var i = element.src.lastIndexOf(blankSrc);
+ if (i == -1 || i != element.src.length - blankSrc.length) {
+ fixImage();
+ }
+ }
+ }
+
+ function fixImage() {
+ if (!supported) return;
+ // Don't set the image to itself (i.e. catch stupid web designer errors)
+ if (element.src == realSrc && element.runtimeStyle.filter != "") {
+ element.src = blankSrc;
+ return;
+ }
+ // Backup the old src
+ if ( ! new RegExp(blankSrc).test(element.src))
+ realSrc = element.src;
+ // Test for png
+ if ( realSrc && /\.png$/.test( realSrc.toLowerCase() ) ) {
+ // Make sure that width and height are preserved
+ var width = element.width;
+ var height = element.height;
+ // Set blank image
+ element.src = blankSrc;
+ // Set filter
+ element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
+ + encodeURI(realSrc) + "',sizingMethod='scale')";
+ // Restore width and height
+ element.width = width;
+ element.height = height;
+ }
+ // Otherwise, remove the filter
+ else
+ element.runtimeStyle.filter = "";
+ }
+
+ function beforePrint() {
+ if (realSrc) {
+ supported = false;
+ element.src = realSrc;
+ element.runtimeStyle.filter = '';
+ supported = true;
+ }
+ }
+
+ function afterPrint() {
+ if (realSrc) {
+ var rs = realSrc;
+ realSrc = null;
+ element.src = rs;
+ }
+ }
+
+</script>
+</public:component>
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/classic_toolbar.gif b/abs/core/local-website/htdocs/linhes/js/prototip/classic_toolbar.gif
new file mode 100644
index 0000000..a8948b6
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototip/classic_toolbar.gif
Binary files differ
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/close.gif b/abs/core/local-website/htdocs/linhes/js/prototip/close.gif
new file mode 100644
index 0000000..25b04d3
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototip/close.gif
Binary files differ
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/close_hover.gif b/abs/core/local-website/htdocs/linhes/js/prototip/close_hover.gif
new file mode 100644
index 0000000..2a919ab
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototip/close_hover.gif
Binary files differ
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/close_hover_red.gif b/abs/core/local-website/htdocs/linhes/js/prototip/close_hover_red.gif
new file mode 100644
index 0000000..b063bee
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototip/close_hover_red.gif
Binary files differ
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/prototip.css b/abs/core/local-website/htdocs/linhes/js/prototip/prototip.css
new file mode 100644
index 0000000..7ef6fb5
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototip/prototip.css
@@ -0,0 +1,65 @@
+/* prototip.css : http://www.nickstakenburg.com/projects/prototip */
+.prototip { position: absolute; }
+.prototip .effectWrapper { position: relative; }
+.prototip .tooltip { position: relative; }
+.prototip .toolbar {
+ position: relative;
+ display: block;
+ }
+.prototip .toolbar .title {
+ display: block;
+ position: relative;
+ }
+.prototip .content { clear: both; }
+.prototip .toolbar a.close {
+ position: relative;
+ top: 15px;
+ text-decoration: none;
+ float: right;
+ width: 15px;
+ height: 15px;
+ background: transparent url(close.gif);
+ display: block;
+ line-height: 0;
+ font-size: 0px;
+ border: 0;
+ }
+.prototip .toolbar a.close:hover { background: transparent url(close_hover.gif); }
+
+.iframeShim {
+ position: absolute;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ background: none;
+}
+
+/* Tooltip styles */
+.prototip .default { width: 150px; color: #fff; }
+.prototip .default .toolbar { background: #0F6788; font: italic 17px Georgia, serif; }
+.prototip .default .title { padding: 5px; }
+.prototip .default .content { background: #1E90FF; font: 11px Arial, Helvetica, sans-serif; padding: 5px;}
+
+.prototip .pinktip { border: 5px solid #a1a1a1; }
+.prototip .pinktip .toolbar { background: #ff1e53; color: #fff; font: italic 17px Georgia, serif; }
+.prototip .pinktip .title { padding: 5px; }
+.prototip .pinktip .content { background: #fff; color: #555555; font: 11px Arial, Helvetica, sans-serif; padding: 5px; }
+
+.prototip .darktip { width: 250px; border: 5px solid #a1a1a1; }
+.prototip .darktip .toolbar { background: #606060; color: #fff; font: italic 17px Georgia, serif; }
+.prototip .darktip .toolbar a.close { background: url(close_hover.gif);}
+.prototip .darktip .toolbar a.close:hover { background: url(close.gif);}
+.prototip .darktip .title { padding: 5px;}
+.prototip .darktip .content { background: #808080; color: #fff; font: 11px Arial, Helvetica, sans-serif; padding: 5px; }
+
+.prototip .silver { width: 300px; border: 5px solid #cccccc; color: #fff; font: 11px Arial, Helvetica, sans-serif;}
+.prototip .silver .toolbar { background: #2e2e2e; color: #fff; font-weight: bold; }
+.prototip .silver .toolbar a.close:hover { background: url(close_hover_red.gif);}
+.prototip .silver .title { padding: 5px; }
+.prototip .silver .content { background: #fff; color: #666666; padding: 5px;}
+
+.protoClassic { width: 300px; border: 5px solid #8c939c; }
+.protoClassic .toolbar { background: #96b8e2 url(classic_toolbar.gif) top left repeat-y; font-weight: bold; color: #fff;}
+.protoClassic .toolbar a.close:hover { background: url(close_hover_red.gif);}
+.protoClassic .title { padding: 5px; }
+.protoClassic .content { background: #fff; color: #333333; font: 11px Arial, Helvetica, sans-serif; padding: 5px; }
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/prototip.js b/abs/core/local-website/htdocs/linhes/js/prototip/prototip.js
new file mode 100644
index 0000000..f386a03
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototip/prototip.js
@@ -0,0 +1,506 @@
+// Prototip 1.2.0_pre1 - 17-12-2007
+
+// Copyright (c) 2007 Nick Stakenburg (http://www.nickstakenburg.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// More information on this project:
+// http://www.nickstakenburg.com/projects/prototip/
+
+var Prototip = {
+ Version: '1.2.0_pre1',
+
+ REQUIRED_Prototype: '1.6.0',
+ REQUIRED_Scriptaculous: '1.8.0',
+
+ start: function() {
+ this.require('Prototype');
+ Tips.initialize();
+ Element.observe(window, 'unload', this.unload);
+ },
+
+ require: function(library) {
+ if ((typeof window[library] == 'undefined') ||
+ (this.convertVersionString(window[library].Version) < this.convertVersionString(this['REQUIRED_' + library])))
+ throw('Prototip requires ' + library + ' >= ' + this['REQUIRED_' + library]);
+ },
+
+ convertVersionString: function(versionString) {
+ var r = versionString.split('.');
+ return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]);
+ },
+
+ viewport: {
+ getDimensions: function() {
+ var dimensions = { };
+ var B = Prototype.Browser;
+ $w('width height').each(function(d) {
+ var D = d.capitalize();
+ dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] :
+ (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D];
+ });
+ return dimensions;
+ }
+ },
+
+ capture: function(func) {
+ if (!Prototype.Browser.IE) {
+ func = func.wrap(function(proceed, event) {
+ var rel = event.relatedTarget, cur = event.currentTarget;
+ if (rel && rel.nodeType == Node.TEXT_NODE) rel = rel.parentNode;
+ if (rel && rel != cur && rel.descendantOf && !(rel.descendantOf(cur)))
+ proceed(event);
+ });
+ }
+ return func;
+ },
+
+ unload: function() { Tips.removeAll(); }
+};
+
+var Tips = {
+ // Configuration
+ closeButtons: true,
+ zIndex: 1200,
+
+ tips : [],
+ visible : [],
+
+ initialize: function() {
+ this.zIndexTop = this.zIndex;
+ },
+
+ useEvent : (function(IE) { return {
+ 'mouseover': (IE ? 'mouseenter' : 'mouseover'),
+ 'mouseout': (IE ? 'mouseleave' : 'mouseout'),
+ 'mouseenter': (IE ? 'mouseenter' : 'mouseover'),
+ 'mouseleave': (IE ? 'mouseleave' : 'mouseout')
+ };})(Prototype.Browser.IE),
+
+ fixIE: (function(agent) {
+ var version = new RegExp('MSIE ([\\d.]+)').exec(agent);
+ return version ? (parseFloat(version[1]) <= 6) : false;
+ })(navigator.userAgent),
+
+ add: function(tip) {
+ this.tips.push(tip);
+ },
+
+ hasTip: function(element) {
+ if (this.tips.find(function(t){ return t.element == $(element); }))
+ return true;
+ return false;
+ },
+
+ showTip: function(element) {
+ var tip = this.tips.find(function(t){ return t.element == $(element); });
+ if (tip) {
+ tip.show();
+ tip.position();
+ }
+ },
+
+ hideTip: function(element) {
+ var tip = this.tips.find(function(t){ return t.element == $(element); });
+ if (tip)
+ tip.hide();
+ },
+
+ hideAll: function() {
+ this.tips.each(function(tip) { tip.hide(); }.bind(this));
+ },
+
+ remove: function(element) {
+ var tip = this.tips.find(function(t){ return t.element == $(element); });
+ if (tip) {
+ tip.deactivate();
+ if (tip.tooltip) {
+ tip.wrapper.remove();
+ if (Tips.fixIE) tip.iframeShim.remove();
+ }
+ this.tips = this.tips.without(tip);
+ }
+ },
+
+ removeAll: function() {
+ this.tips.each(function(tip) { this.remove(tip.element); }.bind(this));
+ },
+
+ raise: function(tip) {
+ if (tip.highest) return;
+ if (this.visible.length == 0) {
+ this.zIndexTop = this.zIndex;
+ for (var i=0;i<this.tips.length;i++) {
+ this.tips[i].wrapper.style.zIndex = this.zIndex;
+ }
+ }
+ tip.style.zIndex = this.zIndexTop++;
+ for (var i=0;i<this.tips.length;i++) { this.tips[i].wrapper.highest = false; };
+ tip.highest = true;
+ },
+
+ addVisibile: function(tip) {
+ this.removeVisible(tip);
+ this.visible.push(tip);
+ },
+
+ removeVisible: function(tip) {
+ this.visible = this.visible.without(tip);
+ }
+};
+Tips.initialize();
+
+var Tip = Class.create({
+ initialize: function(element, content) {
+ this.element = $(element);
+ Tips.remove(this.element);
+
+ this.content = content;
+
+ var isHooking = (arguments[2] && arguments[2].hook);
+ var isShowOnClick = (arguments[2] && arguments[2].showOn == 'click');
+
+ this.options = Object.extend({
+ className: 'default', // see css, this will lead to .prototip .default
+ closeButton: Tips.closeButtons, // true, false
+ delay: !isShowOnClick ? 0.2 : false, // seconds before tooltip appears
+ duration: 0.3, // duration of the effect
+ effect: false, // false, 'appear' or 'blind'
+ hideAfter: false, // second before hide after no hover/activity
+ hideOn: 'mouseleave', // or any other event, false
+ hook: false, // { element: topLeft|topRight|bottomLeft|bottomRight, tip: see element }
+ offset: isHooking ? {x:0, y:0} : {x:16, y:16},
+ fixed: isHooking ? true : false, // follow the mouse if false
+ showOn: 'mousemove',
+ target: this.element, // or another element
+ title: false,
+ viewport: isHooking ? false : true // keep within viewport if mouse is followed
+ }, arguments[2] || {});
+
+ this.target = $(this.options.target);
+
+ this.setup();
+
+ if (this.options.effect) {
+ Prototip.require('Scriptaculous');
+ this.queue = { position: 'end', limit: 1, scope: this.wrapper.identify() }
+ }
+
+ Tips.add(this);
+ this.activate();
+ },
+
+ setup: function() {
+ this.wrapper = new Element('div', { 'class' : 'prototip' }).setStyle({
+ display: 'none', zIndex: Tips.zIndex });
+ this.wrapper.identify();
+
+ if (Tips.fixIE) {
+ this.iframeShim = new Element('iframe', { 'class' : 'iframeShim', src: 'javascript:false;' }).setStyle({
+ display: 'none', zIndex: Tips.zIndex - 1 });
+ }
+
+ this.tip = new Element('div', { 'class' : 'content' }).insert(this.content);
+ this.tip.insert(new Element('div').setStyle({ clear: 'both' }));
+
+ if (this.options.closeButton || (this.options.hideOn.element && this.options.hideOn.element == 'closeButton'))
+ this.closeButton = new Element('a', { href: '#', 'class' : 'close' });
+ },
+
+ build: function() {
+ if (Tips.fixIE) document.body.appendChild(this.iframeShim).setOpacity(0);
+
+ // effects go smooth with extra wrapper
+ var wrapper = 'wrapper';
+ if (this.options.effect) {
+ this.effectWrapper = this.wrapper.appendChild(new Element('div', { 'class' : 'effectWrapper' }));
+ wrapper = 'effectWrapper';
+ }
+
+ this.tooltip = this[wrapper].appendChild(new Element('div', { 'class' : 'tooltip ' + this.options.className }));
+
+ if (this.options.title || this.options.closeButton) {
+ this.toolbar = this.tooltip.appendChild(new Element('div', { 'class' : 'toolbar' }));
+ this.title = this.toolbar.appendChild(new Element('div', { 'class' : 'title' }).update(this.options.title || ' '));
+ }
+
+ this.tooltip.insert(this.tip);
+ document.body.appendChild(this.wrapper);
+
+ // fixate elements for better positioning and effects
+ var fixate = (this.options.effect) ? [this.wrapper, this.effectWrapper]: [this.wrapper];
+ if (Tips.fixIE) fixate.push(this.iframeShim);
+
+ // fix width
+ var fixedWidth = this.wrapper.getWidth();
+ fixate.invoke('setStyle', { width: fixedWidth + 'px' });
+
+ // make toolbar width fixed
+ if(this.toolbar) {
+ this.wrapper.setStyle({ visibility : 'hidden' }).show();
+ this.toolbar.setStyle({ width: this.toolbar.getWidth() + 'px'});
+ this.wrapper.hide().setStyle({ visibility : 'visible' });
+ }
+
+ // add close button
+ if (this.closeButton)
+ this.title.insert({ top: this.closeButton }).insert(new Element('div').setStyle({ clear: 'both' }));
+
+ var fixedHeight = this.wrapper.getHeight();
+ fixate.invoke('setStyle', { width: fixedWidth + 'px', height: fixedHeight + 'px' });
+
+ this[this.options.effect ? wrapper : 'tooltip'].hide();
+ },
+
+ activate: function() {
+ this.eventShow = this.showDelayed.bindAsEventListener(this);
+ this.eventHide = this.hide.bindAsEventListener(this);
+
+ // if fixed use mouseover instead of mousemove for less event calls
+ if (this.options.fixed && this.options.showOn == 'mousemove') this.options.showOn = 'mouseover';
+
+ if(this.options.showOn == this.options.hideOn) {
+ this.eventToggle = this.toggle.bindAsEventListener(this);
+ this.element.observe(this.options.showOn, this.eventToggle);
+ }
+
+ var hideOptions = {
+ 'element': this.eventToggle ? [] : [this.element],
+ 'target': this.eventToggle ? [] : [this.target],
+ 'tip': this.eventToggle ? [] : [this.wrapper],
+ 'closeButton': [],
+ 'none': []
+ };
+ var el = this.options.hideOn.element;
+ this.hideElement = el || (!this.options.hideOn ? 'none' : 'element');
+ this.hideTargets = hideOptions[this.hideElement];
+ if (!this.hideTargets && el && Object.isString(el)) this.hideTargets = this.tip.select(el);
+
+ var realEvent = {'mouseenter': 'mouseover', 'mouseleave': 'mouseout'};
+ $w('show hide').each(function(e) {
+ var E = e.capitalize();
+ var event = (this.options[e + 'On'].event || this.options[e + 'On']);
+ this[e + 'Action'] = event;
+ if (['mouseenter', 'mouseleave', 'mouseover', 'mouseout'].include(event)) {
+ this[e + 'Action'] = (Tips.useEvent[event] || event);
+ this['event' + E] = Prototip.capture(this['event' + E]);
+ }
+ }.bind(this));
+
+ if (!this.eventToggle) this.element.observe(this.options.showOn, this.eventShow);
+ if (this.hideTargets) this.hideTargets.invoke('observe', this.hideAction, this.eventHide);
+
+ // add postion observer to moving showOn click tips
+ if (!this.options.fixed && this.options.showOn == 'click') {
+ this.eventPosition = this.position.bindAsEventListener(this);
+ this.element.observe('mousemove', this.eventPosition);
+ }
+
+ // close button
+ this.buttonEvent = this.hide.wrap(function(proceed, event) {
+ event.stop();
+ proceed(event);
+ }).bindAsEventListener(this);
+ if (this.closeButton) this.closeButton.observe('click', this.buttonEvent);
+
+ // delay timeout
+ if (this.options.showOn != 'click' && (this.hideElement != 'element')) {
+ this.eventCheckDelay = Prototip.capture(function() {
+ this.clearTimer('show');
+ }).bindAsEventListener(this);
+ this.element.observe(Tips.useEvent['mouseout'], this.eventCheckDelay);
+ }
+
+ // activity (hideAfter, raise)
+ var elements = [this.element, this.wrapper];
+ this.activityEnter = Prototip.capture(function() {
+ Tips.raise(this.wrapper);
+ this.cancelHideAfter();
+ }).bindAsEventListener(this);
+ this.activityLeave = Prototip.capture(this.hideAfter).bindAsEventListener(this);
+ elements.invoke('observe', Tips.useEvent['mouseover'], this.activityEnter);
+ elements.invoke('observe', Tips.useEvent['mouseout'], this.activityLeave);
+ },
+
+ deactivate: function() {
+ if(this.options.showOn == this.options.hideOn)
+ this.element.stopObserving(this.options.showOn, this.eventToggle);
+ else {
+ this.element.stopObserving(this.options.showOn, this.eventShow);
+ if (this.hideTargets) this.hideTargets.invoke('stopObserving');
+ }
+
+ if (this.eventPosition) this.element.stopObserving('mousemove', this.eventPosition);
+ if (this.closeButton) this.closeButton.stopObserving();
+ if (this.eventCheckDelay) this.element.stopObserving('mouseout', this.eventCheckDelay);
+ this.wrapper.stopObserving();
+ this.element.stopObserving(Tips.useEvent['mouseover'], this.activityEnter);
+ this.element.stopObserving(Tips.useEvent['mouseout'], this.activityLeave);
+ },
+
+ showDelayed: function(event) {
+ if (!this.tooltip) this.build();
+ this.position(event); // follow mouse
+ if (this.wrapper.visible()) return;
+
+ this.clearTimer('show');
+ this.showTimer = this.show.bind(this).delay(this.options.delay);
+ },
+
+ clearTimer: function(timer) {
+ if (this[timer + 'Timer']) clearTimeout(this[timer + 'Timer']);
+ },
+
+ show: function() {
+ if (!this.tooltip) this.build();
+ if (this.wrapper.visible() && this.options.effect != 'appear') return;
+
+ if (Tips.fixIE) this.iframeShim.show();
+ Tips.addVisibile(this.wrapper);
+ this.wrapper.show();
+ if (!this.options.effect) this.tooltip.show();
+ else {
+ if (this.activeEffect) Effect.Queues.get(this.queue.scope).remove(this.activeEffect);
+ this.activeEffect = Effect[Effect.PAIRS[this.options.effect][0]](this.effectWrapper,
+ { duration: this.options.duration, queue: this.queue});
+ }
+ },
+
+ hideAfter: function(event) {
+ if (!this.options.hideAfter) return;
+ this.cancelHideAfter();
+ this.hideAfterTimer = this.hide.bind(this).delay(this.options.hideAfter);
+ },
+
+ cancelHideAfter: function() {
+ if (this.options.hideAfter) this.clearTimer('hideAfter');
+ },
+
+ hide: function() {
+ this.clearTimer('show');
+ if(!this.wrapper.visible()) return;
+
+ if (!this.options.effect) {
+ if (Tips.fixIE) this.iframeShim.hide();
+ this.tooltip.hide();
+ this.wrapper.hide();
+ Tips.removeVisible(this.wrapper);
+ }
+ else {
+ if (this.activeEffect) Effect.Queues.get(this.queue.scope).remove(this.activeEffect);
+ this.activeEffect = Effect[Effect.PAIRS[this.options.effect][1]](this.effectWrapper,
+ { duration: this.options.duration, queue: this.queue, afterFinish: function() {
+ if (Tips.fixIE) this.iframeShim.hide();
+ this.wrapper.hide();
+ Tips.removeVisible(this.wrapper);
+ }.bind(this)});
+ }
+ },
+
+ toggle: function(event) {
+ if (this.wrapper && this.wrapper.visible()) this.hide(event);
+ else this.showDelayed(event);
+ },
+
+ position: function(event) {
+ Tips.raise(this.wrapper);
+
+ var offset = {left: this.options.offset.x, top: this.options.offset.y};
+ var targetPosition = Position.cumulativeOffset(this.target);
+ var tipd = this.wrapper.getDimensions();
+
+ if (event)
+ var pos = { left: (this.options.fixed) ? targetPosition[0] : Event.pointerX(event),
+ top: (this.options.fixed) ? targetPosition[1] : Event.pointerY(event) };
+ else
+ var pos = { left: targetPosition[0], top: targetPosition[1] };
+
+ // add offsets
+ pos.left += offset.left;
+ pos.top += offset.top;
+
+ if (this.options.hook) {
+ var dims = {target: this.target.getDimensions(), tip: tipd}
+ var hooks = {target: Position.cumulativeOffset(this.target), tip: Position.cumulativeOffset(this.target)}
+
+ for (var z in hooks) {
+ switch (this.options.hook[z]) {
+ case 'topRight':
+ hooks[z][0] += dims[z].width;
+ break;
+ case 'topMiddle':
+ hooks[z][0] += (dims[z].width / 2);
+ break;
+ case 'rightMiddle':
+ hooks[z][0] += dims[z].width;
+ hooks[z][1] += (dims[z].height / 2);
+ break;
+ case 'bottomLeft':
+ hooks[z][1] += dims[z].height;
+ break;
+ case 'bottomRight':
+ hooks[z][0] += dims[z].width;
+ hooks[z][1] += dims[z].height;
+ break;
+ case 'bottomMiddle':
+ hooks[z][0] += (dims[z].width / 2);
+ hooks[z][1] += dims[z].height;
+ break;
+ case 'leftMiddle':
+ hooks[z][1] += (dims[z].height / 2);
+ break;
+ }
+ }
+
+ // move based on hooks
+ pos.left += -1*(hooks.tip[0] - hooks.target[0]);
+ pos.top += -1*(hooks.tip[1] - hooks.target[1]);
+ }
+
+ // move tooltip when there is a different target or when we don't have a event to position to
+ if ((!this.options.fixed && this.element !== this.target) || !event) {
+ var elementPosition = Position.cumulativeOffset(this.element);
+ pos.left += -1*(elementPosition[0] - targetPosition[0]);
+ pos.top += -1*(elementPosition[1] - targetPosition[1]);
+ }
+
+ if (!this.options.fixed && this.options.viewport) {
+ var scroll = document.viewport.getScrollOffsets();
+ var viewport = Prototip.viewport.getDimensions();
+ var pair = {left: 'width', top: 'height'};
+
+ for(var z in pair) {
+ if ((pos[z] + tipd[pair[z]] - scroll[z]) > viewport[pair[z]])
+ pos[z] = pos[z] - tipd[pair[z]] - 2*offset[z];
+ }
+ }
+
+ // Ensure that the tooltip does not render off screen left edge
+ if ( pos.left < 0 ) {
+ pos.left = 0;
+ }
+
+ var setPos = { left: pos.left + 'px', top: pos.top + 'px' };
+ this.wrapper.setStyle(setPos);
+ if (Tips.fixIE) this.iframeShim.setStyle(setPos);
+ }
+});
+
+Prototip.start();
diff --git a/abs/core/local-website/htdocs/linhes/js/prototype.js b/abs/core/local-website/htdocs/linhes/js/prototype.js
new file mode 100644
index 0000000..dfe8ab4
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototype.js
@@ -0,0 +1,4320 @@
+/* Prototype JavaScript framework, version 1.6.0.3
+ * (c) 2005-2008 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.6.0.3',
+
+ Browser: {
+ IE: !!(window.attachEvent &&
+ navigator.userAgent.indexOf('Opera') === -1),
+ Opera: navigator.userAgent.indexOf('Opera') > -1,
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 &&
+ navigator.userAgent.indexOf('KHTML') === -1,
+ MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ },
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+ SelectorsAPI: !!document.querySelector,
+ ElementExtensions: !!window.HTMLElement,
+ SpecificElementExtensions:
+ document.createElement('div')['__proto__'] &&
+ document.createElement('div')['__proto__'] !==
+ document.createElement('form')['__proto__']
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+/* Based on Alex Arnell's inheritance implementation. */
+var Class = {
+ create: function() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ var subclass = function() { };
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0; i < properties.length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+
+ return klass;
+ }
+};
+
+Class.Methods = {
+ addMethods: function(source) {
+ var ancestor = this.superclass && this.superclass.prototype;
+ var properties = Object.keys(source);
+
+ if (!Object.keys({ toString: true }).length)
+ properties.push("toString", "valueOf");
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames().first() == "$super") {
+ var method = value;
+ value = (function(m) {
+ return function() { return ancestor[m].apply(this, arguments) };
+ })(property).wrap(method);
+
+ value.valueOf = method.valueOf.bind(method);
+ value.toString = method.toString.bind(method);
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+};
+
+Object.extend(Object, {
+ inspect: function(object) {
+ try {
+ if (Object.isUndefined(object)) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : String(object);
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ },
+
+ toJSON: function(object) {
+ var type = typeof object;
+ switch (type) {
+ case 'undefined':
+ case 'function':
+ case 'unknown': return;
+ case 'boolean': return object.toString();
+ }
+
+ if (object === null) return 'null';
+ if (object.toJSON) return object.toJSON();
+ if (Object.isElement(object)) return;
+
+ var results = [];
+ for (var property in object) {
+ var value = Object.toJSON(object[property]);
+ if (!Object.isUndefined(value))
+ results.push(property.toJSON() + ': ' + value);
+ }
+
+ return '{' + results.join(', ') + '}';
+ },
+
+ toQueryString: function(object) {
+ return $H(object).toQueryString();
+ },
+
+ toHTML: function(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ },
+
+ keys: function(object) {
+ var keys = [];
+ for (var property in object)
+ keys.push(property);
+ return keys;
+ },
+
+ values: function(object) {
+ var values = [];
+ for (var property in object)
+ values.push(object[property]);
+ return values;
+ },
+
+ clone: function(object) {
+ return Object.extend({ }, object);
+ },
+
+ isElement: function(object) {
+ return !!(object && object.nodeType == 1);
+ },
+
+ isArray: function(object) {
+ return object != null && typeof object == "object" &&
+ 'splice' in object && 'join' in object;
+ },
+
+ isHash: function(object) {
+ return object instanceof Hash;
+ },
+
+ isFunction: function(object) {
+ return typeof object == "function";
+ },
+
+ isString: function(object) {
+ return typeof object == "string";
+ },
+
+ isNumber: function(object) {
+ return typeof object == "number";
+ },
+
+ isUndefined: function(object) {
+ return typeof object == "undefined";
+ }
+});
+
+Object.extend(Function.prototype, {
+ argumentNames: function() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
+ .replace(/\s+/g, '').split(',');
+ return names.length == 1 && !names[0] ? [] : names;
+ },
+
+ bind: function() {
+ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function() {
+ return __method.apply(object, args.concat($A(arguments)));
+ }
+ },
+
+ bindAsEventListener: function() {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function(event) {
+ return __method.apply(object, [event || window.event].concat(args));
+ }
+ },
+
+ curry: function() {
+ if (!arguments.length) return this;
+ var __method = this, args = $A(arguments);
+ return function() {
+ return __method.apply(this, args.concat($A(arguments)));
+ }
+ },
+
+ delay: function() {
+ var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ },
+
+ defer: function() {
+ var args = [0.01].concat($A(arguments));
+ return this.delay.apply(this, args);
+ },
+
+ wrap: function(wrapper) {
+ var __method = this;
+ return function() {
+ return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+ }
+ },
+
+ methodize: function() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ return __method.apply(null, [this].concat($A(arguments)));
+ };
+ }
+});
+
+Date.prototype.toJSON = function() {
+ return '"' + this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ } finally {
+ this.currentlyExecuting = false;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, {
+ gsub: function(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = arguments.callee.prepareReplacement(replacement);
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ },
+
+ sub: function(pattern, replacement, count) {
+ replacement = this.gsub.prepareReplacement(replacement);
+ count = Object.isUndefined(count) ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ },
+
+ scan: function(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ },
+
+ truncate: function(length, truncation) {
+ length = length || 30;
+ truncation = Object.isUndefined(truncation) ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ },
+
+ strip: function() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ },
+
+ stripTags: function() {
+ return this.replace(/<\/?[^>]+>/gi, '');
+ },
+
+ stripScripts: function() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ },
+
+ extractScripts: function() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ },
+
+ evalScripts: function() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ },
+
+ escapeHTML: function() {
+ var self = arguments.callee;
+ self.text.data = this;
+ return self.div.innerHTML;
+ },
+
+ unescapeHTML: function() {
+ var div = new Element('div');
+ div.innerHTML = this.stripTags();
+ return div.childNodes[0] ? (div.childNodes.length > 1 ?
+ $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
+ div.childNodes[0].nodeValue) : '';
+ },
+
+ toQueryParams: function(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift());
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ },
+
+ toArray: function() {
+ return this.split('');
+ },
+
+ succ: function() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ },
+
+ times: function(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ },
+
+ camelize: function() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ },
+
+ capitalize: function() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ },
+
+ underscore: function() {
+ return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+ },
+
+ dasherize: function() {
+ return this.gsub(/_/,'-');
+ },
+
+ inspect: function(useDoubleQuotes) {
+ var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+ var character = String.specialChar[match[0]];
+ return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ },
+
+ toJSON: function() {
+ return this.inspect(true);
+ },
+
+ unfilterJSON: function(filter) {
+ return this.sub(filter || Prototype.JSONFilter, '#{1}');
+ },
+
+ isJSON: function() {
+ var str = this;
+ if (str.blank()) return false;
+ str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+ return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+ },
+
+ evalJSON: function(sanitize) {
+ var json = this.unfilterJSON();
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ },
+
+ include: function(pattern) {
+ return this.indexOf(pattern) > -1;
+ },
+
+ startsWith: function(pattern) {
+ return this.indexOf(pattern) === 0;
+ },
+
+ endsWith: function(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.lastIndexOf(pattern) === d;
+ },
+
+ empty: function() {
+ return this == '';
+ },
+
+ blank: function() {
+ return /^\s*$/.test(this);
+ },
+
+ interpolate: function(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+ escapeHTML: function() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ },
+ unescapeHTML: function() {
+ return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+ }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+ div: document.createElement('div'),
+ text: document.createTextNode('')
+});
+
+String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return '';
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3];
+ var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+ match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ });
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+ each: function(iterator, context) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ iterator.call(context, value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ },
+
+ eachSlice: function(number, iterator, context) {
+ var index = -number, slices = [], array = this.toArray();
+ if (number < 1) return array;
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ },
+
+ all: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator.call(context, value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ },
+
+ any: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator.call(context, value, index))
+ throw $break;
+ });
+ return result;
+ },
+
+ collect: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ },
+
+ detect: function(iterator, context) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ },
+
+ findAll: function(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ grep: function(filter, iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(filter);
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ },
+
+ include: function(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ },
+
+ inGroupsOf: function(number, fillWith) {
+ fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ },
+
+ inject: function(memo, iterator, context) {
+ this.each(function(value, index) {
+ memo = iterator.call(context, memo, value, index);
+ });
+ return memo;
+ },
+
+ invoke: function(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ },
+
+ max: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value >= result)
+ result = value;
+ });
+ return result;
+ },
+
+ min: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value < result)
+ result = value;
+ });
+ return result;
+ },
+
+ partition: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator.call(context, value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ },
+
+ pluck: function(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ },
+
+ reject: function(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ sortBy: function(iterator, context) {
+ return this.map(function(value, index) {
+ return {
+ value: value,
+ criteria: iterator.call(context, value, index)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ },
+
+ toArray: function() {
+ return this.map();
+ },
+
+ zip: function() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ },
+
+ size: function() {
+ return this.toArray().length;
+ },
+
+ inspect: function() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+};
+
+Object.extend(Enumerable, {
+ map: Enumerable.collect,
+ find: Enumerable.detect,
+ select: Enumerable.findAll,
+ filter: Enumerable.findAll,
+ member: Enumerable.include,
+ entries: Enumerable.toArray,
+ every: Enumerable.all,
+ some: Enumerable.any
+});
+function $A(iterable) {
+ if (!iterable) return [];
+ if (iterable.toArray) return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+if (Prototype.Browser.WebKit) {
+ $A = function(iterable) {
+ if (!iterable) return [];
+ // In Safari, only use the `toArray` method if it's not a NodeList.
+ // A NodeList is a function, has an function `item` property, and a numeric
+ // `length` property. Adapted from Google Doctype.
+ if (!(typeof iterable === 'function' && typeof iterable.length ===
+ 'number' && typeof iterable.item === 'function') && iterable.toArray)
+ return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+ };
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+ _each: function(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ },
+
+ clear: function() {
+ this.length = 0;
+ return this;
+ },
+
+ first: function() {
+ return this[0];
+ },
+
+ last: function() {
+ return this[this.length - 1];
+ },
+
+ compact: function() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ },
+
+ flatten: function() {
+ return this.inject([], function(array, value) {
+ return array.concat(Object.isArray(value) ?
+ value.flatten() : [value]);
+ });
+ },
+
+ without: function() {
+ var values = $A(arguments);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ },
+
+ reverse: function(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ },
+
+ reduce: function() {
+ return this.length > 1 ? this : this[0];
+ },
+
+ uniq: function(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ },
+
+ intersect: function(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value });
+ });
+ },
+
+ clone: function() {
+ return [].concat(this);
+ },
+
+ size: function() {
+ return this.length;
+ },
+
+ inspect: function() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ },
+
+ toJSON: function() {
+ var results = [];
+ this.each(function(object) {
+ var value = Object.toJSON(object);
+ if (!Object.isUndefined(value)) results.push(value);
+ });
+ return '[' + results.join(', ') + ']';
+ }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+ Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+ Array.prototype.concat = function() {
+ var array = [];
+ for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ if (Object.isArray(arguments[i])) {
+ for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
+ array.push(arguments[i][j]);
+ } else {
+ array.push(arguments[i]);
+ }
+ }
+ return array;
+ };
+}
+Object.extend(Number.prototype, {
+ toColorPart: function() {
+ return this.toPaddedString(2, 16);
+ },
+
+ succ: function() {
+ return this + 1;
+ },
+
+ times: function(iterator, context) {
+ $R(0, this, true).each(iterator, context);
+ return this;
+ },
+
+ toPaddedString: function(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ },
+
+ toJSON: function() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
+});
+
+$w('abs round ceil floor').each(function(method){
+ Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ return {
+ initialize: function(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ },
+
+ _each: function(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ },
+
+ set: function(key, value) {
+ return this._object[key] = value;
+ },
+
+ get: function(key) {
+ // simulating poorly supported hasOwnProperty
+ if (this._object[key] !== Object.prototype[key])
+ return this._object[key];
+ },
+
+ unset: function(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ },
+
+ toObject: function() {
+ return Object.clone(this._object);
+ },
+
+ keys: function() {
+ return this.pluck('key');
+ },
+
+ values: function() {
+ return this.pluck('value');
+ },
+
+ index: function(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ },
+
+ merge: function(object) {
+ return this.clone().update(object);
+ },
+
+ update: function(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ },
+
+ toQueryString: function() {
+ return this.inject([], function(results, pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return results.concat(values.map(toQueryPair.curry(key)));
+ } else results.push(toQueryPair(key, values));
+ return results;
+ }).join('&');
+ },
+
+ inspect: function() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ },
+
+ toJSON: function() {
+ return Object.toJSON(this.toObject());
+ },
+
+ clone: function() {
+ return new Hash(this);
+ }
+ }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+ initialize: function(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ },
+
+ _each: function(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ },
+
+ include: function(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+});
+
+var $R = function(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++ },
+ onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+
+ if (Object.isString(this.options.parameters))
+ this.options.parameters = this.options.parameters.toQueryParams();
+ else if (Object.isHash(this.options.parameters))
+ this.options.parameters = this.options.parameters.toObject();
+ }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.clone(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ // simulate other verbs over post
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ this.parameters = params;
+
+ if (params = Object.toQueryString(params)) {
+ // when GET, append parameters to URL
+ if (this.method == 'get')
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ params += '&_=';
+ }
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ // user-defined headers
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300);
+ },
+
+ getStatus: function() {
+ try {
+ return this.transport.status || 0;
+ } catch (e) { return 0 }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && this.isSameOrigin() && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ // avoid memory leak in MSIE: clean up
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ isSameOrigin: function() {
+ var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
+ protocol: location.protocol,
+ domain: document.domain,
+ port: location.port ? ':' + location.port : ''
+ }));
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name) || null;
+ } catch (e) { return null }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if(readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = Object.isUndefined(xml) ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return '' }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')) ||
+ this.responseText.blank())
+ return null;
+ try {
+ return this.responseText.evalJSON(options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = Object.clone(options);
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, json) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, json);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = $(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+function $(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push($(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, $(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ // DOM level 2 ECMAScript Language Binding
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+(function() {
+ var element = this.Element;
+ this.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+ if (Prototype.Browser.IE && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+ return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+ };
+ Object.extend(this.Element, element || { });
+ if (element) this.Element.prototype = element.prototype;
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+ visible: function(element) {
+ return $(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = $(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+ hide: function(element) {
+ element = $(element);
+ element.style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ element = $(element);
+ element.style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+ content = Object.toHTML(content);
+ element.innerHTML = content.stripScripts();
+ content.evalScripts.bind(content).defer();
+ return element;
+ },
+
+ replace: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, insert, tagName, childNodes;
+
+ for (var position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ insert = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+ if (position == 'top' || position == 'after') childNodes.reverse();
+ childNodes.each(insert.curry(element));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = $(element);
+ if (Object.isElement(wrapper))
+ $(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = $(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = $(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return $(element).recursivelyCollect('parentNode');
+ },
+
+ descendants: function(element) {
+ return $(element).select("*");
+ },
+
+ firstDescendant: function(element) {
+ element = $(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return $(element);
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = $(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat($(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return $(element).recursivelyCollect('previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return $(element).recursivelyCollect('nextSibling');
+ },
+
+ siblings: function(element) {
+ element = $(element);
+ return element.previousSiblings().reverse().concat(element.nextSiblings());
+ },
+
+ match: function(element, selector) {
+ if (Object.isString(selector))
+ selector = new Selector(selector);
+ return selector.match($(element));
+ },
+
+ up: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(element.parentNode);
+ var ancestors = element.ancestors();
+ return Object.isNumber(expression) ? ancestors[expression] :
+ Selector.findElement(ancestors, expression, index);
+ },
+
+ down: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ return Object.isNumber(expression) ? element.descendants()[expression] :
+ Element.select(element, expression)[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+ var previousSiblings = element.previousSiblings();
+ return Object.isNumber(expression) ? previousSiblings[expression] :
+ Selector.findElement(previousSiblings, expression, index);
+ },
+
+ next: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+ var nextSiblings = element.nextSiblings();
+ return Object.isNumber(expression) ? nextSiblings[expression] :
+ Selector.findElement(nextSiblings, expression, index);
+ },
+
+ select: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element, args);
+ },
+
+ adjacent: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element.parentNode, args).without(element);
+ },
+
+ identify: function(element) {
+ element = $(element);
+ var id = element.readAttribute('id'), self = arguments.callee;
+ if (id) return id;
+ do { id = 'anonymous_element_' + self.counter++ } while ($(id));
+ element.writeAttribute('id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = $(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = $(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = Object.isUndefined(value) ? true : value;
+
+ for (var attr in attributes) {
+ name = t.names[attr] || attr;
+ value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return $(element).getDimensions().height;
+ },
+
+ getWidth: function(element) {
+ return $(element).getDimensions().width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ if (!element.hasClassName(className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ return element[element.hasClassName(className) ?
+ 'removeClassName' : 'addClassName'](className);
+ },
+
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
+ element = $(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return $(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = $(element), ancestor = $(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (ancestor.contains)
+ return ancestor.contains(element) && ancestor !== element;
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = $(element);
+ var pos = element.cumulativeOffset();
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = $(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value || value == 'auto') {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return $(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = $(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = $(element);
+ var display = element.getStyle('display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ // All *Width and *Height properties give 0 on elements with display none,
+ // so enable the element temporarily
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = $(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ // Opera returns the offset relative to the positioning context, when an
+ // element is position relative but top and left have not been defined
+ if (Prototype.Browser.Opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = $(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = $(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = $(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (element.tagName.toUpperCase() == 'BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p !== 'static') break;
+ }
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ absolutize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'absolute') return element;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ var offsets = element.positionedOffset();
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ return element;
+ },
+
+ relativize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'relative') return element;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ return element;
+ },
+
+ cumulativeScrollOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ getOffsetParent: function(element) {
+ if (element.offsetParent) return $(element.offsetParent);
+ if (element == document.body) return $(element);
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return $(element);
+
+ return $(document.body);
+ },
+
+ viewportOffset: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ // Safari fix
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ // find page position of source
+ source = $(source);
+ var p = source.viewportOffset();
+
+ // find coordinate system to use
+ element = $(element);
+ var delta = [0, 0];
+ var parent = null;
+ // delta [0,0] will do fine with position: fixed elements,
+ // position:absolute needs offsetParent deltas
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = element.getOffsetParent();
+ delta = parent.viewportOffset();
+ }
+
+ // correct by body offsets (fixes Safari)
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ // set position
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+if (Prototype.Browser.Opera) {
+ Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+ function(proceed, element, style) {
+ switch (style) {
+ case 'left': case 'top': case 'right': case 'bottom':
+ if (proceed(element, 'position') === 'static') return null;
+ case 'height': case 'width':
+ // returns '0px' for hidden elements; we want it to return null
+ if (!Element.visible(element)) return null;
+
+ // returns the border-box dimensions rather than the content-box
+ // dimensions, so we subtract padding and borders from the value
+ var dim = parseInt(proceed(element, style), 10);
+
+ if (dim !== element['offset' + style.capitalize()])
+ return dim + 'px';
+
+ var properties;
+ if (style === 'height') {
+ properties = ['border-top-width', 'padding-top',
+ 'padding-bottom', 'border-bottom-width'];
+ }
+ else {
+ properties = ['border-left-width', 'padding-left',
+ 'padding-right', 'border-right-width'];
+ }
+ return properties.inject(dim, function(memo, property) {
+ var val = proceed(element, property);
+ return val === null ? memo : memo - parseInt(val, 10);
+ }) + 'px';
+ default: return proceed(element, style);
+ }
+ }
+ );
+
+ Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+ function(proceed, element, attribute) {
+ if (attribute === 'title') return element.title;
+ return proceed(element, attribute);
+ }
+ );
+}
+
+else if (Prototype.Browser.IE) {
+ // IE doesn't report offsets correctly for static elements, so we change them
+ // to "relative" to get the values, then change them back.
+ Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
+ function(proceed, element) {
+ element = $(element);
+ // IE throws an error if element is not in document
+ try { element.offsetParent }
+ catch(e) { return $(document.body) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+
+ $w('positionedOffset viewportOffset').each(function(method) {
+ Element.Methods[method] = Element.Methods[method].wrap(
+ function(proceed, element) {
+ element = $(element);
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ // Trigger hasLayout on the offset parent so that IE6 reports
+ // accurate offsetTop and offsetLeft values for position: fixed.
+ var offsetParent = element.getOffsetParent();
+ if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+ offsetParent.setStyle({ zoom: 1 });
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+ });
+
+ Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+ function(proceed, element) {
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ return proceed(element);
+ }
+ );
+
+ Element.Methods.getStyle = function(element, style) {
+ element = $(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = $(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = {
+ read: {
+ names: {
+ 'class': 'className',
+ 'for': 'htmlFor'
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ return attribute ? attribute.toString().slice(23, -2) : null;
+ },
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ };
+
+ Element._attributeTranslations.write = {
+ names: Object.extend({
+ cellpadding: 'cellPadding',
+ cellspacing: 'cellSpacing'
+ }, Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr,
+ src: v._getAttr,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+
+ // Safari returns margins on body which is incorrect if the child is absolutely
+ // positioned. For performance reasons, redefine Element#cumulativeOffset for
+ // KHTML/WebKit only.
+ Element.Methods.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return Element._returnOffset(valueL, valueT);
+ };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+ // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+ Element.Methods.update = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+
+ content = Object.toHTML(content);
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName in Element._insertionTranslations.tags) {
+ $A(element.childNodes).each(function(node) { element.removeChild(node) });
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) { element.appendChild(node) });
+ }
+ else element.innerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+if ('outerHTML' in document.createElement('div')) {
+ Element.Methods.replace = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next();
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+ else
+ fragments.each(function(node) { parent.appendChild(node) });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+ var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+ if (t) {
+ div.innerHTML = t[0] + html + t[1];
+ t[2].times(function() { div = div.firstChild });
+ } else div.innerHTML = html;
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ top: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ bottom: function(element, node) {
+ element.appendChild(node);
+ },
+ after: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ Object.extend(this.tags, {
+ THEAD: this.tags.TBODY,
+ TFOOT: this.tags.TBODY,
+ TH: this.tags.TD
+ });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = $(element).getAttributeNode(attribute);
+ return !!(node && node.specified);
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &&
+ document.createElement('div')['__proto__']) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = document.createElement('div')['__proto__'];
+ Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+ if (Prototype.BrowserFeatures.SpecificElementExtensions)
+ return Prototype.K;
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || element._extendedByPrototype ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName.toUpperCase(), property, value;
+
+ // extend methods for specific tags
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ for (property in methods) {
+ value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ // extend methods for all tags (Safari doesn't need this)
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+ if (element.hasAttribute) return element.hasAttribute(attribute);
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ window[klass] = { };
+ window[klass].prototype = document.createElement(tagName)['__proto__'];
+ return window[klass];
+ }
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, HTMLElement.prototype);
+ copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+document.viewport = {
+ getDimensions: function() {
+ var dimensions = { }, B = Prototype.Browser;
+ $w('width height').each(function(d) {
+ var D = d.capitalize();
+ if (B.WebKit && !document.evaluate) {
+ // Safari <3.0 needs self.innerWidth/Height
+ dimensions[d] = self['inner' + D];
+ } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) {
+ // Opera <9.5 needs document.body.clientWidth/Height
+ dimensions[d] = document.body['client' + D]
+ } else {
+ dimensions[d] = document.documentElement['client' + D];
+ }
+ });
+ return dimensions;
+ },
+
+ getWidth: function() {
+ return this.getDimensions().width;
+ },
+
+ getHeight: function() {
+ return this.getDimensions().height;
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ }
+};
+/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+
+ if (this.shouldUseSelectorsAPI()) {
+ this.mode = 'selectorsAPI';
+ } else if (this.shouldUseXPath()) {
+ this.mode = 'xpath';
+ this.compileXPathMatcher();
+ } else {
+ this.mode = "normal";
+ this.compileMatcher();
+ }
+
+ },
+
+ shouldUseXPath: function() {
+ if (!Prototype.BrowserFeatures.XPath) return false;
+
+ var e = this.expression;
+
+ // Safari 3 chokes on :*-of-type and :empty
+ if (Prototype.Browser.WebKit &&
+ (e.include("-of-type") || e.include(":empty")))
+ return false;
+
+ // XPath can't do namespaced attributes, nor can it read
+ // the "checked" property from DOM nodes
+ if ((/(\[[\w-]*?:|:checked)/).test(e))
+ return false;
+
+ return true;
+ },
+
+ shouldUseSelectorsAPI: function() {
+ if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+ if (!Selector._div) Selector._div = new Element('div');
+
+ // Make sure the browser treats the selector as valid. Test on an
+ // isolated element to minimize cost of this check.
+ try {
+ Selector._div.querySelector(this.expression);
+ } catch(e) {
+ return false;
+ }
+
+ return true;
+ },
+
+ compileMatcher: function() {
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+ c = Selector.criteria, le, p, m;
+
+ if (Selector._cache[e]) {
+ this.matcher = Selector._cache[e];
+ return;
+ }
+
+ this.matcher = ["this.matcher = function(root) {",
+ "var r = root, h = Selector.handlers, c = false, n;"];
+
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+ new Template(c[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.matcher.push("return h.unique(n);\n}");
+ eval(this.matcher.join('\n'));
+ Selector._cache[this.expression] = this.matcher;
+ },
+
+ compileXPathMatcher: function() {
+ var e = this.expression, ps = Selector.patterns,
+ x = Selector.xpath, le, m;
+
+ if (Selector._cache[e]) {
+ this.xpath = Selector._cache[e]; return;
+ }
+
+ this.matcher = ['.//*'];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ if (m = e.match(ps[i])) {
+ this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+ new Template(x[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.xpath = this.matcher.join('');
+ Selector._cache[this.expression] = this.xpath;
+ },
+
+ findElements: function(root) {
+ root = root || document;
+ var e = this.expression, results;
+
+ switch (this.mode) {
+ case 'selectorsAPI':
+ // querySelectorAll queries document-wide, then filters to descendants
+ // of the context element. That's not what we want.
+ // Add an explicit context to the selector if necessary.
+ if (root !== document) {
+ var oldId = root.id, id = $(root).identify();
+ e = "#" + id + " " + e;
+ }
+
+ results = $A(root.querySelectorAll(e)).map(Element.extend);
+ root.id = oldId;
+
+ return results;
+ case 'xpath':
+ return document._getElementsByXPath(this.xpath, root);
+ default:
+ return this.matcher(root);
+ }
+ },
+
+ match: function(element) {
+ this.tokens = [];
+
+ var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+ var le, p, m;
+
+ while (e && le !== e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ // use the Selector.assertions methods unless the selector
+ // is too complex.
+ if (as[i]) {
+ this.tokens.push([i, Object.clone(m)]);
+ e = e.replace(m[0], '');
+ } else {
+ // reluctantly do a document-wide search
+ // and look for a match in the array
+ return this.findElements(document).include(element);
+ }
+ }
+ }
+ }
+
+ var match = true, name, matches;
+ for (var i = 0, token; token = this.tokens[i]; i++) {
+ name = token[0], matches = token[1];
+ if (!Selector.assertions[name](element, matches)) {
+ match = false; break;
+ }
+ }
+
+ return match;
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector:" + this.expression.inspect() + ">";
+ }
+});
+
+Object.extend(Selector, {
+ _cache: { },
+
+ xpath: {
+ descendant: "//*",
+ child: "/*",
+ adjacent: "/following-sibling::*[1]",
+ laterSibling: '/following-sibling::*',
+ tagName: function(m) {
+ if (m[1] == '*') return '';
+ return "[local-name()='" + m[1].toLowerCase() +
+ "' or local-name()='" + m[1].toUpperCase() + "']";
+ },
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+ id: "[@id='#{1}']",
+ attrPresence: function(m) {
+ m[1] = m[1].toLowerCase();
+ return new Template("[@#{1}]").evaluate(m);
+ },
+ attr: function(m) {
+ m[1] = m[1].toLowerCase();
+ m[3] = m[5] || m[6];
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+ },
+ pseudo: function(m) {
+ var h = Selector.xpath.pseudos[m[1]];
+ if (!h) return '';
+ if (Object.isFunction(h)) return h(m);
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+ },
+ operators: {
+ '=': "[@#{1}='#{3}']",
+ '!=': "[@#{1}!='#{3}']",
+ '^=': "[starts-with(@#{1}, '#{3}')]",
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+ '*=': "[contains(@#{1}, '#{3}')]",
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+ },
+ pseudos: {
+ 'first-child': '[not(preceding-sibling::*)]',
+ 'last-child': '[not(following-sibling::*)]',
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
+ 'empty': "[count(*) = 0 and (count(text()) = 0)]",
+ 'checked': "[@checked]",
+ 'disabled': "[(@disabled) and (@type!='hidden')]",
+ 'enabled': "[not(@disabled) and (@type!='hidden')]",
+ 'not': function(m) {
+ var e = m[6], p = Selector.patterns,
+ x = Selector.xpath, le, v;
+
+ var exclusion = [];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in p) {
+ if (m = e.match(p[i])) {
+ v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+ return "[not(" + exclusion.join(" and ") + ")]";
+ },
+ 'nth-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+ },
+ 'nth-last-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+ },
+ 'nth-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("position() ", m);
+ },
+ 'nth-last-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+ },
+ 'first-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+ },
+ 'last-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+ },
+ 'only-of-type': function(m) {
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+ },
+ nth: function(fragment, m) {
+ var mm, formula = m[6], predicate;
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ if (mm = formula.match(/^(\d+)$/)) // digit only
+ return '[' + fragment + "= " + mm[1] + ']';
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (mm[1] == "-") mm[1] = -1;
+ var a = mm[1] ? Number(mm[1]) : 1;
+ var b = mm[2] ? Number(mm[2]) : 0;
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
+ return new Template(predicate).evaluate({
+ fragment: fragment, a: a, b: b });
+ }
+ }
+ }
+ },
+
+ criteria: {
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
+ attr: function(m) {
+ m[3] = (m[5] || m[6]);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
+ },
+ pseudo: function(m) {
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+ },
+ descendant: 'c = "descendant";',
+ child: 'c = "child";',
+ adjacent: 'c = "adjacent";',
+ laterSibling: 'c = "laterSibling";'
+ },
+
+ patterns: {
+ // combinators must be listed first
+ // (and descendant needs to be last combinator)
+ laterSibling: /^\s*~\s*/,
+ child: /^\s*>\s*/,
+ adjacent: /^\s*\+\s*/,
+ descendant: /^\s/,
+
+ // selectors follow
+ tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
+ id: /^#([\w\-\*]+)(\b|$)/,
+ className: /^\.([\w\-\*]+)(\b|$)/,
+ pseudo:
+/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
+ attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
+ attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
+ },
+
+ // for Selector.match and Element#match
+ assertions: {
+ tagName: function(element, matches) {
+ return matches[1].toUpperCase() == element.tagName.toUpperCase();
+ },
+
+ className: function(element, matches) {
+ return Element.hasClassName(element, matches[1]);
+ },
+
+ id: function(element, matches) {
+ return element.id === matches[1];
+ },
+
+ attrPresence: function(element, matches) {
+ return Element.hasAttribute(element, matches[1]);
+ },
+
+ attr: function(element, matches) {
+ var nodeValue = Element.readAttribute(element, matches[1]);
+ return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+ }
+ },
+
+ handlers: {
+ // UTILITY FUNCTIONS
+ // joins two collections
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ a.push(node);
+ return a;
+ },
+
+ // marks an array of nodes for counting
+ mark: function(nodes) {
+ var _true = Prototype.emptyFunction;
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = _true;
+ return nodes;
+ },
+
+ unmark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = undefined;
+ return nodes;
+ },
+
+ // mark each child node with its position (for nth calls)
+ // "ofType" flag indicates whether we're indexing for nth-of-type
+ // rather than nth-child
+ index: function(parentNode, reverse, ofType) {
+ parentNode._countedByPrototype = Prototype.emptyFunction;
+ if (reverse) {
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+ var node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ } else {
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ },
+
+ // filters out duplicates and extends all nodes
+ unique: function(nodes) {
+ if (nodes.length == 0) return nodes;
+ var results = [], n;
+ for (var i = 0, l = nodes.length; i < l; i++)
+ if (!(n = nodes[i])._countedByPrototype) {
+ n._countedByPrototype = Prototype.emptyFunction;
+ results.push(Element.extend(n));
+ }
+ return Selector.handlers.unmark(results);
+ },
+
+ // COMBINATOR FUNCTIONS
+ descendant: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName('*'));
+ return results;
+ },
+
+ child: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ for (var j = 0, child; child = node.childNodes[j]; j++)
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+ }
+ return results;
+ },
+
+ adjacent: function(nodes) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ var next = this.nextElementSibling(node);
+ if (next) results.push(next);
+ }
+ return results;
+ },
+
+ laterSibling: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, Element.nextSiblings(node));
+ return results;
+ },
+
+ nextElementSibling: function(node) {
+ while (node = node.nextSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ previousElementSibling: function(node) {
+ while (node = node.previousSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ // TOKEN FUNCTIONS
+ tagName: function(nodes, root, tagName, combinator) {
+ var uTagName = tagName.toUpperCase();
+ var results = [], h = Selector.handlers;
+ if (nodes) {
+ if (combinator) {
+ // fastlane for ordinary descendant combinators
+ if (combinator == "descendant") {
+ for (var i = 0, node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName(tagName));
+ return results;
+ } else nodes = this[combinator](nodes);
+ if (tagName == "*") return nodes;
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName.toUpperCase() === uTagName) results.push(node);
+ return results;
+ } else return root.getElementsByTagName(tagName);
+ },
+
+ id: function(nodes, root, id, combinator) {
+ var targetNode = $(id), h = Selector.handlers;
+ if (!targetNode) return [];
+ if (!nodes && root == document) return [targetNode];
+ if (nodes) {
+ if (combinator) {
+ if (combinator == 'child') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (targetNode.parentNode == node) return [targetNode];
+ } else if (combinator == 'descendant') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
+ } else if (combinator == 'adjacent') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
+ return [targetNode];
+ } else nodes = h[combinator](nodes);
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node == targetNode) return [targetNode];
+ return [];
+ }
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+ },
+
+ className: function(nodes, root, className, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ return Selector.handlers.byClassName(nodes, root, className);
+ },
+
+ byClassName: function(nodes, root, className) {
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
+ var needle = ' ' + className + ' ';
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+ nodeClassName = node.className;
+ if (nodeClassName.length == 0) continue;
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+ results.push(node);
+ }
+ return results;
+ },
+
+ attrPresence: function(nodes, root, attr, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.hasAttribute(node, attr)) results.push(node);
+ return results;
+ },
+
+ attr: function(nodes, root, attr, value, operator, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var handler = Selector.operators[operator], results = [];
+ for (var i = 0, node; node = nodes[i]; i++) {
+ var nodeValue = Element.readAttribute(node, attr);
+ if (nodeValue === null) continue;
+ if (handler(nodeValue, value)) results.push(node);
+ }
+ return results;
+ },
+
+ pseudo: function(nodes, name, value, root, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ return Selector.pseudos[name](nodes, value, root);
+ }
+ },
+
+ pseudos: {
+ 'first-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.previousElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'last-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.nextElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'only-child': function(nodes, value, root) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+ results.push(node);
+ return results;
+ },
+ 'nth-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root);
+ },
+ 'nth-last-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true);
+ },
+ 'nth-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
+ },
+ 'nth-last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
+ },
+ 'first-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
+ },
+ 'last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
+ },
+ 'only-of-type': function(nodes, formula, root) {
+ var p = Selector.pseudos;
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+ },
+
+ // handles the an+b logic
+ getIndices: function(a, b, total) {
+ if (a == 0) return b > 0 ? [b] : [];
+ return $R(1, total).inject([], function(memo, i) {
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+ return memo;
+ });
+ },
+
+ // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+ nth: function(nodes, formula, root, reverse, ofType) {
+ if (nodes.length == 0) return [];
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ var h = Selector.handlers, results = [], indexed = [], m;
+ h.mark(nodes);
+ for (var i = 0, node; node = nodes[i]; i++) {
+ if (!node.parentNode._countedByPrototype) {
+ h.index(node.parentNode, reverse, ofType);
+ indexed.push(node.parentNode);
+ }
+ }
+ if (formula.match(/^\d+$/)) { // just a number
+ formula = Number(formula);
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.nodeIndex == formula) results.push(node);
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (m[1] == "-") m[1] = -1;
+ var a = m[1] ? Number(m[1]) : 1;
+ var b = m[2] ? Number(m[2]) : 0;
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+ for (var j = 0; j < l; j++)
+ if (node.nodeIndex == indices[j]) results.push(node);
+ }
+ }
+ h.unmark(nodes);
+ h.unmark(indexed);
+ return results;
+ },
+
+ 'empty': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ // IE treats comments as element nodes
+ if (node.tagName == '!' || node.firstChild) continue;
+ results.push(node);
+ }
+ return results;
+ },
+
+ 'not': function(nodes, selector, root) {
+ var h = Selector.handlers, selectorType, m;
+ var exclusions = new Selector(selector).findElements(root);
+ h.mark(exclusions);
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node._countedByPrototype) results.push(node);
+ h.unmark(exclusions);
+ return results;
+ },
+
+ 'enabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node.disabled && (!node.type || node.type !== 'hidden'))
+ results.push(node);
+ return results;
+ },
+
+ 'disabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.disabled) results.push(node);
+ return results;
+ },
+
+ 'checked': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.checked) results.push(node);
+ return results;
+ }
+ },
+
+ operators: {
+ '=': function(nv, v) { return nv == v; },
+ '!=': function(nv, v) { return nv != v; },
+ '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
+ '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
+ '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
+ '$=': function(nv, v) { return nv.endsWith(v); },
+ '*=': function(nv, v) { return nv.include(v); },
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+ '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+ '-').include('-' + (v || "").toUpperCase() + '-'); }
+ },
+
+ split: function(expression) {
+ var expressions = [];
+ expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
+ return expressions;
+ },
+
+ matchElements: function(elements, expression) {
+ var matches = $$(expression), h = Selector.handlers;
+ h.mark(matches);
+ for (var i = 0, results = [], element; element = elements[i]; i++)
+ if (element._countedByPrototype) results.push(element);
+ h.unmark(matches);
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ if (Object.isNumber(expression)) {
+ index = expression; expression = false;
+ }
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ expressions = Selector.split(expressions.join(','));
+ var results = [], h = Selector.handlers;
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
+ selector = new Selector(expressions[i].strip());
+ h.concat(results, selector.findElements(element));
+ }
+ return (l > 1) ? h.unique(results) : results;
+ }
+});
+
+if (Prototype.Browser.IE) {
+ Object.extend(Selector.handlers, {
+ // IE returns comment nodes on getElementsByTagName("*").
+ // Filter them out.
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ if (node.tagName !== "!") a.push(node);
+ return a;
+ },
+
+ // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
+ unmark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node.removeAttribute('_countedByPrototype');
+ return nodes;
+ }
+ });
+}
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+ reset: function(form) {
+ $(form).reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (Object.isUndefined(options.hash)) options.hash = true;
+ var key, value, submitted = false, submit = options.submit;
+
+ var data = elements.inject({ }, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = $(element).getValue();
+ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ if (key in result) {
+ // a key is already present; construct an array of values
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return options.hash ? data : Object.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ return $A($(form).getElementsByTagName('*')).inject([],
+ function(elements, child) {
+ if (Form.Element.Serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ }
+ );
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = $(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = $(form);
+ form.findFirstElement().activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = $(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+ focus: function(element) {
+ $(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ $(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+ serialize: function(element) {
+ element = $(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ $(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return $(element).value != '';
+ },
+
+ activate: function(element) {
+ element = $(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !['button', 'reset', 'submit'].include(element.type)))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = $(element);
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = $(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element, value);
+ default:
+ return Form.Element.Serializers.textarea(element, value);
+ }
+ },
+
+ inputSelector: function(element, value) {
+ if (Object.isUndefined(value)) return element.checked ? element.value : null;
+ else element.checked = !!value;
+ },
+
+ textarea: function(element, value) {
+ if (Object.isUndefined(value)) return element.value;
+ else element.value = value;
+ },
+
+ select: function(element, value) {
+ if (Object.isUndefined(value))
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ else {
+ var opt, currentValue, single = !Object.isArray(value);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ currentValue = this.optionValue(opt);
+ if (single) {
+ if (currentValue == value) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = value.include(currentValue);
+ }
+ }
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ // extend element because hasAttribute may not be native
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = $(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: { },
+
+ relatedTarget: function(event) {
+ var element;
+ switch(event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+});
+
+Event.Methods = (function() {
+ var isButton;
+
+ if (Prototype.Browser.IE) {
+ var buttonMap = { 0: 1, 1: 4, 2: 2 };
+ isButton = function(event, code) {
+ return event.button == buttonMap[code];
+ };
+
+ } else if (Prototype.Browser.WebKit) {
+ isButton = function(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 1 && event.metaKey;
+ default: return false;
+ }
+ };
+
+ } else {
+ isButton = function(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ };
+ }
+
+ return {
+ isLeftClick: function(event) { return isButton(event, 0) },
+ isMiddleClick: function(event) { return isButton(event, 1) },
+ isRightClick: function(event) { return isButton(event, 2) },
+
+ element: function(event) {
+ event = Event.extend(event);
+
+ var node = event.target,
+ type = event.type,
+ currentTarget = event.currentTarget;
+
+ if (currentTarget && currentTarget.tagName) {
+ // Firefox screws up the "click" event when moving between radio buttons
+ // via arrow keys. It also screws up the "load" and "error" events on images,
+ // reporting the document as the target instead of the original image.
+ if (type === 'load' || type === 'error' ||
+ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+ && currentTarget.type === 'radio'))
+ node = currentTarget;
+ }
+ if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
+ return Element.extend(node);
+ },
+
+ findElement: function(event, expression) {
+ var element = Event.element(event);
+ if (!expression) return element;
+ var elements = [element].concat(element.ancestors());
+ return Selector.findElement(elements, expression, 0);
+ },
+
+ pointer: function(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollLeft: 0, scrollTop: 0 };
+ return {
+ x: event.pageX || (event.clientX +
+ (docElement.scrollLeft || body.scrollLeft) -
+ (docElement.clientLeft || 0)),
+ y: event.pageY || (event.clientY +
+ (docElement.scrollTop || body.scrollTop) -
+ (docElement.clientTop || 0))
+ };
+ },
+
+ pointerX: function(event) { return Event.pointer(event).x },
+ pointerY: function(event) { return Event.pointer(event).y },
+
+ stop: function(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+ event.stopped = true;
+ }
+ };
+})();
+
+Event.extend = (function() {
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (Prototype.Browser.IE) {
+ Object.extend(methods, {
+ stopPropagation: function() { this.cancelBubble = true },
+ preventDefault: function() { this.returnValue = false },
+ inspect: function() { return "[object Event]" }
+ });
+
+ return function(event) {
+ if (!event) return false;
+ if (event._extendedByPrototype) return event;
+
+ event._extendedByPrototype = Prototype.emptyFunction;
+ var pointer = Event.pointer(event);
+ Object.extend(event, {
+ target: event.srcElement,
+ relatedTarget: Event.relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+ return Object.extend(event, methods);
+ };
+
+ } else {
+ Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
+ Object.extend(Event.prototype, methods);
+ return Prototype.K;
+ }
+})();
+
+Object.extend(Event, (function() {
+ var cache = Event.cache;
+
+ function getEventID(element) {
+ if (element._prototypeEventID) return element._prototypeEventID[0];
+ arguments.callee.id = arguments.callee.id || 1;
+ return element._prototypeEventID = [++arguments.callee.id];
+ }
+
+ function getDOMEventName(eventName) {
+ if (eventName && eventName.include(':')) return "dataavailable";
+ return eventName;
+ }
+
+ function getCacheForID(id) {
+ return cache[id] = cache[id] || { };
+ }
+
+ function getWrappersForEventName(id, eventName) {
+ var c = getCacheForID(id);
+ return c[eventName] = c[eventName] || [];
+ }
+
+ function createWrapper(element, eventName, handler) {
+ var id = getEventID(element);
+ var c = getWrappersForEventName(id, eventName);
+ if (c.pluck("handler").include(handler)) return false;
+
+ var wrapper = function(event) {
+ if (!Event || !Event.extend ||
+ (event.eventName && event.eventName != eventName))
+ return false;
+
+ Event.extend(event);
+ handler.call(element, event);
+ };
+
+ wrapper.handler = handler;
+ c.push(wrapper);
+ return wrapper;
+ }
+
+ function findWrapper(id, eventName, handler) {
+ var c = getWrappersForEventName(id, eventName);
+ return c.find(function(wrapper) { return wrapper.handler == handler });
+ }
+
+ function destroyWrapper(id, eventName, handler) {
+ var c = getCacheForID(id);
+ if (!c[eventName]) return false;
+ c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+ }
+
+ function destroyCache() {
+ for (var id in cache)
+ for (var eventName in cache[id])
+ cache[id][eventName] = null;
+ }
+
+
+ // Internet Explorer needs to remove event handlers on page unload
+ // in order to avoid memory leaks.
+ if (window.attachEvent) {
+ window.attachEvent("onunload", destroyCache);
+ }
+
+ // Safari has a dummy event handler on page unload so that it won't
+ // use its bfcache. Safari <= 3.1 has an issue with restoring the "document"
+ // object when page is returned to via the back button using its bfcache.
+ if (Prototype.Browser.WebKit) {
+ window.addEventListener('unload', Prototype.emptyFunction, false);
+ }
+
+ return {
+ observe: function(element, eventName, handler) {
+ element = $(element);
+ var name = getDOMEventName(eventName);
+
+ var wrapper = createWrapper(element, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.addEventListener) {
+ element.addEventListener(name, wrapper, false);
+ } else {
+ element.attachEvent("on" + name, wrapper);
+ }
+
+ return element;
+ },
+
+ stopObserving: function(element, eventName, handler) {
+ element = $(element);
+ var id = getEventID(element), name = getDOMEventName(eventName);
+
+ if (!handler && eventName) {
+ getWrappersForEventName(id, eventName).each(function(wrapper) {
+ element.stopObserving(eventName, wrapper.handler);
+ });
+ return element;
+
+ } else if (!eventName) {
+ Object.keys(getCacheForID(id)).each(function(eventName) {
+ element.stopObserving(eventName);
+ });
+ return element;
+ }
+
+ var wrapper = findWrapper(id, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, wrapper, false);
+ } else {
+ element.detachEvent("on" + name, wrapper);
+ }
+
+ destroyWrapper(id, eventName, handler);
+
+ return element;
+ },
+
+ fire: function(element, eventName, memo) {
+ element = $(element);
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ var event;
+ if (document.createEvent) {
+ event = document.createEvent("HTMLEvents");
+ event.initEvent("dataavailable", true, true);
+ } else {
+ event = document.createEventObject();
+ event.eventType = "ondataavailable";
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent) {
+ element.dispatchEvent(event);
+ } else {
+ element.fireEvent(event.eventType, event);
+ }
+
+ return Event.extend(event);
+ }
+ };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+ fire: Event.fire,
+ observe: Event.observe,
+ stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+ fire: Element.Methods.fire.methodize(),
+ observe: Element.Methods.observe.methodize(),
+ stopObserving: Element.Methods.stopObserving.methodize(),
+ loaded: false
+});
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards and John Resig. */
+
+ var timer;
+
+ function fireContentLoadedEvent() {
+ if (document.loaded) return;
+ if (timer) window.clearInterval(timer);
+ document.fire("dom:loaded");
+ document.loaded = true;
+ }
+
+ if (document.addEventListener) {
+ if (Prototype.Browser.WebKit) {
+ timer = window.setInterval(function() {
+ if (/loaded|complete/.test(document.readyState))
+ fireContentLoadedEvent();
+ }, 0);
+
+ Event.observe(window, "load", fireContentLoadedEvent);
+
+ } else {
+ document.addEventListener("DOMContentLoaded",
+ fireContentLoadedEvent, false);
+ }
+
+ } else {
+ document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
+ $("__onDOMContentLoaded").onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ this.onreadystatechange = null;
+ fireContentLoadedEvent();
+ }
+ };
+ }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ // Deprecation layer -- use newer Element methods now (1.5.2).
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = $(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return $(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods(); \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/builder.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/builder.js
new file mode 100644
index 0000000..dba8bec
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/builder.js
@@ -0,0 +1,136 @@
+// script.aculo.us builder.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Builder = {
+ NODEMAP: {
+ AREA: 'map',
+ CAPTION: 'table',
+ COL: 'table',
+ COLGROUP: 'table',
+ LEGEND: 'fieldset',
+ OPTGROUP: 'select',
+ OPTION: 'select',
+ PARAM: 'object',
+ TBODY: 'table',
+ TD: 'table',
+ TFOOT: 'table',
+ TH: 'table',
+ THEAD: 'table',
+ TR: 'table'
+ },
+ // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
+ // due to a Firefox bug
+ node: function(elementName) {
+ elementName = elementName.toUpperCase();
+
+ // try innerHTML approach
+ var parentTag = this.NODEMAP[elementName] || 'div';
+ var parentElement = document.createElement(parentTag);
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
+ } catch(e) {}
+ var element = parentElement.firstChild || null;
+
+ // see if browser added wrapping tags
+ if(element && (element.tagName.toUpperCase() != elementName))
+ element = element.getElementsByTagName(elementName)[0];
+
+ // fallback to createElement approach
+ if(!element) element = document.createElement(elementName);
+
+ // abort if nothing could be created
+ if(!element) return;
+
+ // attributes (or text)
+ if(arguments[1])
+ if(this._isStringOrNumber(arguments[1]) ||
+ (arguments[1] instanceof Array) ||
+ arguments[1].tagName) {
+ this._children(element, arguments[1]);
+ } else {
+ var attrs = this._attributes(arguments[1]);
+ if(attrs.length) {
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" +elementName + " " +
+ attrs + "></" + elementName + ">";
+ } catch(e) {}
+ element = parentElement.firstChild || null;
+ // workaround firefox 1.0.X bug
+ if(!element) {
+ element = document.createElement(elementName);
+ for(attr in arguments[1])
+ element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
+ }
+ if(element.tagName.toUpperCase() != elementName)
+ element = parentElement.getElementsByTagName(elementName)[0];
+ }
+ }
+
+ // text, or array of children
+ if(arguments[2])
+ this._children(element, arguments[2]);
+
+ return $(element);
+ },
+ _text: function(text) {
+ return document.createTextNode(text);
+ },
+
+ ATTR_MAP: {
+ 'className': 'class',
+ 'htmlFor': 'for'
+ },
+
+ _attributes: function(attributes) {
+ var attrs = [];
+ for(attribute in attributes)
+ attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
+ '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
+ return attrs.join(" ");
+ },
+ _children: function(element, children) {
+ if(children.tagName) {
+ element.appendChild(children);
+ return;
+ }
+ if(typeof children=='object') { // array can hold nodes and text
+ children.flatten().each( function(e) {
+ if(typeof e=='object')
+ element.appendChild(e);
+ else
+ if(Builder._isStringOrNumber(e))
+ element.appendChild(Builder._text(e));
+ });
+ } else
+ if(Builder._isStringOrNumber(children))
+ element.appendChild(Builder._text(children));
+ },
+ _isStringOrNumber: function(param) {
+ return(typeof param=='string' || typeof param=='number');
+ },
+ build: function(html) {
+ var element = this.node('div');
+ $(element).update(html.strip());
+ return element.down();
+ },
+ dump: function(scope) {
+ if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
+
+ var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
+ "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
+ "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
+
+ tags.each( function(tag){
+ scope[tag] = function() {
+ return Builder.node.apply(Builder, [tag].concat($A(arguments)));
+ };
+ });
+ }
+}; \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/controls.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/controls.js
new file mode 100644
index 0000000..c56ccb7
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/controls.js
@@ -0,0 +1,965 @@
+// script.aculo.us controls.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+// (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
+// Contributors:
+// Richard Livsey
+// Rahul Bhargava
+// Rob Wills
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// Autocompleter.Base handles all the autocompletion functionality
+// that's independent of the data source for autocompletion. This
+// includes drawing the autocompletion menu, observing keyboard
+// and mouse events, and similar.
+//
+// Specific autocompleters need to provide, at the very least,
+// a getUpdatedChoices function that will be invoked every time
+// the text inside the monitored textbox changes. This method
+// should get the text for which to provide autocompletion by
+// invoking this.getToken(), NOT by directly accessing
+// this.element.value. This is to allow incremental tokenized
+// autocompletion. Specific auto-completion logic (AJAX, etc)
+// belongs in getUpdatedChoices.
+//
+// Tokenized incremental autocompletion is enabled automatically
+// when an autocompleter is instantiated with the 'tokens' option
+// in the options parameter, e.g.:
+// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
+// will incrementally autocomplete with a comma as the token.
+// Additionally, ',' in the above example can be replaced with
+// a token array, e.g. { tokens: [',', '\n'] } which
+// enables autocompletion on multiple tokens. This is most
+// useful when one of the tokens is \n (a newline), as it
+// allows smart autocompletion after linebreaks.
+
+if(typeof Effect == 'undefined')
+ throw("controls.js requires including script.aculo.us' effects.js library");
+
+var Autocompleter = { };
+Autocompleter.Base = Class.create({
+ baseInitialize: function(element, update, options) {
+ element = $(element);
+ this.element = element;
+ this.update = $(update);
+ this.hasFocus = false;
+ this.changed = false;
+ this.active = false;
+ this.index = 0;
+ this.entryCount = 0;
+ this.oldElementValue = this.element.value;
+
+ if(this.setOptions)
+ this.setOptions(options);
+ else
+ this.options = options || { };
+
+ this.options.paramName = this.options.paramName || this.element.name;
+ this.options.tokens = this.options.tokens || [];
+ this.options.frequency = this.options.frequency || 0.4;
+ this.options.minChars = this.options.minChars || 1;
+ this.options.onShow = this.options.onShow ||
+ function(element, update){
+ if(!update.style.position || update.style.position=='absolute') {
+ update.style.position = 'absolute';
+ Position.clone(element, update, {
+ setHeight: false,
+ offsetTop: element.offsetHeight
+ });
+ }
+ Effect.Appear(update,{duration:0.15});
+ };
+ this.options.onHide = this.options.onHide ||
+ function(element, update){ new Effect.Fade(update,{duration:0.15}) };
+
+ if(typeof(this.options.tokens) == 'string')
+ this.options.tokens = new Array(this.options.tokens);
+ // Force carriage returns as token delimiters anyway
+ if (!this.options.tokens.include('\n'))
+ this.options.tokens.push('\n');
+
+ this.observer = null;
+
+ this.element.setAttribute('autocomplete','off');
+
+ Element.hide(this.update);
+
+ Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
+ Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
+ },
+
+ show: function() {
+ if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
+ if(!this.iefix &&
+ (Prototype.Browser.IE) &&
+ (Element.getStyle(this.update, 'position')=='absolute')) {
+ new Insertion.After(this.update,
+ '<iframe id="' + this.update.id + '_iefix" '+
+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
+ 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
+ this.iefix = $(this.update.id+'_iefix');
+ }
+ if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+ },
+
+ fixIEOverlapping: function() {
+ Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
+ this.iefix.style.zIndex = 1;
+ this.update.style.zIndex = 2;
+ Element.show(this.iefix);
+ },
+
+ hide: function() {
+ this.stopIndicator();
+ if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
+ if(this.iefix) Element.hide(this.iefix);
+ },
+
+ startIndicator: function() {
+ if(this.options.indicator) Element.show(this.options.indicator);
+ },
+
+ stopIndicator: function() {
+ if(this.options.indicator) Element.hide(this.options.indicator);
+ },
+
+ onKeyPress: function(event) {
+ if(this.active)
+ switch(event.keyCode) {
+ case Event.KEY_TAB:
+ case Event.KEY_RETURN:
+ this.selectEntry();
+ Event.stop(event);
+ case Event.KEY_ESC:
+ this.hide();
+ this.active = false;
+ Event.stop(event);
+ return;
+ case Event.KEY_LEFT:
+ case Event.KEY_RIGHT:
+ return;
+ case Event.KEY_UP:
+ this.markPrevious();
+ this.render();
+ Event.stop(event);
+ return;
+ case Event.KEY_DOWN:
+ this.markNext();
+ this.render();
+ Event.stop(event);
+ return;
+ }
+ else
+ if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
+ (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
+
+ this.changed = true;
+ this.hasFocus = true;
+
+ if(this.observer) clearTimeout(this.observer);
+ this.observer =
+ setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+ },
+
+ activate: function() {
+ this.changed = false;
+ this.hasFocus = true;
+ this.getUpdatedChoices();
+ },
+
+ onHover: function(event) {
+ var element = Event.findElement(event, 'LI');
+ if(this.index != element.autocompleteIndex)
+ {
+ this.index = element.autocompleteIndex;
+ this.render();
+ }
+ Event.stop(event);
+ },
+
+ onClick: function(event) {
+ var element = Event.findElement(event, 'LI');
+ this.index = element.autocompleteIndex;
+ this.selectEntry();
+ this.hide();
+ },
+
+ onBlur: function(event) {
+ // needed to make click events working
+ setTimeout(this.hide.bind(this), 250);
+ this.hasFocus = false;
+ this.active = false;
+ },
+
+ render: function() {
+ if(this.entryCount > 0) {
+ for (var i = 0; i < this.entryCount; i++)
+ this.index==i ?
+ Element.addClassName(this.getEntry(i),"selected") :
+ Element.removeClassName(this.getEntry(i),"selected");
+ if(this.hasFocus) {
+ this.show();
+ this.active = true;
+ }
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ },
+
+ markPrevious: function() {
+ if(this.index > 0) this.index--;
+ else this.index = this.entryCount-1;
+ this.getEntry(this.index).scrollIntoView(true);
+ },
+
+ markNext: function() {
+ if(this.index < this.entryCount-1) this.index++;
+ else this.index = 0;
+ this.getEntry(this.index).scrollIntoView(false);
+ },
+
+ getEntry: function(index) {
+ return this.update.firstChild.childNodes[index];
+ },
+
+ getCurrentEntry: function() {
+ return this.getEntry(this.index);
+ },
+
+ selectEntry: function() {
+ this.active = false;
+ this.updateElement(this.getCurrentEntry());
+ },
+
+ updateElement: function(selectedElement) {
+ if (this.options.updateElement) {
+ this.options.updateElement(selectedElement);
+ return;
+ }
+ var value = '';
+ if (this.options.select) {
+ var nodes = $(selectedElement).select('.' + this.options.select) || [];
+ if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
+ } else
+ value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+
+ var bounds = this.getTokenBounds();
+ if (bounds[0] != -1) {
+ var newValue = this.element.value.substr(0, bounds[0]);
+ var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
+ if (whitespace)
+ newValue += whitespace[0];
+ this.element.value = newValue + value + this.element.value.substr(bounds[1]);
+ } else {
+ this.element.value = value;
+ }
+ this.oldElementValue = this.element.value;
+ this.element.focus();
+
+ if (this.options.afterUpdateElement)
+ this.options.afterUpdateElement(this.element, selectedElement);
+ },
+
+ updateChoices: function(choices) {
+ if(!this.changed && this.hasFocus) {
+ this.update.innerHTML = choices;
+ Element.cleanWhitespace(this.update);
+ Element.cleanWhitespace(this.update.down());
+
+ if(this.update.firstChild && this.update.down().childNodes) {
+ this.entryCount =
+ this.update.down().childNodes.length;
+ for (var i = 0; i < this.entryCount; i++) {
+ var entry = this.getEntry(i);
+ entry.autocompleteIndex = i;
+ this.addObservers(entry);
+ }
+ } else {
+ this.entryCount = 0;
+ }
+
+ this.stopIndicator();
+ this.index = 0;
+
+ if(this.entryCount==1 && this.options.autoSelect) {
+ this.selectEntry();
+ this.hide();
+ } else {
+ this.render();
+ }
+ }
+ },
+
+ addObservers: function(element) {
+ Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
+ Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+ },
+
+ onObserverEvent: function() {
+ this.changed = false;
+ this.tokenBounds = null;
+ if(this.getToken().length>=this.options.minChars) {
+ this.getUpdatedChoices();
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ this.oldElementValue = this.element.value;
+ },
+
+ getToken: function() {
+ var bounds = this.getTokenBounds();
+ return this.element.value.substring(bounds[0], bounds[1]).strip();
+ },
+
+ getTokenBounds: function() {
+ if (null != this.tokenBounds) return this.tokenBounds;
+ var value = this.element.value;
+ if (value.strip().empty()) return [-1, 0];
+ var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
+ var offset = (diff == this.oldElementValue.length ? 1 : 0);
+ var prevTokenPos = -1, nextTokenPos = value.length;
+ var tp;
+ for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
+ tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
+ if (tp > prevTokenPos) prevTokenPos = tp;
+ tp = value.indexOf(this.options.tokens[index], diff + offset);
+ if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
+ }
+ return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
+ }
+});
+
+Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
+ var boundary = Math.min(newS.length, oldS.length);
+ for (var index = 0; index < boundary; ++index)
+ if (newS[index] != oldS[index])
+ return index;
+ return boundary;
+};
+
+Ajax.Autocompleter = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, url, options) {
+ this.baseInitialize(element, update, options);
+ this.options.asynchronous = true;
+ this.options.onComplete = this.onComplete.bind(this);
+ this.options.defaultParams = this.options.parameters || null;
+ this.url = url;
+ },
+
+ getUpdatedChoices: function() {
+ this.startIndicator();
+
+ var entry = encodeURIComponent(this.options.paramName) + '=' +
+ encodeURIComponent(this.getToken());
+
+ this.options.parameters = this.options.callback ?
+ this.options.callback(this.element, entry) : entry;
+
+ if(this.options.defaultParams)
+ this.options.parameters += '&' + this.options.defaultParams;
+
+ new Ajax.Request(this.url, this.options);
+ },
+
+ onComplete: function(request) {
+ this.updateChoices(request.responseText);
+ }
+});
+
+// The local array autocompleter. Used when you'd prefer to
+// inject an array of autocompletion options into the page, rather
+// than sending out Ajax queries, which can be quite slow sometimes.
+//
+// The constructor takes four parameters. The first two are, as usual,
+// the id of the monitored textbox, and id of the autocompletion menu.
+// The third is the array you want to autocomplete from, and the fourth
+// is the options block.
+//
+// Extra local autocompletion options:
+// - choices - How many autocompletion choices to offer
+//
+// - partialSearch - If false, the autocompleter will match entered
+// text only at the beginning of strings in the
+// autocomplete array. Defaults to true, which will
+// match text at the beginning of any *word* in the
+// strings in the autocomplete array. If you want to
+// search anywhere in the string, additionally set
+// the option fullSearch to true (default: off).
+//
+// - fullSsearch - Search anywhere in autocomplete array strings.
+//
+// - partialChars - How many characters to enter before triggering
+// a partial match (unlike minChars, which defines
+// how many characters are required to do any match
+// at all). Defaults to 2.
+//
+// - ignoreCase - Whether to ignore case when autocompleting.
+// Defaults to true.
+//
+// It's possible to pass in a custom function as the 'selector'
+// option, if you prefer to write your own autocompletion logic.
+// In that case, the other options above will not apply unless
+// you support them.
+
+Autocompleter.Local = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, array, options) {
+ this.baseInitialize(element, update, options);
+ this.options.array = array;
+ },
+
+ getUpdatedChoices: function() {
+ this.updateChoices(this.options.selector(this));
+ },
+
+ setOptions: function(options) {
+ this.options = Object.extend({
+ choices: 10,
+ partialSearch: true,
+ partialChars: 2,
+ ignoreCase: true,
+ fullSearch: false,
+ selector: function(instance) {
+ var ret = []; // Beginning matches
+ var partial = []; // Inside matches
+ var entry = instance.getToken();
+ var count = 0;
+
+ for (var i = 0; i < instance.options.array.length &&
+ ret.length < instance.options.choices ; i++) {
+
+ var elem = instance.options.array[i];
+ var foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase()) :
+ elem.indexOf(entry);
+
+ while (foundPos != -1) {
+ if (foundPos == 0 && elem.length != entry.length) {
+ ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
+ elem.substr(entry.length) + "</li>");
+ break;
+ } else if (entry.length >= instance.options.partialChars &&
+ instance.options.partialSearch && foundPos != -1) {
+ if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+ partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
+ elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
+ foundPos + entry.length) + "</li>");
+ break;
+ }
+ }
+
+ foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+ elem.indexOf(entry, foundPos + 1);
+
+ }
+ }
+ if (partial.length)
+ ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
+ return "<ul>" + ret.join('') + "</ul>";
+ }
+ }, options || { });
+ }
+});
+
+// AJAX in-place editor and collection editor
+// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
+
+// Use this if you notice weird scrolling problems on some browsers,
+// the DOM might be a bit confused when this gets called so do this
+// waits 1 ms (with setTimeout) until it does the activation
+Field.scrollFreeActivate = function(field) {
+ setTimeout(function() {
+ Field.activate(field);
+ }, 1);
+};
+
+Ajax.InPlaceEditor = Class.create({
+ initialize: function(element, url, options) {
+ this.url = url;
+ this.element = element = $(element);
+ this.prepareOptions();
+ this._controls = { };
+ arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
+ Object.extend(this.options, options || { });
+ if (!this.options.formId && this.element.id) {
+ this.options.formId = this.element.id + '-inplaceeditor';
+ if ($(this.options.formId))
+ this.options.formId = '';
+ }
+ if (this.options.externalControl)
+ this.options.externalControl = $(this.options.externalControl);
+ if (!this.options.externalControl)
+ this.options.externalControlOnly = false;
+ this._originalBackground = this.element.getStyle('background-color') || 'transparent';
+ this.element.title = this.options.clickToEditText;
+ this._boundCancelHandler = this.handleFormCancellation.bind(this);
+ this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
+ this._boundFailureHandler = this.handleAJAXFailure.bind(this);
+ this._boundSubmitHandler = this.handleFormSubmission.bind(this);
+ this._boundWrapperHandler = this.wrapUp.bind(this);
+ this.registerListeners();
+ },
+ checkForEscapeOrReturn: function(e) {
+ if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
+ if (Event.KEY_ESC == e.keyCode)
+ this.handleFormCancellation(e);
+ else if (Event.KEY_RETURN == e.keyCode)
+ this.handleFormSubmission(e);
+ },
+ createControl: function(mode, handler, extraClasses) {
+ var control = this.options[mode + 'Control'];
+ var text = this.options[mode + 'Text'];
+ if ('button' == control) {
+ var btn = document.createElement('input');
+ btn.type = 'submit';
+ btn.value = text;
+ btn.className = 'editor_' + mode + '_button';
+ if ('cancel' == mode)
+ btn.onclick = this._boundCancelHandler;
+ this._form.appendChild(btn);
+ this._controls[mode] = btn;
+ } else if ('link' == control) {
+ var link = document.createElement('a');
+ link.href = '#';
+ link.appendChild(document.createTextNode(text));
+ link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
+ link.className = 'editor_' + mode + '_link';
+ if (extraClasses)
+ link.className += ' ' + extraClasses;
+ this._form.appendChild(link);
+ this._controls[mode] = link;
+ }
+ },
+ createEditField: function() {
+ var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
+ var fld;
+ if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
+ fld = document.createElement('input');
+ fld.type = 'text';
+ var size = this.options.size || this.options.cols || 0;
+ if (0 < size) fld.size = size;
+ } else {
+ fld = document.createElement('textarea');
+ fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
+ fld.cols = this.options.cols || 40;
+ }
+ fld.name = this.options.paramName;
+ fld.value = text; // No HTML breaks conversion anymore
+ fld.className = 'editor_field';
+ if (this.options.submitOnBlur)
+ fld.onblur = this._boundSubmitHandler;
+ this._controls.editor = fld;
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+ createForm: function() {
+ var ipe = this;
+ function addText(mode, condition) {
+ var text = ipe.options['text' + mode + 'Controls'];
+ if (!text || condition === false) return;
+ ipe._form.appendChild(document.createTextNode(text));
+ };
+ this._form = $(document.createElement('form'));
+ this._form.id = this.options.formId;
+ this._form.addClassName(this.options.formClassName);
+ this._form.onsubmit = this._boundSubmitHandler;
+ this.createEditField();
+ if ('textarea' == this._controls.editor.tagName.toLowerCase())
+ this._form.appendChild(document.createElement('br'));
+ if (this.options.onFormCustomization)
+ this.options.onFormCustomization(this, this._form);
+ addText('Before', this.options.okControl || this.options.cancelControl);
+ this.createControl('ok', this._boundSubmitHandler);
+ addText('Between', this.options.okControl && this.options.cancelControl);
+ this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
+ addText('After', this.options.okControl || this.options.cancelControl);
+ },
+ destroy: function() {
+ if (this._oldInnerHTML)
+ this.element.innerHTML = this._oldInnerHTML;
+ this.leaveEditMode();
+ this.unregisterListeners();
+ },
+ enterEditMode: function(e) {
+ if (this._saving || this._editing) return;
+ this._editing = true;
+ this.triggerCallback('onEnterEditMode');
+ if (this.options.externalControl)
+ this.options.externalControl.hide();
+ this.element.hide();
+ this.createForm();
+ this.element.parentNode.insertBefore(this._form, this.element);
+ if (!this.options.loadTextURL)
+ this.postProcessEditField();
+ if (e) Event.stop(e);
+ },
+ enterHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.addClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onEnterHover');
+ },
+ getText: function() {
+ return this.element.innerHTML.unescapeHTML();
+ },
+ handleAJAXFailure: function(transport) {
+ this.triggerCallback('onFailure', transport);
+ if (this._oldInnerHTML) {
+ this.element.innerHTML = this._oldInnerHTML;
+ this._oldInnerHTML = null;
+ }
+ },
+ handleFormCancellation: function(e) {
+ this.wrapUp();
+ if (e) Event.stop(e);
+ },
+ handleFormSubmission: function(e) {
+ var form = this._form;
+ var value = $F(this._controls.editor);
+ this.prepareSubmission();
+ var params = this.options.callback(form, value) || '';
+ if (Object.isString(params))
+ params = params.toQueryParams();
+ params.editorId = this.element.id;
+ if (this.options.htmlResponse) {
+ var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Updater({ success: this.element }, this.url, options);
+ } else {
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.url, options);
+ }
+ if (e) Event.stop(e);
+ },
+ leaveEditMode: function() {
+ this.element.removeClassName(this.options.savingClassName);
+ this.removeForm();
+ this.leaveHover();
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ if (this.options.externalControl)
+ this.options.externalControl.show();
+ this._saving = false;
+ this._editing = false;
+ this._oldInnerHTML = null;
+ this.triggerCallback('onLeaveEditMode');
+ },
+ leaveHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.removeClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onLeaveHover');
+ },
+ loadExternalText: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this._controls.editor.disabled = true;
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._form.removeClassName(this.options.loadingClassName);
+ var text = transport.responseText;
+ if (this.options.stripLoadedTextTags)
+ text = text.stripTags();
+ this._controls.editor.value = text;
+ this._controls.editor.disabled = false;
+ this.postProcessEditField();
+ }.bind(this),
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+ postProcessEditField: function() {
+ var fpc = this.options.fieldPostCreation;
+ if (fpc)
+ $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
+ },
+ prepareOptions: function() {
+ this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
+ Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
+ [this._extraDefaultOptions].flatten().compact().each(function(defs) {
+ Object.extend(this.options, defs);
+ }.bind(this));
+ },
+ prepareSubmission: function() {
+ this._saving = true;
+ this.removeForm();
+ this.leaveHover();
+ this.showSaving();
+ },
+ registerListeners: function() {
+ this._listeners = { };
+ var listener;
+ $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
+ listener = this[pair.value].bind(this);
+ this._listeners[pair.key] = listener;
+ if (!this.options.externalControlOnly)
+ this.element.observe(pair.key, listener);
+ if (this.options.externalControl)
+ this.options.externalControl.observe(pair.key, listener);
+ }.bind(this));
+ },
+ removeForm: function() {
+ if (!this._form) return;
+ this._form.remove();
+ this._form = null;
+ this._controls = { };
+ },
+ showSaving: function() {
+ this._oldInnerHTML = this.element.innerHTML;
+ this.element.innerHTML = this.options.savingText;
+ this.element.addClassName(this.options.savingClassName);
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ },
+ triggerCallback: function(cbName, arg) {
+ if ('function' == typeof this.options[cbName]) {
+ this.options[cbName](this, arg);
+ }
+ },
+ unregisterListeners: function() {
+ $H(this._listeners).each(function(pair) {
+ if (!this.options.externalControlOnly)
+ this.element.stopObserving(pair.key, pair.value);
+ if (this.options.externalControl)
+ this.options.externalControl.stopObserving(pair.key, pair.value);
+ }.bind(this));
+ },
+ wrapUp: function(transport) {
+ this.leaveEditMode();
+ // Can't use triggerCallback due to backward compatibility: requires
+ // binding + direct element
+ this._boundComplete(transport, this.element);
+ }
+});
+
+Object.extend(Ajax.InPlaceEditor.prototype, {
+ dispose: Ajax.InPlaceEditor.prototype.destroy
+});
+
+Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
+ initialize: function($super, element, url, options) {
+ this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
+ $super(element, url, options);
+ },
+
+ createEditField: function() {
+ var list = document.createElement('select');
+ list.name = this.options.paramName;
+ list.size = 1;
+ this._controls.editor = list;
+ this._collection = this.options.collection || [];
+ if (this.options.loadCollectionURL)
+ this.loadCollection();
+ else
+ this.checkForExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+
+ loadCollection: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this.showLoadingText(this.options.loadingCollectionText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ var js = transport.responseText.strip();
+ if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
+ throw('Server returned an invalid collection representation.');
+ this._collection = eval(js);
+ this.checkForExternalText();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadCollectionURL, options);
+ },
+
+ showLoadingText: function(text) {
+ this._controls.editor.disabled = true;
+ var tempOption = this._controls.editor.firstChild;
+ if (!tempOption) {
+ tempOption = document.createElement('option');
+ tempOption.value = '';
+ this._controls.editor.appendChild(tempOption);
+ tempOption.selected = true;
+ }
+ tempOption.update((text || '').stripScripts().stripTags());
+ },
+
+ checkForExternalText: function() {
+ this._text = this.getText();
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ else
+ this.buildOptionList();
+ },
+
+ loadExternalText: function() {
+ this.showLoadingText(this.options.loadingText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._text = transport.responseText.strip();
+ this.buildOptionList();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+
+ buildOptionList: function() {
+ this._form.removeClassName(this.options.loadingClassName);
+ this._collection = this._collection.map(function(entry) {
+ return 2 === entry.length ? entry : [entry, entry].flatten();
+ });
+ var marker = ('value' in this.options) ? this.options.value : this._text;
+ var textFound = this._collection.any(function(entry) {
+ return entry[0] == marker;
+ }.bind(this));
+ this._controls.editor.update('');
+ var option;
+ this._collection.each(function(entry, index) {
+ option = document.createElement('option');
+ option.value = entry[0];
+ option.selected = textFound ? entry[0] == marker : 0 == index;
+ option.appendChild(document.createTextNode(entry[1]));
+ this._controls.editor.appendChild(option);
+ }.bind(this));
+ this._controls.editor.disabled = false;
+ Field.scrollFreeActivate(this._controls.editor);
+ }
+});
+
+//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
+//**** This only exists for a while, in order to let ****
+//**** users adapt to the new API. Read up on the new ****
+//**** API and convert your code to it ASAP! ****
+
+Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
+ if (!options) return;
+ function fallback(name, expr) {
+ if (name in options || expr === undefined) return;
+ options[name] = expr;
+ };
+ fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
+ options.cancelLink == options.cancelButton == false ? false : undefined)));
+ fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
+ options.okLink == options.okButton == false ? false : undefined)));
+ fallback('highlightColor', options.highlightcolor);
+ fallback('highlightEndColor', options.highlightendcolor);
+};
+
+Object.extend(Ajax.InPlaceEditor, {
+ DefaultOptions: {
+ ajaxOptions: { },
+ autoRows: 3, // Use when multi-line w/ rows == 1
+ cancelControl: 'link', // 'link'|'button'|false
+ cancelText: 'cancel',
+ clickToEditText: 'Click to edit',
+ externalControl: null, // id|elt
+ externalControlOnly: false,
+ fieldPostCreation: 'activate', // 'activate'|'focus'|false
+ formClassName: 'inplaceeditor-form',
+ formId: null, // id|elt
+ highlightColor: '#ffff99',
+ highlightEndColor: '#ffffff',
+ hoverClassName: '',
+ htmlResponse: true,
+ loadingClassName: 'inplaceeditor-loading',
+ loadingText: 'Loading...',
+ okControl: 'button', // 'link'|'button'|false
+ okText: 'ok',
+ paramName: 'value',
+ rows: 1, // If 1 and multi-line, uses autoRows
+ savingClassName: 'inplaceeditor-saving',
+ savingText: 'Saving...',
+ size: 0,
+ stripLoadedTextTags: false,
+ submitOnBlur: false,
+ textAfterControls: '',
+ textBeforeControls: '',
+ textBetweenControls: ''
+ },
+ DefaultCallbacks: {
+ callback: function(form) {
+ return Form.serialize(form);
+ },
+ onComplete: function(transport, element) {
+ // For backward compatibility, this one is bound to the IPE, and passes
+ // the element directly. It was too often customized, so we don't break it.
+ new Effect.Highlight(element, {
+ startcolor: this.options.highlightColor, keepBackgroundImage: true });
+ },
+ onEnterEditMode: null,
+ onEnterHover: function(ipe) {
+ ipe.element.style.backgroundColor = ipe.options.highlightColor;
+ if (ipe._effect)
+ ipe._effect.cancel();
+ },
+ onFailure: function(transport, ipe) {
+ alert('Error communication with the server: ' + transport.responseText.stripTags());
+ },
+ onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
+ onLeaveEditMode: null,
+ onLeaveHover: function(ipe) {
+ ipe._effect = new Effect.Highlight(ipe.element, {
+ startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
+ restorecolor: ipe._originalBackground, keepBackgroundImage: true
+ });
+ }
+ },
+ Listeners: {
+ click: 'enterEditMode',
+ keydown: 'checkForEscapeOrReturn',
+ mouseover: 'enterHover',
+ mouseout: 'leaveHover'
+ }
+});
+
+Ajax.InPlaceCollectionEditor.DefaultOptions = {
+ loadingCollectionText: 'Loading options...'
+};
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create({
+ initialize: function(element, delay, callback) {
+ this.delay = delay || 0.5;
+ this.element = $(element);
+ this.callback = callback;
+ this.timer = null;
+ this.lastValue = $F(this.element);
+ Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+ },
+ delayedListener: function(event) {
+ if(this.lastValue == $F(this.element)) return;
+ if(this.timer) clearTimeout(this.timer);
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+ this.lastValue = $F(this.element);
+ },
+ onTimerEvent: function() {
+ this.timer = null;
+ this.callback(this.element, $F(this.element));
+ }
+}); \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/dragdrop.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/dragdrop.js
new file mode 100644
index 0000000..07c98e2
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/dragdrop.js
@@ -0,0 +1,975 @@
+// script.aculo.us dragdrop.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2008 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if(Object.isUndefined(Effect))
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");
+
+var Droppables = {
+ drops: [],
+
+ remove: function(element) {
+ this.drops = this.drops.reject(function(d) { return d.element==$(element) });
+ },
+
+ add: function(element) {
+ element = $(element);
+ var options = Object.extend({
+ greedy: true,
+ hoverclass: null,
+ tree: false
+ }, arguments[1] || { });
+
+ // cache containers
+ if(options.containment) {
+ options._containers = [];
+ var containment = options.containment;
+ if(Object.isArray(containment)) {
+ containment.each( function(c) { options._containers.push($(c)) });
+ } else {
+ options._containers.push($(containment));
+ }
+ }
+
+ if(options.accept) options.accept = [options.accept].flatten();
+
+ Element.makePositioned(element); // fix IE
+ options.element = element;
+
+ this.drops.push(options);
+ },
+
+ findDeepestChild: function(drops) {
+ deepest = drops[0];
+
+ for (i = 1; i < drops.length; ++i)
+ if (Element.isParent(drops[i].element, deepest.element))
+ deepest = drops[i];
+
+ return deepest;
+ },
+
+ isContained: function(element, drop) {
+ var containmentNode;
+ if(drop.tree) {
+ containmentNode = element.treeNode;
+ } else {
+ containmentNode = element.parentNode;
+ }
+ return drop._containers.detect(function(c) { return containmentNode == c });
+ },
+
+ isAffected: function(point, element, drop) {
+ return (
+ (drop.element!=element) &&
+ ((!drop._containers) ||
+ this.isContained(element, drop)) &&
+ ((!drop.accept) ||
+ (Element.classNames(element).detect(
+ function(v) { return drop.accept.include(v) } ) )) &&
+ Position.within(drop.element, point[0], point[1]) );
+ },
+
+ deactivate: function(drop) {
+ if(drop.hoverclass)
+ Element.removeClassName(drop.element, drop.hoverclass);
+ this.last_active = null;
+ },
+
+ activate: function(drop) {
+ if(drop.hoverclass)
+ Element.addClassName(drop.element, drop.hoverclass);
+ this.last_active = drop;
+ },
+
+ show: function(point, element) {
+ if(!this.drops.length) return;
+ var drop, affected = [];
+
+ this.drops.each( function(drop) {
+ if(Droppables.isAffected(point, element, drop))
+ affected.push(drop);
+ });
+
+ if(affected.length>0)
+ drop = Droppables.findDeepestChild(affected);
+
+ if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
+ if (drop) {
+ Position.within(drop.element, point[0], point[1]);
+ if(drop.onHover)
+ drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+
+ if (drop != this.last_active) Droppables.activate(drop);
+ }
+ },
+
+ fire: function(event, element) {
+ if(!this.last_active) return;
+ Position.prepare();
+
+ if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+ if (this.last_active.onDrop) {
+ this.last_active.onDrop(element, this.last_active.element, event);
+ return true;
+ }
+ },
+
+ reset: function() {
+ if(this.last_active)
+ this.deactivate(this.last_active);
+ }
+};
+
+var Draggables = {
+ drags: [],
+ observers: [],
+
+ register: function(draggable) {
+ if(this.drags.length == 0) {
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+ this.eventKeypress = this.keyPress.bindAsEventListener(this);
+
+ Event.observe(document, "mouseup", this.eventMouseUp);
+ Event.observe(document, "mousemove", this.eventMouseMove);
+ Event.observe(document, "keypress", this.eventKeypress);
+ }
+ this.drags.push(draggable);
+ },
+
+ unregister: function(draggable) {
+ this.drags = this.drags.reject(function(d) { return d==draggable });
+ if(this.drags.length == 0) {
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ Event.stopObserving(document, "keypress", this.eventKeypress);
+ }
+ },
+
+ activate: function(draggable) {
+ if(draggable.options.delay) {
+ this._timeout = setTimeout(function() {
+ Draggables._timeout = null;
+ window.focus();
+ Draggables.activeDraggable = draggable;
+ }.bind(this), draggable.options.delay);
+ } else {
+ window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
+ this.activeDraggable = draggable;
+ }
+ },
+
+ deactivate: function() {
+ this.activeDraggable = null;
+ },
+
+ updateDrag: function(event) {
+ if(!this.activeDraggable) return;
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ // Mozilla-based browsers fire successive mousemove events with
+ // the same coordinates, prevent needless redrawing (moz bug?)
+ if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
+ this._lastPointer = pointer;
+
+ this.activeDraggable.updateDrag(event, pointer);
+ },
+
+ endDrag: function(event) {
+ if(this._timeout) {
+ clearTimeout(this._timeout);
+ this._timeout = null;
+ }
+ if(!this.activeDraggable) return;
+ this._lastPointer = null;
+ this.activeDraggable.endDrag(event);
+ this.activeDraggable = null;
+ },
+
+ keyPress: function(event) {
+ if(this.activeDraggable)
+ this.activeDraggable.keyPress(event);
+ },
+
+ addObserver: function(observer) {
+ this.observers.push(observer);
+ this._cacheObserverCallbacks();
+ },
+
+ removeObserver: function(element) { // element instead of observer fixes mem leaks
+ this.observers = this.observers.reject( function(o) { return o.element==element });
+ this._cacheObserverCallbacks();
+ },
+
+ notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
+ if(this[eventName+'Count'] > 0)
+ this.observers.each( function(o) {
+ if(o[eventName]) o[eventName](eventName, draggable, event);
+ });
+ if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
+ },
+
+ _cacheObserverCallbacks: function() {
+ ['onStart','onEnd','onDrag'].each( function(eventName) {
+ Draggables[eventName+'Count'] = Draggables.observers.select(
+ function(o) { return o[eventName]; }
+ ).length;
+ });
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Draggable = Class.create({
+ initialize: function(element) {
+ var defaults = {
+ handle: false,
+ reverteffect: function(element, top_offset, left_offset) {
+ var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+ new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
+ queue: {scope:'_draggable', position:'end'}
+ });
+ },
+ endeffect: function(element) {
+ var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
+ new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
+ queue: {scope:'_draggable', position:'end'},
+ afterFinish: function(){
+ Draggable._dragging[element] = false
+ }
+ });
+ },
+ zindex: 1000,
+ revert: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
+ delay: 0
+ };
+
+ if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
+ Object.extend(defaults, {
+ starteffect: function(element) {
+ element._opacity = Element.getOpacity(element);
+ Draggable._dragging[element] = true;
+ new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
+ }
+ });
+
+ var options = Object.extend(defaults, arguments[1] || { });
+
+ this.element = $(element);
+
+ if(options.handle && Object.isString(options.handle))
+ this.handle = this.element.down('.'+options.handle, 0);
+
+ if(!this.handle) this.handle = $(options.handle);
+ if(!this.handle) this.handle = this.element;
+
+ if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
+ options.scroll = $(options.scroll);
+ this._isScrollChild = Element.childOf(this.element, options.scroll);
+ }
+
+ Element.makePositioned(this.element); // fix IE
+
+ this.options = options;
+ this.dragging = false;
+
+ this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+ Event.observe(this.handle, "mousedown", this.eventMouseDown);
+
+ Draggables.register(this);
+ },
+
+ destroy: function() {
+ Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
+ Draggables.unregister(this);
+ },
+
+ currentDelta: function() {
+ return([
+ parseInt(Element.getStyle(this.element,'left') || '0'),
+ parseInt(Element.getStyle(this.element,'top') || '0')]);
+ },
+
+ initDrag: function(event) {
+ if(!Object.isUndefined(Draggable._dragging[this.element]) &&
+ Draggable._dragging[this.element]) return;
+ if(Event.isLeftClick(event)) {
+ // abort on form elements, fixes a Firefox issue
+ var src = Event.element(event);
+ if((tag_name = src.tagName.toUpperCase()) && (
+ tag_name=='INPUT' ||
+ tag_name=='SELECT' ||
+ tag_name=='OPTION' ||
+ tag_name=='BUTTON' ||
+ tag_name=='TEXTAREA')) return;
+
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var pos = Position.cumulativeOffset(this.element);
+ this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
+
+ Draggables.activate(this);
+ Event.stop(event);
+ }
+ },
+
+ startDrag: function(event) {
+ this.dragging = true;
+ if(!this.delta)
+ this.delta = this.currentDelta();
+
+ if(this.options.zindex) {
+ this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
+ this.element.style.zIndex = this.options.zindex;
+ }
+
+ if(this.options.ghosting) {
+ this._clone = this.element.cloneNode(true);
+ this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
+ if (!this._originallyAbsolute)
+ Position.absolutize(this.element);
+ this.element.parentNode.insertBefore(this._clone, this.element);
+ }
+
+ if(this.options.scroll) {
+ if (this.options.scroll == window) {
+ var where = this._getWindowScroll(this.options.scroll);
+ this.originalScrollLeft = where.left;
+ this.originalScrollTop = where.top;
+ } else {
+ this.originalScrollLeft = this.options.scroll.scrollLeft;
+ this.originalScrollTop = this.options.scroll.scrollTop;
+ }
+ }
+
+ Draggables.notify('onStart', this, event);
+
+ if(this.options.starteffect) this.options.starteffect(this.element);
+ },
+
+ updateDrag: function(event, pointer) {
+ if(!this.dragging) this.startDrag(event);
+
+ if(!this.options.quiet){
+ Position.prepare();
+ Droppables.show(pointer, this.element);
+ }
+
+ Draggables.notify('onDrag', this, event);
+
+ this.draw(pointer);
+ if(this.options.change) this.options.change(this);
+
+ if(this.options.scroll) {
+ this.stopScrolling();
+
+ var p;
+ if (this.options.scroll == window) {
+ with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
+ } else {
+ p = Position.page(this.options.scroll);
+ p[0] += this.options.scroll.scrollLeft + Position.deltaX;
+ p[1] += this.options.scroll.scrollTop + Position.deltaY;
+ p.push(p[0]+this.options.scroll.offsetWidth);
+ p.push(p[1]+this.options.scroll.offsetHeight);
+ }
+ var speed = [0,0];
+ if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
+ if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
+ if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
+ if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
+ this.startScrolling(speed);
+ }
+
+ // fix AppleWebKit rendering
+ if(Prototype.Browser.WebKit) window.scrollBy(0,0);
+
+ Event.stop(event);
+ },
+
+ finishDrag: function(event, success) {
+ this.dragging = false;
+
+ if(this.options.quiet){
+ Position.prepare();
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ Droppables.show(pointer, this.element);
+ }
+
+ if(this.options.ghosting) {
+ if (!this._originallyAbsolute)
+ Position.relativize(this.element);
+ delete this._originallyAbsolute;
+ Element.remove(this._clone);
+ this._clone = null;
+ }
+
+ var dropped = false;
+ if(success) {
+ dropped = Droppables.fire(event, this.element);
+ if (!dropped) dropped = false;
+ }
+ if(dropped && this.options.onDropped) this.options.onDropped(this.element);
+ Draggables.notify('onEnd', this, event);
+
+ var revert = this.options.revert;
+ if(revert && Object.isFunction(revert)) revert = revert(this.element);
+
+ var d = this.currentDelta();
+ if(revert && this.options.reverteffect) {
+ if (dropped == 0 || revert != 'failure')
+ this.options.reverteffect(this.element,
+ d[1]-this.delta[1], d[0]-this.delta[0]);
+ } else {
+ this.delta = d;
+ }
+
+ if(this.options.zindex)
+ this.element.style.zIndex = this.originalZ;
+
+ if(this.options.endeffect)
+ this.options.endeffect(this.element);
+
+ Draggables.deactivate(this);
+ Droppables.reset();
+ },
+
+ keyPress: function(event) {
+ if(event.keyCode!=Event.KEY_ESC) return;
+ this.finishDrag(event, false);
+ Event.stop(event);
+ },
+
+ endDrag: function(event) {
+ if(!this.dragging) return;
+ this.stopScrolling();
+ this.finishDrag(event, true);
+ Event.stop(event);
+ },
+
+ draw: function(point) {
+ var pos = Position.cumulativeOffset(this.element);
+ if(this.options.ghosting) {
+ var r = Position.realOffset(this.element);
+ pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
+ }
+
+ var d = this.currentDelta();
+ pos[0] -= d[0]; pos[1] -= d[1];
+
+ if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
+ pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
+ pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
+ }
+
+ var p = [0,1].map(function(i){
+ return (point[i]-pos[i]-this.offset[i])
+ }.bind(this));
+
+ if(this.options.snap) {
+ if(Object.isFunction(this.options.snap)) {
+ p = this.options.snap(p[0],p[1],this);
+ } else {
+ if(Object.isArray(this.options.snap)) {
+ p = p.map( function(v, i) {
+ return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
+ } else {
+ p = p.map( function(v) {
+ return (v/this.options.snap).round()*this.options.snap }.bind(this));
+ }
+ }}
+
+ var style = this.element.style;
+ if((!this.options.constraint) || (this.options.constraint=='horizontal'))
+ style.left = p[0] + "px";
+ if((!this.options.constraint) || (this.options.constraint=='vertical'))
+ style.top = p[1] + "px";
+
+ if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
+ },
+
+ stopScrolling: function() {
+ if(this.scrollInterval) {
+ clearInterval(this.scrollInterval);
+ this.scrollInterval = null;
+ Draggables._lastScrollPointer = null;
+ }
+ },
+
+ startScrolling: function(speed) {
+ if(!(speed[0] || speed[1])) return;
+ this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
+ this.lastScrolled = new Date();
+ this.scrollInterval = setInterval(this.scroll.bind(this), 10);
+ },
+
+ scroll: function() {
+ var current = new Date();
+ var delta = current - this.lastScrolled;
+ this.lastScrolled = current;
+ if(this.options.scroll == window) {
+ with (this._getWindowScroll(this.options.scroll)) {
+ if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
+ var d = delta / 1000;
+ this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
+ }
+ }
+ } else {
+ this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
+ this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
+ }
+
+ Position.prepare();
+ Droppables.show(Draggables._lastPointer, this.element);
+ Draggables.notify('onDrag', this);
+ if (this._isScrollChild) {
+ Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
+ Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
+ Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
+ if (Draggables._lastScrollPointer[0] < 0)
+ Draggables._lastScrollPointer[0] = 0;
+ if (Draggables._lastScrollPointer[1] < 0)
+ Draggables._lastScrollPointer[1] = 0;
+ this.draw(Draggables._lastScrollPointer);
+ }
+
+ if(this.options.change) this.options.change(this);
+ },
+
+ _getWindowScroll: function(w) {
+ var T, L, W, H;
+ with (w.document) {
+ if (w.document.documentElement && documentElement.scrollTop) {
+ T = documentElement.scrollTop;
+ L = documentElement.scrollLeft;
+ } else if (w.document.body) {
+ T = body.scrollTop;
+ L = body.scrollLeft;
+ }
+ if (w.innerWidth) {
+ W = w.innerWidth;
+ H = w.innerHeight;
+ } else if (w.document.documentElement && documentElement.clientWidth) {
+ W = documentElement.clientWidth;
+ H = documentElement.clientHeight;
+ } else {
+ W = body.offsetWidth;
+ H = body.offsetHeight;
+ }
+ }
+ return { top: T, left: L, width: W, height: H };
+ }
+});
+
+Draggable._dragging = { };
+
+/*--------------------------------------------------------------------------*/
+
+var SortableObserver = Class.create({
+ initialize: function(element, observer) {
+ this.element = $(element);
+ this.observer = observer;
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onStart: function() {
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onEnd: function() {
+ Sortable.unmark();
+ if(this.lastValue != Sortable.serialize(this.element))
+ this.observer(this.element)
+ }
+});
+
+var Sortable = {
+ SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
+
+ sortables: { },
+
+ _findRootElement: function(element) {
+ while (element.tagName.toUpperCase() != "BODY") {
+ if(element.id && Sortable.sortables[element.id]) return element;
+ element = element.parentNode;
+ }
+ },
+
+ options: function(element) {
+ element = Sortable._findRootElement($(element));
+ if(!element) return;
+ return Sortable.sortables[element.id];
+ },
+
+ destroy: function(element){
+ element = $(element);
+ var s = Sortable.sortables[element.id];
+
+ if(s) {
+ Draggables.removeObserver(s.element);
+ s.droppables.each(function(d){ Droppables.remove(d) });
+ s.draggables.invoke('destroy');
+
+ delete Sortable.sortables[s.element.id];
+ }
+ },
+
+ create: function(element) {
+ element = $(element);
+ var options = Object.extend({
+ element: element,
+ tag: 'li', // assumes li children, override with tag: 'tagname'
+ dropOnEmpty: false,
+ tree: false,
+ treeTag: 'ul',
+ overlap: 'vertical', // one of 'vertical', 'horizontal'
+ constraint: 'vertical', // one of 'vertical', 'horizontal', false
+ containment: element, // also takes array of elements (or id's); or false
+ handle: false, // or a CSS class
+ only: false,
+ delay: 0,
+ hoverclass: null,
+ ghosting: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ format: this.SERIALIZE_RULE,
+
+ // these take arrays of elements or ids and can be
+ // used for better initialization performance
+ elements: false,
+ handles: false,
+
+ onChange: Prototype.emptyFunction,
+ onUpdate: Prototype.emptyFunction
+ }, arguments[1] || { });
+
+ // clear any old sortable with same element
+ this.destroy(element);
+
+ // build options for the draggables
+ var options_for_draggable = {
+ revert: true,
+ quiet: options.quiet,
+ scroll: options.scroll,
+ scrollSpeed: options.scrollSpeed,
+ scrollSensitivity: options.scrollSensitivity,
+ delay: options.delay,
+ ghosting: options.ghosting,
+ constraint: options.constraint,
+ handle: options.handle };
+
+ if(options.starteffect)
+ options_for_draggable.starteffect = options.starteffect;
+
+ if(options.reverteffect)
+ options_for_draggable.reverteffect = options.reverteffect;
+ else
+ if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+ element.style.top = 0;
+ element.style.left = 0;
+ };
+
+ if(options.endeffect)
+ options_for_draggable.endeffect = options.endeffect;
+
+ if(options.zindex)
+ options_for_draggable.zindex = options.zindex;
+
+ // build options for the droppables
+ var options_for_droppable = {
+ overlap: options.overlap,
+ containment: options.containment,
+ tree: options.tree,
+ hoverclass: options.hoverclass,
+ onHover: Sortable.onHover
+ };
+
+ var options_for_tree = {
+ onHover: Sortable.onEmptyHover,
+ overlap: options.overlap,
+ containment: options.containment,
+ hoverclass: options.hoverclass
+ };
+
+ // fix for gecko engine
+ Element.cleanWhitespace(element);
+
+ options.draggables = [];
+ options.droppables = [];
+
+ // drop on empty handling
+ if(options.dropOnEmpty || options.tree) {
+ Droppables.add(element, options_for_tree);
+ options.droppables.push(element);
+ }
+
+ (options.elements || this.findElements(element, options) || []).each( function(e,i) {
+ var handle = options.handles ? $(options.handles[i]) :
+ (options.handle ? $(e).select('.' + options.handle)[0] : e);
+ options.draggables.push(
+ new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+ Droppables.add(e, options_for_droppable);
+ if(options.tree) e.treeNode = element;
+ options.droppables.push(e);
+ });
+
+ if(options.tree) {
+ (Sortable.findTreeElements(element, options) || []).each( function(e) {
+ Droppables.add(e, options_for_tree);
+ e.treeNode = element;
+ options.droppables.push(e);
+ });
+ }
+
+ // keep reference
+ this.sortables[element.id] = options;
+
+ // for onupdate
+ Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+
+ },
+
+ // return all suitable-for-sortable elements in a guaranteed order
+ findElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.tag);
+ },
+
+ findTreeElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.treeTag);
+ },
+
+ onHover: function(element, dropon, overlap) {
+ if(Element.isParent(dropon, element)) return;
+
+ if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
+ return;
+ } else if(overlap>0.5) {
+ Sortable.mark(dropon, 'before');
+ if(dropon.previousSibling != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, dropon);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ } else {
+ Sortable.mark(dropon, 'after');
+ var nextElement = dropon.nextSibling || null;
+ if(nextElement != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, nextElement);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ }
+ },
+
+ onEmptyHover: function(element, dropon, overlap) {
+ var oldParentNode = element.parentNode;
+ var droponOptions = Sortable.options(dropon);
+
+ if(!Element.isParent(dropon, element)) {
+ var index;
+
+ var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
+ var child = null;
+
+ if(children) {
+ var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
+
+ for (index = 0; index < children.length; index += 1) {
+ if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
+ offset -= Element.offsetSize (children[index], droponOptions.overlap);
+ } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
+ child = index + 1 < children.length ? children[index + 1] : null;
+ break;
+ } else {
+ child = children[index];
+ break;
+ }
+ }
+ }
+
+ dropon.insertBefore(element, child);
+
+ Sortable.options(oldParentNode).onChange(element);
+ droponOptions.onChange(element);
+ }
+ },
+
+ unmark: function() {
+ if(Sortable._marker) Sortable._marker.hide();
+ },
+
+ mark: function(dropon, position) {
+ // mark on ghosting only
+ var sortable = Sortable.options(dropon.parentNode);
+ if(sortable && !sortable.ghosting) return;
+
+ if(!Sortable._marker) {
+ Sortable._marker =
+ ($('dropmarker') || Element.extend(document.createElement('DIV'))).
+ hide().addClassName('dropmarker').setStyle({position:'absolute'});
+ document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
+ }
+ var offsets = Position.cumulativeOffset(dropon);
+ Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
+
+ if(position=='after')
+ if(sortable.overlap == 'horizontal')
+ Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
+ else
+ Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
+
+ Sortable._marker.show();
+ },
+
+ _tree: function(element, options, parent) {
+ var children = Sortable.findElements(element, options) || [];
+
+ for (var i = 0; i < children.length; ++i) {
+ var match = children[i].id.match(options.format);
+
+ if (!match) continue;
+
+ var child = {
+ id: encodeURIComponent(match ? match[1] : null),
+ element: element,
+ parent: parent,
+ children: [],
+ position: parent.children.length,
+ container: $(children[i]).down(options.treeTag)
+ };
+
+ /* Get the element containing the children and recurse over it */
+ if (child.container)
+ this._tree(child.container, options, child);
+
+ parent.children.push (child);
+ }
+
+ return parent;
+ },
+
+ tree: function(element) {
+ element = $(element);
+ var sortableOptions = this.options(element);
+ var options = Object.extend({
+ tag: sortableOptions.tag,
+ treeTag: sortableOptions.treeTag,
+ only: sortableOptions.only,
+ name: element.id,
+ format: sortableOptions.format
+ }, arguments[1] || { });
+
+ var root = {
+ id: null,
+ parent: null,
+ children: [],
+ container: element,
+ position: 0
+ };
+
+ return Sortable._tree(element, options, root);
+ },
+
+ /* Construct a [i] index for a particular node */
+ _constructIndex: function(node) {
+ var index = '';
+ do {
+ if (node.id) index = '[' + node.position + ']' + index;
+ } while ((node = node.parent) != null);
+ return index;
+ },
+
+ sequence: function(element) {
+ element = $(element);
+ var options = Object.extend(this.options(element), arguments[1] || { });
+
+ return $(this.findElements(element, options) || []).map( function(item) {
+ return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
+ });
+ },
+
+ setSequence: function(element, new_sequence) {
+ element = $(element);
+ var options = Object.extend(this.options(element), arguments[2] || { });
+
+ var nodeMap = { };
+ this.findElements(element, options).each( function(n) {
+ if (n.id.match(options.format))
+ nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
+ n.parentNode.removeChild(n);
+ });
+
+ new_sequence.each(function(ident) {
+ var n = nodeMap[ident];
+ if (n) {
+ n[1].appendChild(n[0]);
+ delete nodeMap[ident];
+ }
+ });
+ },
+
+ serialize: function(element) {
+ element = $(element);
+ var options = Object.extend(Sortable.options(element), arguments[1] || { });
+ var name = encodeURIComponent(
+ (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
+
+ if (options.tree) {
+ return Sortable.tree(element, arguments[1]).children.map( function (item) {
+ return [name + Sortable._constructIndex(item) + "[id]=" +
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
+ }).flatten().join('&');
+ } else {
+ return Sortable.sequence(element, arguments[1]).map( function(item) {
+ return name + "[]=" + encodeURIComponent(item);
+ }).join('&');
+ }
+ }
+};
+
+// Returns true if child is contained within element
+Element.isParent = function(child, element) {
+ if (!child.parentNode || child == element) return false;
+ if (child.parentNode == element) return true;
+ return Element.isParent(child.parentNode, element);
+};
+
+Element.findChildren = function(element, only, recursive, tagName) {
+ if(!element.hasChildNodes()) return null;
+ tagName = tagName.toUpperCase();
+ if(only) only = [only].flatten();
+ var elements = [];
+ $A(element.childNodes).each( function(e) {
+ if(e.tagName && e.tagName.toUpperCase()==tagName &&
+ (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
+ elements.push(e);
+ if(recursive) {
+ var grandchildren = Element.findChildren(e, only, recursive, tagName);
+ if(grandchildren) elements.push(grandchildren);
+ }
+ });
+
+ return (elements.length>0 ? elements.flatten() : []);
+};
+
+Element.offsetSize = function (element, type) {
+ return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
+}; \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/effects.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/effects.js
new file mode 100644
index 0000000..f31a81a
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/effects.js
@@ -0,0 +1,1130 @@
+// script.aculo.us effects.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+// Justin Palmer (http://encytemedia.com/)
+// Mark Pilgrim (http://diveintomark.org/)
+// Martin Bialasinki
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+ var color = '#';
+ if (this.slice(0,4) == 'rgb(') {
+ var cols = this.slice(4,this.length-1).split(',');
+ var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
+ } else {
+ if (this.slice(0,1) == '#') {
+ if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+ if (this.length==7) color = this.toLowerCase();
+ }
+ }
+ return (color.length==7 ? color : (arguments[0] || this));
+};
+
+/*--------------------------------------------------------------------------*/
+
+Element.collectTextNodes = function(element) {
+ return $A($(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+ }).flatten().join('');
+};
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+ return $A($(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+ Element.collectTextNodesIgnoreClass(node, className) : ''));
+ }).flatten().join('');
+};
+
+Element.setContentZoom = function(element, percent) {
+ element = $(element);
+ element.setStyle({fontSize: (percent/100) + 'em'});
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ return element;
+};
+
+Element.getInlineOpacity = function(element){
+ return $(element).style.opacity || '';
+};
+
+Element.forceRerendering = function(element) {
+ try {
+ element = $(element);
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch(e) { }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+ _elementDoesNotExistError: {
+ name: 'ElementDoesNotExistError',
+ message: 'The specified DOM element does not exist, but is required for this effect to operate'
+ },
+ Transitions: {
+ linear: Prototype.K,
+ sinoidal: function(pos) {
+ return (-Math.cos(pos*Math.PI)/2) + .5;
+ },
+ reverse: function(pos) {
+ return 1-pos;
+ },
+ flicker: function(pos) {
+ var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
+ return pos > 1 ? 1 : pos;
+ },
+ wobble: function(pos) {
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
+ },
+ pulse: function(pos, pulses) {
+ return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
+ },
+ spring: function(pos) {
+ return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
+ },
+ none: function(pos) {
+ return 0;
+ },
+ full: function(pos) {
+ return 1;
+ }
+ },
+ DefaultOptions: {
+ duration: 1.0, // seconds
+ fps: 100, // 100= assume 66fps max.
+ sync: false, // true for combining
+ from: 0.0,
+ to: 1.0,
+ delay: 0.0,
+ queue: 'parallel'
+ },
+ tagifyText: function(element) {
+ var tagifyStyle = 'position:relative';
+ if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
+
+ element = $(element);
+ $A(element.childNodes).each( function(child) {
+ if (child.nodeType==3) {
+ child.nodeValue.toArray().each( function(character) {
+ element.insertBefore(
+ new Element('span', {style: tagifyStyle}).update(
+ character == ' ' ? String.fromCharCode(160) : character),
+ child);
+ });
+ Element.remove(child);
+ }
+ });
+ },
+ multiple: function(element, effect) {
+ var elements;
+ if (((typeof element == 'object') ||
+ Object.isFunction(element)) &&
+ (element.length))
+ elements = element;
+ else
+ elements = $(element).childNodes;
+
+ var options = Object.extend({
+ speed: 0.1,
+ delay: 0.0
+ }, arguments[2] || { });
+ var masterDelay = options.delay;
+
+ $A(elements).each( function(element, index) {
+ new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+ });
+ },
+ PAIRS: {
+ 'slide': ['SlideDown','SlideUp'],
+ 'blind': ['BlindDown','BlindUp'],
+ 'appear': ['Appear','Fade']
+ },
+ toggle: function(element, effect) {
+ element = $(element);
+ effect = (effect || 'appear').toLowerCase();
+ var options = Object.extend({
+ queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
+ }, arguments[2] || { });
+ Effect[element.visible() ?
+ Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
+ }
+};
+
+Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create(Enumerable, {
+ initialize: function() {
+ this.effects = [];
+ this.interval = null;
+ },
+ _each: function(iterator) {
+ this.effects._each(iterator);
+ },
+ add: function(effect) {
+ var timestamp = new Date().getTime();
+
+ var position = Object.isString(effect.options.queue) ?
+ effect.options.queue : effect.options.queue.position;
+
+ switch(position) {
+ case 'front':
+ // move unstarted effects after this effect
+ this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
+ e.startOn += effect.finishOn;
+ e.finishOn += effect.finishOn;
+ });
+ break;
+ case 'with-last':
+ timestamp = this.effects.pluck('startOn').max() || timestamp;
+ break;
+ case 'end':
+ // start effect after last queued effect has finished
+ timestamp = this.effects.pluck('finishOn').max() || timestamp;
+ break;
+ }
+
+ effect.startOn += timestamp;
+ effect.finishOn += timestamp;
+
+ if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+ this.effects.push(effect);
+
+ if (!this.interval)
+ this.interval = setInterval(this.loop.bind(this), 15);
+ },
+ remove: function(effect) {
+ this.effects = this.effects.reject(function(e) { return e==effect });
+ if (this.effects.length == 0) {
+ clearInterval(this.interval);
+ this.interval = null;
+ }
+ },
+ loop: function() {
+ var timePos = new Date().getTime();
+ for(var i=0, len=this.effects.length;i<len;i++)
+ this.effects[i] && this.effects[i].loop(timePos);
+ }
+});
+
+Effect.Queues = {
+ instances: $H(),
+ get: function(queueName) {
+ if (!Object.isString(queueName)) return queueName;
+
+ return this.instances.get(queueName) ||
+ this.instances.set(queueName, new Effect.ScopedQueue());
+ }
+};
+Effect.Queue = Effect.Queues.get('global');
+
+Effect.Base = Class.create({
+ position: null,
+ start: function(options) {
+ function codeForEvent(options,eventName){
+ return (
+ (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
+ (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
+ );
+ }
+ if (options && options.transition === false) options.transition = Effect.Transitions.linear;
+ this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
+ this.currentFrame = 0;
+ this.state = 'idle';
+ this.startOn = this.options.delay*1000;
+ this.finishOn = this.startOn+(this.options.duration*1000);
+ this.fromToDelta = this.options.to-this.options.from;
+ this.totalTime = this.finishOn-this.startOn;
+ this.totalFrames = this.options.fps*this.options.duration;
+
+ this.render = (function() {
+ function dispatch(effect, eventName) {
+ if (effect.options[eventName + 'Internal'])
+ effect.options[eventName + 'Internal'](effect);
+ if (effect.options[eventName])
+ effect.options[eventName](effect);
+ }
+
+ return function(pos) {
+ if (this.state === "idle") {
+ this.state = "running";
+ dispatch(this, 'beforeSetup');
+ if (this.setup) this.setup();
+ dispatch(this, 'afterSetup');
+ }
+ if (this.state === "running") {
+ pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
+ this.position = pos;
+ dispatch(this, 'beforeUpdate');
+ if (this.update) this.update(pos);
+ dispatch(this, 'afterUpdate');
+ }
+ };
+ })();
+
+ this.event('beforeStart');
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).add(this);
+ },
+ loop: function(timePos) {
+ if (timePos >= this.startOn) {
+ if (timePos >= this.finishOn) {
+ this.render(1.0);
+ this.cancel();
+ this.event('beforeFinish');
+ if (this.finish) this.finish();
+ this.event('afterFinish');
+ return;
+ }
+ var pos = (timePos - this.startOn) / this.totalTime,
+ frame = (pos * this.totalFrames).round();
+ if (frame > this.currentFrame) {
+ this.render(pos);
+ this.currentFrame = frame;
+ }
+ }
+ },
+ cancel: function() {
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).remove(this);
+ this.state = 'finished';
+ },
+ event: function(eventName) {
+ if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+ if (this.options[eventName]) this.options[eventName](this);
+ },
+ inspect: function() {
+ var data = $H();
+ for(property in this)
+ if (!Object.isFunction(this[property])) data.set(property, this[property]);
+ return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
+ }
+});
+
+Effect.Parallel = Class.create(Effect.Base, {
+ initialize: function(effects) {
+ this.effects = effects || [];
+ this.start(arguments[1]);
+ },
+ update: function(position) {
+ this.effects.invoke('render', position);
+ },
+ finish: function(position) {
+ this.effects.each( function(effect) {
+ effect.render(1.0);
+ effect.cancel();
+ effect.event('beforeFinish');
+ if (effect.finish) effect.finish(position);
+ effect.event('afterFinish');
+ });
+ }
+});
+
+Effect.Tween = Class.create(Effect.Base, {
+ initialize: function(object, from, to) {
+ object = Object.isString(object) ? $(object) : object;
+ var args = $A(arguments), method = args.last(),
+ options = args.length == 5 ? args[3] : null;
+ this.method = Object.isFunction(method) ? method.bind(object) :
+ Object.isFunction(object[method]) ? object[method].bind(object) :
+ function(value) { object[method] = value };
+ this.start(Object.extend({ from: from, to: to }, options || { }));
+ },
+ update: function(position) {
+ this.method(position);
+ }
+});
+
+Effect.Event = Class.create(Effect.Base, {
+ initialize: function() {
+ this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
+ },
+ update: Prototype.emptyFunction
+});
+
+Effect.Opacity = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ // make this work on IE on elements without 'layout'
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ var options = Object.extend({
+ from: this.element.getOpacity() || 0.0,
+ to: 1.0
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ update: function(position) {
+ this.element.setOpacity(position);
+ }
+});
+
+Effect.Move = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ x: 0,
+ y: 0,
+ mode: 'relative'
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.element.makePositioned();
+ this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
+ this.originalTop = parseFloat(this.element.getStyle('top') || '0');
+ if (this.options.mode == 'absolute') {
+ this.options.x = this.options.x - this.originalLeft;
+ this.options.y = this.options.y - this.originalTop;
+ }
+ },
+ update: function(position) {
+ this.element.setStyle({
+ left: (this.options.x * position + this.originalLeft).round() + 'px',
+ top: (this.options.y * position + this.originalTop).round() + 'px'
+ });
+ }
+});
+
+// for backwards compatibility
+Effect.MoveBy = function(element, toTop, toLeft) {
+ return new Effect.Move(element,
+ Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
+};
+
+Effect.Scale = Class.create(Effect.Base, {
+ initialize: function(element, percent) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ scaleX: true,
+ scaleY: true,
+ scaleContent: true,
+ scaleFromCenter: false,
+ scaleMode: 'box', // 'box' or 'contents' or { } with provided values
+ scaleFrom: 100.0,
+ scaleTo: percent
+ }, arguments[2] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+ this.elementPositioning = this.element.getStyle('position');
+
+ this.originalStyle = { };
+ ['top','left','width','height','fontSize'].each( function(k) {
+ this.originalStyle[k] = this.element.style[k];
+ }.bind(this));
+
+ this.originalTop = this.element.offsetTop;
+ this.originalLeft = this.element.offsetLeft;
+
+ var fontSize = this.element.getStyle('font-size') || '100%';
+ ['em','px','%','pt'].each( function(fontSizeType) {
+ if (fontSize.indexOf(fontSizeType)>0) {
+ this.fontSize = parseFloat(fontSize);
+ this.fontSizeType = fontSizeType;
+ }
+ }.bind(this));
+
+ this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+
+ this.dims = null;
+ if (this.options.scaleMode=='box')
+ this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+ if (/^content/.test(this.options.scaleMode))
+ this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+ if (!this.dims)
+ this.dims = [this.options.scaleMode.originalHeight,
+ this.options.scaleMode.originalWidth];
+ },
+ update: function(position) {
+ var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+ if (this.options.scaleContent && this.fontSize)
+ this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
+ this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+ },
+ finish: function(position) {
+ if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+ },
+ setDimensions: function(height, width) {
+ var d = { };
+ if (this.options.scaleX) d.width = width.round() + 'px';
+ if (this.options.scaleY) d.height = height.round() + 'px';
+ if (this.options.scaleFromCenter) {
+ var topd = (height - this.dims[0])/2;
+ var leftd = (width - this.dims[1])/2;
+ if (this.elementPositioning == 'absolute') {
+ if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
+ if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+ } else {
+ if (this.options.scaleY) d.top = -topd + 'px';
+ if (this.options.scaleX) d.left = -leftd + 'px';
+ }
+ }
+ this.element.setStyle(d);
+ }
+});
+
+Effect.Highlight = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ // Prevent executing on elements not in the layout flow
+ if (this.element.getStyle('display')=='none') { this.cancel(); return; }
+ // Disable background image during the effect
+ this.oldStyle = { };
+ if (!this.options.keepBackgroundImage) {
+ this.oldStyle.backgroundImage = this.element.getStyle('background-image');
+ this.element.setStyle({backgroundImage: 'none'});
+ }
+ if (!this.options.endcolor)
+ this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
+ if (!this.options.restorecolor)
+ this.options.restorecolor = this.element.getStyle('background-color');
+ // init color calculations
+ this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
+ this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
+ },
+ update: function(position) {
+ this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
+ return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
+ },
+ finish: function() {
+ this.element.setStyle(Object.extend(this.oldStyle, {
+ backgroundColor: this.options.restorecolor
+ }));
+ }
+});
+
+Effect.ScrollTo = function(element) {
+ var options = arguments[1] || { },
+ scrollOffsets = document.viewport.getScrollOffsets(),
+ elementOffsets = $(element).cumulativeOffset();
+
+ if (options.offset) elementOffsets[1] += options.offset;
+
+ return new Effect.Tween(null,
+ scrollOffsets.top,
+ elementOffsets[1],
+ options,
+ function(p){ scrollTo(scrollOffsets.left, p.round()); }
+ );
+};
+
+/* ------------- combination effects ------------- */
+
+Effect.Fade = function(element) {
+ element = $(element);
+ var oldOpacity = element.getInlineOpacity();
+ var options = Object.extend({
+ from: element.getOpacity() || 1.0,
+ to: 0.0,
+ afterFinishInternal: function(effect) {
+ if (effect.options.to!=0) return;
+ effect.element.hide().setStyle({opacity: oldOpacity});
+ }
+ }, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Appear = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
+ to: 1.0,
+ // force Safari to render floated elements properly
+ afterFinishInternal: function(effect) {
+ effect.element.forceRerendering();
+ },
+ beforeSetup: function(effect) {
+ effect.element.setOpacity(effect.options.from).show();
+ }}, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Puff = function(element) {
+ element = $(element);
+ var oldStyle = {
+ opacity: element.getInlineOpacity(),
+ position: element.getStyle('position'),
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height
+ };
+ return new Effect.Parallel(
+ [ new Effect.Scale(element, 200,
+ { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+ Object.extend({ duration: 1.0,
+ beforeSetupInternal: function(effect) {
+ Position.absolutize(effect.effects[0].element);
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().setStyle(oldStyle); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindUp = function(element) {
+ element = $(element);
+ element.makeClipping();
+ return new Effect.Scale(element, 0,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ restoreAfterFinish: true,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindDown = function(element) {
+ element = $(element);
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: 0,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping();
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.SwitchOff = function(element) {
+ element = $(element);
+ var oldOpacity = element.getInlineOpacity();
+ return new Effect.Appear(element, Object.extend({
+ duration: 0.4,
+ from: 0,
+ transition: Effect.Transitions.flicker,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(effect.element, 1, {
+ duration: 0.3, scaleFromCenter: true,
+ scaleX: false, scaleContent: false, restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
+ }
+ });
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.DropOut = function(element) {
+ element = $(element);
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left'),
+ opacity: element.getInlineOpacity() };
+ return new Effect.Parallel(
+ [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+ Object.extend(
+ { duration: 0.5,
+ beforeSetup: function(effect) {
+ effect.effects[0].element.makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.Shake = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ distance: 20,
+ duration: 0.5
+ }, arguments[1] || {});
+ var distance = parseFloat(options.distance);
+ var split = parseFloat(options.duration) / 10.0;
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left') };
+ return new Effect.Move(element,
+ { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ effect.element.undoPositioned().setStyle(oldStyle);
+ }}); }}); }}); }}); }}); }});
+};
+
+Effect.SlideDown = function(element) {
+ element = $(element).cleanWhitespace();
+ // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: window.opera ? 0 : 1,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.SlideUp = function(element) {
+ element = $(element).cleanWhitespace();
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, window.opera ? 0 : 1,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ scaleMode: 'box',
+ scaleFrom: 100,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+ }
+ }, arguments[1] || { })
+ );
+};
+
+// Bug in opera makes the TD containing this element expand for a instance after finish
+Effect.Squish = function(element) {
+ return new Effect.Scale(element, window.opera ? 1 : 0, {
+ restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ });
+};
+
+Effect.Grow = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.full
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var initialMoveX, initialMoveY;
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ initialMoveX = initialMoveY = moveX = moveY = 0;
+ break;
+ case 'top-right':
+ initialMoveX = dims.width;
+ initialMoveY = moveY = 0;
+ moveX = -dims.width;
+ break;
+ case 'bottom-left':
+ initialMoveX = moveX = 0;
+ initialMoveY = dims.height;
+ moveY = -dims.height;
+ break;
+ case 'bottom-right':
+ initialMoveX = dims.width;
+ initialMoveY = dims.height;
+ moveX = -dims.width;
+ moveY = -dims.height;
+ break;
+ case 'center':
+ initialMoveX = dims.width / 2;
+ initialMoveY = dims.height / 2;
+ moveX = -dims.width / 2;
+ moveY = -dims.height / 2;
+ break;
+ }
+
+ return new Effect.Move(element, {
+ x: initialMoveX,
+ y: initialMoveY,
+ duration: 0.01,
+ beforeSetup: function(effect) {
+ effect.element.hide().makeClipping().makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ new Effect.Parallel(
+ [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+ new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+ new Effect.Scale(effect.element, 100, {
+ scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+ sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+ ], Object.extend({
+ beforeSetup: function(effect) {
+ effect.effects[0].element.setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
+ }
+ }, options)
+ );
+ }
+ });
+};
+
+Effect.Shrink = function(element) {
+ element = $(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.none
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ moveX = moveY = 0;
+ break;
+ case 'top-right':
+ moveX = dims.width;
+ moveY = 0;
+ break;
+ case 'bottom-left':
+ moveX = 0;
+ moveY = dims.height;
+ break;
+ case 'bottom-right':
+ moveX = dims.width;
+ moveY = dims.height;
+ break;
+ case 'center':
+ moveX = dims.width / 2;
+ moveY = dims.height / 2;
+ break;
+ }
+
+ return new Effect.Parallel(
+ [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+ new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+ new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+ ], Object.extend({
+ beforeStartInternal: function(effect) {
+ effect.effects[0].element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
+ }, options)
+ );
+};
+
+Effect.Pulsate = function(element) {
+ element = $(element);
+ var options = arguments[1] || { },
+ oldOpacity = element.getInlineOpacity(),
+ transition = options.transition || Effect.Transitions.linear,
+ reverser = function(pos){
+ return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
+ };
+
+ return new Effect.Opacity(element,
+ Object.extend(Object.extend({ duration: 2.0, from: 0,
+ afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
+ }, options), {transition: reverser}));
+};
+
+Effect.Fold = function(element) {
+ element = $(element);
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height };
+ element.makeClipping();
+ return new Effect.Scale(element, 5, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(element, 1, {
+ scaleContent: false,
+ scaleY: false,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().setStyle(oldStyle);
+ } });
+ }}, arguments[1] || { }));
+};
+
+Effect.Morph = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = $(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ style: { }
+ }, arguments[1] || { });
+
+ if (!Object.isString(options.style)) this.style = $H(options.style);
+ else {
+ if (options.style.include(':'))
+ this.style = options.style.parseStyle();
+ else {
+ this.element.addClassName(options.style);
+ this.style = $H(this.element.getStyles());
+ this.element.removeClassName(options.style);
+ var css = this.element.getStyles();
+ this.style = this.style.reject(function(style) {
+ return style.value == css[style.key];
+ });
+ options.afterFinishInternal = function(effect) {
+ effect.element.addClassName(effect.options.style);
+ effect.transforms.each(function(transform) {
+ effect.element.style[transform.style] = '';
+ });
+ };
+ }
+ }
+ this.start(options);
+ },
+
+ setup: function(){
+ function parseColor(color){
+ if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
+ color = color.parseColor();
+ return $R(0,2).map(function(i){
+ return parseInt( color.slice(i*2+1,i*2+3), 16 );
+ });
+ }
+ this.transforms = this.style.map(function(pair){
+ var property = pair[0], value = pair[1], unit = null;
+
+ if (value.parseColor('#zzzzzz') != '#zzzzzz') {
+ value = value.parseColor();
+ unit = 'color';
+ } else if (property == 'opacity') {
+ value = parseFloat(value);
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ } else if (Element.CSS_LENGTH.test(value)) {
+ var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
+ value = parseFloat(components[1]);
+ unit = (components.length == 3) ? components[2] : null;
+ }
+
+ var originalValue = this.element.getStyle(property);
+ return {
+ style: property.camelize(),
+ originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
+ targetValue: unit=='color' ? parseColor(value) : value,
+ unit: unit
+ };
+ }.bind(this)).reject(function(transform){
+ return (
+ (transform.originalValue == transform.targetValue) ||
+ (
+ transform.unit != 'color' &&
+ (isNaN(transform.originalValue) || isNaN(transform.targetValue))
+ )
+ );
+ });
+ },
+ update: function(position) {
+ var style = { }, transform, i = this.transforms.length;
+ while(i--)
+ style[(transform = this.transforms[i]).style] =
+ transform.unit=='color' ? '#'+
+ (Math.round(transform.originalValue[0]+
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
+ (Math.round(transform.originalValue[1]+
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
+ (Math.round(transform.originalValue[2]+
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
+ (transform.originalValue +
+ (transform.targetValue - transform.originalValue) * position).toFixed(3) +
+ (transform.unit === null ? '' : transform.unit);
+ this.element.setStyle(style, true);
+ }
+});
+
+Effect.Transform = Class.create({
+ initialize: function(tracks){
+ this.tracks = [];
+ this.options = arguments[1] || { };
+ this.addTracks(tracks);
+ },
+ addTracks: function(tracks){
+ tracks.each(function(track){
+ track = $H(track);
+ var data = track.values().first();
+ this.tracks.push($H({
+ ids: track.keys().first(),
+ effect: Effect.Morph,
+ options: { style: data }
+ }));
+ }.bind(this));
+ return this;
+ },
+ play: function(){
+ return new Effect.Parallel(
+ this.tracks.map(function(track){
+ var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
+ var elements = [$(ids) || $$(ids)].flatten();
+ return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
+ }).flatten(),
+ this.options
+ );
+ }
+});
+
+Element.CSS_PROPERTIES = $w(
+ 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
+ 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
+ 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
+ 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
+ 'fontSize fontWeight height left letterSpacing lineHeight ' +
+ 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
+ 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
+ 'right textIndent top width wordSpacing zIndex');
+
+Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
+
+String.__parseStyleElement = document.createElement('div');
+String.prototype.parseStyle = function(){
+ var style, styleRules = $H();
+ if (Prototype.Browser.WebKit)
+ style = new Element('div',{style:this}).style;
+ else {
+ String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
+ style = String.__parseStyleElement.childNodes[0].style;
+ }
+
+ Element.CSS_PROPERTIES.each(function(property){
+ if (style[property]) styleRules.set(property, style[property]);
+ });
+
+ if (Prototype.Browser.IE && this.include('opacity'))
+ styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
+
+ return styleRules;
+};
+
+if (document.defaultView && document.defaultView.getComputedStyle) {
+ Element.getStyles = function(element) {
+ var css = document.defaultView.getComputedStyle($(element), null);
+ return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
+ styles[property] = css[property];
+ return styles;
+ });
+ };
+} else {
+ Element.getStyles = function(element) {
+ element = $(element);
+ var css = element.currentStyle, styles;
+ styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
+ results[property] = css[property];
+ return results;
+ });
+ if (!styles.opacity) styles.opacity = element.getOpacity();
+ return styles;
+ };
+}
+
+Effect.Methods = {
+ morph: function(element, style) {
+ element = $(element);
+ new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
+ return element;
+ },
+ visualEffect: function(element, effect, options) {
+ element = $(element);
+ var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
+ new Effect[klass](element, options);
+ return element;
+ },
+ highlight: function(element, options) {
+ element = $(element);
+ new Effect.Highlight(element, options);
+ return element;
+ }
+};
+
+$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
+ 'pulsate shake puff squish switchOff dropOut').each(
+ function(effect) {
+ Effect.Methods[effect] = function(element, options){
+ element = $(element);
+ Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
+ return element;
+ };
+ }
+);
+
+$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
+ function(f) { Effect.Methods[f] = Element[f]; }
+);
+
+Element.addMethods(Effect.Methods); \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js
new file mode 100644
index 0000000..640c9b1
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js
@@ -0,0 +1,750 @@
+/*
+ FYI:
+ "restoreAfterFinish" is only used by Scale and all its subclasses and puts the element
+ back where it was the size that it was.
+
+ Bugs:
+ SlideLeftIn still doesn't work on IE ???
+
+ 'delete' does not work on IE
+
+ Cannot set styles of table items in Builder.node due to IE bug
+
+ stray commas after last item in lists causes IE to fail
+
+
+ Effect.toggle on these effects doesn't seem to work quite right
+ ( Effect.toggle('demo-effect-curtainopen','slideleft') )
+
+ Not allowing Effect.Curtain* to finish before clicking again causes a problem.
+
+ Not allowing MOST effects to finish before clicking again causes a problem.
+*/
+
+
+/* This declaration doesn't show up correctly when using Firebug */
+/*
+ Also, these toggles don't seem to work right either
+ OK: slideup, slidedown, slideright
+ NOT: slideleft, curtain
+*/
+Effect.PAIRS = Object.extend(
+ Effect.PAIRS, {
+ 'slidedown': ['SlideDownIn', 'SlideDownOut'],
+ 'slideup': ['SlideUpIn', 'SlideUpOut'],
+ 'slideleft': ['SlideLeftIn', 'SlideLeftOut'],
+ 'slideright': ['SlideRightIn', 'SlideRightOut'],
+ 'curtain': ['CurtainClose', 'CurtainOpen']
+ }
+);
+
+
+Object.extend(
+ Effect, {
+ _elementIsNotAListError: {
+ name: 'ElementIsNotAListError',
+ message: 'The specified DOM element is not a list exist, but is required to be for this effect to operate'
+ }
+ }
+);
+
+
+Effect.PulseList = Class.create();
+Object.extend(Object.extend(Effect.PulseList.prototype, Effect.Base.prototype), {
+ initialize: function(element) {
+ this.element = $(element);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
+// if( (this.element.tagName != "UL") && (this.element.tagName != "OL") )
+ if( ! ['UL','OL'].include(this.element.tagName) )
+ throw(Effect._elementIsNotAListError);
+ if ( ! this.element.effectOn ) {
+ this.element.effectOn = true;
+ var options = Object.extend({
+ _pulse: 1,
+ direction: "down", // up or down
+ pulses: 1,
+ continuous: false,
+ bounce: false,
+ duration: 2,
+ min_opacity: 0.1
+ }, arguments[1] || {});
+ this.start(options);
+ }
+ },
+ setup: function() {
+ var num_items = this.element.immediateDescendants().size();
+ var i = 1;
+ var self = this;
+ this.element.immediateDescendants().each( function(myitem){
+ var mydelay = (self.options.direction == "down" )
+ ? (i++ - 1)/num_items
+ : (num_items - i++)/num_items;
+ var reverser = function(pos){ return Effect.Transitions.sinoidal(1-Effect.Transitions.pulse(pos, 1)) }
+ new Effect.Opacity(myitem,
+ Object.extend(Object.extend({
+ delay: mydelay,
+ duration: self.options.duration,
+ from: self.options.min_opacity,
+ afterFinishInternal: function(effect) {
+ if ( ! ( self.options.direction == 'down' ? myitem.next() : myitem.previous() ) ) {
+ if ( ( self.options.continuous ) || ( self.options._pulse++ < self.options.pulses ) ){
+ if ( self.options.bounce)
+ self.options.direction = ( self.options.direction == 'up' ) ? 'down' : 'up';
+ new Effect.PulseList(effect.element.parentNode, self.options || {} );
+ }
+ }
+ }
+ }, {}), {transition: reverser})
+ );
+ });
+ },
+ finish: function() {
+// delete(this.element.effectOn);
+ this.element.effectOn = false;
+ }
+});
+
+
+Effect.Gradient = Class.create();
+Object.extend(Object.extend(Effect.Gradient.prototype, Effect.Base.prototype), {
+ initialize: function(element) {
+ this.element = $(element);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ duration: 5,
+ rows: 10,
+ cols: 10,
+ type: 'diagonal', /* vertical, horizontal, diagonal */
+ colors: [ 'black', 'white', 'white', 'black' ]
+ }, arguments[1] || {});
+ if (options.type == 'horizontal') options.rows = 1;
+ else if (options.type == 'vertical') options.cols = 1;
+
+ dims = this.element.getDimensions();
+ cellwidth = dims.width / options.cols;
+ cellheight = dims.height / options.rows;
+ this.cellids = [];
+ var self = this;
+ this.table = Builder.node('table', {
+ border: 0, cellpadding: 0, cellspacing: 0,
+ style:"margin: 0px; padding: 0px;"
+ });
+ tbody = Builder.node('tbody');
+ $(tbody).setStyle({ margin: 0, padding: 0 });
+ $R(1,options.rows).each( function(row){
+ tr = Builder.node('tr');
+ $(tr).setStyle({ margin: 0, padding: 0 });
+ if (options.type == 'vertical') {
+ cellcolor = Color.shade(
+ Color.string2hex(options.colors[0]),
+ Color.string2hex(options.colors[1]),
+ (row-1)/(options.rows-1)
+ );
+ }
+ $R(1,options.cols).each( function(col){
+ cellid = "grcell-"+row+"-"+col;
+ if (options.type == 'diagonal') {
+ cellcolor = Color.shade(
+ Color.shade(
+ Color.string2hex(options.colors[0]),
+ Color.string2hex(options.colors[1]),
+ (col-1)/(options.cols-1)
+ ),
+ Color.shade(
+ Color.string2hex(options.colors[2]),
+ Color.string2hex(options.colors[3]),
+ (col-1)/(options.cols-1)
+ ),
+ (row-1)/(options.rows-1)
+ );
+ } else if (options.type == 'horizontal') {
+ cellcolor = Color.shade(
+ Color.string2hex(options.colors[0]),
+ Color.string2hex(options.colors[1]),
+ (col-1)/(options.cols-1)
+ );
+ }
+ td = Builder.node('td',{
+ id: cellid
+ }, "" );
+ $(td).setStyle({ margin: '0px', padding: '0px',
+ height: cellheight+'px',
+ width: cellwidth+'px',
+ backgroundColor: cellcolor
+ });
+ tr.appendChild(td);
+ self.cellids.push(cellid);
+ });
+ tbody.appendChild(tr);
+ });
+ this.table.appendChild(tbody);
+
+ this.start(options);
+ },
+ setup: function(){
+ Position.absolutize(this.element);
+ this.element.parentNode.appendChild(this.table);
+ Position.absolutize(this.table);
+ },
+ finish: function(){
+ new Effect.Fade( this.table , {
+ afterFinish: function(effect) {
+ effect.element.parentNode.removeChild(effect.element);
+ }
+ });
+ }
+});
+
+Effect.ORIGGradient = Class.create();
+Object.extend(Object.extend(Effect.ORIGGradient.prototype, Effect.Base.prototype), {
+ initialize: function(element) {
+ this.element = $(element);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ duration: 5,
+ rows: 10,
+ cols: 10,
+ type: 'diagonal', /* vertical, horizontal, diagonal */
+ colors: [ 'black', 'white', 'white', 'black' ]
+ }, arguments[1] || {});
+ if (options.type == 'horizontal') options.rows = 1;
+ else if (options.type == 'vertical') options.cols = 1;
+
+ dims = this.element.getDimensions();
+ cellwidth = dims.width / options.cols;
+ cellheight = dims.height / options.rows;
+ this.cellids = [];
+ var self = this;
+ this.table = Builder.node('table', {
+ border: 0, cellpadding: 0, cellspacing: 0,
+ style:"margin: 0px; padding: 0px;"
+ });
+ tbody = Builder.node('tbody', { style:"margin: 0px; padding: 0px;" });
+ $R(1,options.rows).each( function(row){
+ tr = Builder.node('tr', { style:"margin: 0px; padding: 0px;" });
+ if (options.type == 'vertical') {
+ cellcolor = Color.shade(
+ Color.string2hex(options.colors[0]),
+ Color.string2hex(options.colors[1]),
+ (row-1)/(options.rows-1)
+ );
+ }
+ $R(1,options.cols).each( function(col){
+ cellid = "grcell-"+row+"-"+col;
+ if (options.type == 'diagonal') {
+ cellcolor = Color.shade(
+ Color.shade(
+ Color.string2hex(options.colors[0]),
+ Color.string2hex(options.colors[1]),
+ (col-1)/(options.cols-1)
+ ),
+ Color.shade(
+ Color.string2hex(options.colors[2]),
+ Color.string2hex(options.colors[3]),
+ (col-1)/(options.cols-1)
+ ),
+ (row-1)/(options.rows-1)
+ );
+ } else if (options.type == 'horizontal') {
+ cellcolor = Color.shade(
+ Color.string2hex(options.colors[0]),
+ Color.string2hex(options.colors[1]),
+ (col-1)/(options.cols-1)
+ );
+ }
+ td = Builder.node('td',{
+ id: cellid,
+ style:"margin: 0px; padding: 0px; "
+ +"height: "+cellheight+"px; "
+ +"width: "+cellwidth+"px; "
+ +"background-color: "+cellcolor
+ }, "" );
+ tr.appendChild(td);
+ self.cellids.push(cellid);
+ });
+ tbody.appendChild(tr);
+ });
+ this.table.appendChild(tbody);
+
+ Position.absolutize(this.element);
+ this.element.parentNode.appendChild(this.table);
+ Position.absolutize(this.table);
+ this.start(options);
+ },
+ finish: function(){
+ new Effect.Fade( this.table , {
+ afterFinish: function(effect) {
+ effect.element.parentNode.removeChild(effect.element);
+ }
+ });
+ }
+});
+
+
+Effect.Pixelate = Class.create();
+Object.extend(Object.extend(Effect.Pixelate.prototype, Effect.Base.prototype), {
+ initialize: function(element) {
+ this.element = $(element);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ duration: 5,
+ rows: 30,
+ cols: 30,
+ startcolor: 'transparent',
+ endcolor: 'white'
+ }, arguments[1] || {});
+ options.cells = options.rows * options.cols;
+
+ dims = this.element.getDimensions();
+ cellwidth = dims.width / options.cols;
+ cellheight = dims.height / options.rows;
+ this.cellids = [];
+ this.table = Builder.node('table', {
+ border: 0, cellpadding: 0, cellspacing: 0,
+ style:"margin: 0px; padding: 0px;"
+ });
+ /* Cannot set styles of table items in Builder.node due to IE bug */
+ var self = this;
+ tbody = Builder.node('tbody');
+ $(tbody).setStyle({ margin: 0, padding: 0 });
+ $R(1,options.rows).each( function(row){
+ tr = Builder.node('tr');
+ $(tr).setStyle({ margin: '0px', padding: '0px' });
+ $R(1,options.cols).each( function(col){
+ cellid = "pxcell-"+row+"-"+col;
+ td = Builder.node('td',{
+ id: cellid
+ }, '');
+ $(td).setStyle({ margin: '0px', padding: '0px',
+ height: cellheight+'px',
+ width: cellwidth+'px',
+ backgroundColor: options.startcolor
+ });
+ tr.appendChild(td);
+ self.cellids.push(cellid);
+ });
+ tbody.appendChild(tr);
+ });
+ this.cellids.sort( function(a,b){return (0.5 - Math.random());} );
+ this.table.appendChild(tbody);
+ this.start(options);
+ },
+ setup: function() {
+ Position.absolutize(this.element);
+ this.element.parentNode.appendChild(this.table);
+ Position.absolutize(this.table);
+ },
+ update: function(position) {
+ while ( this.cellids.size() && (this.cellids.size()/this.options.cells) > (1-position) ) {
+ $(this.cellids.pop()).setStyle({ backgroundColor: this.options.endcolor });
+ }
+ },
+ finish: function(){
+ new Effect.Fade( this.table , {
+ afterFinish: function(effect) {
+ effect.element.parentNode.removeChild(effect.element);
+ }
+ });
+ }
+});
+
+
+
+Effect.Duplicate = Class.create();
+Object.extend(Object.extend(Effect.Duplicate.prototype, Effect.Base.prototype), {
+ initialize: function(element) {
+ this.element = $(element);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
+
+ this.element.makePositioned();
+ this.elecopy = this.element.cloneNode(true);
+ this.elecopy.setStyle({ color: 'red', backgroundColor: 'red', backgroundImage: '' });
+ this.elecopy.id = element.id + '-copy';
+ this.element.parentNode.appendChild(this.elecopy);
+ Position.relativize(this.element);
+ Position.relativize(this.elecopy);
+ Position.absolutize(this.element);
+ Position.absolutize(this.elecopy);
+
+ var options = Object.extend({
+ }, arguments[1] || {});
+ this.start(options);
+ },
+ asetup: function() {
+ return new Effect.Parallel ( [
+ new Effect.SlideRightIn(this.element, { sync:true }),
+ new Effect.SlideLeftIn( this.elecopy, { sync:true })
+ ], Object.extend({
+ duration: 2
+ }, arguments[1] || {})
+ );
+ },
+ update: function(position) {
+ },
+ finish: function() {
+ this.elecopy.undoClipping().undoPositioned().remove();
+ }
+});
+
+Effect.Flicker = Class.create();
+Object.extend(Object.extend(Effect.Flicker.prototype, Effect.Base.prototype), {
+ initialize: function(element) {
+ this.element = $(element);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
+ if ( ! this.element.effectOn ) {
+ this.element.effectOn = true;
+ var options = Object.extend({
+ threshold: 0.5,
+ endvisibility: "visible"
+ }, arguments[1] || {});
+ this.start(options);
+ }
+ },
+ update: function(position) {
+ var visibility = ( Math.random() < this.options.threshold ) ? "hidden" : "visible";
+ this.element.setStyle({
+ visibility: visibility
+ });
+ },
+ finish: function() {
+ this.element.setStyle({
+ visibility: this.options.endvisibility
+ });
+// delete(this.element.effectOn);
+ this.element.effectOn = false;
+ }
+});
+
+
+Effect.CurtainClose = function(element) {
+/*
+ CurtainClose need to have the content of the element wrapped in a container element with fixed width AND height!
+*/
+ element = $(element).cleanWhitespace();
+ var elementDimensions = element.getDimensions();
+
+ element.makeClipping().makePositioned();
+ element.parentNode.makeClipping(); // stops SlideLeftIn flicker
+ elecopy = $(element.cloneNode(true));
+ elecopy.setStyle({ top: '0px', left: '0px' });
+ elecopy.id = element.id + '-copy';
+ element.parentNode.appendChild(elecopy);
+ elecopy.makeClipping().makePositioned();
+ Position.absolutize(element);
+
+ return new Effect.Parallel ( [
+ new Effect.SlideRightIn(element, { sync:true }),
+ new Effect.SlideLeftIn( elecopy, { sync:true })
+ ], Object.extend({
+ duration: 2,
+ afterFinishInternal: function(effect){
+ elecopy.undoClipping().undoPositioned().remove();
+/* why does the above work and the below does not? */
+// effect.effects[1].element.undoClipping().undoPositioned().remove();
+ effect.effects[0].element.parentNode.undoClipping();
+ }
+ }, arguments[1] || {})
+ );
+}
+
+Effect.CurtainOpen = function(element) {
+/*
+ CurtainOpen need to have the content of the element wrapped in a container element with fixed width AND height!
+*/
+ element = $(element).cleanWhitespace();
+
+ element.makeClipping().makePositioned();
+ element.parentNode.makeClipping();
+ elecopy = element.cloneNode(true);
+ elecopy.setStyle({ top: '0px' });
+ elecopy.id = element.id + '-copy';
+ element.parentNode.appendChild(elecopy);
+ Position.absolutize(element);
+ Position.absolutize(elecopy);
+
+ var elementDimensions = element.getDimensions();
+ return new Effect.Parallel ( [
+ new Effect.SlideRightOut(element, { sync:true }),
+ new Effect.SlideLeftOut( elecopy, { sync:true })
+ ], Object.extend({
+ duration: 2,
+ beforeSetup: function(effect){
+ effect.effects[1].element.makeClipping().makePositioned().show();
+ },
+ afterFinishInternal: function(effect){
+ element.undoClipping().undoPositioned();
+/* why does the above work and the below does not? */
+// effect.effects[0].element.undoClipping().undoPositioned();
+ effect.effects[1].element.parentNode.undoClipping();
+ effect.effects[1].element.undoClipping().undoPositioned().remove();
+ }
+ }, arguments[1] || {})
+ );
+}
+
+
+Effect.SlideLeftIn = function(element) {
+/*
+ SlideLeftIn need to have the content of the element wrapped in a container element with fixed width!
+*/
+ element = $(element).cleanWhitespace();
+ if ( ! element.effectOn ) {
+ element.effectOn = true;
+ var elementDimensions = element.getDimensions();
+ return new Effect.Parallel ( [
+ new Effect.Move(element,
+ Object.extend({
+ x: -(elementDimensions.width),
+ sync: true,
+ mode: 'relative',
+ beforeStartInternal: function(effect) {
+ if(window.opera) effect.element.setStyle({left: ''});
+ effect.element.setStyle({left: elementDimensions.width + 'px' });
+ effect.element.show();
+ }
+ }, arguments[1] || {})
+ ),
+ new Effect.Scale(element, 100,
+ Object.extend({ scaleContent: false,
+ /* why does the use of sync: true make this flicker? */
+ scaleY: false,
+ scaleFrom: window.opera ? 0 : 1
+ }, arguments[1] || {})
+ )
+ ], Object.extend({
+ beforeSetup: function(effect){
+ effect.effects[0].element.parentNode.makeClipping();
+ effect.effects[0].element.makeClipping();
+ },
+ afterFinishInternal: function(effect){
+ effect.effects[0].element.parentNode.undoClipping();
+ effect.effects[0].element.undoClipping();
+ },
+ afterFinish: function(effect){
+// delete(effect.effects[0].element.effectOn);
+ effect.effects[0].element.effectOn = false;
+ }
+ }, arguments[1] || {})
+ );
+ }
+}
+
+
+Effect.SlideRightOut = function(element) {
+/*
+ SlideRightOut need to have the content of the element wrapped in a container element with fixed width!
+*/
+ element = $(element).cleanWhitespace();
+ var elementDimensions = element.getDimensions();
+ return new Effect.Parallel ( [
+ new Effect.Move(element, { x: element.getWidth(), sync: true, mode: 'relative' }),
+ new Effect.Scale(element, window.opera ? 0 : 1, {
+ sync: true,
+ scaleContent: false,
+ scaleY: false,
+ scaleFrom: 100,
+ restoreAfterFinish: true
+ })
+ ], Object.extend({
+ beforeSetup: function(effect){
+ effect.effects[0].element.makeClipping();
+ },
+ afterFinishInternal: function(effect){
+ effect.effects[0].element.undoClipping().hide();
+ }
+ }, arguments[1] || {})
+ );
+}
+
+
+
+/* from SlideUp */
+Effect.SlideLeftOut = function(element) {
+/*
+ SlideLeftOut needs to have the content of the element wrapped in a container element with fixed width
+ otherwise any text or images begin to wrap in stange ways!
+*/
+ element = $(element).cleanWhitespace();
+ return new Effect.Scale(element, window.opera ? 0 : 1,
+ Object.extend({
+ scaleContent: false,
+ scaleY: false,
+ scaleMode: 'box',
+ scaleFrom: 100,
+ restoreAfterFinish: true,
+ beforeStartInternal: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if(window.opera) effect.element.setStyle({left: ''});
+ effect.element.makeClipping().show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle(
+ {right: (effect.dims[1] - effect.element.clientWidth) + 'px' }
+ );
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned();
+ effect.element.down().undoPositioned();
+ }
+ }, arguments[1] || {})
+ );
+}
+
+
+/* from SlideDown */
+Effect.SlideRightIn = function(element) {
+/*
+ SlideRightIn needs to have the content of the element wrapped in a container element with fixed width!
+*/
+ element = $(element).cleanWhitespace();
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100,
+ Object.extend({
+ scaleContent: false,
+ scaleY: false,
+ scaleFrom: window.opera ? 0 : 1,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if(window.opera) effect.element.setStyle({left: ''});
+ effect.element.makeClipping().setStyle({width: '0px'}).show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({right: (effect.dims[1] - effect.element.clientWidth) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping().undoPositioned();
+ effect.element.down().undoPositioned();
+ }
+ }, arguments[1] || {})
+ );
+}
+
+
+
+Effect.SlideUpIn = function(element) {
+/*
+ SlideUpIn need to have the content of the element wrapped in a container element with fixed height!
+*/
+ element = $(element).cleanWhitespace();
+ var elementDimensions = element.getDimensions();
+ return new Effect.Parallel ( [
+ new Effect.Move(element, { y: -(element.getHeight()), sync: true, mode: 'relative' }),
+ new Effect.Scale(element, 100,
+ Object.extend({
+ sync: true,
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: 0,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ beforeSetup: function(effect) {
+ effect.element.hide();
+ },
+ afterSetup: function(effect) {
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping();
+ }
+ }, arguments[1] || {})
+ )
+ ], Object.extend({
+ afterSetup: function(effect) {
+ effect.effects[0].element.setStyle({top: elementDimensions.height + 'px' });
+ }
+ }, arguments[1] || {}));
+}
+
+
+Effect.SlideDownOut = function(element) {
+/*
+ SlideDown need to have the content of the element wrapped in a container element with fixed height!
+*/
+ element = $(element).cleanWhitespace();
+ var elementDimensions = element.getDimensions();
+ return new Effect.Parallel ( [
+ new Effect.Move(element, { y: element.getHeight(), sync: true, mode: 'relative' }),
+ new Effect.Scale(element, 0,
+ Object.extend({
+ sync: true,
+ scaleContent: false,
+ scaleX: false,
+ restoreAfterFinish: true,
+ beforeSetup: function(effect){
+ effect.element.makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ }, arguments[1] || {})
+ )
+ ], Object.extend({
+ }, arguments[1] || {}));
+}
+
+
+
+/* this is the original SlideDown */
+Effect.SlideDownIn = function(element) {
+ element = $(element).cleanWhitespace();
+ // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100,
+ Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: window.opera ? 0 : 1,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if(window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+ }
+ }, arguments[1] || {})
+ );
+}
+
+/* this is the original SlideUp */
+Effect.SlideUpOut = function(element) {
+ element = $(element).cleanWhitespace();
+ var oldInnerBottom = element.down().getStyle('bottom');
+ return new Effect.Scale(element, window.opera ? 0 : 1,
+ Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleMode: 'box',
+ scaleFrom: 100,
+ restoreAfterFinish: true,
+ beforeStartInternal: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if(window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
+ effect.element.down().undoPositioned();
+ }
+ }, arguments[1] || {})
+ );
+}
+
+
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/scriptaculous.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/scriptaculous.js
new file mode 100644
index 0000000..3e5543b
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/scriptaculous.js
@@ -0,0 +1,60 @@
+// script.aculo.us scriptaculous.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Scriptaculous = {
+ Version: '1.8.2',
+ require: function(libraryName) {
+ // inserting via DOM fails in Safari 2.0, so brute force approach
+ document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
+ },
+ REQUIRED_PROTOTYPE: '1.6.0.3',
+ load: function() {
+ function convertVersionString(versionString) {
+ var v = versionString.replace(/_.*|\./g, '');
+ v = parseInt(v + '0'.times(4-v.length));
+ return versionString.indexOf('_') > -1 ? v-1 : v;
+ }
+
+ if((typeof Prototype=='undefined') ||
+ (typeof Element == 'undefined') ||
+ (typeof Element.Methods=='undefined') ||
+ (convertVersionString(Prototype.Version) <
+ convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
+ throw("script.aculo.us requires the Prototype JavaScript framework >= " +
+ Scriptaculous.REQUIRED_PROTOTYPE);
+
+ var js = /scriptaculous\.js(\?.*)?$/;
+ $$('head script[src]').findAll(function(s) {
+ return s.src.match(js);
+ }).each(function(s) {
+ var path = s.src.replace(js, ''),
+ includes = s.src.match(/\?.*load=([a-z,]*)/);
+ (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
+ function(include) { Scriptaculous.require(path+include+'.js') });
+ });
+ }
+};
+
+Scriptaculous.load(); \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/slider.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/slider.js
new file mode 100644
index 0000000..40b7371
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/slider.js
@@ -0,0 +1,275 @@
+// script.aculo.us slider.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Marty Haught, Thomas Fuchs
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if (!Control) var Control = { };
+
+// options:
+// axis: 'vertical', or 'horizontal' (default)
+//
+// callbacks:
+// onChange(value)
+// onSlide(value)
+Control.Slider = Class.create({
+ initialize: function(handle, track, options) {
+ var slider = this;
+
+ if (Object.isArray(handle)) {
+ this.handles = handle.collect( function(e) { return $(e) });
+ } else {
+ this.handles = [$(handle)];
+ }
+
+ this.track = $(track);
+ this.options = options || { };
+
+ this.axis = this.options.axis || 'horizontal';
+ this.increment = this.options.increment || 1;
+ this.step = parseInt(this.options.step || '1');
+ this.range = this.options.range || $R(0,1);
+
+ this.value = 0; // assure backwards compat
+ this.values = this.handles.map( function() { return 0 });
+ this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
+ this.options.startSpan = $(this.options.startSpan || null);
+ this.options.endSpan = $(this.options.endSpan || null);
+
+ this.restricted = this.options.restricted || false;
+
+ this.maximum = this.options.maximum || this.range.end;
+ this.minimum = this.options.minimum || this.range.start;
+
+ // Will be used to align the handle onto the track, if necessary
+ this.alignX = parseInt(this.options.alignX || '0');
+ this.alignY = parseInt(this.options.alignY || '0');
+
+ this.trackLength = this.maximumOffset() - this.minimumOffset();
+
+ this.handleLength = this.isVertical() ?
+ (this.handles[0].offsetHeight != 0 ?
+ this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
+ (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
+ this.handles[0].style.width.replace(/px$/,""));
+
+ this.active = false;
+ this.dragging = false;
+ this.disabled = false;
+
+ if (this.options.disabled) this.setDisabled();
+
+ // Allowed values array
+ this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
+ if (this.allowedValues) {
+ this.minimum = this.allowedValues.min();
+ this.maximum = this.allowedValues.max();
+ }
+
+ this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.update.bindAsEventListener(this);
+
+ // Initialize handles in reverse (make sure first handle is active)
+ this.handles.each( function(h,i) {
+ i = slider.handles.length-1-i;
+ slider.setValue(parseFloat(
+ (Object.isArray(slider.options.sliderValue) ?
+ slider.options.sliderValue[i] : slider.options.sliderValue) ||
+ slider.range.start), i);
+ h.makePositioned().observe("mousedown", slider.eventMouseDown);
+ });
+
+ this.track.observe("mousedown", this.eventMouseDown);
+ document.observe("mouseup", this.eventMouseUp);
+ document.observe("mousemove", this.eventMouseMove);
+
+ this.initialized = true;
+ },
+ dispose: function() {
+ var slider = this;
+ Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ this.handles.each( function(h) {
+ Event.stopObserving(h, "mousedown", slider.eventMouseDown);
+ });
+ },
+ setDisabled: function(){
+ this.disabled = true;
+ },
+ setEnabled: function(){
+ this.disabled = false;
+ },
+ getNearestValue: function(value){
+ if (this.allowedValues){
+ if (value >= this.allowedValues.max()) return(this.allowedValues.max());
+ if (value <= this.allowedValues.min()) return(this.allowedValues.min());
+
+ var offset = Math.abs(this.allowedValues[0] - value);
+ var newValue = this.allowedValues[0];
+ this.allowedValues.each( function(v) {
+ var currentOffset = Math.abs(v - value);
+ if (currentOffset <= offset){
+ newValue = v;
+ offset = currentOffset;
+ }
+ });
+ return newValue;
+ }
+ if (value > this.range.end) return this.range.end;
+ if (value < this.range.start) return this.range.start;
+ return value;
+ },
+ setValue: function(sliderValue, handleIdx){
+ if (!this.active) {
+ this.activeHandleIdx = handleIdx || 0;
+ this.activeHandle = this.handles[this.activeHandleIdx];
+ this.updateStyles();
+ }
+ handleIdx = handleIdx || this.activeHandleIdx || 0;
+ if (this.initialized && this.restricted) {
+ if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
+ sliderValue = this.values[handleIdx-1];
+ if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
+ sliderValue = this.values[handleIdx+1];
+ }
+ sliderValue = this.getNearestValue(sliderValue);
+ this.values[handleIdx] = sliderValue;
+ this.value = this.values[0]; // assure backwards compat
+
+ this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
+ this.translateToPx(sliderValue);
+
+ this.drawSpans();
+ if (!this.dragging || !this.event) this.updateFinished();
+ },
+ setValueBy: function(delta, handleIdx) {
+ this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
+ handleIdx || this.activeHandleIdx || 0);
+ },
+ translateToPx: function(value) {
+ return Math.round(
+ ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
+ (value - this.range.start)) + "px";
+ },
+ translateToValue: function(offset) {
+ return ((offset/(this.trackLength-this.handleLength) *
+ (this.range.end-this.range.start)) + this.range.start);
+ },
+ getRange: function(range) {
+ var v = this.values.sortBy(Prototype.K);
+ range = range || 0;
+ return $R(v[range],v[range+1]);
+ },
+ minimumOffset: function(){
+ return(this.isVertical() ? this.alignY : this.alignX);
+ },
+ maximumOffset: function(){
+ return(this.isVertical() ?
+ (this.track.offsetHeight != 0 ? this.track.offsetHeight :
+ this.track.style.height.replace(/px$/,"")) - this.alignY :
+ (this.track.offsetWidth != 0 ? this.track.offsetWidth :
+ this.track.style.width.replace(/px$/,"")) - this.alignX);
+ },
+ isVertical: function(){
+ return (this.axis == 'vertical');
+ },
+ drawSpans: function() {
+ var slider = this;
+ if (this.spans)
+ $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
+ if (this.options.startSpan)
+ this.setSpan(this.options.startSpan,
+ $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
+ if (this.options.endSpan)
+ this.setSpan(this.options.endSpan,
+ $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
+ },
+ setSpan: function(span, range) {
+ if (this.isVertical()) {
+ span.style.top = this.translateToPx(range.start);
+ span.style.height = this.translateToPx(range.end - range.start + this.range.start);
+ } else {
+ span.style.left = this.translateToPx(range.start);
+ span.style.width = this.translateToPx(range.end - range.start + this.range.start);
+ }
+ },
+ updateStyles: function() {
+ this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
+ Element.addClassName(this.activeHandle, 'selected');
+ },
+ startDrag: function(event) {
+ if (Event.isLeftClick(event)) {
+ if (!this.disabled){
+ this.active = true;
+
+ var handle = Event.element(event);
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var track = handle;
+ if (track==this.track) {
+ var offsets = Position.cumulativeOffset(this.track);
+ this.event = event;
+ this.setValue(this.translateToValue(
+ (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
+ ));
+ var offsets = Position.cumulativeOffset(this.activeHandle);
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ } else {
+ // find the handle (prevents issues with Safari)
+ while((this.handles.indexOf(handle) == -1) && handle.parentNode)
+ handle = handle.parentNode;
+
+ if (this.handles.indexOf(handle)!=-1) {
+ this.activeHandle = handle;
+ this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+ this.updateStyles();
+
+ var offsets = Position.cumulativeOffset(this.activeHandle);
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ }
+ }
+ }
+ Event.stop(event);
+ }
+ },
+ update: function(event) {
+ if (this.active) {
+ if (!this.dragging) this.dragging = true;
+ this.draw(event);
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ Event.stop(event);
+ }
+ },
+ draw: function(event) {
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var offsets = Position.cumulativeOffset(this.track);
+ pointer[0] -= this.offsetX + offsets[0];
+ pointer[1] -= this.offsetY + offsets[1];
+ this.event = event;
+ this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
+ if (this.initialized && this.options.onSlide)
+ this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
+ },
+ endDrag: function(event) {
+ if (this.active && this.dragging) {
+ this.finishDrag(event, true);
+ Event.stop(event);
+ }
+ this.active = false;
+ this.dragging = false;
+ },
+ finishDrag: function(event, success) {
+ this.active = false;
+ this.dragging = false;
+ this.updateFinished();
+ },
+ updateFinished: function() {
+ if (this.initialized && this.options.onChange)
+ this.options.onChange(this.values.length>1 ? this.values : this.value, this);
+ this.event = null;
+ }
+}); \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/sound.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/sound.js
new file mode 100644
index 0000000..e2487cd
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/sound.js
@@ -0,0 +1,55 @@
+// script.aculo.us sound.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Based on code created by Jules Gravinese (http://www.webveteran.com/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+Sound = {
+ tracks: {},
+ _enabled: true,
+ template:
+ new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
+ enable: function(){
+ Sound._enabled = true;
+ },
+ disable: function(){
+ Sound._enabled = false;
+ },
+ play: function(url){
+ if(!Sound._enabled) return;
+ var options = Object.extend({
+ track: 'global', url: url, replace: false
+ }, arguments[1] || {});
+
+ if(options.replace && this.tracks[options.track]) {
+ $R(0, this.tracks[options.track].id).each(function(id){
+ var sound = $('sound_'+options.track+'_'+id);
+ sound.Stop && sound.Stop();
+ sound.remove();
+ });
+ this.tracks[options.track] = null;
+ }
+
+ if(!this.tracks[options.track])
+ this.tracks[options.track] = { id: 0 };
+ else
+ this.tracks[options.track].id++;
+
+ options.id = this.tracks[options.track].id;
+ $$('body')[0].insert(
+ Prototype.Browser.IE ? new Element('bgsound',{
+ id: 'sound_'+options.track+'_'+options.id,
+ src: options.url, loop: 1, autostart: true
+ }) : Sound.template.evaluate(options));
+ }
+};
+
+if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
+ if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 }))
+ Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>');
+ else
+ Sound.play = function(){};
+} \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/unittest.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/unittest.js
new file mode 100644
index 0000000..446097e
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/unittest.js
@@ -0,0 +1,568 @@
+// script.aculo.us unittest.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
+// (c) 2005-2008 Michael Schuerig (http://www.schuerig.de/michael/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// experimental, Firefox-only
+Event.simulateMouse = function(element, eventName) {
+ var options = Object.extend({
+ pointerX: 0,
+ pointerY: 0,
+ buttons: 0,
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false
+ }, arguments[2] || {});
+ var oEvent = document.createEvent("MouseEvents");
+ oEvent.initMouseEvent(eventName, true, true, document.defaultView,
+ options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element));
+
+ if(this.mark) Element.remove(this.mark);
+ this.mark = document.createElement('div');
+ this.mark.appendChild(document.createTextNode(" "));
+ document.body.appendChild(this.mark);
+ this.mark.style.position = 'absolute';
+ this.mark.style.top = options.pointerY + "px";
+ this.mark.style.left = options.pointerX + "px";
+ this.mark.style.width = "5px";
+ this.mark.style.height = "5px;";
+ this.mark.style.borderTop = "1px solid red;";
+ this.mark.style.borderLeft = "1px solid red;";
+
+ if(this.step)
+ alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
+
+ $(element).dispatchEvent(oEvent);
+};
+
+// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
+// You need to downgrade to 1.0.4 for now to get this working
+// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
+Event.simulateKey = function(element, eventName) {
+ var options = Object.extend({
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false,
+ keyCode: 0,
+ charCode: 0
+ }, arguments[2] || {});
+
+ var oEvent = document.createEvent("KeyEvents");
+ oEvent.initKeyEvent(eventName, true, true, window,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
+ options.keyCode, options.charCode );
+ $(element).dispatchEvent(oEvent);
+};
+
+Event.simulateKeys = function(element, command) {
+ for(var i=0; i<command.length; i++) {
+ Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
+ }
+};
+
+var Test = {};
+Test.Unit = {};
+
+// security exception workaround
+Test.Unit.inspect = Object.inspect;
+
+Test.Unit.Logger = Class.create();
+Test.Unit.Logger.prototype = {
+ initialize: function(log) {
+ this.log = $(log);
+ if (this.log) {
+ this._createLogTable();
+ }
+ },
+ start: function(testName) {
+ if (!this.log) return;
+ this.testName = testName;
+ this.lastLogLine = document.createElement('tr');
+ this.statusCell = document.createElement('td');
+ this.nameCell = document.createElement('td');
+ this.nameCell.className = "nameCell";
+ this.nameCell.appendChild(document.createTextNode(testName));
+ this.messageCell = document.createElement('td');
+ this.lastLogLine.appendChild(this.statusCell);
+ this.lastLogLine.appendChild(this.nameCell);
+ this.lastLogLine.appendChild(this.messageCell);
+ this.loglines.appendChild(this.lastLogLine);
+ },
+ finish: function(status, summary) {
+ if (!this.log) return;
+ this.lastLogLine.className = status;
+ this.statusCell.innerHTML = status;
+ this.messageCell.innerHTML = this._toHTML(summary);
+ this.addLinksToResults();
+ },
+ message: function(message) {
+ if (!this.log) return;
+ this.messageCell.innerHTML = this._toHTML(message);
+ },
+ summary: function(summary) {
+ if (!this.log) return;
+ this.logsummary.innerHTML = this._toHTML(summary);
+ },
+ _createLogTable: function() {
+ this.log.innerHTML =
+ '<div id="logsummary"></div>' +
+ '<table id="logtable">' +
+ '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
+ '<tbody id="loglines"></tbody>' +
+ '</table>';
+ this.logsummary = $('logsummary');
+ this.loglines = $('loglines');
+ },
+ _toHTML: function(txt) {
+ return txt.escapeHTML().replace(/\n/g,"<br/>");
+ },
+ addLinksToResults: function(){
+ $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run only this test";
+ Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
+ });
+ $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run all tests";
+ Event.observe(td, 'click', function(){ window.location.search = "";});
+ });
+ }
+};
+
+Test.Unit.Runner = Class.create();
+Test.Unit.Runner.prototype = {
+ initialize: function(testcases) {
+ this.options = Object.extend({
+ testLog: 'testlog'
+ }, arguments[1] || {});
+ this.options.resultsURL = this.parseResultsURLQueryParameter();
+ this.options.tests = this.parseTestsQueryParameter();
+ if (this.options.testLog) {
+ this.options.testLog = $(this.options.testLog) || null;
+ }
+ if(this.options.tests) {
+ this.tests = [];
+ for(var i = 0; i < this.options.tests.length; i++) {
+ if(/^test/.test(this.options.tests[i])) {
+ this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
+ }
+ }
+ } else {
+ if (this.options.test) {
+ this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
+ } else {
+ this.tests = [];
+ for(var testcase in testcases) {
+ if(/^test/.test(testcase)) {
+ this.tests.push(
+ new Test.Unit.Testcase(
+ this.options.context ? ' -> ' + this.options.titles[testcase] : testcase,
+ testcases[testcase], testcases["setup"], testcases["teardown"]
+ ));
+ }
+ }
+ }
+ }
+ this.currentTest = 0;
+ this.logger = new Test.Unit.Logger(this.options.testLog);
+ setTimeout(this.runTests.bind(this), 1000);
+ },
+ parseResultsURLQueryParameter: function() {
+ return window.location.search.parseQuery()["resultsURL"];
+ },
+ parseTestsQueryParameter: function(){
+ if (window.location.search.parseQuery()["tests"]){
+ return window.location.search.parseQuery()["tests"].split(',');
+ };
+ },
+ // Returns:
+ // "ERROR" if there was an error,
+ // "FAILURE" if there was a failure, or
+ // "SUCCESS" if there was neither
+ getResult: function() {
+ var hasFailure = false;
+ for(var i=0;i<this.tests.length;i++) {
+ if (this.tests[i].errors > 0) {
+ return "ERROR";
+ }
+ if (this.tests[i].failures > 0) {
+ hasFailure = true;
+ }
+ }
+ if (hasFailure) {
+ return "FAILURE";
+ } else {
+ return "SUCCESS";
+ }
+ },
+ postResults: function() {
+ if (this.options.resultsURL) {
+ new Ajax.Request(this.options.resultsURL,
+ { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
+ }
+ },
+ runTests: function() {
+ var test = this.tests[this.currentTest];
+ if (!test) {
+ // finished!
+ this.postResults();
+ this.logger.summary(this.summary());
+ return;
+ }
+ if(!test.isWaiting) {
+ this.logger.start(test.name);
+ }
+ test.run();
+ if(test.isWaiting) {
+ this.logger.message("Waiting for " + test.timeToWait + "ms");
+ setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
+ } else {
+ this.logger.finish(test.status(), test.summary());
+ this.currentTest++;
+ // tail recursive, hopefully the browser will skip the stackframe
+ this.runTests();
+ }
+ },
+ summary: function() {
+ var assertions = 0;
+ var failures = 0;
+ var errors = 0;
+ var messages = [];
+ for(var i=0;i<this.tests.length;i++) {
+ assertions += this.tests[i].assertions;
+ failures += this.tests[i].failures;
+ errors += this.tests[i].errors;
+ }
+ return (
+ (this.options.context ? this.options.context + ': ': '') +
+ this.tests.length + " tests, " +
+ assertions + " assertions, " +
+ failures + " failures, " +
+ errors + " errors");
+ }
+};
+
+Test.Unit.Assertions = Class.create();
+Test.Unit.Assertions.prototype = {
+ initialize: function() {
+ this.assertions = 0;
+ this.failures = 0;
+ this.errors = 0;
+ this.messages = [];
+ },
+ summary: function() {
+ return (
+ this.assertions + " assertions, " +
+ this.failures + " failures, " +
+ this.errors + " errors" + "\n" +
+ this.messages.join("\n"));
+ },
+ pass: function() {
+ this.assertions++;
+ },
+ fail: function(message) {
+ this.failures++;
+ this.messages.push("Failure: " + message);
+ },
+ info: function(message) {
+ this.messages.push("Info: " + message);
+ },
+ error: function(error) {
+ this.errors++;
+ this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
+ },
+ status: function() {
+ if (this.failures > 0) return 'failed';
+ if (this.errors > 0) return 'error';
+ return 'passed';
+ },
+ assert: function(expression) {
+ var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
+ try { expression ? this.pass() :
+ this.fail(message); }
+ catch(e) { this.error(e); }
+ },
+ assertEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEqual";
+ try { (expected == actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInspect: function(expected, actual) {
+ var message = arguments[2] || "assertInspect";
+ try { (expected == actual.inspect()) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertEnumEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEnumEqual";
+ try { $A(expected).length == $A(actual).length &&
+ expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
+ this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) +
+ ', actual ' + Test.Unit.inspect(actual)); }
+ catch(e) { this.error(e); }
+ },
+ assertNotEqual: function(expected, actual) {
+ var message = arguments[2] || "assertNotEqual";
+ try { (expected != actual) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertIdentical";
+ try { (expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertNotIdentical";
+ try { !(expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNull: function(obj) {
+ var message = arguments[1] || 'assertNull';
+ try { (obj==null) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertMatch: function(expected, actual) {
+ var message = arguments[2] || 'assertMatch';
+ var regex = new RegExp(expected);
+ try { (regex.exec(actual)) ? this.pass() :
+ this.fail(message + ' : regex: "' + Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertHidden: function(element) {
+ var message = arguments[1] || 'assertHidden';
+ this.assertEqual("none", element.style.display, message);
+ },
+ assertNotNull: function(object) {
+ var message = arguments[1] || 'assertNotNull';
+ this.assert(object != null, message);
+ },
+ assertType: function(expected, actual) {
+ var message = arguments[2] || 'assertType';
+ try {
+ (actual.constructor == expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotOfType: function(expected, actual) {
+ var message = arguments[2] || 'assertNotOfType';
+ try {
+ (actual.constructor != expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertInstanceOf';
+ try {
+ (actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was not an instance of the expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertNotInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertNotInstanceOf';
+ try {
+ !(actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was an instance of the not expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertRespondsTo: function(method, obj) {
+ var message = arguments[2] || 'assertRespondsTo';
+ try {
+ (obj[method] && typeof obj[method] == 'function') ? this.pass() :
+ this.fail(message + ": object doesn't respond to [" + method + "]"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsTrue: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsTrue';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ m() ? this.pass() :
+ this.fail(message + ": method returned false"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsFalse: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsFalse';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ !m() ? this.pass() :
+ this.fail(message + ": method returned true"); }
+ catch(e) { this.error(e); }
+ },
+ assertRaise: function(exceptionName, method) {
+ var message = arguments[2] || 'assertRaise';
+ try {
+ method();
+ this.fail(message + ": exception expected but none was raised"); }
+ catch(e) {
+ ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e);
+ }
+ },
+ assertElementsMatch: function() {
+ var expressions = $A(arguments), elements = $A(expressions.shift());
+ if (elements.length != expressions.length) {
+ this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
+ return false;
+ }
+ elements.zip(expressions).all(function(pair, index) {
+ var element = $(pair.first()), expression = pair.last();
+ if (element.match(expression)) return true;
+ this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
+ }.bind(this)) && this.pass();
+ },
+ assertElementMatches: function(element, expression) {
+ this.assertElementsMatch([element], expression);
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ },
+ _isVisible: function(element) {
+ element = $(element);
+ if(!element.parentNode) return true;
+ this.assertNotNull(element);
+ if(element.style && Element.getStyle(element, 'display') == 'none')
+ return false;
+
+ return this._isVisible(element.parentNode);
+ },
+ assertNotVisible: function(element) {
+ this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
+ },
+ assertVisible: function(element) {
+ this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ }
+};
+
+Test.Unit.Testcase = Class.create();
+Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
+ initialize: function(name, test, setup, teardown) {
+ Test.Unit.Assertions.prototype.initialize.bind(this)();
+ this.name = name;
+
+ if(typeof test == 'string') {
+ test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
+ test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
+ this.test = function() {
+ eval('with(this){'+test+'}');
+ }
+ } else {
+ this.test = test || function() {};
+ }
+
+ this.setup = setup || function() {};
+ this.teardown = teardown || function() {};
+ this.isWaiting = false;
+ this.timeToWait = 1000;
+ },
+ wait: function(time, nextPart) {
+ this.isWaiting = true;
+ this.test = nextPart;
+ this.timeToWait = time;
+ },
+ run: function() {
+ try {
+ try {
+ if (!this.isWaiting) this.setup.bind(this)();
+ this.isWaiting = false;
+ this.test.bind(this)();
+ } finally {
+ if(!this.isWaiting) {
+ this.teardown.bind(this)();
+ }
+ }
+ }
+ catch(e) { this.error(e); }
+ }
+});
+
+// *EXPERIMENTAL* BDD-style testing to please non-technical folk
+// This draws many ideas from RSpec http://rspec.rubyforge.org/
+
+Test.setupBDDExtensionMethods = function(){
+ var METHODMAP = {
+ shouldEqual: 'assertEqual',
+ shouldNotEqual: 'assertNotEqual',
+ shouldEqualEnum: 'assertEnumEqual',
+ shouldBeA: 'assertType',
+ shouldNotBeA: 'assertNotOfType',
+ shouldBeAn: 'assertType',
+ shouldNotBeAn: 'assertNotOfType',
+ shouldBeNull: 'assertNull',
+ shouldNotBeNull: 'assertNotNull',
+
+ shouldBe: 'assertReturnsTrue',
+ shouldNotBe: 'assertReturnsFalse',
+ shouldRespondTo: 'assertRespondsTo'
+ };
+ var makeAssertion = function(assertion, args, object) {
+ this[assertion].apply(this,(args || []).concat([object]));
+ };
+
+ Test.BDDMethods = {};
+ $H(METHODMAP).each(function(pair) {
+ Test.BDDMethods[pair.key] = function() {
+ var args = $A(arguments);
+ var scope = args.shift();
+ makeAssertion.apply(scope, [pair.value, args, this]); };
+ });
+
+ [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
+ function(p){ Object.extend(p, Test.BDDMethods) }
+ );
+};
+
+Test.context = function(name, spec, log){
+ Test.setupBDDExtensionMethods();
+
+ var compiledSpec = {};
+ var titles = {};
+ for(specName in spec) {
+ switch(specName){
+ case "setup":
+ case "teardown":
+ compiledSpec[specName] = spec[specName];
+ break;
+ default:
+ var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
+ var body = spec[specName].toString().split('\n').slice(1);
+ if(/^\{/.test(body[0])) body = body.slice(1);
+ body.pop();
+ body = body.map(function(statement){
+ return statement.strip()
+ });
+ compiledSpec[testName] = body.join('\n');
+ titles[testName] = specName;
+ }
+ }
+ new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
+}; \ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/table_sort.js b/abs/core/local-website/htdocs/linhes/js/table_sort.js
new file mode 100644
index 0000000..26208b1
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/table_sort.js
@@ -0,0 +1,569 @@
+/**
+ * Javascript Table sorting lib
+ *
+ * @url $URL: http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins/mythweb/js/table_sort.js $
+ * @date $Date: 2008-06-22 02:21:08 +0000 (Sun, 22 Jun 2008) $
+ * @version $Revision: 17560 $
+ * @author $Author: kormoc $
+ * @license LGPL
+ *
+/**/
+
+document.observe('dom:loaded', function () {
+// Not a dom v3 supported browser?
+ if (typeof document.body.textContent == 'undefined') {
+ // Let's work around for IE
+ if (typeof document.body.innerText != 'undefined') {
+ HTMLElement.prototype.__defineGetter__('textContent', function () {
+ return this.innerText;
+ });
+ }
+ // And now Safari
+ else {
+ HTMLElement.prototype.__defineGetter__('textContent', function () {
+ return this.innerHTML;
+ });
+ }
+ }
+});
+
+var SortableTables = {
+ tables: [],
+ callback_presort: null,
+ callback_postsort: null,
+ callback_preload: null,
+ callback_postload: null,
+
+ currently_sorting_table: null,
+
+ start: function () {
+ $$('table[sortable=true]').each(SortableTables.setupTable);
+ },
+
+ setupTable: function (table) {
+ if (this.callback_preload)
+ this.callback_preload(table);
+ // We require a unique id
+ if (table.id == '' || ( this.tables && this.tables[table.id] ))
+ return;
+ SortableTables.tables[table.id] = new SortableTable(table);
+ if (this.callback_postload)
+ this.callback_postload(table);
+ },
+
+ sort: function (table_id, header_index) {
+ // 25% speed boost on large tables (900 rows+) by not allowing multiple sorts at the same time.
+ if (this.currently_sorting_table != null)
+ return;
+ if (this.callback_presort)
+ this.callback_presort(table_id, heder_index);
+ if (this.tables[table_id].callback_presort)
+ this.tables[table_id].callback_presort(table_id, header_index);
+ this.tables[table_id].sort(header_index);
+ if (this.tables[table_id].callback_postsort)
+ this.tables[table_id].callback_postsort(table_id, header_index);
+ if (this.callback_postsort)
+ this.callback_postsort(table_id, header_index);
+ }
+};
+
+document.observe('dom:loaded', SortableTables.start);
+
+var SortableTable = Class.create({
+ initialize: function (table) {
+ // Class vars
+ this.table = null;
+ this.header = null;
+ this.body = null;
+ this.rows = null;
+
+ this.cache_sort_functions = new Array();
+ this.cache_has_attribute = new Array();
+ this.cache_sorted_index = null;
+ this.cache_previous_sorts = new Array();
+ this.cache_sort_hash = new Array();
+ this.cache_sort_direction = false;
+
+ this.multisort = false;
+ this.zebra_stripe = false;
+
+ this.sort_cell_index = null;
+ this.sort_header_index = null;
+
+ this.callback_presort = null;
+ this.callback_postsort = null;
+
+ // Make sure the table is valid for sorting
+ if (table.tBodies[0].rows.length < 2)
+ return;
+
+ this.table = $(table);
+ this.header = this.table.tHead.rows[table.tHead.rows.length-1];
+ this.body = this.table.tBodies[0]
+ this.rows = this.body.rows;
+
+ this.multisort = this.table.readAttribute('multisort');
+
+ if (this.rows[0].className.match(/even/) || this.rows[0].className.match(/odd/))
+ this.zebra_stripe = true;
+
+ // Setup the header with links
+ var cells = this.header.cells;
+ var cells_count = cells.length;
+ var cell_coloffset = 0;
+ for (var i = 0; i < cells_count; i++) {
+ var cell = cells[i];
+ var cell_colspan = 1;
+ var cell_index = i + cell_coloffset;
+ var header_index = i;
+ this.cache_sort_hash[i] = cell_index;
+ // Handle colspans...
+ if (cell.hasAttribute('colspan'))
+ cell_coloffset += cell.readAttribute('colspan')-1;
+
+ if (cell.readAttribute('sortable') == 'false')
+ continue;
+ // This should fix a bug with safari (as of version 2.0.2 at least), which does not understand cellIndex correctly
+ cell.setAttribute('onclick','SortableTables.sort("'+this.table.id+'","'+header_index+'");return false;');
+ cell.addClassName('link');
+ // Heat the cache...
+ this.cache_has_attribute[cell_index] = false;
+ // Precache the sort function...
+ this.cache_sort_functions[cell_index] = this.getSortFunction(header_index, cell_index);
+ }
+ },
+
+ getSortFunction: function (header_index) {
+ var cell_index = this.cache_sort_hash[header_index];
+ // Default sort function to use
+ var sort_function = 'sortCaseInsensitive';
+ // Do we have sort_values?
+ this.cache_has_attribute[header_index] = this.rows[0].cells[cell_index].hasAttribute('sort_value');
+ if (this.header.cells[header_index].hasAttribute('sort_hint'))
+ sort_function = this.header.cells[header_index].readAttribute('sort_hint');
+ else {
+ if (this.cache_has_attribute[header_index])
+ var value = this.rows[0].cells[cell_index].readAttribute('sort_value');
+ else
+ var value = this.rows[0].cells[cell_index].textContent;
+
+ // Figure out the function to use...
+ if (value.match(/^\w+ \d+[,] \d\d\d\d/))
+ sort_function = 'sortEnglishDate';
+ else if (value.match(/^\w+[,] \w+ \d+[,] \d+[:]\d+ \w+$/))
+ sort_function = 'sortLongEnglishDate';
+ else if (value.match(/^\d+ days$/) || value=='Today' || value=='Tomorrow' || value=='Yesterday')
+ sort_function = 'sortExpiration';
+ else if (value.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/))
+ sort_function = 'sortDate';
+ else if (value.match(/^\d\d[\/-]\d\d[\/-]\d\d$/))
+ sort_function = 'sortDate';
+ else if (value.match(/^\W+ \d+$/))
+ sort_function = 'sortMonthDay';
+ else if (value.match(/^[\d\.]+[%]*$/))
+ sort_function = 'sortNumeric';
+ else if (value.match(/^[$]/))
+ sort_function = 'sortCurrency';
+ }
+ return eval('SortableTableSorts.'+sort_function);
+ },
+
+ sort: function (header_index) {
+ this.sort_header_index = header_index;
+ this.sort_cell_index = this.cache_sort_hash[header_index]
+
+ // Spawn into an array
+ var row_length = this.rows.length;
+ var rows = new Array();
+ for (var i=0; i<row_length; i++)
+ rows.push(this.rows[i]);
+
+ // Check to see if we're already sorted, and if so, just invert it
+ if (this.cache_previous_sorts.last() == this.sort_cell_index)
+ rows.reverse();
+ else {
+ SortableTables.currently_sorting_table = this;
+ var sort_function = SortableTables.tables[this.table.id].doSort;
+ rows.sort(sort_function);
+ SortableTables.currently_sorting_table = null;
+ }
+
+ // Move back to the table...
+ for (var i=0; i<row_length; i++)
+ this.body.appendChild(rows[i]);
+
+ // Setup the arrows...
+ this.doHeaderArrows();
+ // Fix any zebra striping
+ this.fixZebraStripes();
+ // Remove the current index fromt he previous sorts and make sure it's uniq
+ this.cache_previous_sorts = this.cache_previous_sorts.without(this.sort_cell_index).uniq();
+ // Add in the sorted col
+ this.cache_previous_sorts.push(this.sort_cell_index);
+ },
+
+ doSort: function (a, b, cell_index) {
+ // Are we overriding the cell index (for multisort)
+ if (!cell_index)
+ cell_index = SortableTables.currently_sorting_table.sort_cell_index;
+
+ // Use the sort hint?
+ if (SortableTables.currently_sorting_table.cache_has_attribute[cell_index]) {
+ var value_a = a.cells[cell_index].readAttribute('sort_value');
+ var value_b = b.cells[cell_index].readAttribute('sort_value');
+ }
+ else {
+ var value_a = a.cells[cell_index].textContent;
+ var value_b = b.cells[cell_index].textContent;
+ }
+
+ if ( value_a != value_b)
+ var comparison = SortableTables.currently_sorting_table.cache_sort_functions[cell_index](value_a,value_b);
+ else
+ var comparison = 0;
+
+ if (SortableTables.currently_sorting_table.multisort && !comparison && SortableTables.currently_sorting_table.cache_previous_sorts.length) {
+ var multisort_index = SortableTables.currently_sorting_table.cache_previous_sorts.pop();
+ comparison = SortableTables.currently_sorting_table.doSort(a, b, multisort_index);
+ SortableTables.currently_sorting_table.cache_previous_sorts.push(multisort_index);
+ }
+ return comparison;
+ },
+
+ doHeaderArrows: function () {
+ // Remove any current span arrows
+ $$('#'+this.table.id+' thead span.sortArrow').each(function (span) {span.update('&nbsp;&nbsp;&nbsp;');});
+ var arrow_span = this.header.cells[this.sort_header_index].select('span.sortArrow').reduce();
+ if (!arrow_span) {
+ arrow_span = new Element('span', { 'class': 'sortArrow'});
+ this.header.cells[this.sort_header_index].insert(arrow_span);
+ }
+ if (this.cache_previous_sorts.last() == this.sort_cell_index && this.cache_sort_direction) {
+ arrow_span.update('&nbsp;&nbsp;&uarr;');
+ this.cache_sort_direction = false;
+ }
+ else {
+ arrow_span.update('&nbsp;&nbsp;&darr;');
+ this.cache_sort_direction = true;
+ }
+ },
+
+ fixZebraStripes: function () {
+ if (!this.zebra_stripe)
+ return;
+ var length = this.rows.length;
+ var even = false;
+ for (var i=0; i<length; i++) {
+ var row = this.rows[i];
+ if (even)
+ row.className = row.className.replace(/odd/g, 'even');
+ else
+ row.className = row.className.replace(/even/g, 'odd');
+ even = !even;
+ }
+ }
+});
+
+var SortableTableSorts = {
+// Sort: DD-MM-YY or DD-MM-YYYY
+// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
+ sortDate: function (a,b) {
+ if (a.length == 10)
+ dt1 = a.substr(6,4)+a.substr(3,2)+a.substr(0,2);
+ else {
+ yr = a.substr(6,2);
+ if (parseInt(yr) < 50)
+ yr = '20'+yr;
+ else
+ yr = '19'+yr;
+ dt1 = yr+a.substr(3,2)+a.substr(0,2);
+ }
+ if (b.length == 10)
+ dt2 = b.substr(6,4)+b.substr(3,2)+b.substr(0,2);
+ else {
+ yr = b.substr(6,2);
+ if (parseInt(yr) < 50)
+ yr = '20'+yr;
+ else
+ yr = '19'+yr;
+ dt2 = yr+b.substr(3,2)+b.substr(0,2);
+ }
+ if (dt1==dt2)
+ return 0;
+ if (dt1<dt2)
+ return -1;
+ return 1;
+ },
+
+// Sort MM-DD-YY or MM-DD-YYYY
+// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
+ sortDateUs: function (a,b) {
+ if (a.length == 10)
+ dt1 = a.substr(6,4)+a.substr(0,2)+a.substr(3,2);
+ else {
+ yr = a.substr(6,2);
+ if (parseInt(yr) < 50)
+ yr = '20'+yr;
+ else
+ yr = '19'+yr;
+ dt1 = yr+a.substr(0,2)+a.substr(3,2);
+ }
+ if (b.length == 10)
+ dt2 = b.substr(6,4)+b.substr(0,2)+b.substr(3,2);
+ else {
+ yr = b.substr(6,2);
+ if (parseInt(yr) < 50)
+ yr = '20'+yr;
+ else
+ yr = '19'+yr;
+ dt2 = yr+b.substr(0,2)+b.substr(3,2);
+ }
+ if (dt1 == dt2)
+ return 0;
+ if (dt1 < dt2)
+ return -1;
+ return 1;
+ },
+
+// This function handles Mon day, year sorting
+// Falls back to alpha-comparison, if date-comparison can't make a decision.
+ sortEnglishDate: function (a,b) {
+ if (a == 'none' || a.length == 0)
+ return -1;
+ if (b == 'none' || b.length == 0)
+ return 1;
+
+ var aa_mon = SortableTableSorts.englishMonthToNumber (a.substr(0,3));
+ aa = a.substr(4);
+ var aa_year = parseFloat(aa.substr(aa.length-4));
+ var aa_day = parseFloat(aa.substr(0, aa.length-6));
+
+ var bb_mon = SortableTableSorts.englishMonthToNumber (b.substr(0,3));
+ bb = b.substr(4);
+ var bb_year = parseFloat(bb.substr(bb.length-4));
+ var bb_day = parseFloat(bb.substr(0, bb.length-6));
+ if (!aa_year || !aa_mon || !aa_day || !bb_year || !bb_mon || !bb_day)
+ return SortableTableSorts.sortCaseSensitive(a,b);
+ if (aa_year < bb_year)
+ return -1;
+ if (aa_year > bb_year)
+ return 1;
+ if (aa_mon < bb_mon)
+ return -1;
+ if (aa_mon > bb_mon)
+ return 1;
+ if (aa_day < bb_day)
+ return -1;
+ return 1;
+ },
+
+// This function handles Mon day, year sorting
+// Jan 21, 2006
+ sortEnglishDateInvert: function (a,b) {
+ return SortableTableSorts.sortEnglishDate(b,a);
+ },
+
+// This function sorts based on month day format
+// Jan 21
+ sortMonthDay: function (a, b) {
+ if (a.length == 0)
+ return -1;
+ if (b.length == 0)
+ return 1;
+
+ var a_mon = SortableTableSorts.englishMonthToNumber (a.substr(0,3));
+ a = parseFloat(a.substr(4));
+ var b_mon = SortableTableSorts.englishMonthToNumber (b.substr(0,3));
+ b = parseFloat(b.substr(4));
+ if (a_mon < b_mon)
+ return -1;
+ if (a_mon > b_mon)
+ return 1;
+ if (a < b)
+ return -1;
+ return 1;
+ },
+
+// This function handles DDD, Mon Day, Hour:Min A/PM
+// we also assume it's the same year, as we can't figure it out otherwise
+ sortLongEnglishDate: function (a,b) {
+ var aa = a.substr(5).split(/,/);
+ var bb = b.substr(5).split(/,/);
+ var aatmp = aa[1].split(/:/);
+ var aa_hour = aatmp[0];
+ var aa_min = aatmp[1].substr(0,2);
+ if (aatmp[1].substr(3).toLowerCase() == 'pm')
+ aa_hour += 12;
+ var bbtmp = bb[1].split(/:/);
+ var bb_hour = bbtmp[0];
+ var bb_min = bbtmp[1].substr(0,2);
+ if (bbtmp[1].substr(3).toLowerCase() == 'pm')
+ bb_hour += 12;
+ aa = aa[0];
+ bb = bb[0];
+ if (aa == bb)
+ return 0;
+ if (aa == 'none' || aa.length == 0)
+ return -1;
+ if (bb == 'none' || bb.length == 0)
+ return 1;
+ var aa_mon = SortableTableSorts.englishMonthToNumber (aa.substr(0,3));
+ var aa_day = aa.substr(4);
+ var bb_mon = SortableTableSorts.englishMonthToNumber (bb.substr(0,3));
+ var bb_day = bb.substr(4);
+ if (!aa_mon || !aa_day || !bb_mon || !bb_day)
+ return -1;
+ if (aa_mon < bb_mon)
+ return -1;
+ if (aa_mon > bb_mon)
+ return 1;
+ if (aa_day < bb_day)
+ return -1;
+ if (aa_day > bb_day)
+ return 1;
+ if (aa_hour < bb_hour)
+ return -1;
+ if (aa_hour > bb_hour)
+ return 1;
+ if (aa_minute < bb_minute)
+ return -1;
+ return 1;
+ },
+
+// This function sorts expiration dates, such as in the quote list
+ sortExpiration: function (a,b) {
+ a = a.split(/ /)[0];
+ b = b.split(/ /)[0];
+ switch (a) {
+ case 'Yesterday': a = -1; break;
+ case 'Today': a = 0; break;
+ case 'Tomorrow': a = 1; break;
+ default: a = parseFloat(a);
+ }
+ switch (b) {
+ case 'Yesterday': b = -1; break;
+ case 'Today': b = 0; break;
+ case 'Tomorrow': b = 1; break;
+ default: b = parseFloat(b);
+ }
+
+ if (a > b)
+ return 1;
+ if (a < b)
+ return -1;
+ return 0;
+ },
+
+ englishMonthToNumber: function (mon) {
+ switch (mon.toLowerCase()) {
+ case 'jan' : return 1;
+ case 'feb' : return 2;
+ case 'mar' : return 3;
+ case 'apr' : return 4;
+ case 'may' : return 5;
+ case 'jun' : return 6;
+ case 'jul' : return 7;
+ case 'aug' : return 8;
+ case 'sep' : return 9;
+ case 'oct' : return 10;
+ case 'nov' : return 11;
+ case 'dec' : return 12;
+ }
+ return 0;
+ },
+
+ sortCurrency: function (a,b) {
+ return parseFloat(a.replace(/[^0-9.]/g,'')) - parseFloat(b.replace(/[^0-9.]/g,''));
+ },
+
+// A non number or a blank is always less then a number.
+ sortNumeric: function (a,b) {
+ b = parseFloat(b);
+ if (isNaN(b))
+ return 1;
+ a = parseFloat(a);
+ if (isNaN(a))
+ return -1;
+ return a-b;
+ },
+
+// A non number or a blank is always less then a number.
+ sortNumericInvert: function (a,b) {
+ return SortableTableSorts.sortNumeric(b,a);
+ },
+
+ sortCaseInsensitive: function (a,b) {
+ a = a.toLowerCase();
+ b = b.toLowerCase();
+
+ if (a > b)
+ return 1;
+ if (a < b)
+ return -1;
+ return 0;
+ },
+
+ sortCaseSensitive: function (a,b) {
+ if (a > b)
+ return 1;
+ if (a < b)
+ return -1;
+ return 0;
+ },
+
+ sortMythwebPlayTime: function (a,b) {
+ if (a == b)
+ return 0;
+
+ var a_hrs = a.match(/([0-9]*) hr/);
+ var a_min = a.match(/([0-9]*) min/);
+ var a_val = 0;
+ if (a_hrs)
+ a_val += a_hrs[1]*60;
+ if (a_min)
+ a_val += a_min[1]*1;
+
+ var b_hrs = b.match(/([0-9]*) hr/);
+ var b_min = b.match(/([0-9]*) min/);
+ var b_val = 0;
+ if (b_hrs)
+ b_val += b_hrs[1]*60;
+ if (b_min)
+ b_val += b_min[1]*1;
+
+ return SortableTableSorts.sortNumeric(a_val, b_val);
+ },
+
+ sortMythwebChannel: function (a,b) {
+ if (a == b)
+ return 0;
+ var a_channel = a.match(/([0-9]*) -/);
+
+ if (a_channel)
+ a_channel = a_channel[1];
+ else
+ a_channel = 0;
+
+ var b_channel = b.match(/([0-9]*) -/);
+
+ if (b_channel)
+ b_channel = b_channel[1];
+ else
+ b_channel = 0;
+
+ return SortableTableSorts.sortNumeric(a_channel, b_channel);
+ },
+
+// Some compat wrappers
+ date_us: function (a,b) {
+ return SortableTableSorts.sortDateUs(a,b);
+ },
+
+ numeric: function (a,b) {
+ return SortableTableSorts.sortNumeric(a,b);
+ },
+
+ numeric_invert: function (a,b) {
+ return SortableTableSorts.sortNumericInvert(a,b);
+ }
+};
diff --git a/abs/core/local-website/htdocs/linhes/js/utils.js b/abs/core/local-website/htdocs/linhes/js/utils.js
new file mode 100644
index 0000000..e6c0605
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/utils.js
@@ -0,0 +1,173 @@
+/**
+ * A random assortment of javascript utility routines
+ *
+ * @url $URL: http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins/mythweb/js/utils.js $
+ * @date $Date: 2008-02-22 22:15:51 +0000 (Fri, 22 Feb 2008) $
+ * @version $Revision: 16207 $
+ * @author $Author: xris $
+ * @license LGPL
+ *
+/**/
+
+// For some reason, calling "value" from within onclick doesn't work
+// Seems to be a name conflict somewhere, but I can't find it.
+ function set_field(id, val) {
+ value(id, val);
+ }
+
+// Pass in value to change, otherwise it returns the value of the "e" element
+ function value(e, new_value) {
+ e = $(e);
+ if (!e)
+ return '';
+ // A <select>
+ if (e.options)
+ return value(e.options[e.selectedIndex]);
+ // Just an html element? (or in IE, an option element with no value="" specified)
+ else if (e.value == null || e.tagName.toLowerCase() == 'option' && e.value == '') {
+ if (new_value != null)
+ e.innerHTML = new_value;
+ return e.innerHTML;
+ }
+ // Form field
+ if (new_value != null)
+ e.value = new_value;
+ return e.value;
+ }
+
+// Overwrite the href attribute of all <a> tags with a js_href attribute
+ Event.observe(window, 'load', add_js_attributes);
+ function add_js_attributes() {
+ // Get all links in this form
+ var links = $$('a');
+ for (var i=0; i<links.length; i++) {
+ // js_href
+ var js_href = links[i].getAttribute('js_href');
+ if (js_href && js_href.length)
+ links[i].href = js_href;
+ }
+ }
+
+// Image Preloader
+ var img_on = new Array();
+ var img_off = new Array();
+ function preload_image(id, on, off) {
+ img_on[id] = new Image();
+ img_on[id].src = on;
+ if (off) {
+ img_off[id] = new Image();
+ img_off[id].src = off;
+ }
+ }
+
+// Functions to swap on/off states of images
+ function on(which) {
+ var img = $(which);
+ img.src=img_on[which].src;
+ }
+ function off(which) {
+ var img = $(which);
+ img.src=img_off[which].src;
+ }
+
+// Submit a form
+ function submit_form(newvar, val, form, confirm_str) {
+ // Confirm?
+ if (confirm_str && !confirm(confirm_str))
+ return;
+ // Find the form we want to submit
+ form = $(form ? form : 'form');
+ if (!form)
+ form = document.form ? document.form : document.forms[0];
+ // Create a new variable?
+ if (newvar) {
+ var hidden = document.createElement('input');
+ hidden.type = 'hidden';
+ hidden.name = newvar;
+ hidden.value = val != null ? val : 1;
+ form.appendChild(hidden);
+ }
+ // Submit
+ form.submit();
+ }
+
+// Check/uncheck a checkbox
+ function toggle_checkbox(id, check) {
+ var e = $(id);
+ if (check)
+ e.checked = true;
+ else if (check != null)
+ e.checked = false;
+ else
+ e.checked = e.checked ? false : true;
+ }
+
+// Change the help text
+ function help_text(text) {
+ // Set the text
+ $('help_text').innerHTML = text;
+ // Toggle the regions
+ $('help_text_default').toggle();
+ $('help_text').toggle();
+ }
+
+
+// Return a time in hours and minutes
+ function nice_length(mylength, rx_hr, rx_hrs, rx_min, rx_mins) {
+ var mins = Math.round((mylength % 3600) / 60);
+ var hours = Math.round(mylength / 3600);
+ var ret;
+ if (hours) {
+ if (hours > 1)
+ ret = rx_hrs.replace(/\$1/, hours);
+ else
+ ret = rx_hr.replace(/\$1/, hours);
+ }
+ else
+ ret = '';
+ if (mins > 0) {
+ if (ret.length)
+ ret = ret + ' ';
+ if (mins > 1)
+ ret = ret + rx_mins.replace(/\$1/, mins);
+ else
+ ret = ret + rx_min.replace(/\$1/, mins);
+ }
+ return ret;
+ }
+
+// Return a human-readable filesize
+ function nice_filesize(size) {
+ var kb = 1024; // Kilobyte
+ var mb = 1024 * kb; // Megabyte
+ var gb = 1024 * mb; // Gigabyte
+ var tb = 1024 * gb; // Terabyte
+ // If it's less than a kb we just return the size
+ if (size < kb)
+ return size + ' B';
+ // Otherwise we keep going until the size is in the appropriate measurement range.
+ else if (size < mb)
+ return Math.round(size/kb) + ' KB';
+ else if (size < gb)
+ return Math.round(size/mb) + ' MB';
+ else if (size < tb)
+ return Math.round(size/gb) + ' GB';
+ else
+ return Math.round(size/tb) + ' TB';
+ }
+
+// The routines to allow a small ajax request counter...
+ var pending_ajax_requests = 0;
+
+ function ajax_add_request() {
+ pending_ajax_requests += 1;
+ $('ajax_num_requests').innerHTML = pending_ajax_requests;
+ $('ajax_working').removeClassName('hidden');
+ }
+
+ function ajax_remove_request() {
+ pending_ajax_requests -= 1;
+ $('ajax_num_requests').innerHTML = pending_ajax_requests;
+ if (pending_ajax_requests == 0)
+ $('ajax_working').addClassName('hidden');
+ }
diff --git a/abs/core/local-website/htdocs/rrd/index.html b/abs/core/local-website/htdocs/rrd/index.html
index 5f595b2..f6a7135 100644
--- a/abs/core/local-website/htdocs/rrd/index.html
+++ b/abs/core/local-website/htdocs/rrd/index.html
@@ -3,7 +3,7 @@
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<meta content="Cecil Watson" name="author">
- <title>KnoppMyth R5.5</title>
+ <title>LinHES</title>
<!-- Generated by: /usr/local/bin/rrd_Configure.sh -->
<link href="/KnoppMyth.css" rel="stylesheet" type="text/css" />
<p align="center"><a href="http://www.mysettopbox.tv">
@@ -13,7 +13,7 @@
<tbody>
<tr>
<td style="vertical-align: top;">
- <p class="headerimage" align="center"><b>KnoppMyth R5.5</b></p>
+ <p class="headerimage" align="center"><b>The Linux Home Entertainment System Release 6</b></p>
<p align=center>
<font size="+2">RRD Tool</font><br>
<font size="+1">Is <font color="#CC0000">disabled</font>
diff --git a/abs/core/local-website/htdocs/wap.html b/abs/core/local-website/htdocs/wap.html
new file mode 100755
index 0000000..72e6264
--- /dev/null
+++ b/abs/core/local-website/htdocs/wap.html
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <base href="/linhes/">
+ <title>Welcome to LinHES R6!</title>
+
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <meta name="robots" content="noindex, nofollow">
+
+ <script type="text/javascript" src="js/prototype.js"></script>
+ <script type="text/javascript" src="js/prototip/prototip.js"></script>
+ <link rel="stylesheet" type="text/css" href="js/prototip/prototip.css">
+
+ <script type="text/javascript" src="js/utils.js"></script>
+ <script type="text/javascript" src="js/AC_OETags.js"></script>
+ <script type="text/javascript" src="js/table_sort.js"></script>
+
+ <link rel="stylesheet" type="text/css" href="/linhes/wap/style.css">
+ <link rel="stylesheet" type="text/css" href="/linhes/wap/header.css">
+ <link rel="stylesheet" type="text/css" href="/linhes/wap/menus.css">
+ <link rel="stylesheet" type="text/css" href="/linhes/wap/programming.css">
+
+ <link rel="stylesheet" type="text/css" href="/linhes/wap/welcome.css">
+</head>
+
+<body>
+<div id="page_header" style="position:relative; text-align:center;">
+ <div id="logo_box">
+ <a id="LinHES_logo" href="http://linhes.org/">
+ <img src="/header.png" alt="Tux with a Remote" class="body">
+ </a>
+ </div>
+</div>
+
+<table width="100%" border="0" cellspacing="2" cellpadding="0">
+<tr>
+ <td colspan="2" class="menu menu_border_t menu_border_b">
+ <table class="body" width="100%" border="0" cellspacing="2" cellpadding="2">
+ <td align="center">
+ <a href="http://linhes.org" <b>The Linux Home Entertainment System Release 6</b></a>
+ </td>
+ </table>
+ </td>
+</tr>
+</table>
+
+
+<script type="text/javascript">
+<!--
+
+ var visible_module = 'media';
+ function show_module_info(module) {
+ if (visible_module == module)
+ return;
+ // Change the outline on the list item
+ $('module_'+ visible_module).removeClassName('selected');
+ $('module_'+ module).addClassName('selected');
+ // Show and hide the appropriate info boxes
+ $('info_' + visible_module).hide();
+ $('info_' + visible_module).addClassName('hidden');
+ $('info_' + module).show();
+ $('info_' + module).removeClassName('hidden');
+ // Keep track of what's visible now
+ visible_module = module;
+ }
+
+// -->
+</script>
+
+<div id="modules" class="clearfix">
+
+ <div id="module_names">
+ <ul>
+ <li id="module_media" class="selected" onmouseover="show_module_info('media')">Media</li>
+ <li id="module_status" onmouseover="show_module_info('status')">Status</li>
+ <li id="module_help" onmouseover="show_module_info('help')">Help</li>
+ </ul>
+ </div>
+
+ <div id="module_info">
+ <div id="info_media">
+ <ul>
+ <li><a href="/mythweb/">MythWeb</a> - MythWeb provides a frontend for scheduling and managing recordings on your MythBox from a web browser.<br></li>
+ <li><a href="/remote/index.html">MythTV Web Virtual Remote</a> - A web based virtual remote control for MythTV. For this to work, you must enable "Network Remote Control interface" in Service Menu -> MythTV Configuration -> Setup -> General -> Remote Control.<br></li>
+ <li><a href="/ipodfeed/feed.php">iPod Feeds</a> - Transcodes ready for the iPod. If you have no recordings, you will see a warning issued from PHP.<br></li>
+ <li><a href="/ipodfeed/m2iweb.php">Delete iPod Transcodes</a><br></li>
+ <li><a href="/archive/feed.php">XviD Feeds</a> - Programs you have transcoded to XviD. If you have no recordings, you will see a warning issued from PHP.<br></li>
+ <li><a href="/archive/archive.php">Delete XviD Transcodes</a><br></li>
+ <li><a href="/fuppes.php">FUPPES</a> - Free UPnP Entertainment Service. A UPnP to be used inplace of the UPnP server that comes with MythTV. Install via the Service Menu.<br></li>
+ <li><a href="/mediaserv.php">Mediaserv</a> - A on-demand transcoding server for videos. Mediaserv is designed to transcode video in a format playable on the Nokia Internet Tablets. However it works well at transcoding and streaming to any device that will playback AVIs (think streaming to any browser!). By wap, we have it set to link to TV recordings (pretty) and your video directory. Additionally if you want it to stream contents from a network share, it will! ln -s /path/to/share /myth/mediaserv/media/<br></li>
+ <li><a href="/mythweb/data/mp3player.html">Radio</a> - Music in MythMusic must be encoded as MP3s.<br></li>
+ </ul>
+ </div>
+ <div id="info_status" class="hidden">
+ <ul>
+ <li><a href="/rrd/index.html">RRDTool</a> - Hardware status graphs.</li>
+ <li><a href="/monitorix/">Monitorix</a> - A system monitoring perl script that uses rrd databases to log system data.<br></li>
+ <li><a href="http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&amp;teamnum=50975">KnoppMyth Folding@home Team Status</a></li>
+ <li><a href="/foldingathome/">My Folding@home Status</a></li>
+ </ul>
+ </div>
+ <div id="info_help" class="hidden">
+ <ul>
+ <li><a href="http://www.mythtv.org/docs/">MythTV Documentation</a></li>
+ <li><a href="/mythtv-doc/keys.txt">MythTV Default Keybindings</a></li>
+ <li><a href="http://www.mythtv.org/support">MythTV Support</a></li>
+ <li><a href="http://www.schedulesdirect.org/">Schedules Direct</a> - Provides U.S./Canadian TV listing data.<br></li>
+ <li><a href="/linhes.html">LinHES</a> - Describes how "The Project Leader" setup multiple systems to form a <b>Lin</b>ux <b>H</b>ome <b>E</b>ntertainment <b>S</b>ystem.<br></li>
+ <li><a href="http://linhes.org/phpBB2/">LinHES Forum</a></li>
+ <li><a href="http://www.google.com/advanced_search?q=+site:mysettopbox.tv/phpBB2&hl=en&lr=&as_qdr=all">Search LinHES Forum</a></li>
+ <li><a href="http://www.knoppmythwiki.org/">KnoppMyth Wiki</a></li>
+ <li><a href="http://linhes.org/bugs/projects/linhes/wiki">LinHES R6 Hints & Tips</a></li>
+ <li><a href="http://linhes.org/bugs">LinHES Bug Tracker</a></li>
+ </ul>
+ </div>
+
+</body>
+</html>
diff --git a/abs/core/lzo2/PKGBUILD b/abs/core/lzo2/PKGBUILD
index f7e2da0..8474e99 100644
--- a/abs/core/lzo2/PKGBUILD
+++ b/abs/core/lzo2/PKGBUILD
@@ -2,8 +2,8 @@
# Contributor: Low Kian Seong <fastmail_low@speedymail.org>
# Maintainer: dorphell <dorphell@archlinux.org>
pkgname=lzo2
-pkgver=2.02
-pkgrel=12
+pkgver=2.03
+pkgrel=1
pkgdesc="a portable lossless data compression library written in ANSI C"
arch=(i686 x86_64)
url="http://www.oberhumer.com/opensource/lzo"
@@ -12,7 +12,6 @@ groups=('base')
depends=('glibc')
source=(http://www.oberhumer.com/opensource/lzo/download/lzo-${pkgver}.tar.gz)
options=(!libtool)
-md5sums=('6760e5819f4238328709bf93bf10071c')
build() {
cd ${startdir}/src/lzo-${pkgver}
@@ -20,3 +19,4 @@ build() {
make || return 1
make DESTDIR=${startdir}/pkg install
}
+md5sums=('0c3d078c2e8ea5a88971089a2f02a726')
diff --git a/abs/core/mdadm/PKGBUILD b/abs/core/mdadm/PKGBUILD
index 0af45bf..22ecc25 100644
--- a/abs/core/mdadm/PKGBUILD
+++ b/abs/core/mdadm/PKGBUILD
@@ -1,8 +1,8 @@
# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
# Maintainer: Judd Vinet <jvinet@zeroflux.org>
pkgname=mdadm
-pkgver=3.0
-pkgrel=12
+pkgver=3.1.2
+pkgrel=2
pkgdesc="A tool for managing/monitoring Linux md device arrays, also known as Software RAID"
arch=(i686 x86_64)
license=('GPL')
@@ -12,20 +12,14 @@ depends=('glibc')
backup=('etc/mdadm.conf')
conflicts=('udev<135-4')
source=(ftp://ftp.kernel.org/pub/linux/utils/raid/mdadm/$pkgname-$pkgver.tar.bz2 \
- mdadm mdadm.conf raid-partitions_install raid-partitions_hook)
+ mdadm.conf raid-partitions_install raid-partitions_hook)
replaces=('raidtools')
-md5sums=('bcd27a1359b18e25e61593221d098f6a'
- '6df172c8f77b280018cf87eb3d313f29'
- '0ce4c0f9770bf582a71228053566359d'
- '9de7e423ec9c6766b5f5d39915929003'
- '09d72c714b40b6fa1e8eab04c1dabd42')
build() {
cd $startdir/src/$pkgname-$pkgver
make || return 1
make INSTALL=/bin/install DESTDIR=$startdir/pkg install
install -D -m644 ../mdadm.conf $startdir/pkg/etc/mdadm.conf
- install -D -m755 ../mdadm $startdir/pkg/etc/rc.d/mdadm
install -D -m644 ../raid-partitions_install $startdir/pkg/lib/initcpio/install/raid-partitions
install -D -m644 ../raid-partitions_hook $startdir/pkg/lib/initcpio/hooks/raid-partitions
# a static binary is required for Arch's initrd
@@ -33,3 +27,7 @@ build() {
make LDFLAGS+=-static || return 1
install -D -m755 mdadm $startdir/pkg/sbin/mdadm.static
}
+md5sums=('c5a39f38c465229767a5af2a4eb81bef'
+ '0ce4c0f9770bf582a71228053566359d'
+ '9de7e423ec9c6766b5f5d39915929003'
+ '09d72c714b40b6fa1e8eab04c1dabd42')
diff --git a/abs/core/media_dirs/PKGBUILD b/abs/core/media_dirs/PKGBUILD
index f3907fe..38544b3 100644
--- a/abs/core/media_dirs/PKGBUILD
+++ b/abs/core/media_dirs/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=media_dirs
pkgver=1
-pkgrel=12
+pkgrel=14
pkgdesc="creates the dir layout for mythtv to use"
url=""
license=""
@@ -56,6 +56,14 @@ phone/Voicemail
phone/Photos
phone
pretty
+video_stuff/trailers
+video_stuff/coverart
+video_stuff/fanart
+video_stuff/screenshots
+video_stuff/banners
+games/screenshots
+games/fanart
+games/boxart
EOF
diff --git a/abs/core/mjpegtools/PKGBUILD b/abs/core/mjpegtools/PKGBUILD
index 833d798..13c9061 100644
--- a/abs/core/mjpegtools/PKGBUILD
+++ b/abs/core/mjpegtools/PKGBUILD
@@ -4,13 +4,13 @@
pkgname=mjpegtools
pkgver=1.9.0
-pkgrel=5
+pkgrel=11
pkgdesc="The mjpeg programs are a set of tools that can do recording of videos and playback, simple cut-and-paste editing and the MPEG compression of audio and video under Linux. "
arch=(i686 x86_64)
license=('GPL')
url="http://mjpeg.sourceforge.net/"
-depends=('libjpeg' 'libpng' 'sdl' 'gcc' 'libdv')
-makedepends=('gtk2')
+depends=('libpng' 'sdl' 'gcc' 'libdv' 'libjpeg6')
+makedepends=('gtk2' 'libjpeg6')
options=('!makeflags' '!libtool')
source=(http://downloads.sourceforge.net/sourceforge/mjpeg/${pkgname}-${pkgver}.tar.gz
mjpegtools-1.8.0-gcc41.patch)
@@ -18,7 +18,7 @@ source=(http://downloads.sourceforge.net/sourceforge/mjpeg/${pkgname}-${pkgver}.
build() {
cd ${startdir}/src/${pkgname}-${pkgver}
# patch -Np1 -i ${startdir}/src/mjpegtools-1.8.0-gcc41.patch || return 1
- ./configure --prefix=/usr
+env CPPFLAGS="-I/opt/libjpeg6/include" LDFLAGS="-L/opt/libjpeg6/lib" ./configure --prefix=/usr --enable-static-build
find -name Makefile -exec sed -i -e 's:-march=k8 -mtune=k8::' -e 's:-march=pentium3 -mtune=pentium3::' {} \;
make || return 1
diff --git a/abs/core/mjpegtools/__changelog b/abs/core/mjpegtools/__changelog
new file mode 100644
index 0000000..aa74d17
--- /dev/null
+++ b/abs/core/mjpegtools/__changelog
@@ -0,0 +1,2 @@
+change to build against libjpeg6
+ env CPPFLAGS="-I/opt/libjpeg6/include" LDFLAGS="-L/opt/libjpeg6/lib" ./configure -
diff --git a/abs/core/mplayer-wrapper/PKGBUILD b/abs/core/mplayer-wrapper/PKGBUILD
index c64875d..2dbf67d 100644
--- a/abs/core/mplayer-wrapper/PKGBUILD
+++ b/abs/core/mplayer-wrapper/PKGBUILD
@@ -1,16 +1,15 @@
pkgname=mplayer-wrapper
pkgver=1
-pkgrel=9
+pkgrel=10
pkgdesc="wrapper for mplayer and mplayer derivatives"
arch=('i686' 'x86_64')
-depends=('perl')
+depends=('perl' 'vdpauinfo')
source=(mplayer-wrapper.pl)
license=('GPL2')
-install=mplayer-wrapper.install
build() {
LH_ROOT=/usr/LH
mkdir -p $startdir/pkg/$LH_ROOT/bin/
@@ -19,3 +18,4 @@ build() {
# executables
install -m0755 -D *.pl $startdir/pkg/$LH_ROOT/bin/
}
+md5sums=('c21a8b05d2134262c876396bde9da0a2')
diff --git a/abs/core/mplayer-wrapper/mplayer-wrapper.pl b/abs/core/mplayer-wrapper/mplayer-wrapper.pl
index da0e838..18f3caf 100755..100644
--- a/abs/core/mplayer-wrapper/mplayer-wrapper.pl
+++ b/abs/core/mplayer-wrapper/mplayer-wrapper.pl
@@ -97,10 +97,13 @@ sub dynamic_parameters () {
my($mediafile)=@_;
my @parameters = ();
my $codec="";
+ my $xresolution=0;
+ my $yresolution=0;
my %vdpau_supported_modes=();
+ my $vf_parameters="";
# See if the GPU and driver support vdpau for GPU-based accelerated decoding
- my $command="vdpinfo |";
+ my $command="vdpauinfo |";
# On supported hardware, vdpinfo produces relevant results that look something like this (see
# http://www.phoronix.com/forums/showthread.php?t=14493 for additional details, or run
# vdpinfo on vdpau-capable hardware yourself):
@@ -130,49 +133,95 @@ sub dynamic_parameters () {
}
close(SHELL);
- # figure out what codec the video uses
- my $command="mplayer -identify -frames 0 \"$mediafile\" | grep ID_VIDEO_CODEC | cut -c 16- |";
+ # Learn some things about the video: codec and resolution
+ my $command="mplayer -identify -frames 0 \"$mediafile\" |";
open(SHELL, $command);
while (<SHELL>) {
chop;
- $codec = $_;
- #print "DEBUG: codec is $codec\n";
+ if (m/ID_VIDEO_CODEC=(.*)/g) {
+ $codec = $1;
+ #print "DEBUG: codec is $codec\n";
+ } elsif (m/ID_VIDEO_WIDTH=(.*)/g) {
+ $xresolution = $1;
+ #print "DEBUG: x resolution is $xresolution\n";
+ } elsif (m/ID_VIDEO_HEIGHT=(.*)/g) {
+ $yresolution = $1;
+ #print "DEBUG: y resolution is $yresolution\n";
+ }
}
close(SHELL);
- # We should use vdpau if it's available and helps with the codec we need to decode.
- if ($codec eq "ffh264") { # h.264
- if ($vdpau_supported_modes{"H264"}) {
- push(@parameters, "-vo vdpau");
- push(@parameters, "-vc ffh264vdpau");
+ # see if it's a malformed 4:3 video with top and side bars, in need of cropping
+ my $crop_candidate="";
+ my $biggestX=0;
+ my $biggestY=0;
+ # The algorithm here is trial and error. Skip 6 minutes into a video, and look at 40 frames of
+ # video. Videos shorter than 6 minutes will not end up being examined for letterboxing badness.
+ # In a longer video, use the least-recommended pruning that mplayer suggests, among the frames polled.
+ my $command="mplayer -ss 360 -ao null -vo null -vf cropdetect -frames 40 \"$mediafile\" | grep CROP | tail -1 |";
+ open(SHELL, $command);
+ while (<SHELL>) {
+ if (m/-vf (crop=.*)\)/g) {
+ $crop_candidate = $1;
+ print "DEBUG: $crop_candidate\n";
+ if ($crop_candidate =~ m/(\d+):(\d+)/) {
+ if (($1 > $biggestX) && ($2 > $biggestY)) {
+ $biggestX = $1;
+ $biggestY = $2;
+ print "newX: $biggestX\n";
+ print "newY: $biggestY\n";
+ }
+ }
}
- } elsif ($codec eq "ffmpeg2") { # MPEG2
- if ($vdpau_supported_modes{"MPEG2"}) {
- push(@parameters, "-vo vdpau");
- push(@parameters, "-vc ffmpeg12vdpau");
+ if (($biggestX != $xresolution) || ($biggestY != $yresolution)) {
+ $vf_parameters = $crop_candidate;
}
+ print "DEBUG: crop parameter is $vf_parameters\n";
+ }
+ close(SHELL);
- # ??? although MPEG1 is rare, it seems as if it should work with -vc ffmpeg12vdpau as well
-
- # problems have been reported with WMV3 support
-
+ # If there are no crop parameters, use vdpau if it's supported. Don't use vdpau if there's cropping
+ # because vdpau doesn't work with mplayer's cropping video filter.
+
+ # We should use vdpau if it's available and helps with the codec we need to decode.
+ if ($vf_parameters eq "") {
+ if ($codec eq "ffh264") { # h.264
+ if ($vdpau_supported_modes{"H264"}) {
+ push(@parameters, "-vo vdpau");
+ push(@parameters, "-vc ffh264vdpau");
+ }
+ } elsif ($codec eq "ffmpeg2") { # MPEG2
+ if ($vdpau_supported_modes{"MPEG2"}) {
+ push(@parameters, "-vo vdpau");
+ push(@parameters, "-vc ffmpeg12vdpau");
+ }
+
+ # ??? although MPEG1 is rare, it seems as if it should work with -vc ffmpeg12vdpau as well
+
+ # problems have been reported with WMV3 support
+
# } elsif ($codec eq "ffwmv3") { # WMV3
# if ($vdpau_supported) {
# push(@parameters, "-vo vdpau");
# push(@parameters, "-vc ffwmv3vdpau");
# }
- # problems have been reported with WVC1 support
-
+ # problems have been reported with WVC1 support
+
# } elsif ($codec eq "ffvc1") { # WVC1
# if ($vdpau_supported) {
# push(@parameters, "-vo vdpau");
# push(@parameters, "-vc ffvc1vdpau");
# }
-
- } else {
+
+ } else { # any codec that doesn't work with vdpau
+ push(@parameters, "-vo xv,x11,");
+ push(@parameters, "-vc ,");
+ push(@parameters, "-vf pp=lb,$vf_parameters");
+ }
+ } else { # there is a crop parameter
push(@parameters, "-vo xv,x11,");
push(@parameters, "-vc ,");
- push(@parameters, "-vf pp=lb,"); # doesn't actually work with vdpau, but doesn't break anything
+ push(@parameters, "-vf pp=lb,$vf_parameters");
}
return(@parameters);
}
diff --git a/abs/core/mysql/PKGBUILD b/abs/core/mysql/PKGBUILD
index 11df8fb..c91ac41 100644
--- a/abs/core/mysql/PKGBUILD
+++ b/abs/core/mysql/PKGBUILD
@@ -3,7 +3,7 @@
# Contributor: judd <jvinet@zeroflux.org>
pkgname=mysql
pkgver=5.0.75
-pkgrel=3
+pkgrel=4
pkgdesc="A fast SQL database server"
arch=(i686 x86_64)
backup=(etc/my.cnf etc/conf.d/mysqld)
@@ -48,3 +48,9 @@ build() {
install -D -m644 ../mysqld.conf.d ${startdir}/pkg/etc/conf.d/mysqld
rm -f ${startdir}/pkg/usr/bin/mysql_config
}
+
+md5sums=('a234f0a60a7f8c290d9875cba3a2c5a2'
+ 'e892aac36cbeb57f0e003ec0936afb3b'
+ 'cfff3585dd70cde3ac1ce69e64008733'
+ '078f6e824d6097d558bcf7c16d508d92'
+ 'd81d1f51e9ee6941425a63456d07cb21')
diff --git a/abs/core/mysql/__changelog b/abs/core/mysql/__changelog
index 4fa7078..aa066aa 100644
--- a/abs/core/mysql/__changelog
+++ b/abs/core/mysql/__changelog
@@ -1,6 +1,11 @@
my.cnf
-enable networking
-datadir /data/srv/mysql
+-query_cache_size
+-tmp_table_size
+-max_heap_table_size
+-thread_cache_size
+-table_cache
mysqld
-redirect output to /dev/null
diff --git a/abs/core/mysql/my.cnf b/abs/core/mysql/my.cnf
index 7202fcd..e13331e 100644
--- a/abs/core/mysql/my.cnf
+++ b/abs/core/mysql/my.cnf
@@ -1,8 +1,4 @@
-# mysql config file for medium systems.
-#
-# This is for a system with little memory (32M - 64M) where MySQL plays
-# a important part and systems up to 128M where MySQL is used together with
-# other programs (like a web server)
+# mysql config file for LinHES.
#
# One can in this file use all long options that the program supports.
# If you want to know which options a program support, run the program
@@ -28,6 +24,11 @@ table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 16K
myisam_sort_buffer_size = 8M
+query_cache_size = 8M
+tmp_table_size = 36M
+max_heap_table_size = 24M
+thread_cache_size = 4
+table_cache = 96
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
diff --git a/abs/core/mythdb-initial/PKGBUILD b/abs/core/mythdb-initial/PKGBUILD
new file mode 100755
index 0000000..16a59e1
--- /dev/null
+++ b/abs/core/mythdb-initial/PKGBUILD
@@ -0,0 +1,23 @@
+pkgname=mythdb-initial
+pkgver=1
+pkgrel=54
+pkgdesc="setup the initial mythtv database for linhes"
+url=""
+license=""
+depends=(mysql)
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+install=mythdb.install
+source=(mc.sql permissions.sql custom.sql dvd_transcode_r6.sql)
+md5sums=()
+arch=('i686')
+build() {
+ cd $startdir/src
+ mkdir -p $startdir/pkg/data/database
+ cp mc.sql $startdir/pkg/data/database/mc.sql.initial
+ cp permissions.sql $startdir/pkg/data/database/permissions.sql
+ cp custom.sql $startdir/pkg/data/database/custom.sql
+ cp dvd_transcode_r6.sql $startdir/pkg/data/database/dvd_transcode_r6.sql
+}
diff --git a/abs/core/mythdb-initial/__changelog b/abs/core/mythdb-initial/__changelog
new file mode 100644
index 0000000..c53f2f6
--- /dev/null
+++ b/abs/core/mythdb-initial/__changelog
@@ -0,0 +1,25 @@
+
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('Hostpluginmytharchive','1','larch5'),
+('Hostpluginmythbrowser','1','larch5'),
+('Hostpluginmythcontrols','1','larch5'),
+('Hostpluginmythflix','1','larch5'),
+('Hostpluginmythgallery','1','larch5'),
+('Hostpluginmythgame','1','larch5'),
+('HostpluginmythgameFceu','1','larch5'),
+('HostpluginmythgameMame','1','larch5'),
+('HostpluginmythgameZsnes','1','larch5'),
+('Hostpluginmythmovietime','1','larch5'),
+('Hostpluginmythmusic','1','larch5'),
+('Hostpluginmythnews','1','larch5'),
+('Hostpluginmythphone','1','larch5'),
+('Hostpluginmythsmolt','1','larch5'),
+('Hostpluginmythvideo','1','larch5'),
+('Hostpluginmythvideo_dvdcss','0','larch5'),
+('Hostpluginmythweather','1','larch5'),
+('HostAudiotype','ALSA','larch5')
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('WOLbackendReconnectWaitTime','5',NULL);
+
diff --git a/abs/core/mythdb-initial/custom.sql b/abs/core/mythdb-initial/custom.sql
new file mode 100644
index 0000000..1033a9e
--- /dev/null
+++ b/abs/core/mythdb-initial/custom.sql
@@ -0,0 +1,3 @@
+INSERT INTO `jumppoints` (`destination`, `description`,`keylist`,`hostname`) VALUES
+('MythSmolt','Hardware profiler','Ctrl+Alt+p','larch5')
+
diff --git a/abs/core/mythdb-initial/dvd_transcode_r6.sql b/abs/core/mythdb-initial/dvd_transcode_r6.sql
new file mode 100644
index 0000000..6088b59
--- /dev/null
+++ b/abs/core/mythdb-initial/dvd_transcode_r6.sql
@@ -0,0 +1,105 @@
+-- MySQL dump 10.11
+--
+-- Host: localhost Database: mythconverg
+-- ------------------------------------------------------
+-- Server version 5.0.75
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `dvdinput`
+--
+
+DROP TABLE IF EXISTS `dvdinput`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdinput` (
+ `intid` int(10) unsigned NOT NULL default '0',
+ `hsize` int(10) unsigned default NULL,
+ `vsize` int(10) unsigned default NULL,
+ `ar_num` int(10) unsigned default NULL,
+ `ar_denom` int(10) unsigned default NULL,
+ `fr_code` int(10) unsigned default NULL,
+ `letterbox` tinyint(1) default NULL,
+ `v_format` varchar(16) default NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdinput`
+--
+
+LOCK TABLES `dvdinput` WRITE;
+/*!40000 ALTER TABLE `dvdinput` DISABLE KEYS */;
+INSERT INTO `dvdinput` VALUES (1,720,480,16,9,1,1,'ntsc'),(2,720,480,16,9,1,0,'ntsc'),(3,720,480,4,3,1,1,'ntsc'),(4,720,480,4,3,1,0,'ntsc'),(5,720,576,16,9,3,1,'pal'),(6,720,576,16,9,3,0,'pal'),(7,720,576,4,3,3,1,'pal'),(8,720,576,4,3,3,0,'pal');
+/*!40000 ALTER TABLE `dvdinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdtranscode`
+--
+
+DROP TABLE IF EXISTS `dvdtranscode`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdtranscode` (
+ `intid` int(11) NOT NULL auto_increment,
+ `input` int(10) unsigned default NULL,
+ `name` varchar(128) NOT NULL,
+ `sync_mode` int(10) unsigned default NULL,
+ `use_yv12` tinyint(1) default NULL,
+ `cliptop` int(11) default NULL,
+ `clipbottom` int(11) default NULL,
+ `clipleft` int(11) default NULL,
+ `clipright` int(11) default NULL,
+ `f_resize_h` int(11) default NULL,
+ `f_resize_w` int(11) default NULL,
+ `hq_resize_h` int(11) default NULL,
+ `hq_resize_w` int(11) default NULL,
+ `grow_h` int(11) default NULL,
+ `grow_w` int(11) default NULL,
+ `clip2top` int(11) default NULL,
+ `clip2bottom` int(11) default NULL,
+ `clip2left` int(11) default NULL,
+ `clip2right` int(11) default NULL,
+ `codec` varchar(128) NOT NULL,
+ `codec_param` varchar(128) default NULL,
+ `bitrate` int(11) default NULL,
+ `a_sample_r` int(11) default NULL,
+ `a_bitrate` int(11) default NULL,
+ `two_pass` tinyint(1) default NULL,
+ `tc_param` varchar(128) default NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdtranscode`
+--
+
+LOCK TABLES `dvdtranscode` WRITE;
+/*!40000 ALTER TABLE `dvdtranscode` DISABLE KEYS */;
+INSERT INTO `dvdtranscode` VALUES (1,1,'Good',2,1,16,16,0,0,2,0,0,0,0,0,32,32,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(2,2,'Excellent',2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(3,2,'Good',2,1,0,0,8,8,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(4,2,'Medium',2,1,0,0,8,8,5,5,0,0,0,0,0,0,0,0,'divx5',NULL,1200,NULL,NULL,0,NULL),(5,3,'Good',2,1,0,0,0,0,0,0,0,0,2,0,80,80,8,8,'divx5',NULL,0,NULL,NULL,0,NULL),(6,4,'Excellent',2,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(7,4,'Good',2,1,0,0,8,8,0,2,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(8,5,'Good',1,1,16,16,0,0,5,0,0,0,0,0,40,40,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(9,6,'Good',1,1,0,0,16,16,5,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(10,7,'Good',1,1,0,0,0,0,1,0,0,0,0,0,76,76,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(11,8,'Good',1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);
+/*!40000 ALTER TABLE `dvdtranscode` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2010-01-08 0:15:01
diff --git a/abs/core/mythdb-initial/mc.sql b/abs/core/mythdb-initial/mc.sql
new file mode 100644
index 0000000..3e55b70
--- /dev/null
+++ b/abs/core/mythdb-initial/mc.sql
@@ -0,0 +1,2909 @@
+-- MySQL dump 10.11
+--
+-- Host: localhost Database: mythconverg
+-- ------------------------------------------------------
+-- Server version 5.0.75
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `archiveitems`
+--
+
+DROP TABLE IF EXISTS `archiveitems`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `archiveitems` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `type` set('Recording','Video','File') character set latin1 default NULL,
+ `title` varchar(128) default NULL,
+ `subtitle` varchar(128) default NULL,
+ `description` text,
+ `startdate` varchar(30) default NULL,
+ `starttime` varchar(30) default NULL,
+ `size` bigint(20) unsigned NOT NULL,
+ `filename` text NOT NULL,
+ `hascutlist` tinyint(1) NOT NULL default '0',
+ `cutlist` text,
+ `duration` int(10) unsigned NOT NULL default '0',
+ `cutduration` int(10) unsigned NOT NULL default '0',
+ `videowidth` int(10) unsigned NOT NULL default '0',
+ `videoheight` int(10) unsigned NOT NULL default '0',
+ `filecodec` varchar(50) NOT NULL default '',
+ `videocodec` varchar(50) NOT NULL default '',
+ `encoderprofile` varchar(50) NOT NULL default 'NONE',
+ PRIMARY KEY (`intid`),
+ KEY `title` (`title`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `archiveitems`
+--
+
+LOCK TABLES `archiveitems` WRITE;
+/*!40000 ALTER TABLE `archiveitems` DISABLE KEYS */;
+/*!40000 ALTER TABLE `archiveitems` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `callsignnetworkmap`
+--
+
+DROP TABLE IF EXISTS `callsignnetworkmap`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `callsignnetworkmap` (
+ `id` int(11) NOT NULL auto_increment,
+ `callsign` varchar(20) NOT NULL default '',
+ `network` varchar(20) NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `callsign` (`callsign`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `callsignnetworkmap`
+--
+
+LOCK TABLES `callsignnetworkmap` WRITE;
+/*!40000 ALTER TABLE `callsignnetworkmap` DISABLE KEYS */;
+/*!40000 ALTER TABLE `callsignnetworkmap` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `capturecard`
+--
+
+DROP TABLE IF EXISTS `capturecard`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `capturecard` (
+ `cardid` int(10) unsigned NOT NULL auto_increment,
+ `videodevice` varchar(128) default NULL,
+ `audiodevice` varchar(128) default NULL,
+ `vbidevice` varchar(128) default NULL,
+ `cardtype` varchar(32) default 'V4L',
+ `defaultinput` varchar(32) default 'Television',
+ `audioratelimit` int(11) default NULL,
+ `hostname` varchar(64) default NULL,
+ `dvb_swfilter` int(11) default '0',
+ `dvb_sat_type` int(11) NOT NULL default '0',
+ `dvb_wait_for_seqstart` int(11) NOT NULL default '1',
+ `skipbtaudio` tinyint(1) default '0',
+ `dvb_on_demand` tinyint(4) NOT NULL default '0',
+ `dvb_diseqc_type` smallint(6) default NULL,
+ `firewire_speed` int(10) unsigned NOT NULL default '0',
+ `firewire_model` varchar(32) default NULL,
+ `firewire_connection` int(10) unsigned NOT NULL default '0',
+ `signal_timeout` int(11) NOT NULL default '1000',
+ `channel_timeout` int(11) NOT NULL default '3000',
+ `dvb_tuning_delay` int(10) unsigned NOT NULL default '0',
+ `contrast` int(11) NOT NULL default '0',
+ `brightness` int(11) NOT NULL default '0',
+ `colour` int(11) NOT NULL default '0',
+ `hue` int(11) NOT NULL default '0',
+ `diseqcid` int(10) unsigned default NULL,
+ `dvb_eitscan` tinyint(1) NOT NULL default '1',
+ PRIMARY KEY (`cardid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `capturecard`
+--
+
+LOCK TABLES `capturecard` WRITE;
+/*!40000 ALTER TABLE `capturecard` DISABLE KEYS */;
+/*!40000 ALTER TABLE `capturecard` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `cardinput`
+--
+
+DROP TABLE IF EXISTS `cardinput`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `cardinput` (
+ `cardinputid` int(10) unsigned NOT NULL auto_increment,
+ `cardid` int(10) unsigned NOT NULL default '0',
+ `sourceid` int(10) unsigned NOT NULL default '0',
+ `inputname` varchar(32) NOT NULL default '',
+ `externalcommand` varchar(128) default NULL,
+ `shareable` char(1) default 'N',
+ `tunechan` varchar(10) default NULL,
+ `startchan` varchar(10) default NULL,
+ `displayname` varchar(64) NOT NULL default '',
+ `dishnet_eit` tinyint(1) NOT NULL default '0',
+ `recpriority` int(11) NOT NULL default '0',
+ `quicktune` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`cardinputid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `cardinput`
+--
+
+LOCK TABLES `cardinput` WRITE;
+/*!40000 ALTER TABLE `cardinput` DISABLE KEYS */;
+/*!40000 ALTER TABLE `cardinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channel`
+--
+
+DROP TABLE IF EXISTS `channel`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channel` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `channum` varchar(10) NOT NULL default '',
+ `freqid` varchar(10) default NULL,
+ `sourceid` int(10) unsigned default NULL,
+ `callsign` varchar(20) NOT NULL default '',
+ `name` varchar(64) NOT NULL default '',
+ `icon` varchar(255) NOT NULL default 'none',
+ `finetune` int(11) default NULL,
+ `videofilters` varchar(255) NOT NULL default '',
+ `xmltvid` varchar(64) NOT NULL default '',
+ `recpriority` int(10) NOT NULL default '0',
+ `contrast` int(11) default '32768',
+ `brightness` int(11) default '32768',
+ `colour` int(11) default '32768',
+ `hue` int(11) default '32768',
+ `tvformat` varchar(10) NOT NULL default 'Default',
+ `visible` tinyint(1) NOT NULL default '1',
+ `outputfilters` varchar(255) NOT NULL default '',
+ `useonairguide` tinyint(1) default '0',
+ `mplexid` smallint(6) default NULL,
+ `serviceid` mediumint(8) unsigned default NULL,
+ `tmoffset` int(11) NOT NULL default '0',
+ `atsc_major_chan` int(10) unsigned NOT NULL default '0',
+ `atsc_minor_chan` int(10) unsigned NOT NULL default '0',
+ `last_record` datetime NOT NULL,
+ `default_authority` varchar(32) NOT NULL default '',
+ `commmethod` int(11) NOT NULL default '-1',
+ PRIMARY KEY (`chanid`),
+ KEY `channel_src` (`channum`,`sourceid`),
+ KEY `sourceid` (`sourceid`,`xmltvid`,`chanid`),
+ KEY `visible` (`visible`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channel`
+--
+
+LOCK TABLES `channel` WRITE;
+/*!40000 ALTER TABLE `channel` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channel` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelgroup`
+--
+
+DROP TABLE IF EXISTS `channelgroup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelgroup` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `chanid` int(11) unsigned NOT NULL default '0',
+ `grpid` int(11) NOT NULL default '1',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelgroup`
+--
+
+LOCK TABLES `channelgroup` WRITE;
+/*!40000 ALTER TABLE `channelgroup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channelgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelgroupnames`
+--
+
+DROP TABLE IF EXISTS `channelgroupnames`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelgroupnames` (
+ `grpid` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(64) NOT NULL default '0',
+ PRIMARY KEY (`grpid`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelgroupnames`
+--
+
+LOCK TABLES `channelgroupnames` WRITE;
+/*!40000 ALTER TABLE `channelgroupnames` DISABLE KEYS */;
+INSERT INTO `channelgroupnames` VALUES (1,'Favorites');
+/*!40000 ALTER TABLE `channelgroupnames` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelscan`
+--
+
+DROP TABLE IF EXISTS `channelscan`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelscan` (
+ `scanid` int(3) unsigned NOT NULL auto_increment,
+ `cardid` int(3) unsigned NOT NULL,
+ `sourceid` int(3) unsigned NOT NULL,
+ `processed` tinyint(1) unsigned NOT NULL,
+ `scandate` datetime NOT NULL,
+ PRIMARY KEY (`scanid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelscan`
+--
+
+LOCK TABLES `channelscan` WRITE;
+/*!40000 ALTER TABLE `channelscan` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channelscan` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelscan_channel`
+--
+
+DROP TABLE IF EXISTS `channelscan_channel`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelscan_channel` (
+ `transportid` int(6) unsigned NOT NULL,
+ `scanid` int(3) unsigned NOT NULL,
+ `mplex_id` smallint(6) NOT NULL,
+ `source_id` int(3) unsigned NOT NULL,
+ `channel_id` int(3) unsigned NOT NULL default '0',
+ `callsign` varchar(20) NOT NULL default '',
+ `service_name` varchar(64) NOT NULL default '',
+ `chan_num` varchar(10) NOT NULL default '',
+ `service_id` mediumint(8) unsigned NOT NULL default '0',
+ `atsc_major_channel` int(4) unsigned NOT NULL default '0',
+ `atsc_minor_channel` int(4) unsigned NOT NULL default '0',
+ `use_on_air_guide` tinyint(1) NOT NULL default '0',
+ `hidden` tinyint(1) NOT NULL default '0',
+ `hidden_in_guide` tinyint(1) NOT NULL default '0',
+ `freqid` varchar(10) NOT NULL default '',
+ `icon` varchar(255) NOT NULL default '',
+ `tvformat` varchar(10) NOT NULL default 'Default',
+ `xmltvid` varchar(64) NOT NULL default '',
+ `pat_tsid` int(5) unsigned NOT NULL default '0',
+ `vct_tsid` int(5) unsigned NOT NULL default '0',
+ `vct_chan_tsid` int(5) unsigned NOT NULL default '0',
+ `sdt_tsid` int(5) unsigned NOT NULL default '0',
+ `orig_netid` int(5) unsigned NOT NULL default '0',
+ `netid` int(5) unsigned NOT NULL default '0',
+ `si_standard` varchar(10) NOT NULL,
+ `in_channels_conf` tinyint(1) unsigned NOT NULL default '0',
+ `in_pat` tinyint(1) unsigned NOT NULL default '0',
+ `in_pmt` tinyint(1) unsigned NOT NULL default '0',
+ `in_vct` tinyint(1) unsigned NOT NULL default '0',
+ `in_nit` tinyint(1) unsigned NOT NULL default '0',
+ `in_sdt` tinyint(1) unsigned NOT NULL default '0',
+ `is_encrypted` tinyint(1) unsigned NOT NULL default '0',
+ `is_data_service` tinyint(1) unsigned NOT NULL default '0',
+ `is_audio_service` tinyint(1) unsigned NOT NULL default '0',
+ `is_opencable` tinyint(1) unsigned NOT NULL default '0',
+ `could_be_opencable` tinyint(1) unsigned NOT NULL default '0',
+ `decryption_status` smallint(2) unsigned NOT NULL default '0',
+ `default_authority` varchar(32) NOT NULL default ''
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelscan_channel`
+--
+
+LOCK TABLES `channelscan_channel` WRITE;
+/*!40000 ALTER TABLE `channelscan_channel` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channelscan_channel` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelscan_dtv_multiplex`
+--
+
+DROP TABLE IF EXISTS `channelscan_dtv_multiplex`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelscan_dtv_multiplex` (
+ `transportid` int(6) unsigned NOT NULL auto_increment,
+ `scanid` int(3) unsigned NOT NULL,
+ `mplexid` smallint(6) unsigned NOT NULL,
+ `frequency` bigint(12) unsigned NOT NULL,
+ `inversion` char(1) NOT NULL default 'a',
+ `symbolrate` bigint(12) unsigned NOT NULL default '0',
+ `fec` varchar(10) NOT NULL default 'auto',
+ `polarity` char(1) NOT NULL default '',
+ `hp_code_rate` varchar(10) NOT NULL default 'auto',
+ `mod_sys` varchar(10) default NULL,
+ `rolloff` varchar(4) default NULL,
+ `lp_code_rate` varchar(10) NOT NULL default 'auto',
+ `modulation` varchar(10) NOT NULL default 'auto',
+ `transmission_mode` char(1) NOT NULL default 'a',
+ `guard_interval` varchar(10) NOT NULL default 'auto',
+ `hierarchy` varchar(10) NOT NULL default 'auto',
+ `bandwidth` char(1) NOT NULL default 'a',
+ `sistandard` varchar(10) NOT NULL,
+ `tuner_type` smallint(2) unsigned NOT NULL,
+ `default_authority` varchar(32) NOT NULL default '',
+ PRIMARY KEY (`transportid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelscan_dtv_multiplex`
+--
+
+LOCK TABLES `channelscan_dtv_multiplex` WRITE;
+/*!40000 ALTER TABLE `channelscan_dtv_multiplex` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channelscan_dtv_multiplex` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `codecparams`
+--
+
+DROP TABLE IF EXISTS `codecparams`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `codecparams` (
+ `profile` int(10) unsigned NOT NULL default '0',
+ `name` varchar(128) NOT NULL default '',
+ `value` varchar(128) default NULL,
+ PRIMARY KEY (`profile`,`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `codecparams`
+--
+
+LOCK TABLES `codecparams` WRITE;
+/*!40000 ALTER TABLE `codecparams` DISABLE KEYS */;
+/*!40000 ALTER TABLE `codecparams` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `credits`
+--
+
+DROP TABLE IF EXISTS `credits`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `credits` (
+ `person` mediumint(8) unsigned NOT NULL default '0',
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `role` set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') character set latin1 NOT NULL default '',
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`person`,`role`),
+ KEY `person` (`person`,`role`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `credits`
+--
+
+LOCK TABLES `credits` WRITE;
+/*!40000 ALTER TABLE `credits` DISABLE KEYS */;
+/*!40000 ALTER TABLE `credits` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `customexample`
+--
+
+DROP TABLE IF EXISTS `customexample`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `customexample` (
+ `rulename` varchar(64) NOT NULL,
+ `fromclause` text NOT NULL,
+ `whereclause` text NOT NULL,
+ `search` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`rulename`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `customexample`
+--
+
+LOCK TABLES `customexample` WRITE;
+/*!40000 ALTER TABLE `customexample` DISABLE KEYS */;
+INSERT INTO `customexample` VALUES ('New Flix','','program.category_type = \'movie\' AND program.airdate >= \n YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR)) \nAND program.stars > 0.5 ',1);
+/*!40000 ALTER TABLE `customexample` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `diseqc_config`
+--
+
+DROP TABLE IF EXISTS `diseqc_config`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `diseqc_config` (
+ `cardinputid` int(10) unsigned NOT NULL,
+ `diseqcid` int(10) unsigned NOT NULL,
+ `value` varchar(16) NOT NULL default '',
+ KEY `id` (`cardinputid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `diseqc_config`
+--
+
+LOCK TABLES `diseqc_config` WRITE;
+/*!40000 ALTER TABLE `diseqc_config` DISABLE KEYS */;
+/*!40000 ALTER TABLE `diseqc_config` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `diseqc_tree`
+--
+
+DROP TABLE IF EXISTS `diseqc_tree`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `diseqc_tree` (
+ `diseqcid` int(10) unsigned NOT NULL auto_increment,
+ `parentid` int(10) unsigned default NULL,
+ `ordinal` tinyint(3) unsigned NOT NULL,
+ `type` varchar(16) NOT NULL default '',
+ `subtype` varchar(16) NOT NULL default '',
+ `description` varchar(32) NOT NULL default '',
+ `switch_ports` tinyint(3) unsigned NOT NULL default '0',
+ `rotor_hi_speed` float NOT NULL default '0',
+ `rotor_lo_speed` float NOT NULL default '0',
+ `rotor_positions` varchar(255) NOT NULL default '',
+ `lnb_lof_switch` int(10) NOT NULL default '0',
+ `lnb_lof_hi` int(10) NOT NULL default '0',
+ `lnb_lof_lo` int(10) NOT NULL default '0',
+ `cmd_repeat` int(11) NOT NULL default '1',
+ `lnb_pol_inv` tinyint(4) NOT NULL default '0',
+ `address` tinyint(3) unsigned NOT NULL default '0',
+ PRIMARY KEY (`diseqcid`),
+ KEY `parentid` (`parentid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `diseqc_tree`
+--
+
+LOCK TABLES `diseqc_tree` WRITE;
+/*!40000 ALTER TABLE `diseqc_tree` DISABLE KEYS */;
+/*!40000 ALTER TABLE `diseqc_tree` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `displayprofilegroups`
+--
+
+DROP TABLE IF EXISTS `displayprofilegroups`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `displayprofilegroups` (
+ `name` varchar(128) NOT NULL,
+ `hostname` varchar(64) NOT NULL,
+ `profilegroupid` int(10) unsigned NOT NULL auto_increment,
+ PRIMARY KEY (`name`,`hostname`),
+ UNIQUE KEY `profilegroupid` (`profilegroupid`)
+) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `displayprofilegroups`
+--
+
+LOCK TABLES `displayprofilegroups` WRITE;
+/*!40000 ALTER TABLE `displayprofilegroups` DISABLE KEYS */;
+INSERT INTO `displayprofilegroups` VALUES ('CPU++','larch5',1),('CPU+','larch5',2),('CPU--','larch5',3),('High Quality','larch5',4),('Normal','larch5',5),('Slim','larch5',6),('VDPAU High Quality','larch5',7),('VDPAU Normal','larch5',8),('VDPAU Slim','larch5',9);
+/*!40000 ALTER TABLE `displayprofilegroups` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `displayprofiles`
+--
+
+DROP TABLE IF EXISTS `displayprofiles`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `displayprofiles` (
+ `profilegroupid` int(10) unsigned NOT NULL,
+ `profileid` int(10) unsigned NOT NULL auto_increment,
+ `value` varchar(128) NOT NULL,
+ `data` varchar(255) NOT NULL default '',
+ KEY `profilegroupid` (`profilegroupid`),
+ KEY `profileid` (`profileid`,`value`),
+ KEY `profileid_2` (`profileid`)
+) ENGINE=MyISAM AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `displayprofiles`
+--
+
+LOCK TABLES `displayprofiles` WRITE;
+/*!40000 ALTER TABLE `displayprofiles` DISABLE KEYS */;
+INSERT INTO `displayprofiles` VALUES (1,1,'pref_priority','1'),(1,1,'pref_cmp0','> 0 0'),(1,1,'pref_decoder','ffmpeg'),(1,1,'pref_max_cpus','1'),(1,1,'pref_videorenderer','xv-blit'),(1,1,'pref_osdrenderer','softblend'),(1,1,'pref_osdfade','1'),(1,1,'pref_deint0','bobdeint'),(1,1,'pref_deint1','linearblend'),(1,1,'pref_filters',''),(1,2,'pref_priority','2'),(1,2,'pref_cmp0','> 0 0'),(1,2,'pref_decoder','ffmpeg'),(1,2,'pref_max_cpus','1'),(1,2,'pref_videorenderer','quartz-blit'),(1,2,'pref_osdrenderer','softblend'),(1,2,'pref_osdfade','1'),(1,2,'pref_deint0','linearblend'),(1,2,'pref_deint1','linearblend'),(1,2,'pref_filters',''),(2,3,'pref_priority','1'),(2,3,'pref_cmp0','<= 720 576'),(2,3,'pref_cmp1','> 0 0'),(2,3,'pref_decoder','ffmpeg'),(2,3,'pref_max_cpus','1'),(2,3,'pref_videorenderer','xv-blit'),(2,3,'pref_osdrenderer','softblend'),(2,3,'pref_osdfade','1'),(2,3,'pref_deint0','bobdeint'),(2,3,'pref_deint1','linearblend'),(2,3,'pref_filters',''),(2,4,'pref_priority','2'),(2,4,'pref_cmp0','<= 1280 720'),(2,4,'pref_cmp1','> 720 576'),(2,4,'pref_decoder','xvmc'),(2,4,'pref_max_cpus','1'),(2,4,'pref_videorenderer','xvmc-blit'),(2,4,'pref_osdrenderer','opengl'),(2,4,'pref_osdfade','1'),(2,4,'pref_deint0','bobdeint'),(2,4,'pref_deint1','onefield'),(2,4,'pref_filters',''),(2,5,'pref_priority','3'),(2,5,'pref_cmp0','<= 1280 720'),(2,5,'pref_cmp1','> 720 576'),(2,5,'pref_decoder','libmpeg2'),(2,5,'pref_max_cpus','1'),(2,5,'pref_videorenderer','xv-blit'),(2,5,'pref_osdrenderer','softblend'),(2,5,'pref_osdfade','1'),(2,5,'pref_deint0','bobdeint'),(2,5,'pref_deint1','onefield'),(2,5,'pref_filters',''),(2,6,'pref_priority','4'),(2,6,'pref_cmp0','> 0 0'),(2,6,'pref_decoder','xvmc'),(2,6,'pref_max_cpus','1'),(2,6,'pref_videorenderer','xvmc-blit'),(2,6,'pref_osdrenderer','ia44blend'),(2,6,'pref_osdfade','0'),(2,6,'pref_deint0','bobdeint'),(2,6,'pref_deint1','onefield'),(2,6,'pref_filters',''),(2,7,'pref_priority','5'),(2,7,'pref_cmp0','> 0 0'),(2,7,'pref_decoder','libmpeg2'),(2,7,'pref_max_cpus','1'),(2,7,'pref_videorenderer','xv-blit'),(2,7,'pref_osdrenderer','chromakey'),(2,7,'pref_osdfade','0'),(2,7,'pref_deint0','bobdeint'),(2,7,'pref_deint1','onefield'),(2,7,'pref_filters',''),(3,8,'pref_priority','1'),(3,8,'pref_cmp0','<= 720 576'),(3,8,'pref_cmp1','> 0 0'),(3,8,'pref_decoder','ivtv'),(3,8,'pref_max_cpus','1'),(3,8,'pref_videorenderer','ivtv'),(3,8,'pref_osdrenderer','ivtv'),(3,8,'pref_osdfade','1'),(3,8,'pref_deint0','none'),(3,8,'pref_deint1','none'),(3,8,'pref_filters',''),(3,9,'pref_priority','2'),(3,9,'pref_cmp0','<= 720 576'),(3,9,'pref_cmp1','> 0 0'),(3,9,'pref_decoder','xvmc'),(3,9,'pref_max_cpus','1'),(3,9,'pref_videorenderer','xvmc-blit'),(3,9,'pref_osdrenderer','ia44blend'),(3,9,'pref_osdfade','0'),(3,9,'pref_deint0','bobdeint'),(3,9,'pref_deint1','onefield'),(3,9,'pref_filters',''),(3,10,'pref_priority','3'),(3,10,'pref_cmp0','<= 1280 720'),(3,10,'pref_cmp1','> 720 576'),(3,10,'pref_decoder','xvmc'),(3,10,'pref_max_cpus','1'),(3,10,'pref_videorenderer','xvmc-blit'),(3,10,'pref_osdrenderer','ia44blend'),(3,10,'pref_osdfade','0'),(3,10,'pref_deint0','bobdeint'),(3,10,'pref_deint1','onefield'),(3,10,'pref_filters',''),(3,11,'pref_priority','4'),(3,11,'pref_cmp0','> 0 0'),(3,11,'pref_decoder','xvmc'),(3,11,'pref_max_cpus','1'),(3,11,'pref_videorenderer','xvmc-blit'),(3,11,'pref_osdrenderer','ia44blend'),(3,11,'pref_osdfade','0'),(3,11,'pref_deint0','bobdeint'),(3,11,'pref_deint1','onefield'),(3,11,'pref_filters',''),(3,12,'pref_priority','5'),(3,12,'pref_cmp0','> 0 0'),(3,12,'pref_decoder','libmpeg2'),(3,12,'pref_max_cpus','1'),(3,12,'pref_videorenderer','xv-blit'),(3,12,'pref_osdrenderer','chromakey'),(3,12,'pref_osdfade','0'),(3,12,'pref_deint0','none'),(3,12,'pref_deint1','none'),(3,12,'pref_filters',''),(4,13,'pref_priority','1'),(4,13,'pref_cmp0','>= 1920 1080'),(4,13,'pref_decoder','ffmpeg'),(4,13,'pref_max_cpus','2'),(4,13,'pref_videorenderer','xv-blit'),(4,13,'pref_osdrenderer','softblend'),(4,13,'pref_osdfade','1'),(4,13,'pref_deint0','linearblend'),(4,13,'pref_deint1','linearblend'),(4,13,'pref_filters',''),(4,14,'pref_priority','2'),(4,14,'pref_cmp0','> 0 0'),(4,14,'pref_decoder','ffmpeg'),(4,14,'pref_max_cpus','1'),(4,14,'pref_videorenderer','xv-blit'),(4,14,'pref_osdrenderer','softblend'),(4,14,'pref_osdfade','1'),(4,14,'pref_deint0','yadifdoubleprocessdeint'),(4,14,'pref_deint1','yadifdeint'),(4,14,'pref_filters',''),(4,15,'pref_priority','3'),(4,15,'pref_cmp0','>= 1920 1080'),(4,15,'pref_decoder','ffmpeg'),(4,15,'pref_max_cpus','2'),(4,15,'pref_videorenderer','quartz-blit'),(4,15,'pref_osdrenderer','softblend'),(4,15,'pref_osdfade','1'),(4,15,'pref_deint0','linearblend'),(4,15,'pref_deint1','linearblend'),(4,15,'pref_filters',''),(4,16,'pref_priority','4'),(4,16,'pref_cmp0','> 0 0'),(4,16,'pref_decoder','ffmpeg'),(4,16,'pref_max_cpus','1'),(4,16,'pref_videorenderer','quartz-blit'),(4,16,'pref_osdrenderer','softblend'),(4,16,'pref_osdfade','1'),(4,16,'pref_deint0','yadifdoubleprocessdeint'),(4,16,'pref_deint1','yadifdeint'),(4,16,'pref_filters',''),(5,17,'pref_priority','1'),(5,17,'pref_cmp0','>= 1280 720'),(5,17,'pref_decoder','ffmpeg'),(5,17,'pref_max_cpus','1'),(5,17,'pref_videorenderer','xv-blit'),(5,17,'pref_osdrenderer','softblend'),(5,17,'pref_osdfade','0'),(5,17,'pref_deint0','linearblend'),(5,17,'pref_deint1','linearblend'),(5,17,'pref_filters',''),(5,18,'pref_priority','2'),(5,18,'pref_cmp0','> 0 0'),(5,18,'pref_decoder','ffmpeg'),(5,18,'pref_max_cpus','1'),(5,18,'pref_videorenderer','xv-blit'),(5,18,'pref_osdrenderer','softblend'),(5,18,'pref_osdfade','1'),(5,18,'pref_deint0','greedyhdoubleprocessdeint'),(5,18,'pref_deint1','kerneldeint'),(5,18,'pref_filters',''),(5,19,'pref_priority','3'),(5,19,'pref_cmp0','>= 1280 720'),(5,19,'pref_decoder','ffmpeg'),(5,19,'pref_max_cpus','1'),(5,19,'pref_videorenderer','quartz-blit'),(5,19,'pref_osdrenderer','softblend'),(5,19,'pref_osdfade','0'),(5,19,'pref_deint0','linearblend'),(5,19,'pref_deint1','linearblend'),(5,19,'pref_filters',''),(5,20,'pref_priority','4'),(5,20,'pref_cmp0','> 0 0'),(5,20,'pref_decoder','ffmpeg'),(5,20,'pref_max_cpus','1'),(5,20,'pref_videorenderer','quartz-blit'),(5,20,'pref_osdrenderer','softblend'),(5,20,'pref_osdfade','1'),(5,20,'pref_deint0','greedyhdoubleprocessdeint'),(5,20,'pref_deint1','kerneldeint'),(5,20,'pref_filters',''),(6,21,'pref_priority','1'),(6,21,'pref_cmp0','>= 1280 720'),(6,21,'pref_decoder','ffmpeg'),(6,21,'pref_max_cpus','1'),(6,21,'pref_videorenderer','xv-blit'),(6,21,'pref_osdrenderer','softblend'),(6,21,'pref_osdfade','0'),(6,21,'pref_deint0','onefield'),(6,21,'pref_deint1','onefield'),(6,21,'pref_filters',''),(6,22,'pref_priority','2'),(6,22,'pref_cmp0','> 0 0'),(6,22,'pref_decoder','ffmpeg'),(6,22,'pref_max_cpus','1'),(6,22,'pref_videorenderer','xv-blit'),(6,22,'pref_osdrenderer','softblend'),(6,22,'pref_osdfade','1'),(6,22,'pref_deint0','linearblend'),(6,22,'pref_deint1','linearblend'),(6,22,'pref_filters',''),(6,23,'pref_priority','3'),(6,23,'pref_cmp0','>= 1280 720'),(6,23,'pref_decoder','ffmpeg'),(6,23,'pref_max_cpus','1'),(6,23,'pref_videorenderer','quartz-blit'),(6,23,'pref_osdrenderer','softblend'),(6,23,'pref_osdfade','0'),(6,23,'pref_deint0','onefield'),(6,23,'pref_deint1','onefield'),(6,23,'pref_filters',''),(6,24,'pref_priority','4'),(6,24,'pref_cmp0','> 0 0'),(6,24,'pref_decoder','ffmpeg'),(6,24,'pref_max_cpus','1'),(6,24,'pref_videorenderer','quartz-blit'),(6,24,'pref_osdrenderer','softblend'),(6,24,'pref_osdfade','1'),(6,24,'pref_deint0','linearblend'),(6,24,'pref_deint1','linearblend'),(6,24,'pref_filters',''),(7,25,'pref_priority','1'),(7,25,'pref_cmp0','> 0 0'),(7,25,'pref_decoder','vdpau'),(7,25,'pref_max_cpus','1'),(7,25,'pref_videorenderer','vdpau'),(7,25,'pref_osdrenderer','vdpau'),(7,25,'pref_osdfade','1'),(7,25,'pref_deint0','vdpauadvanceddoublerate'),(7,25,'pref_deint1','vdpauadvanced'),(7,25,'pref_filters',''),(8,26,'pref_priority','1'),(8,26,'pref_cmp0','>= 0 720'),(8,26,'pref_decoder','vdpau'),(8,26,'pref_max_cpus','1'),(8,26,'pref_videorenderer','vdpau'),(8,26,'pref_osdrenderer','vdpau'),(8,26,'pref_osdfade','1'),(8,26,'pref_deint0','vdpaubasicdoublerate'),(8,26,'pref_deint1','vdpaubasic'),(8,26,'pref_filters',''),(8,27,'pref_priority','2'),(8,27,'pref_cmp0','> 0 0'),(8,27,'pref_decoder','vdpau'),(8,27,'pref_max_cpus','1'),(8,27,'pref_videorenderer','vdpau'),(8,27,'pref_osdrenderer','vdpau'),(8,27,'pref_osdfade','1'),(8,27,'pref_deint0','vdpauadvanceddoublerate'),(8,27,'pref_deint1','vdpauadvanced'),(8,27,'pref_filters',''),(9,28,'pref_priority','1'),(9,28,'pref_cmp0','> 0 0'),(9,28,'pref_decoder','vdpau'),(9,28,'pref_max_cpus','1'),(9,28,'pref_videorenderer','vdpau'),(9,28,'pref_osdrenderer','vdpau'),(9,28,'pref_osdfade','0'),(9,28,'pref_deint0','vdpaubobdeint'),(9,28,'pref_deint1','vdpauonefield'),(9,28,'pref_filters','vdpauskipchroma');
+/*!40000 ALTER TABLE `displayprofiles` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dtv_multiplex`
+--
+
+DROP TABLE IF EXISTS `dtv_multiplex`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dtv_multiplex` (
+ `mplexid` smallint(6) NOT NULL auto_increment,
+ `sourceid` smallint(6) default NULL,
+ `transportid` int(11) default NULL,
+ `networkid` int(11) default NULL,
+ `frequency` int(11) default NULL,
+ `inversion` char(1) default 'a',
+ `symbolrate` int(11) default NULL,
+ `fec` varchar(10) default 'auto',
+ `polarity` char(1) default NULL,
+ `modulation` varchar(10) default 'auto',
+ `bandwidth` char(1) default 'a',
+ `lp_code_rate` varchar(10) default 'auto',
+ `transmission_mode` char(1) default 'a',
+ `guard_interval` varchar(10) default 'auto',
+ `visible` smallint(1) NOT NULL default '0',
+ `constellation` varchar(10) default 'auto',
+ `hierarchy` varchar(10) default 'auto',
+ `hp_code_rate` varchar(10) default 'auto',
+ `mod_sys` varchar(10) default NULL,
+ `rolloff` varchar(4) default NULL,
+ `sistandard` varchar(10) default 'dvb',
+ `serviceversion` smallint(6) default '33',
+ `updatetimestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `default_authority` varchar(32) NOT NULL default '',
+ PRIMARY KEY (`mplexid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dtv_multiplex`
+--
+
+LOCK TABLES `dtv_multiplex` WRITE;
+/*!40000 ALTER TABLE `dtv_multiplex` DISABLE KEYS */;
+/*!40000 ALTER TABLE `dtv_multiplex` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dtv_privatetypes`
+--
+
+DROP TABLE IF EXISTS `dtv_privatetypes`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dtv_privatetypes` (
+ `sitype` varchar(4) NOT NULL default '',
+ `networkid` int(11) NOT NULL default '0',
+ `private_type` varchar(20) NOT NULL default '',
+ `private_value` varchar(100) NOT NULL default ''
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dtv_privatetypes`
+--
+
+LOCK TABLES `dtv_privatetypes` WRITE;
+/*!40000 ALTER TABLE `dtv_privatetypes` DISABLE KEYS */;
+INSERT INTO `dtv_privatetypes` VALUES ('dvb',9018,'channel_numbers','131'),('dvb',9018,'guide_fixup','2'),('dvb',256,'guide_fixup','1'),('dvb',257,'guide_fixup','1'),('dvb',256,'tv_types','1,150,134,133'),('dvb',257,'tv_types','1,150,134,133'),('dvb',4100,'sdt_mapping','1'),('dvb',4101,'sdt_mapping','1'),('dvb',4102,'sdt_mapping','1'),('dvb',4103,'sdt_mapping','1'),('dvb',4104,'sdt_mapping','1'),('dvb',4105,'sdt_mapping','1'),('dvb',4106,'sdt_mapping','1'),('dvb',4107,'sdt_mapping','1'),('dvb',4097,'sdt_mapping','1'),('dvb',4098,'sdt_mapping','1'),('dvb',4100,'tv_types','1,145,154'),('dvb',4101,'tv_types','1,145,154'),('dvb',4102,'tv_types','1,145,154'),('dvb',4103,'tv_types','1,145,154'),('dvb',4104,'tv_types','1,145,154'),('dvb',4105,'tv_types','1,145,154'),('dvb',4106,'tv_types','1,145,154'),('dvb',4107,'tv_types','1,145,154'),('dvb',4097,'tv_types','1,145,154'),('dvb',4098,'tv_types','1,145,154'),('dvb',4100,'guide_fixup','1'),('dvb',4101,'guide_fixup','1'),('dvb',4102,'guide_fixup','1'),('dvb',4103,'guide_fixup','1'),('dvb',4104,'guide_fixup','1'),('dvb',4105,'guide_fixup','1'),('dvb',4106,'guide_fixup','1'),('dvb',4107,'guide_fixup','1'),('dvb',4096,'guide_fixup','5'),('dvb',4097,'guide_fixup','1'),('dvb',4098,'guide_fixup','1'),('dvb',94,'tv_types','1,128'),('atsc',1793,'guide_fixup','3'),('dvb',40999,'guide_fixup','4'),('dvb',70,'force_guide_present','yes'),('dvb',70,'guide_ranges','80,80,96,96'),('dvb',4112,'channel_numbers','131'),('dvb',4115,'channel_numbers','131'),('dvb',4116,'channel_numbers','131'),('dvb',12802,'channel_numbers','131'),('dvb',12803,'channel_numbers','131'),('dvb',12829,'channel_numbers','131'),('dvb',40999,'parse_subtitle_list','1070,1308,1041,1306,1307,1030,1016,1131,1068,1069'),('dvb',4096,'guide_fixup','5');
+/*!40000 ALTER TABLE `dtv_privatetypes` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdbookmark`
+--
+
+DROP TABLE IF EXISTS `dvdbookmark`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdbookmark` (
+ `serialid` varchar(16) NOT NULL default '',
+ `name` varchar(32) default NULL,
+ `title` smallint(6) NOT NULL default '0',
+ `audionum` tinyint(4) NOT NULL default '-1',
+ `subtitlenum` tinyint(4) NOT NULL default '-1',
+ `framenum` bigint(20) NOT NULL default '0',
+ `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ PRIMARY KEY (`serialid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdbookmark`
+--
+
+LOCK TABLES `dvdbookmark` WRITE;
+/*!40000 ALTER TABLE `dvdbookmark` DISABLE KEYS */;
+/*!40000 ALTER TABLE `dvdbookmark` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdinput`
+--
+
+DROP TABLE IF EXISTS `dvdinput`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdinput` (
+ `intid` int(10) unsigned NOT NULL,
+ `hsize` int(10) unsigned default NULL,
+ `vsize` int(10) unsigned default NULL,
+ `ar_num` int(10) unsigned default NULL,
+ `ar_denom` int(10) unsigned default NULL,
+ `fr_code` int(10) unsigned default NULL,
+ `letterbox` tinyint(1) default NULL,
+ `v_format` varchar(16) default NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdinput`
+--
+
+LOCK TABLES `dvdinput` WRITE;
+/*!40000 ALTER TABLE `dvdinput` DISABLE KEYS */;
+INSERT INTO `dvdinput` VALUES (1,720,480,16,9,1,1,'ntsc'),(2,720,480,16,9,1,0,'ntsc'),(3,720,480,4,3,1,1,'ntsc'),(4,720,480,4,3,1,0,'ntsc'),(5,720,576,16,9,3,1,'pal'),(6,720,576,16,9,3,0,'pal'),(7,720,576,4,3,3,1,'pal'),(8,720,576,4,3,3,0,'pal');
+/*!40000 ALTER TABLE `dvdinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdtranscode`
+--
+
+DROP TABLE IF EXISTS `dvdtranscode`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdtranscode` (
+ `intid` int(11) NOT NULL auto_increment,
+ `input` int(10) unsigned default NULL,
+ `name` varchar(128) NOT NULL,
+ `sync_mode` int(10) unsigned default NULL,
+ `use_yv12` tinyint(1) default NULL,
+ `cliptop` int(11) default NULL,
+ `clipbottom` int(11) default NULL,
+ `clipleft` int(11) default NULL,
+ `clipright` int(11) default NULL,
+ `f_resize_h` int(11) default NULL,
+ `f_resize_w` int(11) default NULL,
+ `hq_resize_h` int(11) default NULL,
+ `hq_resize_w` int(11) default NULL,
+ `grow_h` int(11) default NULL,
+ `grow_w` int(11) default NULL,
+ `clip2top` int(11) default NULL,
+ `clip2bottom` int(11) default NULL,
+ `clip2left` int(11) default NULL,
+ `clip2right` int(11) default NULL,
+ `codec` varchar(128) NOT NULL,
+ `codec_param` varchar(128) default NULL,
+ `bitrate` int(11) default NULL,
+ `a_sample_r` int(11) default NULL,
+ `a_bitrate` int(11) default NULL,
+ `two_pass` tinyint(1) default NULL,
+ `tc_param` varchar(128) default NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdtranscode`
+--
+
+LOCK TABLES `dvdtranscode` WRITE;
+/*!40000 ALTER TABLE `dvdtranscode` DISABLE KEYS */;
+INSERT INTO `dvdtranscode` VALUES (1,1,'Good',2,1,16,16,0,0,2,0,0,0,0,0,32,32,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(2,2,'Excellent',2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(3,2,'Good',2,1,0,0,8,8,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(4,2,'Medium',2,1,0,0,8,8,5,5,0,0,0,0,0,0,0,0,'divx5',NULL,1200,NULL,NULL,0,NULL),(5,3,'Good',2,1,0,0,0,0,0,0,0,0,2,0,80,80,8,8,'divx5',NULL,0,NULL,NULL,0,NULL),(6,4,'Excellent',2,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(7,4,'Good',2,1,0,0,8,8,0,2,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(8,5,'Good',1,1,16,16,0,0,5,0,0,0,0,0,40,40,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(9,6,'Good',1,1,0,0,16,16,5,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(10,7,'Good',1,1,0,0,0,0,1,0,0,0,0,0,76,76,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(11,8,'Good',1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);
+/*!40000 ALTER TABLE `dvdtranscode` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `eit_cache`
+--
+
+DROP TABLE IF EXISTS `eit_cache`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `eit_cache` (
+ `chanid` int(10) NOT NULL,
+ `eventid` int(10) unsigned NOT NULL default '0',
+ `tableid` tinyint(3) unsigned NOT NULL,
+ `version` tinyint(3) unsigned NOT NULL,
+ `endtime` int(10) unsigned NOT NULL,
+ `status` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`chanid`,`eventid`,`status`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `eit_cache`
+--
+
+LOCK TABLES `eit_cache` WRITE;
+/*!40000 ALTER TABLE `eit_cache` DISABLE KEYS */;
+/*!40000 ALTER TABLE `eit_cache` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `filemarkup`
+--
+
+DROP TABLE IF EXISTS `filemarkup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `filemarkup` (
+ `filename` text NOT NULL,
+ `mark` mediumint(8) unsigned NOT NULL default '0',
+ `offset` bigint(20) unsigned default NULL,
+ `type` tinyint(4) NOT NULL default '0',
+ KEY `filename` (`filename`(255))
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `filemarkup`
+--
+
+LOCK TABLES `filemarkup` WRITE;
+/*!40000 ALTER TABLE `filemarkup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `filemarkup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gallerymetadata`
+--
+
+DROP TABLE IF EXISTS `gallerymetadata`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gallerymetadata` (
+ `image` varchar(255) character set utf8 collate utf8_bin NOT NULL,
+ `angle` int(11) NOT NULL,
+ PRIMARY KEY (`image`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gallerymetadata`
+--
+
+LOCK TABLES `gallerymetadata` WRITE;
+/*!40000 ALTER TABLE `gallerymetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gallerymetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gamemetadata`
+--
+
+DROP TABLE IF EXISTS `gamemetadata`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gamemetadata` (
+ `system` varchar(128) NOT NULL default '',
+ `romname` varchar(128) NOT NULL default '',
+ `gamename` varchar(128) NOT NULL default '',
+ `genre` varchar(128) NOT NULL default '',
+ `year` varchar(10) NOT NULL default '',
+ `publisher` varchar(128) NOT NULL default '',
+ `favorite` tinyint(1) default NULL,
+ `rompath` varchar(255) NOT NULL default '',
+ `screenshot` varchar(255) NOT NULL,
+ `fanart` varchar(255) NOT NULL,
+ `plot` text NOT NULL,
+ `boxart` varchar(255) NOT NULL,
+ `gametype` varchar(64) NOT NULL default '',
+ `diskcount` tinyint(1) NOT NULL default '1',
+ `country` varchar(128) NOT NULL default '',
+ `crc_value` varchar(64) NOT NULL default '',
+ `display` tinyint(1) NOT NULL default '1',
+ `version` varchar(64) NOT NULL default '',
+ KEY `system` (`system`),
+ KEY `year` (`year`),
+ KEY `romname` (`romname`),
+ KEY `gamename` (`gamename`),
+ KEY `genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gamemetadata`
+--
+
+LOCK TABLES `gamemetadata` WRITE;
+/*!40000 ALTER TABLE `gamemetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gamemetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gameplayers`
+--
+
+DROP TABLE IF EXISTS `gameplayers`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gameplayers` (
+ `gameplayerid` int(10) unsigned NOT NULL auto_increment,
+ `playername` varchar(64) NOT NULL default '',
+ `workingpath` varchar(255) NOT NULL default '',
+ `rompath` varchar(255) NOT NULL default '',
+ `screenshots` varchar(255) NOT NULL default '',
+ `commandline` text NOT NULL,
+ `gametype` varchar(64) NOT NULL default '',
+ `extensions` varchar(128) NOT NULL default '',
+ `spandisks` tinyint(1) NOT NULL default '0',
+ PRIMARY KEY (`gameplayerid`),
+ UNIQUE KEY `playername` (`playername`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gameplayers`
+--
+
+LOCK TABLES `gameplayers` WRITE;
+/*!40000 ALTER TABLE `gameplayers` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gameplayers` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `housekeeping`
+--
+
+DROP TABLE IF EXISTS `housekeeping`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `housekeeping` (
+ `tag` varchar(64) NOT NULL default '',
+ `lastrun` datetime default NULL,
+ PRIMARY KEY (`tag`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `housekeeping`
+--
+
+LOCK TABLES `housekeeping` WRITE;
+/*!40000 ALTER TABLE `housekeeping` DISABLE KEYS */;
+INSERT INTO `housekeeping` VALUES ('BackupDB','2010-05-23 01:43:14'),('MythFillDB','2010-05-23 00:32:23'),('DailyCleanup','2010-05-23 00:32:23'),('JobQueueRecover-larch5','2010-05-23 00:32:23'),('DBCleanup','2010-05-23 00:32:23');
+/*!40000 ALTER TABLE `housekeeping` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `inputgroup`
+--
+
+DROP TABLE IF EXISTS `inputgroup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `inputgroup` (
+ `cardinputid` int(10) unsigned NOT NULL,
+ `inputgroupid` int(10) unsigned NOT NULL,
+ `inputgroupname` varchar(32) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `inputgroup`
+--
+
+LOCK TABLES `inputgroup` WRITE;
+/*!40000 ALTER TABLE `inputgroup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `inputgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `inuseprograms`
+--
+
+DROP TABLE IF EXISTS `inuseprograms`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `inuseprograms` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `recusage` varchar(128) NOT NULL default '',
+ `lastupdatetime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `hostname` varchar(64) NOT NULL default '',
+ `rechost` varchar(64) NOT NULL,
+ `recdir` varchar(255) NOT NULL default '',
+ KEY `chanid` (`chanid`,`starttime`),
+ KEY `recusage` (`recusage`,`lastupdatetime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `inuseprograms`
+--
+
+LOCK TABLES `inuseprograms` WRITE;
+/*!40000 ALTER TABLE `inuseprograms` DISABLE KEYS */;
+/*!40000 ALTER TABLE `inuseprograms` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jobqueue`
+--
+
+DROP TABLE IF EXISTS `jobqueue`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `jobqueue` (
+ `id` int(11) NOT NULL auto_increment,
+ `chanid` int(10) NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `inserttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `type` int(11) NOT NULL default '0',
+ `cmds` int(11) NOT NULL default '0',
+ `flags` int(11) NOT NULL default '0',
+ `status` int(11) NOT NULL default '0',
+ `statustime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `hostname` varchar(64) NOT NULL default '',
+ `args` blob NOT NULL,
+ `comment` varchar(128) NOT NULL default '',
+ `schedruntime` datetime NOT NULL default '2007-01-01 00:00:00',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`type`,`inserttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `jobqueue`
+--
+
+LOCK TABLES `jobqueue` WRITE;
+/*!40000 ALTER TABLE `jobqueue` DISABLE KEYS */;
+/*!40000 ALTER TABLE `jobqueue` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jumppoints`
+--
+
+DROP TABLE IF EXISTS `jumppoints`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `jumppoints` (
+ `destination` varchar(128) NOT NULL default '',
+ `description` varchar(255) default NULL,
+ `keylist` varchar(128) default NULL,
+ `hostname` varchar(64) NOT NULL default '',
+ PRIMARY KEY (`destination`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `jumppoints`
+--
+
+LOCK TABLES `jumppoints` WRITE;
+/*!40000 ALTER TABLE `jumppoints` DISABLE KEYS */;
+INSERT INTO `jumppoints` VALUES ('Reload Theme','','','larch5'),('Main Menu','','','larch5'),('Program Guide','','','larch5'),('Program Finder','','','larch5'),('Manage Recordings / Fix Conflicts','','','larch5'),('Program Recording Priorities','','','larch5'),('Channel Recording Priorities','','','larch5'),('TV Recording Playback','','','larch5'),('TV Recording Deletion','','','larch5'),('Live TV','','','larch5'),('Live TV In Guide','','','larch5'),('Manual Record Scheduling','','','larch5'),('Status Screen','','','larch5'),('Previously Recorded','','','larch5'),('Netflix Browser','Browse Netflix titles','','larch5'),('Netflix Queue','Administer Netflix Queue','','larch5'),('Netflix History','View Netflix History','','larch5'),('MythGallery','Image viewer / slideshow','','larch5'),('MythGame','Game frontend','','larch5'),('Play music','','','larch5'),('Select music playlists','','','larch5'),('Rip CD','','','larch5'),('Scan music','','','larch5'),('Show Music Miniplayer','','','larch5'),('MythNews','RSS News feed reader','','larch5'),('MythVideo','The MythVideo default view','','larch5'),('Video Manager','The MythVideo video manager','','larch5'),('Video Browser','The MythVideo video browser','','larch5'),('Video Listings','The MythVideo video listings','','larch5'),('Video Gallery','The MythVideo video gallery','','larch5'),('Play DVD','Play a DVD','','larch5'),('Play VCD','Play a VCD','','larch5'),('Rip DVD','Import a DVD into your MythVideo database','','larch5'),('MythWeather','Weather forecasts','','larch5'),('Manage Recording Rules','','','larch5'),('ScreenShot','','','larch5'),('Create DVD','','','larch5'),('Create Archive','','','larch5'),('Import Archive','','','larch5'),('View Archive Log','','','larch5'),('Play Created DVD','','','larch5'),('Burn DVD','','','larch5'),('MythSmolt','Hardware profiler','Ctrl+Alt+p','larch5');
+/*!40000 ALTER TABLE `jumppoints` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `keybindings`
+--
+
+DROP TABLE IF EXISTS `keybindings`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `keybindings` (
+ `context` varchar(32) NOT NULL default '',
+ `action` varchar(32) NOT NULL default '',
+ `description` varchar(255) default NULL,
+ `keylist` varchar(128) default NULL,
+ `hostname` varchar(64) NOT NULL default '',
+ PRIMARY KEY (`context`,`action`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `keybindings`
+--
+
+LOCK TABLES `keybindings` WRITE;
+/*!40000 ALTER TABLE `keybindings` DISABLE KEYS */;
+INSERT INTO `keybindings` VALUES ('Global','UP','Up Arrow','Up','larch5'),('Global','DOWN','Down Arrow','Down','larch5'),('Global','LEFT','Left Arrow','Left','larch5'),('Global','RIGHT','Right Arrow','Right','larch5'),('Global','SELECT','Select','Return,Enter,Space','larch5'),('Global','ESCAPE','Escape','Esc','larch5'),('Global','MENU','Pop-up menu','M','larch5'),('Global','INFO','More information','I','larch5'),('Global','PAGEUP','Page Up','PgUp','larch5'),('Global','PAGEDOWN','Page Down','PgDown','larch5'),('Global','PREVVIEW','Previous View','Home','larch5'),('Global','NEXTVIEW','Next View','End','larch5'),('Global','HELP','Help','F1','larch5'),('Global','EJECT','Eject Removable Media','','larch5'),('Global','0','0','0','larch5'),('Global','1','1','1','larch5'),('Global','2','2','2','larch5'),('Global','3','3','3','larch5'),('Global','4','4','4','larch5'),('Global','5','5','5','larch5'),('Global','6','6','6','larch5'),('Global','7','7','7','larch5'),('Global','8','8','8','larch5'),('Global','9','9','9','larch5'),('TV Playback','CREATEPBPVIEW','Create Picture-by-Picture view','','larch5'),('TV Playback','CREATEPIPVIEW','Create Picture-in-Picture view','','larch5'),('TV Frontend','PAGEUP','Page Up','3','larch5'),('TV Frontend','PAGEDOWN','Page Down','9','larch5'),('TV Playback','NEXTPIPWINDOW','Toggle active PIP/PBP window','B','larch5'),('TV Frontend','PLAYBACK','Play Program','P','larch5'),('TV Frontend','TOGGLERECORD','Toggle recording status of current program','R','larch5'),('TV Frontend','DAYLEFT','Page the program guide back one day','Home,7','larch5'),('TV Frontend','DAYRIGHT','Page the program guide forward one day','End,1','larch5'),('TV Frontend','PAGELEFT','Page the program guide left',',,<','larch5'),('TV Frontend','PAGERIGHT','Page the program guide right','>,.','larch5'),('TV Frontend','TOGGLEFAV','Toggle the current channel as a favorite','?','larch5'),('TV Frontend','TOGGLEEPGORDER','Reverse the channel order in the program guide','0','larch5'),('TV Frontend','GUIDE','Show the Program Guide','S','larch5'),('TV Frontend','FINDER','Show the Program Finder','#','larch5'),('TV Frontend','NEXTFAV','Cycle through channel groups and all channels in the program guide.','/','larch5'),('TV Frontend','CHANUPDATE','Switch channels without exiting guide in Live TV mode.','X','larch5'),('TV Frontend','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('TV Frontend','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('TV Frontend','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('TV Frontend','RANKINC','Increase program or channel rank','Right','larch5'),('TV Frontend','RANKDEC','Decrease program or channel rank','Left','larch5'),('TV Frontend','UPCOMING','List upcoming episodes','O','larch5'),('TV Frontend','DETAILS','Show program details','U','larch5'),('TV Frontend','VIEWCARD','Switch Capture Card view','Y','larch5'),('TV Frontend','VIEWINPUT','Switch Capture Card view','C','larch5'),('TV Frontend','CHANGERECGROUP','Change Recording Group','','larch5'),('TV Frontend','CHANGEGROUPVIEW','Change Group View','','larch5'),('TV Playback','CLEAROSD','Clear OSD','Backspace','larch5'),('TV Playback','PAUSE','Pause','P','larch5'),('TV Playback','SEEKFFWD','Fast Forward','Right','larch5'),('TV Playback','SEEKRWND','Rewind','Left','larch5'),('TV Playback','ARBSEEK','Arbitrary Seek','*','larch5'),('TV Playback','CHANNELUP','Channel up','Up','larch5'),('TV Playback','CHANNELDOWN','Channel down','Down','larch5'),('TV Playback','NEXTFAV','Switch to the next favorite channel','/','larch5'),('TV Playback','PREVCHAN','Switch to the previous channel','H','larch5'),('TV Playback','JUMPFFWD','Jump ahead','PgDown','larch5'),('TV Playback','JUMPRWND','Jump back','PgUp','larch5'),('TV Playback','JUMPBKMRK','Jump to bookmark','K','larch5'),('TV Playback','FFWDSTICKY','Fast Forward (Sticky) or Forward one frame while paused','>,.','larch5'),('TV Playback','RWNDSTICKY','Rewind (Sticky) or Rewind one frame while paused',',,<','larch5'),('TV Playback','NEXTSOURCE','Next Video Source','Y','larch5'),('TV Playback','PREVSOURCE','Previous Video Source','Ctrl+Y','larch5'),('TV Playback','NEXTINPUT','Next Input','C','larch5'),('TV Playback','NEXTCARD','Next Card','','larch5'),('TV Playback','SKIPCOMMERCIAL','Skip Commercial','Z,End','larch5'),('TV Playback','SKIPCOMMBACK','Skip Commercial (Reverse)','Q,Home','larch5'),('TV Playback','JUMPSTART','Jump to the start of the recording.','Ctrl+B','larch5'),('TV Playback','TOGGLEBROWSE','Toggle channel browse mode','O','larch5'),('TV Playback','TOGGLERECORD','Toggle recording status of current program','R','larch5'),('TV Playback','TOGGLEFAV','Toggle the current channel as a favorite','?','larch5'),('TV Playback','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('TV Playback','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('TV Playback','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('TV Playback','TOGGLEPIPMODE','Toggle Picture-in-Picture view','V','larch5'),('TV Playback','TOGGLEPIPWINDOW','Toggle active PiP window','B','larch5'),('TV Playback','SWAPPIP','Swap PBP/PIP Windows','N','larch5'),('TV Playback','TOGGLEASPECT','Toggle the video aspect ratio','Ctrl+W','larch5'),('TV Playback','TOGGLEFILL','Next Preconfigured Zoom mode','W','larch5'),('TV Playback','TOGGLECC','Toggle any captions','T','larch5'),('TV Playback','TOGGLETTC','Toggle Teletext Captions','','larch5'),('TV Playback','TOGGLESUBTITLE','Toggle Subtitles','','larch5'),('TV Playback','TOGGLECC608','Toggle VBI CC','','larch5'),('TV Playback','TOGGLECC708','Toggle ATSC CC','','larch5'),('TV Playback','TOGGLETTM','Toggle Teletext Menu','','larch5'),('TV Playback','SELECTAUDIO_0','Play audio track 1','','larch5'),('TV Playback','SELECTAUDIO_1','Play audio track 2','','larch5'),('TV Playback','SELECTSUBTITLE_0','Display subtitle 1','','larch5'),('TV Playback','SELECTSUBTITLE_1','Display subtitle 2','','larch5'),('TV Playback','SELECTCC608_0','Display VBI CC1','','larch5'),('TV Playback','SELECTCC608_1','Display VBI CC2','','larch5'),('TV Playback','SELECTCC608_2','Display VBI CC3','','larch5'),('TV Playback','SELECTCC608_3','Display VBI CC4','','larch5'),('TV Playback','SELECTCC708_0','Display ATSC CC1','','larch5'),('TV Playback','SELECTCC708_1','Display ATSC CC2','','larch5'),('TV Playback','SELECTCC708_2','Display ATSC CC3','','larch5'),('TV Playback','SELECTCC708_3','Display ATSC CC4','','larch5'),('TV Playback','NEXTAUDIO','Next audio track','+','larch5'),('TV Playback','PREVAUDIO','Previous audio track','-','larch5'),('TV Playback','NEXTSUBTITLE','Next subtitle track','','larch5'),('TV Playback','PREVSUBTITLE','Previous subtitle track','','larch5'),('TV Playback','NEXTCC608','Next VBI CC track','','larch5'),('TV Playback','PREVCC608','Previous VBI CC track','','larch5'),('TV Playback','NEXTCC708','Next ATSC CC track','','larch5'),('TV Playback','PREVCC708','Previous ATSC CC track','','larch5'),('TV Playback','NEXTCC','Next of any captions','','larch5'),('TV Playback','NEXTSCAN','Next video scan overidemode','','larch5'),('TV Playback','QUEUETRANSCODE','Queue the current recording for transcoding','X','larch5'),('TV Playback','SPEEDINC','Increase the playback speed','U','larch5'),('TV Playback','SPEEDDEC','Decrease the playback speed','J','larch5'),('TV Playback','ADJUSTSTRETCH','Turn on time stretch control','A','larch5'),('TV Playback','STRETCHINC','Increase time stretch speed','','larch5'),('TV Playback','STRETCHDEC','Decrease time stretch speed','','larch5'),('TV Playback','TOGGLESTRETCH','Toggle time stretch speed','','larch5'),('TV Playback','TOGGLEAUDIOSYNC','Turn on audio sync adjustment controls','','larch5'),('TV Playback','TOGGLEPICCONTROLS','Playback picture adjustments','F','larch5'),('TV Playback','TOGGLECHANCONTROLS','Recording picture adjustments for this channel','Ctrl+G','larch5'),('TV Playback','TOGGLERECCONTROLS','Recording picture adjustments for this recorder','G','larch5'),('TV Playback','TOGGLEPBPMODE','Toggle Picture-by-Picture view','Ctrl+V','larch5'),('TV Playback','CYCLECOMMSKIPMODE','Cycle Commercial Skip mode','','larch5'),('TV Playback','GUIDE','Show the Program Guide','S','larch5'),('TV Playback','FINDER','Show the Program Finder','#','larch5'),('TV Playback','TOGGLESLEEP','Toggle the Sleep Timer','F8','larch5'),('TV Playback','PLAY','Play','Ctrl+P','larch5'),('TV Playback','JUMPPREV','Jump to previously played recording','','larch5'),('TV Playback','JUMPREC','Display menu of recorded programs to jump to','','larch5'),('TV Playback','VIEWSCHEDULED','Display scheduled recording list','','larch5'),('TV Playback','SIGNALMON','Monitor Signal Quality','Alt+F7','larch5'),('TV Playback','JUMPTODVDROOTMENU','Jump to the DVD Root Menu','','larch5'),('TV Playback','EXITSHOWNOPROMPTS','Exit Show without any prompts','','larch5'),('TV Playback','SCREENSHOT','Save screenshot of current video frame','','larch5'),('TV Playback','MENURED','Menu Red','F2','larch5'),('TV Playback','MENUGREEN','Menu Green','F3','larch5'),('TV Playback','MENUYELLOW','Menu Yellow','F4','larch5'),('TV Playback','MENUBLUE','Menu Blue','F5','larch5'),('TV Playback','TEXTEXIT','Menu Exit','F6','larch5'),('TV Playback','MENUTEXT','Menu Text','F7','larch5'),('TV Playback','MENUEPG','Menu EPG','F12','larch5'),('TV Editing','CLEARMAP','Clear editing cut points','C,Q,Home','larch5'),('TV Editing','INVERTMAP','Invert Begin/End cut points','I','larch5'),('TV Editing','LOADCOMMSKIP','Load cut list from commercial skips','Z,End','larch5'),('TV Editing','NEXTCUT','Jump to the next cut point','PgDown','larch5'),('TV Editing','PREVCUT','Jump to the previous cut point','PgUp','larch5'),('TV Editing','BIGJUMPREW','Jump back 10x the normal amount',',,<','larch5'),('TV Editing','BIGJUMPFWD','Jump forward 10x the normal amount','>,.','larch5'),('Teletext Menu','NEXTPAGE','Next Page','Down','larch5'),('Teletext Menu','PREVPAGE','Previous Page','Up','larch5'),('Teletext Menu','NEXTSUBPAGE','Next Subpage','Right','larch5'),('Teletext Menu','PREVSUBPAGE','Previous Subpage','Left','larch5'),('Teletext Menu','TOGGLETT','Toggle Teletext','T','larch5'),('Teletext Menu','MENURED','Menu Red','F2','larch5'),('Teletext Menu','MENUGREEN','Menu Green','F3','larch5'),('Teletext Menu','MENUYELLOW','Menu Yellow','F4','larch5'),('Teletext Menu','MENUBLUE','Menu Blue','F5','larch5'),('Teletext Menu','MENUWHITE','Menu White','F6','larch5'),('Teletext Menu','TOGGLEBACKGROUND','Toggle Background','F7','larch5'),('Teletext Menu','REVEAL','Reveal hidden Text','F8','larch5'),('Archive','TOGGLECUT','Toggle use cut list state for selected program','C','larch5'),('NetFlix','MOVETOTOP','Moves movie to top of queue','1','larch5'),('Video','DOWNLOADDATA','Download metadata for current item','W','larch5'),('Gallery','PLAY','Start/Stop Slideshow','P','larch5'),('Gallery','HOME','Go to the first image in thumbnail view','Home','larch5'),('Gallery','END','Go to the last image in thumbnail view','End','larch5'),('Gallery','MENU','Toggle activating menu in thumbnail view','M','larch5'),('Gallery','SLIDESHOW','Start Slideshow in thumbnail view','S','larch5'),('Gallery','RANDOMSHOW','Start Random Slideshow in thumbnail view','R','larch5'),('Gallery','ROTRIGHT','Rotate image right 90 degrees','],3','larch5'),('Gallery','ROTLEFT','Rotate image left 90 degrees','[,1','larch5'),('Gallery','ZOOMOUT','Zoom image out','7','larch5'),('Gallery','ZOOMIN','Zoom image in','9','larch5'),('Gallery','SCROLLUP','Scroll image up','2','larch5'),('Gallery','SCROLLLEFT','Scroll image left','4','larch5'),('Gallery','SCROLLRIGHT','Scroll image right','6','larch5'),('Gallery','SCROLLDOWN','Scroll image down','8','larch5'),('Gallery','RECENTER','Recenter image','5','larch5'),('Gallery','FULLSIZE','Full-size (un-zoom) image','0','larch5'),('Gallery','UPLEFT','Go to the upper-left corner of the image','PgUp','larch5'),('Gallery','LOWRIGHT','Go to the lower-right corner of the image','PgDown','larch5'),('Gallery','INFO','Toggle Showing Information about Image','I','larch5'),('Video','INCSEARCH','Show Incremental Search Dialog','Ctrl+S','larch5'),('Gallery','MARK','Mark image','T','larch5'),('Gallery','FULLSCREEN','Toggle scale to fullscreen/scale to fit','W','larch5'),('Game','TOGGLEFAV','Toggle the current game as a favorite','?,/','larch5'),('Game','INCSEARCH','Show incremental search dialog','Ctrl+S','larch5'),('Game','INCSEARCHNEXT','Incremental search find next match','Ctrl+N','larch5'),('Music','NEXTTRACK','Move to the next track','>,.,Z,End','larch5'),('Music','PREVTRACK','Move to the previous track',',,<,Q,Home','larch5'),('Music','FFWD','Fast forward','PgDown','larch5'),('Music','RWND','Rewind','PgUp','larch5'),('Music','PAUSE','Pause/Start playback','P','larch5'),('Music','PLAY','Start playback','','larch5'),('Music','STOP','Stop playback','O','larch5'),('Music','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('Music','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('Music','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('Music','CYCLEVIS','Cycle visualizer mode','6','larch5'),('Music','BLANKSCR','Blank screen','5','larch5'),('Music','THMBUP','Increase rating','9','larch5'),('Music','THMBDOWN','Decrease rating','7','larch5'),('Music','REFRESH','Refresh music tree','8','larch5'),('Music','FILTER','Filter All My Music','F','larch5'),('Music','INCSEARCH','Show incremental search dialog','Ctrl+S','larch5'),('Music','INCSEARCHNEXT','Incremental search find next match','Ctrl+N','larch5'),('Music','SPEEDUP','Increase Play Speed','W','larch5'),('Music','SPEEDDOWN','Decrease Play Speed','X','larch5'),('News','RETRIEVENEWS','Update news items','I','larch5'),('News','FORCERETRIEVE','Force update news items','M','larch5'),('News','CANCEL','Cancel news item updating','C','larch5'),('Phone','0','0','0','larch5'),('Phone','1','1','1','larch5'),('Phone','2','2','2','larch5'),('Phone','3','3','3','larch5'),('Phone','4','4','4','larch5'),('Phone','5','5','5','larch5'),('Phone','6','6','6','larch5'),('Phone','7','7','7','larch5'),('Phone','8','8','8','larch5'),('Phone','9','9','9','larch5'),('Phone','HASH','HASH','#','larch5'),('Phone','STAR','STAR','*','larch5'),('Phone','Up','Up','Up','larch5'),('Phone','Down','Down','Down','larch5'),('Phone','Left','Left','Left','larch5'),('Phone','Right','Right','Right','larch5'),('Phone','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('Phone','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('Phone','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('Phone','ZOOMIN','Zoom the video window in','>,.,Z,End','larch5'),('Phone','ZOOMOUT','Zoom the video window out',',,<,Q,Home','larch5'),('Phone','FULLSCRN','Show received video full-screen','P','larch5'),('Phone','HANGUP','Hangup an active call','O','larch5'),('Phone','LOOPBACK','Loopback Video','L','larch5'),('Video','FILTER','Open video filter dialog','F','larch5'),('Video','PLAYALT','Play selected item in alternate player','ALT+P','larch5'),('Video','BROWSE','Change browsable in video manager','B','larch5'),('Video','INCPARENT','Increase Parental Level','],},F11','larch5'),('Video','DECPARENT','Decrease Parental Level','[,{,F10','larch5'),('Video','HOME','Go to the first video','Home','larch5'),('Video','END','Go to the last video','End','larch5'),('Weather','PAUSE','Pause current page','P','larch5'),('Weather','SEARCH','Search List','/','larch5'),('Weather','NEXTSEARCH','Search List','n','larch5'),('Weather','UPDATE','Search List','u','larch5'),('Global','NEXT','Move to next widget','Tab','larch5'),('Global','PREVIOUS','Move to preview widget','Backtab','larch5'),('Global','BACKSPACE','Backspace','Backspace','larch5'),('Global','DELETE','Delete','D','larch5'),('Global','EDIT','Edit','E','larch5'),('Global','PAGETOP','Page to top of list','','larch5'),('Global','PAGEMIDDLE','Page to middle of list','','larch5'),('Global','PAGEBOTTOM','Page to bottom of list','','larch5'),('Browser','ZOOMIN','Zoom in on browser window','.,>','larch5'),('Browser','ZOOMOUT','Zoom out on browser window',',,<','larch5'),('Browser','TOGGLEINPUT','Toggle where keyboard input goes to','F1','larch5'),('Browser','MOUSEUP','Move mouse pointer up','2','larch5'),('Browser','MOUSEDOWN','Move mouse pointer down','8','larch5'),('Browser','MOUSELEFT','Move mouse pointer left','4','larch5'),('Browser','MOUSERIGHT','Move mouse pointer right','6','larch5'),('Browser','MOUSELEFTBUTTON','Mouse Left button click','5','larch5'),('Browser','PAGEDOWN','Scroll down half a page','9','larch5'),('Browser','PAGEUP','Scroll up half a page','3','larch5'),('Browser','PAGELEFT','Scroll left half a page','7','larch5'),('Browser','PAGERIGHT','Scroll right half a page','1','larch5'),('Browser','NEXTLINK','Move selection to next link','Z','larch5'),('Browser','PREVIOUSLINK','Move selection to previous link','Q','larch5'),('Browser','FOLLOWLINK','Follow selected link','Return,Space,Enter','larch5'),('Browser','HISTORYBACK','Go back to previous page','R,Backspace','larch5'),('Browser','HISTORYFORWARD','Go forward to previous page','F','larch5'),('Welcome','STARTXTERM','Open an Xterm window','F12','larch5'),('Welcome','SHOWSETTINGS','Show Mythshutdown settings','F11','larch5'),('TV Playback','TOGGLEPIPSTATE','Change PxP view','','larch5'),('Browser','NEXTTAB','Move to next browser tab','P','larch5'),('Browser','PREVTAB','Move to previous browser tab','','larch5'),('Video','ITEMDETAIL','Display Item Detail Popup','','larch5'),('Global','CUT','Cut text from textedit','Ctrl+X','larch5'),('Global','COPY','Copy text from textedit','Ctrl+C','larch5'),('Global','PASTE','Paste text into textedit','Ctrl+V','larch5'),('Global','SYSEVENT01','Trigger System Key Event #1','','larch5'),('Global','SYSEVENT02','Trigger System Key Event #2','','larch5'),('Global','SYSEVENT03','Trigger System Key Event #3','','larch5'),('Global','SYSEVENT04','Trigger System Key Event #4','','larch5'),('Global','SYSEVENT05','Trigger System Key Event #5','','larch5'),('Global','SYSEVENT06','Trigger System Key Event #6','','larch5'),('Global','SYSEVENT07','Trigger System Key Event #7','','larch5'),('Global','SYSEVENT08','Trigger System Key Event #8','','larch5'),('Global','SYSEVENT09','Trigger System Key Event #9','','larch5'),('Global','SYSEVENT10','Trigger System Key Event #10','','larch5'),('TV Frontend','CUSTOMEDIT','Edit Custom Record Rule','','larch5'),('TV Playback','TOGGLEUPMIX','Toggle audio upmixer','Ctrl+U','larch5'),('Music','TOGGLEUPMIX','Toggle audio upmixer','Ctrl+U','larch5');
+/*!40000 ALTER TABLE `keybindings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `keyword`
+--
+
+DROP TABLE IF EXISTS `keyword`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `keyword` (
+ `phrase` varchar(128) character set utf8 collate utf8_bin NOT NULL default '',
+ `searchtype` int(10) unsigned NOT NULL default '3',
+ UNIQUE KEY `phrase` (`phrase`,`searchtype`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `keyword`
+--
+
+LOCK TABLES `keyword` WRITE;
+/*!40000 ALTER TABLE `keyword` DISABLE KEYS */;
+/*!40000 ALTER TABLE `keyword` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_albumart`
+--
+
+DROP TABLE IF EXISTS `music_albumart`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_albumart` (
+ `albumart_id` int(20) NOT NULL auto_increment,
+ `filename` varchar(255) NOT NULL default '',
+ `directory_id` int(20) NOT NULL default '0',
+ `imagetype` tinyint(3) NOT NULL default '0',
+ `song_id` int(11) NOT NULL default '0',
+ `embedded` tinyint(1) NOT NULL default '0',
+ PRIMARY KEY (`albumart_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_albumart`
+--
+
+LOCK TABLES `music_albumart` WRITE;
+/*!40000 ALTER TABLE `music_albumart` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_albumart` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_albums`
+--
+
+DROP TABLE IF EXISTS `music_albums`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_albums` (
+ `album_id` int(11) unsigned NOT NULL auto_increment,
+ `artist_id` int(11) unsigned NOT NULL default '0',
+ `album_name` varchar(255) NOT NULL default '',
+ `year` smallint(6) NOT NULL default '0',
+ `compilation` tinyint(1) unsigned NOT NULL default '0',
+ PRIMARY KEY (`album_id`),
+ KEY `idx_album_name` (`album_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_albums`
+--
+
+LOCK TABLES `music_albums` WRITE;
+/*!40000 ALTER TABLE `music_albums` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_albums` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_artists`
+--
+
+DROP TABLE IF EXISTS `music_artists`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_artists` (
+ `artist_id` int(11) unsigned NOT NULL auto_increment,
+ `artist_name` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`artist_id`),
+ KEY `idx_artist_name` (`artist_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_artists`
+--
+
+LOCK TABLES `music_artists` WRITE;
+/*!40000 ALTER TABLE `music_artists` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_artists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_directories`
+--
+
+DROP TABLE IF EXISTS `music_directories`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_directories` (
+ `directory_id` int(20) NOT NULL auto_increment,
+ `path` text NOT NULL,
+ `parent_id` int(20) NOT NULL default '0',
+ PRIMARY KEY (`directory_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_directories`
+--
+
+LOCK TABLES `music_directories` WRITE;
+/*!40000 ALTER TABLE `music_directories` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_directories` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_genres`
+--
+
+DROP TABLE IF EXISTS `music_genres`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_genres` (
+ `genre_id` int(11) unsigned NOT NULL auto_increment,
+ `genre` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`genre_id`),
+ KEY `idx_genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_genres`
+--
+
+LOCK TABLES `music_genres` WRITE;
+/*!40000 ALTER TABLE `music_genres` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_genres` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_playlists`
+--
+
+DROP TABLE IF EXISTS `music_playlists`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_playlists` (
+ `playlist_id` int(11) unsigned NOT NULL auto_increment,
+ `playlist_name` varchar(255) NOT NULL default '',
+ `playlist_songs` text NOT NULL,
+ `last_accessed` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `length` int(11) unsigned NOT NULL default '0',
+ `songcount` smallint(8) unsigned NOT NULL default '0',
+ `hostname` varchar(64) NOT NULL default '',
+ PRIMARY KEY (`playlist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_playlists`
+--
+
+LOCK TABLES `music_playlists` WRITE;
+/*!40000 ALTER TABLE `music_playlists` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_playlists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylist_categories`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylist_categories`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylist_categories` (
+ `categoryid` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) NOT NULL,
+ PRIMARY KEY (`categoryid`),
+ KEY `name` (`name`)
+) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylist_categories`
+--
+
+LOCK TABLES `music_smartplaylist_categories` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylist_categories` DISABLE KEYS */;
+INSERT INTO `music_smartplaylist_categories` VALUES (1,'Decades'),(2,'Favourite Tracks'),(3,'New Tracks');
+/*!40000 ALTER TABLE `music_smartplaylist_categories` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylist_items`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylist_items`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylist_items` (
+ `smartplaylistitemid` int(10) unsigned NOT NULL auto_increment,
+ `smartplaylistid` int(10) unsigned NOT NULL,
+ `field` varchar(50) NOT NULL,
+ `operator` varchar(20) NOT NULL,
+ `value1` varchar(255) NOT NULL,
+ `value2` varchar(255) NOT NULL,
+ PRIMARY KEY (`smartplaylistitemid`),
+ KEY `smartplaylistid` (`smartplaylistid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylist_items`
+--
+
+LOCK TABLES `music_smartplaylist_items` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylist_items` DISABLE KEYS */;
+INSERT INTO `music_smartplaylist_items` VALUES (1,1,'Year','is between','1960','1969'),(2,2,'Year','is between','1970','1979'),(3,3,'Year','is between','1980','1989'),(4,4,'Year','is between','1990','1999'),(5,5,'Year','is between','2000','2009'),(6,6,'Rating','is greater than','7','0'),(7,7,'Play Count','is greater than','0','0'),(8,8,'Play Count','is equal to','0','0');
+/*!40000 ALTER TABLE `music_smartplaylist_items` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylists`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylists`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylists` (
+ `smartplaylistid` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) NOT NULL,
+ `categoryid` int(10) unsigned NOT NULL,
+ `matchtype` set('All','Any') character set latin1 NOT NULL default 'All',
+ `orderby` varchar(128) NOT NULL default '',
+ `limitto` int(10) unsigned NOT NULL default '0',
+ PRIMARY KEY (`smartplaylistid`),
+ KEY `name` (`name`),
+ KEY `categoryid` (`categoryid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylists`
+--
+
+LOCK TABLES `music_smartplaylists` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylists` DISABLE KEYS */;
+INSERT INTO `music_smartplaylists` VALUES (1,'1960\'s',1,'All','Artist (A)',0),(2,'1970\'s',1,'All','Artist (A)',0),(3,'1980\'s',1,'All','Artist (A)',0),(4,'1990\'s',1,'All','Artist (A)',0),(5,'2000\'s',1,'All','Artist (A)',0),(6,'Favorite Tracks',2,'All','Artist (A), Album (A)',0),(7,'100 Most Played Tracks',2,'All','Play Count (D)',100),(8,'Never Played Tracks',3,'All','Artist (A), Album (A)',0);
+/*!40000 ALTER TABLE `music_smartplaylists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_songs`
+--
+
+DROP TABLE IF EXISTS `music_songs`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_songs` (
+ `song_id` int(11) unsigned NOT NULL auto_increment,
+ `filename` text NOT NULL,
+ `name` varchar(255) NOT NULL default '',
+ `track` smallint(6) unsigned NOT NULL default '0',
+ `artist_id` int(11) unsigned NOT NULL default '0',
+ `album_id` int(11) unsigned NOT NULL default '0',
+ `genre_id` int(11) unsigned NOT NULL default '0',
+ `year` smallint(6) NOT NULL default '0',
+ `length` int(11) unsigned NOT NULL default '0',
+ `numplays` int(11) unsigned NOT NULL default '0',
+ `rating` tinyint(4) unsigned NOT NULL default '0',
+ `lastplay` datetime default NULL,
+ `date_entered` datetime default NULL,
+ `date_modified` datetime default NULL,
+ `format` varchar(4) NOT NULL default '0',
+ `mythdigest` varchar(255) default NULL,
+ `size` bigint(20) unsigned default NULL,
+ `description` varchar(255) default NULL,
+ `comment` varchar(255) default NULL,
+ `disc_count` smallint(5) unsigned default '0',
+ `disc_number` smallint(5) unsigned default '0',
+ `track_count` smallint(5) unsigned default '0',
+ `start_time` int(10) unsigned default '0',
+ `stop_time` int(10) unsigned default NULL,
+ `eq_preset` varchar(255) default NULL,
+ `relative_volume` tinyint(4) default '0',
+ `sample_rate` int(10) unsigned default '0',
+ `bitrate` int(10) unsigned default '0',
+ `bpm` smallint(5) unsigned default NULL,
+ `directory_id` int(20) NOT NULL default '0',
+ PRIMARY KEY (`song_id`),
+ KEY `idx_name` (`name`),
+ KEY `idx_mythdigest` (`mythdigest`),
+ KEY `directory_id` (`directory_id`),
+ KEY `album_id` (`album_id`),
+ KEY `genre_id` (`genre_id`),
+ KEY `artist_id` (`artist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_songs`
+--
+
+LOCK TABLES `music_songs` WRITE;
+/*!40000 ALTER TABLE `music_songs` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_songs` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_stats`
+--
+
+DROP TABLE IF EXISTS `music_stats`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_stats` (
+ `num_artists` smallint(5) unsigned NOT NULL default '0',
+ `num_albums` smallint(5) unsigned NOT NULL default '0',
+ `num_songs` mediumint(8) unsigned NOT NULL default '0',
+ `num_genres` tinyint(3) unsigned NOT NULL default '0',
+ `total_time` varchar(12) NOT NULL default '0',
+ `total_size` varchar(10) NOT NULL default '0'
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_stats`
+--
+
+LOCK TABLES `music_stats` WRITE;
+/*!40000 ALTER TABLE `music_stats` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_stats` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `mythlog`
+--
+
+DROP TABLE IF EXISTS `mythlog`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `mythlog` (
+ `logid` int(10) unsigned NOT NULL auto_increment,
+ `module` varchar(32) NOT NULL default '',
+ `priority` int(11) NOT NULL default '0',
+ `acknowledged` tinyint(1) default '0',
+ `logdate` datetime default NULL,
+ `host` varchar(128) default NULL,
+ `message` varchar(255) NOT NULL default '',
+ `details` text,
+ PRIMARY KEY (`logid`),
+ KEY `module` (`module`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `mythlog`
+--
+
+LOCK TABLES `mythlog` WRITE;
+/*!40000 ALTER TABLE `mythlog` DISABLE KEYS */;
+/*!40000 ALTER TABLE `mythlog` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `netflix`
+--
+
+DROP TABLE IF EXISTS `netflix`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `netflix` (
+ `name` varchar(100) NOT NULL,
+ `category` varchar(255) NOT NULL,
+ `url` varchar(255) NOT NULL,
+ `ico` varchar(255) default NULL,
+ `updated` int(10) unsigned default NULL,
+ `is_queue` int(10) unsigned default NULL,
+ `queue` varchar(32) NOT NULL default '',
+ PRIMARY KEY (`name`,`queue`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `netflix`
+--
+
+LOCK TABLES `netflix` WRITE;
+/*!40000 ALTER TABLE `netflix` DISABLE KEYS */;
+/*!40000 ALTER TABLE `netflix` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `networkiconmap`
+--
+
+DROP TABLE IF EXISTS `networkiconmap`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `networkiconmap` (
+ `id` int(11) NOT NULL auto_increment,
+ `network` varchar(20) NOT NULL default '',
+ `url` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `network` (`network`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `networkiconmap`
+--
+
+LOCK TABLES `networkiconmap` WRITE;
+/*!40000 ALTER TABLE `networkiconmap` DISABLE KEYS */;
+/*!40000 ALTER TABLE `networkiconmap` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldfind`
+--
+
+DROP TABLE IF EXISTS `oldfind`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldfind` (
+ `recordid` int(11) NOT NULL default '0',
+ `findid` int(11) NOT NULL default '0',
+ PRIMARY KEY (`recordid`,`findid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldfind`
+--
+
+LOCK TABLES `oldfind` WRITE;
+/*!40000 ALTER TABLE `oldfind` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldfind` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldprogram`
+--
+
+DROP TABLE IF EXISTS `oldprogram`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldprogram` (
+ `oldtitle` varchar(128) character set utf8 collate utf8_bin NOT NULL default '',
+ `airdate` datetime NOT NULL default '0000-00-00 00:00:00',
+ PRIMARY KEY (`oldtitle`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldprogram`
+--
+
+LOCK TABLES `oldprogram` WRITE;
+/*!40000 ALTER TABLE `oldprogram` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldprogram` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldrecorded`
+--
+
+DROP TABLE IF EXISTS `oldrecorded`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldrecorded` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `seriesid` varchar(40) NOT NULL default '',
+ `programid` varchar(40) NOT NULL default '',
+ `findid` int(11) NOT NULL default '0',
+ `recordid` int(11) NOT NULL default '0',
+ `station` varchar(20) NOT NULL default '',
+ `rectype` int(10) unsigned NOT NULL default '0',
+ `duplicate` tinyint(1) NOT NULL default '0',
+ `recstatus` int(11) NOT NULL default '0',
+ `reactivate` smallint(6) NOT NULL default '0',
+ `generic` tinyint(1) default '0',
+ PRIMARY KEY (`station`,`starttime`,`title`),
+ KEY `endtime` (`endtime`),
+ KEY `title` (`title`),
+ KEY `seriesid` (`seriesid`),
+ KEY `programid` (`programid`),
+ KEY `recordid` (`recordid`),
+ KEY `recstatus` (`recstatus`,`programid`,`seriesid`),
+ KEY `recstatus_2` (`recstatus`,`title`,`subtitle`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldrecorded`
+--
+
+LOCK TABLES `oldrecorded` WRITE;
+/*!40000 ALTER TABLE `oldrecorded` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldrecorded` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `people`
+--
+
+DROP TABLE IF EXISTS `people`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `people` (
+ `person` mediumint(8) unsigned NOT NULL auto_increment,
+ `name` varchar(128) character set utf8 collate utf8_bin NOT NULL default '',
+ PRIMARY KEY (`person`),
+ UNIQUE KEY `name` (`name`(41))
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `people`
+--
+
+LOCK TABLES `people` WRITE;
+/*!40000 ALTER TABLE `people` DISABLE KEYS */;
+/*!40000 ALTER TABLE `people` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `phonecallhistory`
+--
+
+DROP TABLE IF EXISTS `phonecallhistory`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `phonecallhistory` (
+ `recid` int(10) unsigned NOT NULL auto_increment,
+ `displayname` text NOT NULL,
+ `url` text NOT NULL,
+ `timestamp` text NOT NULL,
+ `duration` int(10) unsigned NOT NULL,
+ `directionin` int(10) unsigned NOT NULL,
+ `directoryref` int(10) unsigned default NULL,
+ PRIMARY KEY (`recid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `phonecallhistory`
+--
+
+LOCK TABLES `phonecallhistory` WRITE;
+/*!40000 ALTER TABLE `phonecallhistory` DISABLE KEYS */;
+/*!40000 ALTER TABLE `phonecallhistory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `phonedirectory`
+--
+
+DROP TABLE IF EXISTS `phonedirectory`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `phonedirectory` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `nickname` text NOT NULL,
+ `firstname` text,
+ `surname` text,
+ `url` text NOT NULL,
+ `directory` text NOT NULL,
+ `photofile` text,
+ `speeddial` int(10) unsigned NOT NULL,
+ `onhomelan` int(10) unsigned default '0',
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `phonedirectory`
+--
+
+LOCK TABLES `phonedirectory` WRITE;
+/*!40000 ALTER TABLE `phonedirectory` DISABLE KEYS */;
+INSERT INTO `phonedirectory` VALUES (1,'Me(larch5)','Local Myth Host','larch5','','My MythTVs','',1,1);
+/*!40000 ALTER TABLE `phonedirectory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `pidcache`
+--
+
+DROP TABLE IF EXISTS `pidcache`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `pidcache` (
+ `chanid` smallint(6) NOT NULL default '0',
+ `pid` int(11) NOT NULL default '-1',
+ `tableid` int(11) NOT NULL default '-1',
+ KEY `chanid` (`chanid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `pidcache`
+--
+
+LOCK TABLES `pidcache` WRITE;
+/*!40000 ALTER TABLE `pidcache` DISABLE KEYS */;
+/*!40000 ALTER TABLE `pidcache` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `playgroup`
+--
+
+DROP TABLE IF EXISTS `playgroup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `playgroup` (
+ `name` varchar(32) NOT NULL default '',
+ `titlematch` varchar(255) NOT NULL default '',
+ `skipahead` int(11) NOT NULL default '0',
+ `skipback` int(11) NOT NULL default '0',
+ `timestretch` int(11) NOT NULL default '0',
+ `jump` int(11) NOT NULL default '0',
+ PRIMARY KEY (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `playgroup`
+--
+
+LOCK TABLES `playgroup` WRITE;
+/*!40000 ALTER TABLE `playgroup` DISABLE KEYS */;
+INSERT INTO `playgroup` VALUES ('Default','',30,5,100,0);
+/*!40000 ALTER TABLE `playgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `powerpriority`
+--
+
+DROP TABLE IF EXISTS `powerpriority`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `powerpriority` (
+ `priorityname` varchar(64) character set utf8 collate utf8_bin NOT NULL,
+ `recpriority` int(10) NOT NULL default '0',
+ `selectclause` text NOT NULL,
+ PRIMARY KEY (`priorityname`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `powerpriority`
+--
+
+LOCK TABLES `powerpriority` WRITE;
+/*!40000 ALTER TABLE `powerpriority` DISABLE KEYS */;
+/*!40000 ALTER TABLE `powerpriority` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `profilegroups`
+--
+
+DROP TABLE IF EXISTS `profilegroups`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `profilegroups` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) default NULL,
+ `cardtype` varchar(32) NOT NULL default 'V4L',
+ `is_default` int(1) default '0',
+ `hostname` varchar(64) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name` (`name`,`hostname`),
+ KEY `cardtype` (`cardtype`)
+) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `profilegroups`
+--
+
+LOCK TABLES `profilegroups` WRITE;
+/*!40000 ALTER TABLE `profilegroups` DISABLE KEYS */;
+INSERT INTO `profilegroups` VALUES (1,'Software Encoders (v4l based)','V4L',1,NULL),(2,'MPEG-2 Encoders (PVR-x50, PVR-500)','MPEG',1,NULL),(3,'Hardware MJPEG Encoders (Matrox G200-TV, Miro DC10, etc)','MJPEG',1,NULL),(4,'Hardware HDTV','HDTV',1,NULL),(5,'Hardware DVB Encoders','DVB',1,NULL),(6,'Transcoders','TRANSCODE',1,NULL),(7,'FireWire Input','FIREWIRE',1,NULL),(8,'USB Mpeg-4 Encoder (Plextor ConvertX, etc)','GO7007',1,NULL),(14,'Import Recorder','IMPORT',1,NULL),(10,'Freebox Input','Freebox',1,NULL),(11,'HDHomeRun Recorders','HDHOMERUN',1,NULL),(12,'CRC IP Recorders','CRC_IP',1,NULL),(13,'HD-PVR Recorders','HDPVR',1,NULL);
+/*!40000 ALTER TABLE `profilegroups` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `program`
+--
+
+DROP TABLE IF EXISTS `program`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `program` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `category_type` varchar(64) NOT NULL default '',
+ `airdate` year(4) NOT NULL default '0000',
+ `stars` float NOT NULL default '0',
+ `previouslyshown` tinyint(4) NOT NULL default '0',
+ `title_pronounce` varchar(128) NOT NULL default '',
+ `stereo` tinyint(1) NOT NULL default '0',
+ `subtitled` tinyint(1) NOT NULL default '0',
+ `hdtv` tinyint(1) NOT NULL default '0',
+ `closecaptioned` tinyint(1) NOT NULL default '0',
+ `partnumber` int(11) NOT NULL default '0',
+ `parttotal` int(11) NOT NULL default '0',
+ `seriesid` varchar(64) NOT NULL default '',
+ `originalairdate` date default NULL,
+ `showtype` varchar(30) NOT NULL default '',
+ `colorcode` varchar(20) NOT NULL default '',
+ `syndicatedepisodenumber` varchar(20) NOT NULL default '',
+ `programid` varchar(64) NOT NULL default '',
+ `manualid` int(10) unsigned NOT NULL default '0',
+ `generic` tinyint(1) default '0',
+ `listingsource` int(11) NOT NULL default '0',
+ `first` tinyint(1) NOT NULL default '0',
+ `last` tinyint(1) NOT NULL default '0',
+ `audioprop` set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') character set latin1 NOT NULL,
+ `subtitletypes` set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') character set latin1 NOT NULL,
+ `videoprop` set('HDTV','WIDESCREEN','AVC') character set latin1 NOT NULL,
+ PRIMARY KEY (`chanid`,`starttime`,`manualid`),
+ KEY `endtime` (`endtime`),
+ KEY `title` (`title`),
+ KEY `title_pronounce` (`title_pronounce`),
+ KEY `seriesid` (`seriesid`),
+ KEY `id_start_end` (`chanid`,`starttime`,`endtime`),
+ KEY `program_manualid` (`manualid`),
+ KEY `previouslyshown` (`previouslyshown`),
+ KEY `programid` (`programid`,`starttime`),
+ KEY `starttime` (`starttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `program`
+--
+
+LOCK TABLES `program` WRITE;
+/*!40000 ALTER TABLE `program` DISABLE KEYS */;
+/*!40000 ALTER TABLE `program` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `programgenres`
+--
+
+DROP TABLE IF EXISTS `programgenres`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `programgenres` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `relevance` char(1) NOT NULL default '',
+ `genre` varchar(30) default NULL,
+ PRIMARY KEY (`chanid`,`starttime`,`relevance`),
+ KEY `genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `programgenres`
+--
+
+LOCK TABLES `programgenres` WRITE;
+/*!40000 ALTER TABLE `programgenres` DISABLE KEYS */;
+/*!40000 ALTER TABLE `programgenres` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `programrating`
+--
+
+DROP TABLE IF EXISTS `programrating`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `programrating` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `system` varchar(8) default NULL,
+ `rating` varchar(16) default NULL,
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`system`,`rating`),
+ KEY `starttime` (`starttime`,`system`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `programrating`
+--
+
+LOCK TABLES `programrating` WRITE;
+/*!40000 ALTER TABLE `programrating` DISABLE KEYS */;
+/*!40000 ALTER TABLE `programrating` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recgrouppassword`
+--
+
+DROP TABLE IF EXISTS `recgrouppassword`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recgrouppassword` (
+ `recgroup` varchar(32) character set utf8 collate utf8_bin NOT NULL default '',
+ `password` varchar(10) NOT NULL default '',
+ PRIMARY KEY (`recgroup`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recgrouppassword`
+--
+
+LOCK TABLES `recgrouppassword` WRITE;
+/*!40000 ALTER TABLE `recgrouppassword` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recgrouppassword` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `record`
+--
+
+DROP TABLE IF EXISTS `record`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `record` (
+ `recordid` int(10) unsigned NOT NULL auto_increment,
+ `type` int(10) unsigned NOT NULL default '0',
+ `chanid` int(10) unsigned default NULL,
+ `starttime` time NOT NULL default '00:00:00',
+ `startdate` date NOT NULL default '0000-00-00',
+ `endtime` time NOT NULL default '00:00:00',
+ `enddate` date NOT NULL default '0000-00-00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `profile` varchar(128) NOT NULL default 'Default',
+ `recpriority` int(10) NOT NULL default '0',
+ `autoexpire` int(11) NOT NULL default '0',
+ `maxepisodes` int(11) NOT NULL default '0',
+ `maxnewest` int(11) NOT NULL default '0',
+ `startoffset` int(11) NOT NULL default '0',
+ `endoffset` int(11) NOT NULL default '0',
+ `recgroup` varchar(32) NOT NULL default 'Default',
+ `dupmethod` int(11) NOT NULL default '6',
+ `dupin` int(11) NOT NULL default '15',
+ `station` varchar(20) NOT NULL default '',
+ `seriesid` varchar(40) NOT NULL default '',
+ `programid` varchar(40) NOT NULL default '',
+ `search` int(10) unsigned NOT NULL default '0',
+ `autotranscode` tinyint(1) NOT NULL default '0',
+ `autocommflag` tinyint(1) NOT NULL default '0',
+ `autouserjob1` tinyint(1) NOT NULL default '0',
+ `autouserjob2` tinyint(1) NOT NULL default '0',
+ `autouserjob3` tinyint(1) NOT NULL default '0',
+ `autouserjob4` tinyint(1) NOT NULL default '0',
+ `findday` tinyint(4) NOT NULL default '0',
+ `findtime` time NOT NULL default '00:00:00',
+ `findid` int(11) NOT NULL default '0',
+ `inactive` tinyint(1) NOT NULL default '0',
+ `parentid` int(11) NOT NULL default '0',
+ `transcoder` int(11) NOT NULL default '0',
+ `tsdefault` float NOT NULL default '1',
+ `playgroup` varchar(32) NOT NULL default 'Default',
+ `prefinput` int(10) NOT NULL default '0',
+ `next_record` datetime NOT NULL,
+ `last_record` datetime NOT NULL,
+ `last_delete` datetime NOT NULL,
+ `storagegroup` varchar(32) NOT NULL default 'Default',
+ `avg_delay` int(11) NOT NULL default '100',
+ PRIMARY KEY (`recordid`),
+ KEY `chanid` (`chanid`,`starttime`),
+ KEY `title` (`title`),
+ KEY `seriesid` (`seriesid`),
+ KEY `programid` (`programid`),
+ KEY `maxepisodes` (`maxepisodes`),
+ KEY `search` (`search`),
+ KEY `type` (`type`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `record`
+--
+
+LOCK TABLES `record` WRITE;
+/*!40000 ALTER TABLE `record` DISABLE KEYS */;
+/*!40000 ALTER TABLE `record` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recorded`
+--
+
+DROP TABLE IF EXISTS `recorded`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recorded` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `hostname` varchar(64) NOT NULL default '',
+ `bookmark` tinyint(1) NOT NULL default '0',
+ `editing` int(10) unsigned NOT NULL default '0',
+ `cutlist` tinyint(1) NOT NULL default '0',
+ `autoexpire` int(11) NOT NULL default '0',
+ `commflagged` int(10) unsigned NOT NULL default '0',
+ `recgroup` varchar(32) NOT NULL default 'Default',
+ `recordid` int(11) default NULL,
+ `seriesid` varchar(40) NOT NULL default '',
+ `programid` varchar(40) NOT NULL default '',
+ `lastmodified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `filesize` bigint(20) NOT NULL default '0',
+ `stars` float NOT NULL default '0',
+ `previouslyshown` tinyint(1) default '0',
+ `originalairdate` date default NULL,
+ `preserve` tinyint(1) NOT NULL default '0',
+ `findid` int(11) NOT NULL default '0',
+ `deletepending` tinyint(1) NOT NULL default '0',
+ `transcoder` int(11) NOT NULL default '0',
+ `timestretch` float NOT NULL default '1',
+ `recpriority` int(11) NOT NULL default '0',
+ `basename` varchar(255) NOT NULL,
+ `progstart` datetime NOT NULL default '0000-00-00 00:00:00',
+ `progend` datetime NOT NULL default '0000-00-00 00:00:00',
+ `playgroup` varchar(32) NOT NULL default 'Default',
+ `profile` varchar(32) NOT NULL default '',
+ `duplicate` tinyint(1) NOT NULL default '0',
+ `transcoded` tinyint(1) NOT NULL default '0',
+ `watched` tinyint(4) NOT NULL default '0',
+ `storagegroup` varchar(32) NOT NULL default 'Default',
+ `bookmarkupdate` timestamp NOT NULL default '0000-00-00 00:00:00',
+ PRIMARY KEY (`chanid`,`starttime`),
+ KEY `endtime` (`endtime`),
+ KEY `seriesid` (`seriesid`),
+ KEY `programid` (`programid`),
+ KEY `title` (`title`),
+ KEY `recordid` (`recordid`),
+ KEY `deletepending` (`deletepending`,`lastmodified`),
+ KEY `recgroup` (`recgroup`,`endtime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recorded`
+--
+
+LOCK TABLES `recorded` WRITE;
+/*!40000 ALTER TABLE `recorded` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recorded` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedcredits`
+--
+
+DROP TABLE IF EXISTS `recordedcredits`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedcredits` (
+ `person` mediumint(8) unsigned NOT NULL default '0',
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `role` set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') character set latin1 NOT NULL default '',
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`person`,`role`),
+ KEY `person` (`person`,`role`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedcredits`
+--
+
+LOCK TABLES `recordedcredits` WRITE;
+/*!40000 ALTER TABLE `recordedcredits` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedcredits` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedfile`
+--
+
+DROP TABLE IF EXISTS `recordedfile`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedfile` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `basename` varchar(128) NOT NULL default '',
+ `filesize` bigint(20) NOT NULL default '0',
+ `width` smallint(5) unsigned NOT NULL default '0',
+ `height` smallint(5) unsigned NOT NULL default '0',
+ `fps` float(6,3) NOT NULL default '0.000',
+ `aspect` float(8,6) NOT NULL default '0.000000',
+ `audio_sample_rate` smallint(5) unsigned NOT NULL default '0',
+ `audio_bits_per_sample` smallint(5) unsigned NOT NULL default '0',
+ `audio_channels` tinyint(3) unsigned NOT NULL default '0',
+ `audio_type` varchar(255) NOT NULL default '',
+ `video_type` varchar(255) NOT NULL default '',
+ `comment` varchar(255) NOT NULL default '',
+ `hostname` varchar(64) NOT NULL,
+ `storagegroup` varchar(32) NOT NULL,
+ `id` int(11) NOT NULL auto_increment,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`basename`),
+ KEY `basename` (`basename`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedfile`
+--
+
+LOCK TABLES `recordedfile` WRITE;
+/*!40000 ALTER TABLE `recordedfile` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedfile` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedmarkup`
+--
+
+DROP TABLE IF EXISTS `recordedmarkup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedmarkup` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `mark` mediumint(8) unsigned NOT NULL default '0',
+ `type` tinyint(4) NOT NULL default '0',
+ `data` int(11) unsigned default NULL,
+ PRIMARY KEY (`chanid`,`starttime`,`type`,`mark`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedmarkup`
+--
+
+LOCK TABLES `recordedmarkup` WRITE;
+/*!40000 ALTER TABLE `recordedmarkup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedmarkup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedprogram`
+--
+
+DROP TABLE IF EXISTS `recordedprogram`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedprogram` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `category_type` varchar(64) NOT NULL default '',
+ `airdate` year(4) NOT NULL default '0000',
+ `stars` float unsigned NOT NULL default '0',
+ `previouslyshown` tinyint(4) NOT NULL default '0',
+ `title_pronounce` varchar(128) NOT NULL default '',
+ `stereo` tinyint(1) NOT NULL default '0',
+ `subtitled` tinyint(1) NOT NULL default '0',
+ `hdtv` tinyint(1) NOT NULL default '0',
+ `closecaptioned` tinyint(1) NOT NULL default '0',
+ `partnumber` int(11) NOT NULL default '0',
+ `parttotal` int(11) NOT NULL default '0',
+ `seriesid` varchar(40) NOT NULL default '',
+ `originalairdate` date default NULL,
+ `showtype` varchar(30) NOT NULL default '',
+ `colorcode` varchar(20) NOT NULL default '',
+ `syndicatedepisodenumber` varchar(20) NOT NULL default '',
+ `programid` varchar(40) NOT NULL default '',
+ `manualid` int(10) unsigned NOT NULL default '0',
+ `generic` tinyint(1) default '0',
+ `listingsource` int(11) NOT NULL default '0',
+ `first` tinyint(1) NOT NULL default '0',
+ `last` tinyint(1) NOT NULL default '0',
+ `audioprop` set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') character set latin1 NOT NULL,
+ `subtitletypes` set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') character set latin1 NOT NULL,
+ `videoprop` set('HDTV','WIDESCREEN','AVC','720','1080') NOT NULL,
+ PRIMARY KEY (`chanid`,`starttime`,`manualid`),
+ KEY `endtime` (`endtime`),
+ KEY `title` (`title`),
+ KEY `title_pronounce` (`title_pronounce`),
+ KEY `seriesid` (`seriesid`),
+ KEY `programid` (`programid`),
+ KEY `id_start_end` (`chanid`,`starttime`,`endtime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedprogram`
+--
+
+LOCK TABLES `recordedprogram` WRITE;
+/*!40000 ALTER TABLE `recordedprogram` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedprogram` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedrating`
+--
+
+DROP TABLE IF EXISTS `recordedrating`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedrating` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `system` varchar(8) default NULL,
+ `rating` varchar(16) default NULL,
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`system`,`rating`),
+ KEY `starttime` (`starttime`,`system`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedrating`
+--
+
+LOCK TABLES `recordedrating` WRITE;
+/*!40000 ALTER TABLE `recordedrating` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedrating` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedseek`
+--
+
+DROP TABLE IF EXISTS `recordedseek`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedseek` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `mark` mediumint(8) unsigned NOT NULL default '0',
+ `offset` bigint(20) unsigned NOT NULL,
+ `type` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`chanid`,`starttime`,`type`,`mark`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedseek`
+--
+
+LOCK TABLES `recordedseek` WRITE;
+/*!40000 ALTER TABLE `recordedseek` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedseek` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordingprofiles`
+--
+
+DROP TABLE IF EXISTS `recordingprofiles`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordingprofiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) default NULL,
+ `videocodec` varchar(128) default NULL,
+ `audiocodec` varchar(128) default NULL,
+ `profilegroup` int(10) unsigned NOT NULL default '0',
+ PRIMARY KEY (`id`),
+ KEY `profilegroup` (`profilegroup`)
+) ENGINE=MyISAM AUTO_INCREMENT=58 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordingprofiles`
+--
+
+LOCK TABLES `recordingprofiles` WRITE;
+/*!40000 ALTER TABLE `recordingprofiles` DISABLE KEYS */;
+INSERT INTO `recordingprofiles` VALUES (1,'Default',NULL,NULL,1),(2,'Live TV',NULL,NULL,1),(3,'High Quality',NULL,NULL,1),(4,'Low Quality',NULL,NULL,1),(5,'Default',NULL,NULL,2),(6,'Live TV',NULL,NULL,2),(7,'High Quality',NULL,NULL,2),(8,'Low Quality',NULL,NULL,2),(9,'Default',NULL,NULL,3),(10,'Live TV',NULL,NULL,3),(11,'High Quality',NULL,NULL,3),(12,'Low Quality',NULL,NULL,3),(13,'Default',NULL,NULL,4),(14,'Live TV',NULL,NULL,4),(15,'High Quality',NULL,NULL,4),(16,'Low Quality',NULL,NULL,4),(17,'Default',NULL,NULL,5),(18,'Live TV',NULL,NULL,5),(19,'High Quality',NULL,NULL,5),(20,'Low Quality',NULL,NULL,5),(21,'RTjpeg/MPEG4',NULL,NULL,6),(22,'MPEG2',NULL,NULL,6),(23,'Default',NULL,NULL,8),(24,'Live TV',NULL,NULL,8),(25,'High Quality',NULL,NULL,8),(26,'Low Quality',NULL,NULL,8),(27,'High Quality',NULL,NULL,6),(28,'Medium Quality',NULL,NULL,6),(29,'Low Quality',NULL,NULL,6),(30,'Default',NULL,NULL,10),(31,'Live TV',NULL,NULL,10),(32,'High Quality',NULL,NULL,10),(33,'Low Quality',NULL,NULL,10),(34,'Default',NULL,NULL,11),(35,'Live TV',NULL,NULL,11),(36,'High Quality',NULL,NULL,11),(37,'Low Quality',NULL,NULL,11),(38,'Default',NULL,NULL,12),(39,'Live TV',NULL,NULL,12),(40,'High Quality',NULL,NULL,12),(41,'Low Quality',NULL,NULL,12),(42,'Default',NULL,NULL,7),(43,'Live TV',NULL,NULL,7),(44,'High Quality',NULL,NULL,7),(45,'Low Quality',NULL,NULL,7),(46,'Default',NULL,NULL,9),(47,'Live TV',NULL,NULL,9),(48,'High Quality',NULL,NULL,9),(49,'Low Quality',NULL,NULL,9),(50,'Default',NULL,NULL,13),(51,'Live TV',NULL,NULL,13),(52,'High Quality',NULL,NULL,13),(53,'Low Quality',NULL,NULL,13),(54,'Default',NULL,NULL,14),(55,'Live TV',NULL,NULL,14),(56,'High Quality',NULL,NULL,14),(57,'Low Quality',NULL,NULL,14);
+/*!40000 ALTER TABLE `recordingprofiles` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordmatch`
+--
+
+DROP TABLE IF EXISTS `recordmatch`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordmatch` (
+ `recordid` int(10) unsigned default NULL,
+ `chanid` int(10) unsigned default NULL,
+ `starttime` datetime default NULL,
+ `manualid` int(10) unsigned default NULL,
+ `oldrecduplicate` tinyint(1) default NULL,
+ `recduplicate` tinyint(1) default NULL,
+ `findduplicate` tinyint(1) default NULL,
+ `oldrecstatus` int(11) default NULL,
+ KEY `recordid` (`recordid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordmatch`
+--
+
+LOCK TABLES `recordmatch` WRITE;
+/*!40000 ALTER TABLE `recordmatch` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordmatch` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `romdb`
+--
+
+DROP TABLE IF EXISTS `romdb`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `romdb` (
+ `crc` varchar(64) NOT NULL default '',
+ `name` varchar(128) NOT NULL default '',
+ `description` varchar(128) NOT NULL default '',
+ `category` varchar(128) NOT NULL default '',
+ `year` varchar(10) NOT NULL default '',
+ `manufacturer` varchar(128) NOT NULL default '',
+ `country` varchar(128) NOT NULL default '',
+ `publisher` varchar(128) NOT NULL default '',
+ `platform` varchar(64) NOT NULL default '',
+ `filesize` int(12) default NULL,
+ `flags` varchar(64) NOT NULL default '',
+ `version` varchar(64) NOT NULL default '',
+ `binfile` varchar(64) NOT NULL default '',
+ KEY `crc` (`crc`),
+ KEY `year` (`year`),
+ KEY `category` (`category`),
+ KEY `name` (`name`),
+ KEY `description` (`description`),
+ KEY `platform` (`platform`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `romdb`
+--
+
+LOCK TABLES `romdb` WRITE;
+/*!40000 ALTER TABLE `romdb` DISABLE KEYS */;
+/*!40000 ALTER TABLE `romdb` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `schemalock`
+--
+
+DROP TABLE IF EXISTS `schemalock`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `schemalock` (
+ `schemalock` int(1) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `schemalock`
+--
+
+LOCK TABLES `schemalock` WRITE;
+/*!40000 ALTER TABLE `schemalock` DISABLE KEYS */;
+/*!40000 ALTER TABLE `schemalock` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `settings`
+--
+
+DROP TABLE IF EXISTS `settings`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `settings` (
+ `value` varchar(128) NOT NULL default '',
+ `data` text,
+ `hostname` varchar(64) default NULL,
+ KEY `value` (`value`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `settings`
+--
+
+LOCK TABLES `settings` WRITE;
+/*!40000 ALTER TABLE `settings` DISABLE KEYS */;
+INSERT INTO `settings` VALUES ('mythfilldatabaseLastRunStart',NULL,NULL),('mythfilldatabaseLastRunEnd',NULL,NULL),('mythfilldatabaseLastRunStatus',NULL,NULL),('DataDirectMessage',NULL,NULL),('HaveRepeats','0',NULL),('DBSchemaVer','1254',NULL),('DefaultTranscoder','0',NULL),('MythFillSuggestedRunTime','1970-01-01T00:00:00',NULL),('MythFillGrabberSuggestsTime','1',NULL),('MythFillFixProgramIDsHasRunOnce','1','larch5'),('Language','EN_US','larch5'),('BackendServerIP','127.0.0.1','larch5'),('BackendServerPort','6543','larch5'),('BackendStatusPort','6544','larch5'),('SecurityPin','','larch5'),('MasterServerIP','127.0.0.1',NULL),('MasterServerPort','6543',NULL),('TVFormat','NTSC',NULL),('VbiFormat','None',NULL),('FreqTable','us-bcast',NULL),('TimeOffset','None',NULL),('MasterBackendOverride','1',NULL),('DeletesFollowLinks','1',NULL),('TruncateDeletesSlowly','0','larch5'),('HDRingbufferSize','9400',NULL),('MiscStatusScript','','larch5'),('DisableFirewireReset','0','larch5'),('EITTransportTimeout','5',NULL),('EITIgnoresSource','0',NULL),('EITCrawIdleStart','60',NULL),('startupCommand','',NULL),('blockSDWUwithoutClient','1',NULL),('idleWaitForRecordingTime','15',NULL),('StartupSecsBeforeRecording','120',NULL),('WakeupTimeFormat','hh:mm yyyy-MM-dd',NULL),('SetWakeuptimeCommand','',NULL),('ServerHaltCommand','sudo /sbin/halt -p',NULL),('preSDWUCheckCommand','',NULL),('WOLbackendConnectRetry','5',NULL),('WOLbackendCommand','',NULL),('WOLslaveBackendsCommand','',NULL),('JobQueueMaxSimultaneousJobs','1','larch5'),('JobQueueCheckFrequency','60','larch5'),('JobQueueWindowStart','00:00','larch5'),('JobQueueWindowEnd','23:59','larch5'),('JobQueueCPU','0','larch5'),('JobAllowCommFlag','1','larch5'),('JobAllowTranscode','1','larch5'),('JobAllowUserJob1','0','larch5'),('JobAllowUserJob2','0','larch5'),('JobAllowUserJob3','0','larch5'),('JobAllowUserJob4','0','larch5'),('JobsRunOnRecordHost','0',NULL),('AutoCommflagWhileRecording','0',NULL),('JobQueueCommFlagCommand','mythcommflag',NULL),('JobQueueTranscodeCommand','mythtranscode',NULL),('AutoTranscodeBeforeAutoCommflag','0',NULL),('SaveTranscoding','0',NULL),('UserJobDesc1','User Job #1',NULL),('UserJob1','',NULL),('UserJobDesc2','User Job #2',NULL),('UserJob2','',NULL),('UserJobDesc3','User Job #3',NULL),('UserJob3','',NULL),('UserJobDesc4','User Job #4',NULL),('UserJob4','',NULL),('DefaultVideoPlaybackProfile','CPU+','larch5'),('RealtimePriority','1','larch5'),('DecodeExtraAudio','1','larch5'),('AudioNag','1','larch5'),('UseVideoTimebase','0','larch5'),('ClearSavedPosition','1','larch5'),('AltClearSavedPosition','1','larch5'),('JumpToProgramOSD','1','larch5'),('ContinueEmbeddedTVPlay','0','larch5'),('AutomaticSetWatched','0','larch5'),('AlwaysStreamFiles','1','larch5'),('UseOpenGLVSync','0','larch5'),('UseOutputPictureControls','1','larch5'),('AspectOverride','0','larch5'),('AdjustFill','0','larch5'),('LetterboxColour','0','larch5'),('PIPLocation','0','larch5'),('PlaybackExitPrompt','2','larch5'),('EndOfRecordingExitPrompt','1','larch5'),('PlayBoxOrdering','1','larch5'),('PlayBoxEpisodeSort','Date','larch5'),('GeneratePreviewPixmaps','0','larch5'),('PreviewPixmapOffset','64',NULL),('PreviewFromBookmark','1','larch5'),('PlaybackPreview','1','larch5'),('PlaybackBoxStartInTitle','1','larch5'),('ShowGroupInfo','0','larch5'),('AllRecGroupPassword','',NULL),('DisplayRecGroup','All Programs','larch5'),('QueryInitialFilter','0','larch5'),('RememberRecGroup','1','larch5'),('DispRecGroupAsAllProg','0','larch5'),('LiveTVInAllPrograms','0','larch5'),('DisplayGroupDefaultView','0','larch5'),('DisplayGroupTitleSort','0','larch5'),('PlaybackWatchList','1','larch5'),('PlaybackWLStart','0','larch5'),('PlaybackWLAutoExpire','0','larch5'),('PlaybackWLMaxAge','60','larch5'),('PlaybackWLBlackOut','2','larch5'),('SmartForward','0','larch5'),('StickyKeys','0','larch5'),('FFRewReposTime','100','larch5'),('FFRewReverse','1','larch5'),('ExactSeeking','0','larch5'),('AutoCommercialSkip','0','larch5'),('MaximumCommercialSkip','3600',NULL),('CommSkipAllBlanks','1',NULL),('PVR350OutputEnable','0','larch5'),('PVR350EPGAlphaValue','164','larch5'),('PVR350InternalAudioOnly','0','larch5'),('OSDTheme','blueosd','larch5'),('OSDGeneralTimeout','2','larch5'),('OSDProgramInfoTimeout','3','larch5'),('OSDFont','FreeMono.ttf','larch5'),('OSDThemeFontSizeType','default','larch5'),('EnableMHEG','0','larch5'),('PersistentBrowseMode','1','larch5'),('OSDNotifyTimeout','5','larch5'),('UDPNotifyPort','6948','larch5'),('OSDCCFont','FreeMono.ttf','larch5'),('CCBackground','0','larch5'),('DefaultCCMode','0','larch5'),('Prefer708Captions','1','larch5'),('OSDCC708TextZoom','100','larch5'),('OSDCC708DefaultFontType','MonoSerif','larch5'),('OSDCC708MonoSerifFont','FreeMono.ttf','larch5'),('OSDCC708PropSerifFont','FreeMono.ttf','larch5'),('OSDCC708MonoSansSerifFont','FreeMono.ttf','larch5'),('OSDCC708PropSansSerifFont','FreeMono.ttf','larch5'),('OSDCC708CasualFont','FreeMono.ttf','larch5'),('OSDCC708CursiveFont','FreeMono.ttf','larch5'),('OSDCC708CapitalsFont','FreeMono.ttf','larch5'),('OSDCC708MonoSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708PropSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708MonoSansSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708PropSansSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708CasualItalicFont','FreeMono.ttf','larch5'),('OSDCC708CursiveItalicFont','FreeMono.ttf','larch5'),('OSDCC708CapitalsItalicFont','FreeMono.ttf','larch5'),('ChannelOrdering','channum','larch5'),('ChannelFormat','<num> <sign>','larch5'),('LongChannelFormat','<num> <name>','larch5'),('SmartChannelChange','0','larch5'),('LastFreeCard','0',NULL),('LiveTVPriority','0',NULL),('AutoExpireMethod','2',NULL),('AutoExpireDefault','1',NULL),('RerecordWatched','1',NULL),('AutoExpireWatchedPriority','0',NULL),('AutoExpireLiveTVMaxAge','1',NULL),('AutoExpireDayPriority','3',NULL),('AutoExpireExtraSpace','1',NULL),('AutoExpireInsteadOfDelete','0',NULL),('DeletedFifoOrder','0',NULL),('CommercialSkipMethod','7',NULL),('AggressiveCommDetect','1',NULL),('AutoCommercialFlag','1',NULL),('AutoTranscode','0',NULL),('AutoRunUserJob1','0',NULL),('AutoRunUserJob2','0',NULL),('AutoRunUserJob3','0',NULL),('AutoRunUserJob4','0',NULL),('OverTimeCategory','category name',NULL),('CategoryOverTime','30',NULL),('EPGFillType','12','larch5'),('EPGShowCategoryColors','1','larch5'),('EPGShowCategoryText','1','larch5'),('EPGScrollType','1','larch5'),('EPGShowChannelIcon','1','larch5'),('EPGShowFavorites','0','larch5'),('WatchTVGuide','0','larch5'),('chanPerPage','5','larch5'),('timePerPage','4','larch5'),('UnknownTitle','Unknown','larch5'),('UnknownCategory','Unknown','larch5'),('DefaultTVChannel','3','larch5'),('SelectChangesChannel','0','larch5'),('SelChangeRecThreshold','16','larch5'),('EPGEnableJumpToChannel','0',NULL),('Theme','LinHES','larch5'),('RandomTheme','0','larch5'),('ThemeCacheSize','1','larch5'),('ThemePainter','qt','larch5'),('Style','Desktop Style','larch5'),('ThemeFontSizeType','default','larch5'),('MenuTheme','default','larch5'),('XineramaScreen','0','larch5'),('XineramaMonitorAspectRatio','1.3333','larch5'),('GuiSizeForTV','1','larch5'),('HideMouseCursor','1','larch5'),('RunFrontendInWindow','0','larch5'),('UseVideoModes','0','larch5'),('GuiVidModeResolution','640x480','larch5'),('TVVidModeResolution','320x200','larch5'),('TVVidModeForceAspect','0.0','larch5'),('TVVidModeResolution0','320x200','larch5'),('TVVidModeForceAspect0','0.0','larch5'),('TVVidModeResolution1','320x200','larch5'),('TVVidModeForceAspect1','0.0','larch5'),('TVVidModeResolution2','320x200','larch5'),('TVVidModeForceAspect2','0.0','larch5'),('ISO639Language0','eng','larch5'),('ISO639Language1','eng','larch5'),('DateFormat','ddd MMM d','larch5'),('ShortDateFormat','M/d','larch5'),('TimeFormat','h:mm AP','larch5'),('QtFontSmall','12','larch5'),('QtFontMedium','16','larch5'),('QtFontBig','25','larch5'),('PlayBoxTransparency','1','larch5'),('PlayBoxShading','0','larch5'),('UseVirtualKeyboard','1','larch5'),('LCDEnable','0','larch5'),('LCDShowTime','1','larch5'),('LCDShowMenu','1','larch5'),('LCDShowMusic','1','larch5'),('LCDShowMusicItems','ArtistTitle','larch5'),('LCDShowChannel','1','larch5'),('LCDShowRecStatus','0','larch5'),('LCDShowVolume','1','larch5'),('LCDShowGeneric','1','larch5'),('LCDBacklightOn','1','larch5'),('LCDHeartBeatOn','0','larch5'),('LCDBigClock','0','larch5'),('LCDKeyString','ABCDEF','larch5'),('LCDPopupTime','5','larch5'),('AudioOutputDevice','ALSA:default','larch5'),('PassThruOutputDevice','Default','larch5'),('MaxChannels','2','larch5'),('AudioUpmixType','0','larch5'),('AC3PassThru','0','larch5'),('DTSPassThru','0','larch5'),('AggressiveSoundcardBuffer','0','larch5'),('MythControlsVolume','1','larch5'),('MixerDevice','ALSA:default','larch5'),('MixerControl','PCM','larch5'),('MasterMixerVolume','100','larch5'),('PCMMixerVolume','50','larch5'),('IndividualMuteControl','0','larch5'),('LircKeyPressedApp','','larch5'),('AllowQuitShutdown','4','larch5'),('NoPromptOnExit','1','larch5'),('UseArrowAccels','1','larch5'),('NetworkControlEnabled','0','larch5'),('NetworkControlPort','6546','larch5'),('MonitorDrives','0','larch5'),('MediaChangeEvents','0','larch5'),('IgnoreDevices','','larch5'),('SetupPinCodeRequired','0','larch5'),('OverrideExitMenu','3','larch5'),('HaltCommand','sudo /sbin/halt','larch5'),('RebootCommand','sudo /sbin/reboot','larch5'),('EnableXbox','0','larch5'),('LogEnabled','0',NULL),('LogMaxCount','100','larch5'),('LogPrintLevel','8','larch5'),('LogCleanEnabled','0','larch5'),('LogCleanPeriod','14','larch5'),('LogCleanDays','14','larch5'),('LogCleanMax','30','larch5'),('MythFillEnabled','1',NULL),('MythFillDatabasePath','mythfilldatabase',NULL),('MythFillDatabaseArgs','',NULL),('MythFillDatabaseLog','',NULL),('MythFillPeriod','1',NULL),('MythFillMinHour','2',NULL),('MythFillMaxHour','5',NULL),('SchedMoveHigher','1',NULL),('SchedOpenEnd','0',NULL),('ComplexPriority','0',NULL),('PrefInputPriority','2',NULL),('SingleRecordRecPriority','1',NULL),('FindOneRecordRecPriority','-1',NULL),('ArchiveDBSchemaVer','1005',NULL),('MythArchiveTempDir','/myth/tmp','larch5'),('MythArchiveShareDir','/usr/share/mythtv/mytharchive/','larch5'),('MythArchiveVideoFormat','NTSC','larch5'),('MythArchiveFileFilter','*.mpg *.mov *.avi *.mpeg *.nuv','larch5'),('MythArchiveDVDLocation','/dev/dvd','larch5'),('MythArchiveDVDPlayerCmd','Internal','larch5'),('MythArchiveEncodeToAc3','0','larch5'),('MythArchiveCopyRemoteFiles','0','larch5'),('MythArchiveAlwaysUseMythTranscode','1','larch5'),('MythArchiveUseProjectX','0','larch5'),('MythArchiveAddSubtitles','0','larch5'),('MythArchiveUseFIFO','1','larch5'),('MythArchiveDefaultEncProfile','SP','larch5'),('MythArchiveMainMenuAR','16:9','larch5'),('MythArchiveChapterMenuAR','Video','larch5'),('MythArchiveDateFormat','%a %b %d','larch5'),('MythArchiveTimeFormat','%I:%M %p','larch5'),('MythArchiveFfmpegCmd','ffmpeg','larch5'),('MythArchiveMplexCmd','mplex','larch5'),('MythArchiveDvdauthorCmd','dvdauthor','larch5'),('MythArchiveSpumuxCmd','spumux','larch5'),('MythArchiveMpeg2encCmd','mpeg2enc','larch5'),('MythArchiveMkisofsCmd','mkisofs','larch5'),('MythArchiveGrowisofsCmd','growisofs','larch5'),('MythArchiveTcrequantCmd','tcrequant','larch5'),('MythArchiveJpeg2yuvCmd','jpeg2yuv','larch5'),('MythArchiveProjectXCmd','projectx','larch5'),('FlixDBSchemaVer','1004',NULL),('GalleryDBSchemaVer','1003',NULL),('GalleryDir','/myth/gallery','larch5'),('GalleryThumbnailLocation','1','larch5'),('GallerySortOrder','20','larch5'),('GalleryImportDirs','/mnt/cdrom:/mnt/camera','larch5'),('GalleryMoviePlayerCmd','mplayer -fs %s','larch5'),('SlideshowUseOpenGL','0','larch5'),('SlideshowDelay','5','larch5'),('SlideshowOpenGLTransition','none','larch5'),('SlideshowOpenGLTransitionLength','2000','larch5'),('SlideshowTransition','random','larch5'),('SlideshowBackground','black','larch5'),('GameDBSchemaVer','1016',NULL),('MusicDBSchemaVer','1017',NULL),('VisualMode','','larch5'),('MusicLocation','/myth/music/','larch5'),('MusicAudioDevice','default','larch5'),('CDDevice','/dev/cdrom','larch5'),('AutoLookupCD','1','larch5'),('AutoPlayCD','0','larch5'),('KeyboardAccelerators','1','larch5'),('TreeLevels','splitartist artist album title','larch5'),('ArtistTreeGroups','0','larch5'),('NonID3FileNameFormat','GENRE/ARTIST/ALBUM/TRACK_TITLE','larch5'),('Ignore_ID3','0','larch5'),('MusicTagEncoding','utf16','larch5'),('CDWriterEnabled','1','larch5'),('CDDiskSize','1','larch5'),('CDCreateDir','1','larch5'),('CDWriteSpeed','0','larch5'),('CDBlankType','fast','larch5'),('PlayMode','none','larch5'),('ResumeMode','off','larch5'),('MaxSearchResults','300','larch5'),('MusicShowRatings','0','larch5'),('ShowWholeTree','0','larch5'),('ListAsShuffled','0','larch5'),('IntelliRatingWeight','35','larch5'),('IntelliPlayCountWeight','25','larch5'),('IntelliLastPlayWeight','25','larch5'),('IntelliRandomWeight','15','larch5'),('VisualCycleOnSongChange','0','larch5'),('VisualAlbumArtOnSongChange','0','larch5'),('VisualRandomize','0','larch5'),('VisualModeDelay','0','larch5'),('VisualScaleWidth','1','larch5'),('VisualScaleHeight','1','larch5'),('ParanoiaLevel','Full','larch5'),('FilenameTemplate','ARTIST/ALBUM/TRACK-TITLE','larch5'),('NoWhitespace','0','larch5'),('PostCDRipScript','','larch5'),('EjectCDAfterRipping','1','larch5'),('EncoderType','ogg','larch5'),('DefaultRipQuality','1','larch5'),('Mp3UseVBR','0','larch5'),('PhoneDBSchemaVer','1001',NULL),('SipRegisterWithProxy','1','larch5'),('SipProxyName','fwd.pulver.com','larch5'),('SipProxyAuthName','','larch5'),('SipProxyAuthPassword','','larch5'),('MySipName','Me','larch5'),('SipAutoanswer','0','larch5'),('SipBindInterface','eth0','larch5'),('SipLocalPort','5060','larch5'),('NatTraversalMethod','None','larch5'),('NatIpAddress','http://checkip.dyndns.org','larch5'),('AudioLocalPort','21232','larch5'),('VideoLocalPort','21234','larch5'),('MicrophoneDevice','None','larch5'),('CodecPriorityList','GSM;G.711u;G.711a','larch5'),('PlayoutAudioCall','40','larch5'),('PlayoutVideoCall','110','larch5'),('TxResolution','176x144','larch5'),('TransmitFPS','5','larch5'),('TransmitBandwidth','256','larch5'),('CaptureResolution','352x288','larch5'),('TimeToAnswer','10','larch5'),('DefaultVxmlUrl','http://127.0.0.1/vxml/index.vxml','larch5'),('DefaultVoicemailPrompt','I am not at home, please leave a message after the tone','larch5'),('mythvideo.DBSchemaVer','1032',NULL),('VideoStartupDir','/myth/video','larch5'),('VideoArtworkDir','/myth/video_stuff/coverart','larch5'),('Default MythVideo View','2','larch5'),('VideoListUnknownFiletypes','1','larch5'),('VideoBrowserNoDB','1','larch5'),('VideoGalleryNoDB','1','larch5'),('VideoTreeNoDB','1','larch5'),('VideoTreeLoadMetaData','1','larch5'),('VideoNewBrowsable','1','larch5'),('mythvideo.sort_ignores_case','1','larch5'),('mythvideo.db_folder_view','1','larch5'),('mythvideo.VideoTreeRemember','1','larch5'),('mythvideo.ImageCacheSize','50','larch5'),('DVDDeviceLocation','/dev/dvd','larch5'),('VCDDeviceLocation','/dev/cdrom','larch5'),('DVDOnInsertDVD','1','larch5'),('DVDDriveSpeed','2','larch5'),('EnableDVDBookmark','1','larch5'),('DVDBookmarkPrompt','1','larch5'),('DVDBookmarkDays','10','larch5'),('mythvideo.fanartDir','/myth/video_stuff/fanart','larch5'),('mythvideo.screenshotDir','/myth/video_stuff/screenshots','larch5'),('mythvideo.bannerDir','/myth/video_stuff/banners','larch5'),('VideoGalleryColsPerPage','4','larch5'),('VideoGalleryRowsPerPage','3','larch5'),('VideoGallerySubtitle','1','larch5'),('VideoDefaultParentalLevel','4','larch5'),('VideoAggressivePC','0','larch5'),('mythvideo.ParentalLevelFromRating','0','larch5'),('mythvideo.AutoR2PL1','G','larch5'),('mythvideo.AutoR2PL2','PG','larch5'),('mythvideo.AutoR2PL3','PG-13','larch5'),('mythvideo.AutoR2PL4','R:NC-17','larch5'),('VideoDefaultPlayer','mplayer -fs -zoom -quiet -vo xv %s','larch5'),('mythdvd.DVDPlayerCommand','Internal','larch5'),('VCDPlayerCommand','mplayer vcd:// -cdrom-device %d -fs -zoom -vo xv','larch5'),('DVDRipLocation','/myth/tmp','larch5'),('TitlePlayCommand','mplayer dvd://%t -dvd-device %d -fs -zoom -vo xv -aid %a -channels %c','larch5'),('SubTitleCommand','-sid %s','larch5'),('TranscodeCommand','transcode','larch5'),('MTDPort','2442','larch5'),('MTDNiceLevel','20','larch5'),('MTDConcurrentTranscodes','1','larch5'),('MTDLogFlag','0','larch5'),('MTDac3Flag','0','larch5'),('MTDxvidFlag','1','larch5'),('mythvideo.TrustTranscodeFRDetect','1','larch5'),('WeatherDBSchemaVer','1004',NULL),('TVVidModeRefreshRate','0','larch5'),('TVVidModeRefreshRate0','0','larch5'),('TVVidModeRefreshRate1','0','larch5'),('TVVidModeRefreshRate2','0','larch5'),('GalleryRecursiveSlideshow','1','larch5'),('WebBrowserZoomLevel','20','larch5'),('WebBrowserCommand','Internal','larch5'),('WebBrowserScrollMode','1','larch5'),('WebBrowserScrollSpeed','4','larch5'),('WebBrowserHideScrollbars','0','larch5'),('RepeatMode','all','larch5'),('MusicAutoShowPlayer','1','larch5'),('HOSTOSsize','5','larch5'),('NetworkControlEnabled','1','larch5'),('Hostpluginmytharchive','1','larch5'),('Hostpluginmythbrowser','1','larch5'),('Hostpluginmythcontrols','1','larch5'),('Hostpluginmythflix','1','larch5'),('Hostpluginmythgallery','1','larch5'),('Hostpluginmythgame','1','larch5'),('HostpluginmythgameFceu','1','larch5'),('HostpluginmythgameMame','1','larch5'),('HostpluginmythgameZsnes','1','larch5'),('Hostpluginmythmovietime','1','larch5'),('Hostpluginmythmusic','1','larch5'),('Hostpluginmythnews','1','larch5'),('Hostpluginmythphone','1','larch5'),('Hostpluginmythsmolt','1','larch5'),('Hostpluginmythvideo','1','larch5'),('Hostpluginmythvideo_dvdcss','0','larch5'),('Hostpluginmythweather','1','larch5'),('HostAudiotype','ALSA','larch5'),('HostpluginmythgameZsnes','1','larch5'),('HostpluginmythgameMame','1','larch5'),('Hostpluginmythvideo_dvdcss','0','larch5'),('Hostpluginmythappletrailers','1','larch5'),('Hostpluginmythstream','1','larch5'),('Hostpluginmythvodka','1','larch5'),('HostMiro','1','larch5'),('HostpluginmythgameXE','1','larch5'),('HostpluginmythgameROMDB','1','larch5'),('HostXine','1','larch5'),('HOSTOSsize','5','larch5'),('HostMyhostname','larch5','larch5'),('NetworkControlEnabled','1','larch5'),('Hostaccessuser','1','larch5'),('WOLbackendReconnectWaitTime','5',NULL),('Hostbootsplash','1','larch5'),('HostIPeth0','192.168.1.1','larch5'),('HostNETMASKeth0','/24 255.255.255.0','larch5'),('HostGWeth0','192.168.1.254','larch5'),('HostDNSeth0','192.168.1.254','larch5'),('HostReceiverType','Hauppauge','larch5'),('HostRemoteType','no_remote','larch5'),('HOSTtemplatetype','Do Nothing','larch5'),('BackupDBLastRunStart','2010-05-23 01:43:11',NULL),('BackupDBLastRunEnd','2010-05-23 01:43:14',NULL),('StorageScheduler','Combination',NULL),('DisableAutomaticBackup','0',NULL),('BackendStopCommand','sudo sv stop mythbackend',NULL),('BackendStartCommand','sudo sv start mythbackend',NULL),('UPnP/WMPSource','0',NULL),('UPnP/RebuildDelay','30','larch5'),('GeneratePreviewRemotely','0','larch5'),('HWAccelPlaybackPreview','0','larch5'),('BrowseAllTuners','0','larch5'),('SubtitleCodec','UTF-8','larch5'),('ChannelGroupRememberLast','0','larch5'),('ChannelGroupDefault','-1','larch5'),('BrowseChannelGroup','0','larch5'),('UseFixedWindowSize','1','larch5'),('ScreenShotPath','/myth/video_stuff/screenshots','larch5'),('LircSocket','/dev/lircd','larch5'),('BrowserDBSchemaVer','1002',NULL),('CDWriterDevice','default','larch5'),('MusicExitAction','prompt','larch5'),('mythvideo.db_group_view','1','larch5'),('mythvideo.db_group_type','0','larch5'),('MovieListCommandLine','/usr/share/mythtv/mythvideo/scripts/tmdb.pl -M','larch5'),('MoviePosterCommandLine','/usr/share/mythtv/mythvideo/scripts/tmdb.pl -P','larch5'),('MovieFanartCommandLine','/usr/share/mythtv/mythvideo/scripts/tmdb.pl -B','larch5'),('MovieDataCommandLine','/usr/share/mythtv/mythvideo/scripts/tmdb.pl -D','larch5'),('mythvideo.TrailersDir','/myth/video_stuff/trailers','larch5'),('mythvideo.TrailersRandomEnabled','1','larch5'),('mythvideo.TrailersRandomCount','3','larch5'),('mythvideo.TVListCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -M','larch5'),('mythvideo.TVPosterCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -P','larch5'),('mythvideo.TVFanartCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -F','larch5'),('mythvideo.TVBannerCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -B','larch5'),('mythvideo.TVDataCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -D','larch5'),('mythvideo.TVTitleSubCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -N','larch5'),('mythvideo.TVScreenshotCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -S','larch5'),('mythvideo.EnableAlternatePlayer','1','larch5'),('mythvideo.VideoAlternatePlayer','Internal','larch5'),('AudioDefaultUpmix','1','larch5'),('AdvancedAudioSettings','0','larch5'),('SRCQualityOverride','0','larch5'),('SRCQuality','1','larch5'),('MusicDefaultUpmix','0','larch5');
+/*!40000 ALTER TABLE `settings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `storagegroup`
+--
+
+DROP TABLE IF EXISTS `storagegroup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `storagegroup` (
+ `id` int(11) NOT NULL auto_increment,
+ `groupname` varchar(32) NOT NULL,
+ `hostname` varchar(64) NOT NULL default '',
+ `dirname` varchar(235) character set utf8 collate utf8_bin NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `grouphostdir` (`groupname`,`hostname`,`dirname`),
+ KEY `hostname` (`hostname`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `storagegroup`
+--
+
+LOCK TABLES `storagegroup` WRITE;
+/*!40000 ALTER TABLE `storagegroup` DISABLE KEYS */;
+INSERT INTO `storagegroup` VALUES (1,'Default','larch5','/myth/tv/');
+/*!40000 ALTER TABLE `storagegroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `tvchain`
+--
+
+DROP TABLE IF EXISTS `tvchain`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `tvchain` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `chainid` varchar(128) NOT NULL default '',
+ `chainpos` int(10) NOT NULL default '0',
+ `discontinuity` tinyint(1) NOT NULL default '0',
+ `watching` int(10) NOT NULL default '0',
+ `hostprefix` varchar(128) NOT NULL default '',
+ `cardtype` varchar(32) NOT NULL default 'V4L',
+ `input` varchar(32) NOT NULL default '',
+ `channame` varchar(32) NOT NULL default '',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ PRIMARY KEY (`chanid`,`starttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `tvchain`
+--
+
+LOCK TABLES `tvchain` WRITE;
+/*!40000 ALTER TABLE `tvchain` DISABLE KEYS */;
+/*!40000 ALTER TABLE `tvchain` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `tvosdmenu`
+--
+
+DROP TABLE IF EXISTS `tvosdmenu`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `tvosdmenu` (
+ `osdcategory` varchar(32) NOT NULL,
+ `livetv` tinyint(4) NOT NULL default '0',
+ `recorded` tinyint(4) NOT NULL default '0',
+ `video` tinyint(4) NOT NULL default '0',
+ `dvd` tinyint(4) NOT NULL default '0',
+ `description` varchar(32) NOT NULL,
+ PRIMARY KEY (`osdcategory`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `tvosdmenu`
+--
+
+LOCK TABLES `tvosdmenu` WRITE;
+/*!40000 ALTER TABLE `tvosdmenu` DISABLE KEYS */;
+/*!40000 ALTER TABLE `tvosdmenu` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `upnpmedia`
+--
+
+DROP TABLE IF EXISTS `upnpmedia`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `upnpmedia` (
+ `intid` int(10) unsigned NOT NULL default '0',
+ `class` varchar(64) NOT NULL default '',
+ `itemtype` varchar(128) NOT NULL default '',
+ `parentid` int(10) unsigned NOT NULL default '0',
+ `itemproperties` varchar(255) NOT NULL default '',
+ `filepath` varchar(512) NOT NULL default '',
+ `title` varchar(255) NOT NULL default '',
+ `filename` varchar(512) NOT NULL default '',
+ `coverart` varchar(512) NOT NULL default '',
+ PRIMARY KEY (`intid`),
+ KEY `class` (`class`),
+ KEY `filepath` (`filepath`(333)),
+ KEY `parentid` (`parentid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `upnpmedia`
+--
+
+LOCK TABLES `upnpmedia` WRITE;
+/*!40000 ALTER TABLE `upnpmedia` DISABLE KEYS */;
+/*!40000 ALTER TABLE `upnpmedia` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocast`
+--
+
+DROP TABLE IF EXISTS `videocast`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocast` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `cast` varchar(128) NOT NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocast`
+--
+
+LOCK TABLES `videocast` WRITE;
+/*!40000 ALTER TABLE `videocast` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocast` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocategory`
+--
+
+DROP TABLE IF EXISTS `videocategory`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocategory` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `category` varchar(128) NOT NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocategory`
+--
+
+LOCK TABLES `videocategory` WRITE;
+/*!40000 ALTER TABLE `videocategory` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocategory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocountry`
+--
+
+DROP TABLE IF EXISTS `videocountry`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocountry` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `country` varchar(128) NOT NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocountry`
+--
+
+LOCK TABLES `videocountry` WRITE;
+/*!40000 ALTER TABLE `videocountry` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocountry` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videogenre`
+--
+
+DROP TABLE IF EXISTS `videogenre`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videogenre` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `genre` varchar(128) NOT NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videogenre`
+--
+
+LOCK TABLES `videogenre` WRITE;
+/*!40000 ALTER TABLE `videogenre` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videogenre` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadata`
+--
+
+DROP TABLE IF EXISTS `videometadata`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadata` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `title` varchar(128) NOT NULL,
+ `subtitle` text NOT NULL,
+ `director` varchar(128) NOT NULL,
+ `plot` text,
+ `rating` varchar(128) NOT NULL,
+ `inetref` varchar(255) NOT NULL,
+ `homepage` text NOT NULL,
+ `year` int(10) unsigned NOT NULL,
+ `releasedate` date NOT NULL,
+ `userrating` float NOT NULL,
+ `length` int(10) unsigned NOT NULL,
+ `season` smallint(5) unsigned NOT NULL default '0',
+ `episode` smallint(5) unsigned NOT NULL default '0',
+ `showlevel` int(10) unsigned NOT NULL,
+ `filename` text NOT NULL,
+ `hash` varchar(128) NOT NULL,
+ `coverfile` text NOT NULL,
+ `childid` int(11) NOT NULL default '-1',
+ `browse` tinyint(1) NOT NULL default '1',
+ `watched` tinyint(1) NOT NULL default '0',
+ `playcommand` varchar(255) default NULL,
+ `category` int(10) unsigned NOT NULL default '0',
+ `trailer` text,
+ `host` text NOT NULL,
+ `screenshot` text,
+ `banner` text,
+ `fanart` text,
+ `insertdate` timestamp NULL default CURRENT_TIMESTAMP,
+ PRIMARY KEY (`intid`),
+ KEY `director` (`director`),
+ KEY `title` (`title`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadata`
+--
+
+LOCK TABLES `videometadata` WRITE;
+/*!40000 ALTER TABLE `videometadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatacast`
+--
+
+DROP TABLE IF EXISTS `videometadatacast`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatacast` (
+ `idvideo` int(10) unsigned NOT NULL,
+ `idcast` int(10) unsigned NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatacast`
+--
+
+LOCK TABLES `videometadatacast` WRITE;
+/*!40000 ALTER TABLE `videometadatacast` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatacast` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatacountry`
+--
+
+DROP TABLE IF EXISTS `videometadatacountry`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatacountry` (
+ `idvideo` int(10) unsigned NOT NULL,
+ `idcountry` int(10) unsigned NOT NULL,
+ KEY `idvideo` (`idvideo`),
+ KEY `idcountry` (`idcountry`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatacountry`
+--
+
+LOCK TABLES `videometadatacountry` WRITE;
+/*!40000 ALTER TABLE `videometadatacountry` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatacountry` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatagenre`
+--
+
+DROP TABLE IF EXISTS `videometadatagenre`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatagenre` (
+ `idvideo` int(10) unsigned NOT NULL,
+ `idgenre` int(10) unsigned NOT NULL,
+ KEY `idvideo` (`idvideo`),
+ KEY `idgenre` (`idgenre`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatagenre`
+--
+
+LOCK TABLES `videometadatagenre` WRITE;
+/*!40000 ALTER TABLE `videometadatagenre` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatagenre` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videosource`
+--
+
+DROP TABLE IF EXISTS `videosource`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videosource` (
+ `sourceid` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) NOT NULL default '',
+ `xmltvgrabber` varchar(128) default NULL,
+ `userid` varchar(128) NOT NULL default '',
+ `freqtable` varchar(16) NOT NULL default 'default',
+ `lineupid` varchar(64) default NULL,
+ `password` varchar(64) default NULL,
+ `useeit` smallint(6) NOT NULL default '0',
+ `configpath` varchar(4096) default NULL,
+ `dvb_nit_id` int(6) default '-1',
+ PRIMARY KEY (`sourceid`),
+ UNIQUE KEY `name` (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videosource`
+--
+
+LOCK TABLES `videosource` WRITE;
+/*!40000 ALTER TABLE `videosource` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videosource` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videotypes`
+--
+
+DROP TABLE IF EXISTS `videotypes`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videotypes` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `extension` varchar(128) NOT NULL,
+ `playcommand` varchar(255) NOT NULL,
+ `f_ignore` tinyint(1) default NULL,
+ `use_default` tinyint(1) default NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videotypes`
+--
+
+LOCK TABLES `videotypes` WRITE;
+/*!40000 ALTER TABLE `videotypes` DISABLE KEYS */;
+INSERT INTO `videotypes` VALUES (1,'txt','',1,0),(2,'log','',1,0),(3,'mpg','Internal',0,0),(4,'avi','',0,1),(5,'vob','Internal',0,0),(6,'mpeg','Internal',0,0),(7,'VIDEO_TS','Internal',0,0),(8,'iso','Internal',0,0),(9,'img','Internal',0,0),(10,'mkv','Internal',0,1),(11,'mp4','Internal',0,0),(12,'m2ts','Internal',0,0),(13,'evo','Internal',0,0),(14,'divx','Internal',0,0),(15,'mov','Internal',0,0),(16,'qt','Internal',0,0),(17,'wmv','Internal',0,0),(18,'3gp','Internal',0,0),(19,'asf','Internal',0,0),(20,'ogg','Internal',0,0),(21,'ogm','Internal',0,0),(22,'flv','Internal',0,0);
+/*!40000 ALTER TABLE `videotypes` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weatherdatalayout`
+--
+
+DROP TABLE IF EXISTS `weatherdatalayout`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weatherdatalayout` (
+ `location` varchar(64) NOT NULL,
+ `dataitem` varchar(64) NOT NULL,
+ `weatherscreens_screen_id` int(10) unsigned NOT NULL,
+ `weathersourcesettings_sourceid` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`location`,`dataitem`,`weatherscreens_screen_id`,`weathersourcesettings_sourceid`),
+ KEY `weatherdatalayout_FKIndex1` (`weatherscreens_screen_id`),
+ KEY `weatherdatalayout_FKIndex2` (`weathersourcesettings_sourceid`),
+ CONSTRAINT `weatherdatalayout_ibfk_1` FOREIGN KEY (`weatherscreens_screen_id`) REFERENCES `weatherscreens` (`screen_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `weatherdatalayout_ibfk_2` FOREIGN KEY (`weathersourcesettings_sourceid`) REFERENCES `weathersourcesettings` (`sourceid`) ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weatherdatalayout`
+--
+
+LOCK TABLES `weatherdatalayout` WRITE;
+/*!40000 ALTER TABLE `weatherdatalayout` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weatherdatalayout` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weatherscreens`
+--
+
+DROP TABLE IF EXISTS `weatherscreens`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weatherscreens` (
+ `screen_id` int(10) unsigned NOT NULL auto_increment,
+ `draworder` int(10) unsigned NOT NULL,
+ `container` varchar(64) NOT NULL,
+ `hostname` varchar(64) default NULL,
+ `units` tinyint(3) unsigned NOT NULL,
+ PRIMARY KEY (`screen_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weatherscreens`
+--
+
+LOCK TABLES `weatherscreens` WRITE;
+/*!40000 ALTER TABLE `weatherscreens` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weatherscreens` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weathersourcesettings`
+--
+
+DROP TABLE IF EXISTS `weathersourcesettings`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weathersourcesettings` (
+ `sourceid` int(10) unsigned NOT NULL auto_increment,
+ `source_name` varchar(64) NOT NULL,
+ `update_timeout` int(10) unsigned NOT NULL default '600',
+ `retrieve_timeout` int(10) unsigned NOT NULL default '60',
+ `hostname` varchar(64) default NULL,
+ `path` varchar(255) default NULL,
+ `author` varchar(128) default NULL,
+ `version` varchar(32) default NULL,
+ `email` varchar(255) default NULL,
+ `types` mediumtext,
+ `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ PRIMARY KEY (`sourceid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weathersourcesettings`
+--
+
+LOCK TABLES `weathersourcesettings` WRITE;
+/*!40000 ALTER TABLE `weathersourcesettings` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weathersourcesettings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `websites`
+--
+
+DROP TABLE IF EXISTS `websites`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `websites` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `category` varchar(100) NOT NULL,
+ `name` varchar(100) NOT NULL,
+ `url` varchar(255) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `websites`
+--
+
+LOCK TABLES `websites` WRITE;
+/*!40000 ALTER TABLE `websites` DISABLE KEYS */;
+/*!40000 ALTER TABLE `websites` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2010-05-23 1:43:44
diff --git a/abs/core/mythdb-initial/mythdb.install b/abs/core/mythdb-initial/mythdb.install
new file mode 100755
index 0000000..a4dcb84
--- /dev/null
+++ b/abs/core/mythdb-initial/mythdb.install
@@ -0,0 +1,35 @@
+mydate=`date +%m-%d-%y`
+HOST=`hostname`
+post_install() {
+#echo backup the old database
+ mysqldump mythconverg >/data/database/mythconverg.${mydate}.sql
+# echo dropping the old database
+ mysql -u root -e 'drop database mythconverg;'
+ mysql -u root -e 'create database mythconverg;'
+ echo installing the default database
+ if [ $HOST = 'larch5' ]
+ then
+ cp /data/database/mc.sql.initial /data/database/mc.sql.fixed
+ cp /data/database/permissions.sql /data/database/permissions.sql.fixed
+ cp /data/database/custom.sql /data/database/custom.sql.fixed
+ else
+ sed -e "s/larch5/$HOST/g" /data/database/mc.sql.initial > /data/database/mc.sql.fixed
+ sed -e "s/larch5/$HOST/g" /data/database/permissions.sql > /data/database/permissions.sql.fixed
+ sed -e "s/larch5/$HOST/g" /data/database/custom.sql > /data/database/custom.sql.fixed
+
+ fi
+
+ mysql mythconverg < /data/database/mc.sql.fixed 2>/dev/null
+ mysql < /data/database/permissions.sql.fixed 2>/dev/null
+ mysql mythconverg < /data/database/custom.sql.fixed 2>/dev/null
+
+ rm /data/database/mc.sql.initial
+ rm /data/database/custom.sql.fixed
+}
+post_upgrade() {
+ echo "nothing to do"
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythdb-initial/permissions.sql b/abs/core/mythdb-initial/permissions.sql
new file mode 100755
index 0000000..5a36e15
--- /dev/null
+++ b/abs/core/mythdb-initial/permissions.sql
@@ -0,0 +1,11 @@
+
+GRANT ALL ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
+GRANT ALL ON mythconverg.* TO mythtv@'%' IDENTIFIED BY "mythtv";
+GRANT ALL ON mythconverg.* TO mythtv@myhost IDENTIFIED BY "mythtv";
+GRANT FILE ON *.* TO 'mythtv'@'%';
+FLUSH PRIVILEGES;
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@'%' IDENTIFIED BY "mythtv";
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@myhost IDENTIFIED BY "mythtv";
+FLUSH PRIVILEGES;
+ALTER DATABASE mythconverg DEFAULT CHARACTER SET latin1;
diff --git a/abs/core/mythstream/PKGBUILD b/abs/core/mythstream/PKGBUILD
new file mode 100644
index 0000000..5137b99
--- /dev/null
+++ b/abs/core/mythstream/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythstream
+pkgver=0.18_3
+pkgrel=10
+pkgdesc="Unofficial MythTV plugin for Internet audio and video streams."
+arch=('i686' 'x86_64')
+url="http://home.kabelfoon.nl/~moongies/streamtuned.html"
+license=('GPL')
+depends=('mythtv' 'perl-xml-simple' 'fftw' 'fftw2' 'perl-xml-xql')
+source=("http://home.kabelfoon.nl/~moongies/sw9vc4htz2/mythstream_mythtv-r21640.tar.gz" "mythstream.patch" "streams.res")
+md5sums=('')
+install=mythstream.install
+groups=('mythtv-extras')
+install=mythstream.install
+
+build() {
+ cd $startdir/src/mythstream_mythtv-r21640
+ ln -s ../../../mythtv/stable-0.23/mythtv/src/mythtv/libs/lib* .
+
+ patch -p1 < ../mythstream.patch || return 1
+
+ export QTDIR=/usr/lib/qt
+ export PATH=$QTDIR/bin:$PATH
+
+ qmake mythstream.pro
+ make qmake || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+ cp $srcdir/streams.res $pkgdir/usr/share/mythtv/mythstream
+}
+
+md5sums=('ba354b83fefe6028c5379fb832a44b6a'
+ '0131d9e05b55141357bc66e2a88a8132'
+ 'b7fb47a56b6809938f237632174faeb2')
diff --git a/abs/core/mythstream/mythstream.install b/abs/core/mythstream/mythstream.install
new file mode 100644
index 0000000..3b87835
--- /dev/null
+++ b/abs/core/mythstream/mythstream.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ mv /usr/share/mythtv/themes/defaultmenu/is.xml /tmp
+ grep -v -e /mythmenu /tmp/is.xml > /tmp/is.xml.tmp
+ echo "<!--#MythStream-->" >> /tmp/is.xml.tmp
+ echo " <button>" >> /tmp/is.xml.tmp
+ echo " <type>STREAM</type>" >> /tmp/is.xml.tmp
+ echo " <text>MythStream</text>" >> /tmp/is.xml.tmp
+ echo " <action>PLUGIN mythstream</action>" >> /tmp/is.xml.tmp
+ echo " </button>" >> /tmp/is.xml.tmp
+ echo "<!--#MythStream-->" >> /tmp/is.xml.tmp
+ echo "" >> /tmp/is.xml.tmp
+ echo "</mythmenu>" >> /tmp/is.xml.tmp
+ mv /tmp/is.xml.tmp /usr/share/mythtv/themes/defaultmenu/is.xml
+}
+post_remove() {
+ mv /usr/share/mythtv/themes/defaultmenu/is.xml /tmp/is.xml.tmp
+ sed -e '/\#MythStream/,/\#MythStream/d' < /tmp/is.xml.tmp > /usr/share/mythtv/themes/defaultmenu/is.xml
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythstream/mythstream.patch b/abs/core/mythstream/mythstream.patch
new file mode 100644
index 0000000..facc1aa
--- /dev/null
+++ b/abs/core/mythstream/mythstream.patch
@@ -0,0 +1,12 @@
+diff -Naur mythstream_mythtv-r21640-old/libs/harvester.h mythstream_mythtv-r21640-new/libs/harvester.h
+--- mythstream_mythtv-r21640-old/libs/harvester.h 2009-10-13 14:49:54.000000000 -0700
++++ mythstream_mythtv-r21640-new/libs/harvester.h 2009-10-13 14:50:38.000000000 -0700
+@@ -23,7 +23,7 @@
+ #include <q3process.h>
+ #include <qthread.h>
+ #include <q3process.h>
+-#include <qhttp.h>
++#include <QtNetwork/qhttp.h>
+ #include <q3dict.h>
+ #include <qmap.h>
+ //Added by qt3to4:
diff --git a/abs/core/mythstream/streams.res b/abs/core/mythstream/streams.res
new file mode 100644
index 0000000..1e48084
--- /dev/null
+++ b/abs/core/mythstream/streams.res
@@ -0,0 +1,281 @@
+
+
+[item]
+Interaction
+Apple movie trailers
+whatever
+trailers
+*apple
+
+[item]
+Interaction
+Browse Shoutcast genres
+http://www.shoutcast.com
+[emptystring]
+*shoutcast/menu
+
+[item]
+Interaction
+Uitzending gemist - laatste uitzendingen (Dutch)
+http://www.uitzendinggemist.nl
+Uitzending gemist selectie
+omroep/menu
+
+[item]
+Interaction
+World Wide Media Project
+[emptystring]
+[emptystring]
+*wwmp/menu
+
+[item]
+Interaction
+tv-links - Monty Python's Flying Circus
+http://tv-links.co.uk/listings/1/2526
+[emptystring]
+tvlinks/listing
+
+[item]
+Interaction
+wwiTV list
+http://wwitv.com/television/tvbar.htm
+List of television stations
+wwitv/countries
+
+[item]
+Podcast feeds
+Beercasting
+http://beercasting.com/rss.xml
+(podcast)
+podcast
+
+[item]
+Podcast feeds
+Feed me weird things
+http://del.icio.us/rss/audio/feedmeweirdthings
+(podcast) http://del.icio.us/rss/audio/feedmeweirdthings
+rdfcast
+
+[item]
+Podcast feeds
+SETI Institute
+http://podcast.seti.org/index.xml
+podcast
+podcast
+
+[item]
+Radio
+BBC World Service
+http://www.bbc.co.uk/worldservice/meta/tx/nb/live_news_au_nb.ram
+International
+[emptystring]
+
+[item]
+Radio
+DR R&B, Denmark
+http://www.dr.dk/netradio/Metafiler/ASX/DR_RogB_128.asx
+Copenhagen, Denmark
+[emptystring]
+
+[item]
+Radio
+Energy Black, Switzerland
+http://broadcast.infomaniak.ch/energyblack-high.mp3.m3u
+Zurich, Switzerland
+[emptystring]
+
+[item]
+Radio
+Fun Radio, belgium
+http://www.funradio.be/funradiobe-low.high.pls
+[emptystring]
+[emptystring]
+
+[item]
+Radio
+Juventus Radio
+http://live.juventus.hu:8000/live.m3u
+Budapest, Hungary
+[emptystring]
+
+[item]
+Radio
+Shoutcast Country
+http://www.shoutcast.com/directory/index.phtml?sgenre=Country&numresult=50
+Country music stations
+shoutcast
+
+[item]
+Radio
+Shoutcast Rock
+http://www.shoutcast.com/directory/index.phtml?sgenre=Rock&numresult=50
+Shoutcast Rock stations
+shoutcast
+
+[item]
+Radio
+The Voice, Norway
+http://213.158.233.199:6006/listen.pls
+Oslo, Norway
+[emptystring]
+
+[item]
+Radio
+WGBH, Boston
+http://streams.wgbh.org/classical.pls
+Boston, Massachusetts
+[emptystring]
+
+[item]
+Radio
+WholeWheatRadio stream
+http://64.62.252.134:2680/listen.pls
+[emptystring]
+[emptystring]
+
+[item]
+TV
+Holland Doc
+mms://livemedia.omroep.nl/vprohollanddoc-bb
+Nederland 4 themakanaal
+[emptystring]
+
+[item]
+TV
+NASA TV
+http://www.nasa.gov/ram/35037main_portal.ram
+[emptystring]
+[emptystring]
+
+[item]
+TV
+NRK News TV
+mms://media00.nrk.no/mms2/nydi/AutoEnc/mn1840.wmv
+Norwegen
+[emptystring]
+
+[item]
+TV
+National Nine News TV
+mms://broadband.netshow.ninemsn.com.au/broadband/news/story1.wmv
+Australia
+[emptystring]
+
+[item]
+TV
+RBC TV
+http://tv.gldn.net:80/rbc
+Russia
+[emptystring]
+
+[item]
+TV
+Tweede Kamer
+mms://213.75.12.78/TKStream3
+Dutch Parliament
+[emptystring]
+
+[item]
+TV
+Uitzending gemist RSS feed
+http://www.uitzendinggemist.nl/index.php/rss
+Laatste uitzendingen
+omroep/rss
+
+[item]
+TV
+United Nations TV
+rtsp://a4.l878435134.c8784.g.lr.akamaistream.net/live/D/4/8784/v0001/reflector:35134
+[emptystring]
+[emptystring]
+
+[item]
+TV
+VPro 3Voor12 Central TV
+mms://livemedia.omroep.nl/vpro3voor12tvcentral-bb
+http://3voor12.vpro.nl
+[emptystring]
+
+[item]
+TV
+VPro 3Voor12 on Stage TV
+mms://livemedia.omroep.nl/vpro3voor12tvonstage-bb
+[emptystring]
+[emptystring]
+
+[item]
+TV
+YLE 24 News TV
+http://ra.yle.fi/ramgen/yle24/video/uusin_rk.rm
+Finland
+[emptystring]
+
+[item]
+TV
+Yomiuri News TV
+http://www.yomiuri.co.jp/stream/vnews/vnews-w.asx
+Japan
+[emptystring]
+
+[item]
+Video
+DailyMotion custom search
+http://www.dailymotion.com/rss/relevance/search/<:search term::funny:>/<:page::1:>
+Edit search term with virtual keyboard
+dailymotion/playall
+
+[item]
+Video
+DailyMotion playlist demo: Alicia Keys Live
+http://www.dailymotion.com/rss/relevance/search/Alicia+Keys+live/1
+Mark streams (M) and play
+dailymotion/playall
+
+[item]
+Video
+Dailymotion download and play: VH1/1
+http://www.dailymotion.com/rss/relevance/search/vh1/1
+[emptystring]
+dailymotion/feed
+
+[item]
+Video
+Dailymotion playlist demo: Amy Winehouse
+http://www.dailymotion.com/rss/relevance/search/Amy+Winehouse+live/1
+Mark streams (M) and play
+dailymotion/playall
+
+[item]
+Video
+YouTube top viewed today
+http://youtube.com/rss/global/top_viewed_today.rss
+Voor andere feeds zie youtube
+youtube/feed
+
+[item]
+stream lists
+Icecast list
+http://dir.xiph.org/yp.xml
+Harvested with icecast.pl script
+icecast
+
+[item]
+stream lists
+OperaCast list
+http://www.operacast.com/opstations.htm
+Stationlist from www.operacast.com
+operacast
+
+[item]
+stream lists
+Operanut list (default parser)
+http://operanut.com/radio.htm
+Some dead streams
+[emptystring]
+
+[item]
+stream lists
+Robins BBC parser
+ask the parser :)
+BBC parsing by Robin Gilks
+*bbc/robins_links
diff --git a/abs/core/mythtv/old/stable-0.21/glass-wide/PKGBUILD b/abs/core/mythtv/old/stable-0.21/glass-wide/PKGBUILD
new file mode 100644
index 0000000..2d0cb11
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/glass-wide/PKGBUILD
@@ -0,0 +1,15 @@
+pkgname=glass-wide
+pkgver=1
+pkgrel=1
+pkgdesc="glass-wide theme for mythtv .21 ."
+arch=('i686' 'x86_64')
+license=('GPL2')
+url="unkown"
+source="http://iw.net/~brfransen/myth/glass-wide.tar.gz"
+
+build() {
+ cd $startdir/src/
+ mkdir -p $startdir/pkg/usr/share/mythtv/themes
+ cp -a glass-wide $startdir/pkg/usr/share/mythtv/themes
+ rm -rf $startdir/pkg/usr/shar/mythtv/themes/.DS_Store
+}
diff --git a/abs/core/mythtv/old/stable-0.21/morethemes/PKGBUILD b/abs/core/mythtv/old/stable-0.21/morethemes/PKGBUILD
new file mode 100644
index 0000000..dd05575
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/morethemes/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=morethemes
+pkgver=0.21
+pkgrel=1
+pkgdesc="Additional themes for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org/"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/${pkgname}.tar.bz2")
+md5sums=('53f87f0498bc516585df78ff932785f4')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/themes
+ . /etc/profile.d/qt3.sh
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ ./configure --prefix=/usr || return 1
+
+ qmake $pkgname.pro
+ make qmake || return 1
+ make || return 1
+
+ # basic install
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mytharchive/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mytharchive/PKGBUILD
new file mode 100644
index 0000000..4862a1f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mytharchive/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mytharchive
+pkgver=0.21
+pkgrel=10
+pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows."
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'libxmu' 'libjpeg6' 'mysql-python' 'pil' 'dvdauthor' 'mjpegtools' 'transcode')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+ svn update
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+
+ sed -i 's#kde3#kde#' configure || return 1
+ ./configure --prefix=/usr --enable-opengl --disable-all \
+ --enable-create-archive --enable-create-dvd --enable-mytharchive || return 1
+
+ qmake mythplugins.pro || return 1
+ make qmake || return 1
+ sed -i 's#kde3#kde#' ./mytharchive/mytharchive/Makefile || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythbrowser/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythbrowser/PKGBUILD
new file mode 100644
index 0000000..51a27d2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythbrowser/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 7374 2008-07-31 06:53:36Z eric $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythbrowser
+pkgver=0.21
+pkgrel=6
+pkgdesc="Mini web browser for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'wget' 'libxvmc' 'kdelibs3' 'qt3')
+groups=('mythtv-extras')
+options=('!makeflags')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+ . /etc/profile.d/kde3.sh
+ svn update
+ sed -i 's#kde3#kde#' configure || return 1
+ ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythbrowser || return 1
+
+ qmake mythplugins.pro || return 1
+ make qmake || return 1
+ sed -i 's#kde3#kde#' ./mythbrowser/mythbrowser/Makefile || return 1
+ make || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythcontrols/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythcontrols/PKGBUILD
new file mode 100644
index 0000000..669278c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythcontrols/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythcontrols
+pkgver=0.21
+pkgrel=4
+pkgdesc="Experimental controls for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+options=('!makeflags')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+ svn update
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ ./configure --prefix=/usr --disable-all --enable-opengl --enable-mythcontrols
+
+ qmake mythplugins.pro
+ make qmake || return 1
+ make || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythdb-initial/PKGBUILD
new file mode 100755
index 0000000..aa1feef
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/PKGBUILD
@@ -0,0 +1,21 @@
+pkgname=mythdb-initial
+pkgver=1
+pkgrel=42
+pkgdesc="setup the initial mythtv database for linhes"
+url=""
+license=""
+depends=(mysql)
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+install=mythdb.install
+source=(mc.sql permissions.sql)
+md5sums=()
+arch=('i686')
+build() {
+ cd $startdir/src
+ mkdir -p $startdir/pkg/data/database
+ cp mc.sql $startdir/pkg/data/database/mc.sql.initial
+ cp permissions.sql $startdir/pkg/data/database/permissions.sql
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/__changelog b/abs/core/mythtv/old/stable-0.21/mythdb-initial/__changelog
new file mode 100644
index 0000000..c53f2f6
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/__changelog
@@ -0,0 +1,25 @@
+
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('Hostpluginmytharchive','1','larch5'),
+('Hostpluginmythbrowser','1','larch5'),
+('Hostpluginmythcontrols','1','larch5'),
+('Hostpluginmythflix','1','larch5'),
+('Hostpluginmythgallery','1','larch5'),
+('Hostpluginmythgame','1','larch5'),
+('HostpluginmythgameFceu','1','larch5'),
+('HostpluginmythgameMame','1','larch5'),
+('HostpluginmythgameZsnes','1','larch5'),
+('Hostpluginmythmovietime','1','larch5'),
+('Hostpluginmythmusic','1','larch5'),
+('Hostpluginmythnews','1','larch5'),
+('Hostpluginmythphone','1','larch5'),
+('Hostpluginmythsmolt','1','larch5'),
+('Hostpluginmythvideo','1','larch5'),
+('Hostpluginmythvideo_dvdcss','0','larch5'),
+('Hostpluginmythweather','1','larch5'),
+('HostAudiotype','ALSA','larch5')
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('WOLbackendReconnectWaitTime','5',NULL);
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/mc.sql b/abs/core/mythtv/old/stable-0.21/mythdb-initial/mc.sql
new file mode 100644
index 0000000..cdb22d4
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/mc.sql
@@ -0,0 +1,2835 @@
+-- MySQL dump 10.11
+--
+-- Host: localhost Database: mythconverg
+-- ------------------------------------------------------
+-- Server version 5.0.60
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `archiveitems`
+--
+
+DROP TABLE IF EXISTS `archiveitems`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `archiveitems` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `type` set('Recording','Video','File') default NULL,
+ `title` varchar(128) default NULL,
+ `subtitle` varchar(128) default NULL,
+ `description` text,
+ `startdate` varchar(30) default NULL,
+ `starttime` varchar(30) default NULL,
+ `size` bigint(20) unsigned NOT NULL,
+ `filename` text NOT NULL,
+ `hascutlist` tinyint(1) NOT NULL default '0',
+ `cutlist` text,
+ PRIMARY KEY (`intid`),
+ KEY `title` (`title`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `archiveitems`
+--
+
+LOCK TABLES `archiveitems` WRITE;
+/*!40000 ALTER TABLE `archiveitems` DISABLE KEYS */;
+/*!40000 ALTER TABLE `archiveitems` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `callsignnetworkmap`
+--
+
+DROP TABLE IF EXISTS `callsignnetworkmap`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `callsignnetworkmap` (
+ `id` int(11) NOT NULL auto_increment,
+ `callsign` varchar(20) NOT NULL default '',
+ `network` varchar(20) NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `callsign` (`callsign`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `callsignnetworkmap`
+--
+
+LOCK TABLES `callsignnetworkmap` WRITE;
+/*!40000 ALTER TABLE `callsignnetworkmap` DISABLE KEYS */;
+/*!40000 ALTER TABLE `callsignnetworkmap` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `capturecard`
+--
+
+DROP TABLE IF EXISTS `capturecard`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `capturecard` (
+ `cardid` int(10) unsigned NOT NULL auto_increment,
+ `videodevice` varchar(128) default NULL,
+ `audiodevice` varchar(128) default NULL,
+ `vbidevice` varchar(128) default NULL,
+ `cardtype` varchar(32) default 'V4L',
+ `defaultinput` varchar(32) default 'Television',
+ `audioratelimit` int(11) default NULL,
+ `hostname` varchar(255) default NULL,
+ `dvb_swfilter` int(11) default '0',
+ `dvb_sat_type` int(11) NOT NULL default '0',
+ `dvb_wait_for_seqstart` int(11) NOT NULL default '1',
+ `skipbtaudio` tinyint(1) default '0',
+ `dvb_on_demand` tinyint(4) NOT NULL default '0',
+ `dvb_diseqc_type` smallint(6) default NULL,
+ `firewire_port` int(10) unsigned NOT NULL default '0',
+ `firewire_node` int(10) unsigned NOT NULL default '2',
+ `firewire_speed` int(10) unsigned NOT NULL default '0',
+ `firewire_model` varchar(32) default NULL,
+ `firewire_connection` int(10) unsigned NOT NULL default '0',
+ `dbox2_port` int(10) unsigned NOT NULL default '31338',
+ `dbox2_httpport` int(10) unsigned NOT NULL default '80',
+ `dbox2_host` varchar(32) default NULL,
+ `signal_timeout` int(11) NOT NULL default '1000',
+ `channel_timeout` int(11) NOT NULL default '3000',
+ `dvb_tuning_delay` int(10) unsigned NOT NULL default '0',
+ `contrast` int(11) NOT NULL default '0',
+ `brightness` int(11) NOT NULL default '0',
+ `colour` int(11) NOT NULL default '0',
+ `hue` int(11) NOT NULL default '0',
+ `diseqcid` int(10) unsigned default NULL,
+ `dvb_eitscan` tinyint(1) NOT NULL default '1',
+ PRIMARY KEY (`cardid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `capturecard`
+--
+
+LOCK TABLES `capturecard` WRITE;
+/*!40000 ALTER TABLE `capturecard` DISABLE KEYS */;
+/*!40000 ALTER TABLE `capturecard` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `cardinput`
+--
+
+DROP TABLE IF EXISTS `cardinput`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `cardinput` (
+ `cardinputid` int(10) unsigned NOT NULL auto_increment,
+ `cardid` int(10) unsigned NOT NULL default '0',
+ `sourceid` int(10) unsigned NOT NULL default '0',
+ `inputname` varchar(32) NOT NULL default '',
+ `externalcommand` varchar(128) default NULL,
+ `preference` int(11) NOT NULL default '0',
+ `shareable` char(1) default 'N',
+ `tunechan` varchar(10) default NULL,
+ `startchan` varchar(10) default NULL,
+ `freetoaironly` tinyint(1) default '1',
+ `diseqc_port` smallint(6) default NULL,
+ `diseqc_pos` float default NULL,
+ `lnb_lof_switch` int(11) default '11700000',
+ `lnb_lof_hi` int(11) default '10600000',
+ `lnb_lof_lo` int(11) default '9750000',
+ `displayname` varchar(64) NOT NULL default '',
+ `radioservices` tinyint(1) default '1',
+ `dishnet_eit` tinyint(1) NOT NULL default '0',
+ `recpriority` int(11) NOT NULL default '0',
+ `quicktune` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`cardinputid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `cardinput`
+--
+
+LOCK TABLES `cardinput` WRITE;
+/*!40000 ALTER TABLE `cardinput` DISABLE KEYS */;
+/*!40000 ALTER TABLE `cardinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channel`
+--
+
+DROP TABLE IF EXISTS `channel`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channel` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `channum` varchar(10) NOT NULL default '',
+ `freqid` varchar(10) default NULL,
+ `sourceid` int(10) unsigned default NULL,
+ `callsign` varchar(20) NOT NULL default '',
+ `name` varchar(64) NOT NULL default '',
+ `icon` varchar(255) NOT NULL default 'none',
+ `finetune` int(11) default NULL,
+ `videofilters` varchar(255) NOT NULL default '',
+ `xmltvid` varchar(64) NOT NULL default '',
+ `recpriority` int(10) NOT NULL default '0',
+ `contrast` int(11) default '32768',
+ `brightness` int(11) default '32768',
+ `colour` int(11) default '32768',
+ `hue` int(11) default '32768',
+ `tvformat` varchar(10) NOT NULL default 'Default',
+ `commfree` tinyint(4) NOT NULL default '0',
+ `visible` tinyint(1) NOT NULL default '1',
+ `outputfilters` varchar(255) NOT NULL default '',
+ `useonairguide` tinyint(1) default '0',
+ `mplexid` smallint(6) default NULL,
+ `serviceid` mediumint(8) unsigned default NULL,
+ `atscsrcid` int(11) default NULL,
+ `tmoffset` int(11) NOT NULL default '0',
+ `atsc_major_chan` int(10) unsigned NOT NULL default '0',
+ `atsc_minor_chan` int(10) unsigned NOT NULL default '0',
+ `last_record` datetime NOT NULL,
+ `default_authority` varchar(32) NOT NULL default '',
+ `commmethod` int(11) NOT NULL default '-1',
+ PRIMARY KEY (`chanid`),
+ KEY `channel_src` (`channum`,`sourceid`),
+ KEY `sourceid` (`sourceid`,`xmltvid`,`chanid`),
+ KEY `visible` (`visible`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channel`
+--
+
+LOCK TABLES `channel` WRITE;
+/*!40000 ALTER TABLE `channel` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channel` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `codecparams`
+--
+
+DROP TABLE IF EXISTS `codecparams`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `codecparams` (
+ `profile` int(10) unsigned NOT NULL default '0',
+ `name` varchar(128) NOT NULL default '',
+ `value` varchar(128) default NULL,
+ PRIMARY KEY (`profile`,`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `codecparams`
+--
+
+LOCK TABLES `codecparams` WRITE;
+/*!40000 ALTER TABLE `codecparams` DISABLE KEYS */;
+/*!40000 ALTER TABLE `codecparams` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `credits`
+--
+
+DROP TABLE IF EXISTS `credits`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `credits` (
+ `person` mediumint(8) unsigned NOT NULL default '0',
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `role` set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') NOT NULL default '',
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`person`,`role`),
+ KEY `person` (`person`,`role`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `credits`
+--
+
+LOCK TABLES `credits` WRITE;
+/*!40000 ALTER TABLE `credits` DISABLE KEYS */;
+/*!40000 ALTER TABLE `credits` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `customexample`
+--
+
+DROP TABLE IF EXISTS `customexample`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `customexample` (
+ `rulename` varchar(64) NOT NULL,
+ `fromclause` text NOT NULL,
+ `whereclause` text NOT NULL,
+ `search` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`rulename`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `customexample`
+--
+
+LOCK TABLES `customexample` WRITE;
+/*!40000 ALTER TABLE `customexample` DISABLE KEYS */;
+INSERT INTO `customexample` (`rulename`, `fromclause`, `whereclause`, `search`) VALUES ('New Flix','','program.category_type = \'movie\' AND program.airdate >= \n YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR)) \nAND program.stars > 0.5 ',1);
+/*!40000 ALTER TABLE `customexample` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `diseqc_config`
+--
+
+DROP TABLE IF EXISTS `diseqc_config`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `diseqc_config` (
+ `cardinputid` int(10) unsigned NOT NULL,
+ `diseqcid` int(10) unsigned NOT NULL,
+ `value` varchar(16) NOT NULL default '',
+ KEY `id` (`cardinputid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `diseqc_config`
+--
+
+LOCK TABLES `diseqc_config` WRITE;
+/*!40000 ALTER TABLE `diseqc_config` DISABLE KEYS */;
+/*!40000 ALTER TABLE `diseqc_config` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `diseqc_tree`
+--
+
+DROP TABLE IF EXISTS `diseqc_tree`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `diseqc_tree` (
+ `diseqcid` int(10) unsigned NOT NULL auto_increment,
+ `parentid` int(10) unsigned default NULL,
+ `ordinal` tinyint(3) unsigned NOT NULL,
+ `type` varchar(16) NOT NULL default '',
+ `subtype` varchar(16) NOT NULL default '',
+ `description` varchar(32) NOT NULL default '',
+ `switch_ports` tinyint(3) unsigned NOT NULL default '0',
+ `rotor_hi_speed` float NOT NULL default '0',
+ `rotor_lo_speed` float NOT NULL default '0',
+ `rotor_positions` varchar(255) NOT NULL default '',
+ `lnb_lof_switch` int(10) NOT NULL default '0',
+ `lnb_lof_hi` int(10) NOT NULL default '0',
+ `lnb_lof_lo` int(10) NOT NULL default '0',
+ `cmd_repeat` int(11) NOT NULL default '1',
+ `lnb_pol_inv` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`diseqcid`),
+ KEY `parentid` (`parentid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `diseqc_tree`
+--
+
+LOCK TABLES `diseqc_tree` WRITE;
+/*!40000 ALTER TABLE `diseqc_tree` DISABLE KEYS */;
+/*!40000 ALTER TABLE `diseqc_tree` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `displayprofilegroups`
+--
+
+DROP TABLE IF EXISTS `displayprofilegroups`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `displayprofilegroups` (
+ `name` varchar(128) NOT NULL,
+ `hostname` varchar(255) NOT NULL,
+ `profilegroupid` int(10) unsigned NOT NULL auto_increment,
+ PRIMARY KEY (`name`,`hostname`),
+ UNIQUE KEY `profilegroupid` (`profilegroupid`)
+) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `displayprofilegroups`
+--
+
+LOCK TABLES `displayprofilegroups` WRITE;
+/*!40000 ALTER TABLE `displayprofilegroups` DISABLE KEYS */;
+INSERT INTO `displayprofilegroups` (`name`, `hostname`, `profilegroupid`) VALUES ('CPU++','larch5',1),('CPU+','larch5',2),('CPU--','larch5',3),('High Quality','larch5',4),('Normal','larch5',5),('Slim','larch5',6);
+/*!40000 ALTER TABLE `displayprofilegroups` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `displayprofiles`
+--
+
+DROP TABLE IF EXISTS `displayprofiles`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `displayprofiles` (
+ `profilegroupid` int(10) unsigned NOT NULL,
+ `profileid` int(10) unsigned NOT NULL auto_increment,
+ `value` varchar(128) NOT NULL,
+ `data` varchar(255) NOT NULL default '',
+ KEY `profilegroupid` (`profilegroupid`),
+ KEY `profileid` (`profileid`,`value`),
+ KEY `profileid_2` (`profileid`)
+) ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `displayprofiles`
+--
+
+LOCK TABLES `displayprofiles` WRITE;
+/*!40000 ALTER TABLE `displayprofiles` DISABLE KEYS */;
+INSERT INTO `displayprofiles` (`profilegroupid`, `profileid`, `value`, `data`) VALUES (1,1,'pref_priority','1'),(1,1,'pref_cmp0','> 0 0'),(1,1,'pref_decoder','ffmpeg'),(1,1,'pref_max_cpus','1'),(1,1,'pref_videorenderer','xv-blit'),(1,1,'pref_osdrenderer','softblend'),(1,1,'pref_osdfade','1'),(1,1,'pref_deint0','bobdeint'),(1,1,'pref_deint1','linearblend'),(1,1,'pref_filters',''),(1,2,'pref_priority','2'),(1,2,'pref_cmp0','> 0 0'),(1,2,'pref_decoder','ffmpeg'),(1,2,'pref_max_cpus','1'),(1,2,'pref_videorenderer','quartz-blit'),(1,2,'pref_osdrenderer','softblend'),(1,2,'pref_osdfade','1'),(1,2,'pref_deint0','linearblend'),(1,2,'pref_deint1','linearblend'),(1,2,'pref_filters',''),(2,3,'pref_priority','1'),(2,3,'pref_cmp0','<= 720 576'),(2,3,'pref_cmp1','> 0 0'),(2,3,'pref_decoder','ffmpeg'),(2,3,'pref_max_cpus','1'),(2,3,'pref_videorenderer','xv-blit'),(2,3,'pref_osdrenderer','softblend'),(2,3,'pref_osdfade','1'),(2,3,'pref_deint0','bobdeint'),(2,3,'pref_deint1','linearblend'),(2,3,'pref_filters',''),(2,4,'pref_priority','2'),(2,4,'pref_cmp0','<= 1280 720'),(2,4,'pref_cmp1','> 720 576'),(2,4,'pref_decoder','xvmc'),(2,4,'pref_max_cpus','1'),(2,4,'pref_videorenderer','xvmc-blit'),(2,4,'pref_osdrenderer','opengl'),(2,4,'pref_osdfade','1'),(2,4,'pref_deint0','bobdeint'),(2,4,'pref_deint1','onefield'),(2,4,'pref_filters',''),(2,5,'pref_priority','3'),(2,5,'pref_cmp0','<= 1280 720'),(2,5,'pref_cmp1','> 720 576'),(2,5,'pref_decoder','libmpeg2'),(2,5,'pref_max_cpus','1'),(2,5,'pref_videorenderer','xv-blit'),(2,5,'pref_osdrenderer','softblend'),(2,5,'pref_osdfade','1'),(2,5,'pref_deint0','bobdeint'),(2,5,'pref_deint1','onefield'),(2,5,'pref_filters',''),(2,6,'pref_priority','4'),(2,6,'pref_cmp0','> 0 0'),(2,6,'pref_decoder','xvmc'),(2,6,'pref_max_cpus','1'),(2,6,'pref_videorenderer','xvmc-blit'),(2,6,'pref_osdrenderer','ia44blend'),(2,6,'pref_osdfade','0'),(2,6,'pref_deint0','bobdeint'),(2,6,'pref_deint1','onefield'),(2,6,'pref_filters',''),(2,7,'pref_priority','5'),(2,7,'pref_cmp0','> 0 0'),(2,7,'pref_decoder','libmpeg2'),(2,7,'pref_max_cpus','1'),(2,7,'pref_videorenderer','xv-blit'),(2,7,'pref_osdrenderer','chromakey'),(2,7,'pref_osdfade','0'),(2,7,'pref_deint0','bobdeint'),(2,7,'pref_deint1','onefield'),(2,7,'pref_filters',''),(3,8,'pref_priority','1'),(3,8,'pref_cmp0','<= 720 576'),(3,8,'pref_cmp1','> 0 0'),(3,8,'pref_decoder','ivtv'),(3,8,'pref_max_cpus','1'),(3,8,'pref_videorenderer','ivtv'),(3,8,'pref_osdrenderer','ivtv'),(3,8,'pref_osdfade','1'),(3,8,'pref_deint0','none'),(3,8,'pref_deint1','none'),(3,8,'pref_filters',''),(3,9,'pref_priority','2'),(3,9,'pref_cmp0','<= 720 576'),(3,9,'pref_cmp1','> 0 0'),(3,9,'pref_decoder','xvmc'),(3,9,'pref_max_cpus','1'),(3,9,'pref_videorenderer','xvmc-blit'),(3,9,'pref_osdrenderer','ia44blend'),(3,9,'pref_osdfade','0'),(3,9,'pref_deint0','bobdeint'),(3,9,'pref_deint1','onefield'),(3,9,'pref_filters',''),(3,10,'pref_priority','3'),(3,10,'pref_cmp0','<= 1280 720'),(3,10,'pref_cmp1','> 720 576'),(3,10,'pref_decoder','xvmc'),(3,10,'pref_max_cpus','1'),(3,10,'pref_videorenderer','xvmc-blit'),(3,10,'pref_osdrenderer','ia44blend'),(3,10,'pref_osdfade','0'),(3,10,'pref_deint0','bobdeint'),(3,10,'pref_deint1','onefield'),(3,10,'pref_filters',''),(3,11,'pref_priority','4'),(3,11,'pref_cmp0','> 0 0'),(3,11,'pref_decoder','xvmc'),(3,11,'pref_max_cpus','1'),(3,11,'pref_videorenderer','xvmc-blit'),(3,11,'pref_osdrenderer','ia44blend'),(3,11,'pref_osdfade','0'),(3,11,'pref_deint0','bobdeint'),(3,11,'pref_deint1','onefield'),(3,11,'pref_filters',''),(3,12,'pref_priority','5'),(3,12,'pref_cmp0','> 0 0'),(3,12,'pref_decoder','libmpeg2'),(3,12,'pref_max_cpus','1'),(3,12,'pref_videorenderer','xv-blit'),(3,12,'pref_osdrenderer','chromakey'),(3,12,'pref_osdfade','0'),(3,12,'pref_deint0','none'),(3,12,'pref_deint1','none'),(3,12,'pref_filters',''),(4,13,'pref_priority','1'),(4,13,'pref_cmp0','>= 1920 1080'),(4,13,'pref_decoder','ffmpeg'),(4,13,'pref_max_cpus','2'),(4,13,'pref_videorenderer','xv-blit'),(4,13,'pref_osdrenderer','softblend'),(4,13,'pref_osdfade','1'),(4,13,'pref_deint0','linearblend'),(4,13,'pref_deint1','linearblend'),(4,13,'pref_filters',''),(4,14,'pref_priority','2'),(4,14,'pref_cmp0','> 0 0'),(4,14,'pref_decoder','ffmpeg'),(4,14,'pref_max_cpus','1'),(4,14,'pref_videorenderer','xv-blit'),(4,14,'pref_osdrenderer','softblend'),(4,14,'pref_osdfade','1'),(4,14,'pref_deint0','yadifdoubleprocessdeint'),(4,14,'pref_deint1','yadifdeint'),(4,14,'pref_filters',''),(4,15,'pref_priority','3'),(4,15,'pref_cmp0','>= 1920 1080'),(4,15,'pref_decoder','ffmpeg'),(4,15,'pref_max_cpus','2'),(4,15,'pref_videorenderer','quartz-blit'),(4,15,'pref_osdrenderer','softblend'),(4,15,'pref_osdfade','1'),(4,15,'pref_deint0','linearblend'),(4,15,'pref_deint1','linearblend'),(4,15,'pref_filters',''),(4,16,'pref_priority','4'),(4,16,'pref_cmp0','> 0 0'),(4,16,'pref_decoder','ffmpeg'),(4,16,'pref_max_cpus','1'),(4,16,'pref_videorenderer','quartz-blit'),(4,16,'pref_osdrenderer','softblend'),(4,16,'pref_osdfade','1'),(4,16,'pref_deint0','yadifdoubleprocessdeint'),(4,16,'pref_deint1','yadifdeint'),(4,16,'pref_filters',''),(5,17,'pref_priority','1'),(5,17,'pref_cmp0','>= 1280 720'),(5,17,'pref_decoder','ffmpeg'),(5,17,'pref_max_cpus','1'),(5,17,'pref_videorenderer','xv-blit'),(5,17,'pref_osdrenderer','softblend'),(5,17,'pref_osdfade','0'),(5,17,'pref_deint0','linearblend'),(5,17,'pref_deint1','linearblend'),(5,17,'pref_filters',''),(5,18,'pref_priority','2'),(5,18,'pref_cmp0','> 0 0'),(5,18,'pref_decoder','ffmpeg'),(5,18,'pref_max_cpus','1'),(5,18,'pref_videorenderer','xv-blit'),(5,18,'pref_osdrenderer','softblend'),(5,18,'pref_osdfade','1'),(5,18,'pref_deint0','greedyhdoubleprocessdeint'),(5,18,'pref_deint1','kerneldeint'),(5,18,'pref_filters',''),(5,19,'pref_priority','3'),(5,19,'pref_cmp0','>= 1280 720'),(5,19,'pref_decoder','ffmpeg'),(5,19,'pref_max_cpus','1'),(5,19,'pref_videorenderer','quartz-blit'),(5,19,'pref_osdrenderer','softblend'),(5,19,'pref_osdfade','0'),(5,19,'pref_deint0','linearblend'),(5,19,'pref_deint1','linearblend'),(5,19,'pref_filters',''),(5,20,'pref_priority','4'),(5,20,'pref_cmp0','> 0 0'),(5,20,'pref_decoder','ffmpeg'),(5,20,'pref_max_cpus','1'),(5,20,'pref_videorenderer','quartz-blit'),(5,20,'pref_osdrenderer','softblend'),(5,20,'pref_osdfade','1'),(5,20,'pref_deint0','greedyhdoubleprocessdeint'),(5,20,'pref_deint1','kerneldeint'),(5,20,'pref_filters',''),(6,21,'pref_priority','1'),(6,21,'pref_cmp0','>= 1280 720'),(6,21,'pref_decoder','ffmpeg'),(6,21,'pref_max_cpus','1'),(6,21,'pref_videorenderer','xv-blit'),(6,21,'pref_osdrenderer','softblend'),(6,21,'pref_osdfade','0'),(6,21,'pref_deint0','onefield'),(6,21,'pref_deint1','onefield'),(6,21,'pref_filters',''),(6,22,'pref_priority','2'),(6,22,'pref_cmp0','> 0 0'),(6,22,'pref_decoder','ffmpeg'),(6,22,'pref_max_cpus','1'),(6,22,'pref_videorenderer','xv-blit'),(6,22,'pref_osdrenderer','softblend'),(6,22,'pref_osdfade','1'),(6,22,'pref_deint0','linearblend'),(6,22,'pref_deint1','linearblend'),(6,22,'pref_filters',''),(6,23,'pref_priority','3'),(6,23,'pref_cmp0','>= 1280 720'),(6,23,'pref_decoder','ffmpeg'),(6,23,'pref_max_cpus','1'),(6,23,'pref_videorenderer','quartz-blit'),(6,23,'pref_osdrenderer','softblend'),(6,23,'pref_osdfade','0'),(6,23,'pref_deint0','onefield'),(6,23,'pref_deint1','onefield'),(6,23,'pref_filters',''),(6,24,'pref_priority','4'),(6,24,'pref_cmp0','> 0 0'),(6,24,'pref_decoder','ffmpeg'),(6,24,'pref_max_cpus','1'),(6,24,'pref_videorenderer','quartz-blit'),(6,24,'pref_osdrenderer','softblend'),(6,24,'pref_osdfade','1'),(6,24,'pref_deint0','linearblend'),(6,24,'pref_deint1','linearblend'),(6,24,'pref_filters','');
+/*!40000 ALTER TABLE `displayprofiles` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dtv_multiplex`
+--
+
+DROP TABLE IF EXISTS `dtv_multiplex`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dtv_multiplex` (
+ `mplexid` smallint(6) NOT NULL auto_increment,
+ `sourceid` smallint(6) default NULL,
+ `transportid` int(11) default NULL,
+ `networkid` int(11) default NULL,
+ `frequency` int(11) default NULL,
+ `inversion` char(1) default 'a',
+ `symbolrate` int(11) default NULL,
+ `fec` varchar(10) default 'auto',
+ `polarity` char(1) default NULL,
+ `modulation` varchar(10) default 'auto',
+ `bandwidth` char(1) default 'a',
+ `lp_code_rate` varchar(10) default 'auto',
+ `transmission_mode` char(1) default 'a',
+ `guard_interval` varchar(10) default 'auto',
+ `visible` smallint(1) NOT NULL default '0',
+ `constellation` varchar(10) default 'auto',
+ `hierarchy` varchar(10) default 'auto',
+ `hp_code_rate` varchar(10) default 'auto',
+ `sistandard` varchar(10) default 'dvb',
+ `serviceversion` smallint(6) default '33',
+ `updatetimestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ PRIMARY KEY (`mplexid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dtv_multiplex`
+--
+
+LOCK TABLES `dtv_multiplex` WRITE;
+/*!40000 ALTER TABLE `dtv_multiplex` DISABLE KEYS */;
+/*!40000 ALTER TABLE `dtv_multiplex` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dtv_privatetypes`
+--
+
+DROP TABLE IF EXISTS `dtv_privatetypes`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dtv_privatetypes` (
+ `sitype` varchar(4) NOT NULL default '',
+ `networkid` int(11) NOT NULL default '0',
+ `private_type` varchar(20) NOT NULL default '',
+ `private_value` varchar(100) NOT NULL default ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dtv_privatetypes`
+--
+
+LOCK TABLES `dtv_privatetypes` WRITE;
+/*!40000 ALTER TABLE `dtv_privatetypes` DISABLE KEYS */;
+INSERT INTO `dtv_privatetypes` (`sitype`, `networkid`, `private_type`, `private_value`) VALUES ('dvb',9018,'channel_numbers','131'),('dvb',9018,'guide_fixup','2'),('dvb',256,'guide_fixup','1'),('dvb',257,'guide_fixup','1'),('dvb',256,'tv_types','1,150,134,133'),('dvb',257,'tv_types','1,150,134,133'),('dvb',4100,'sdt_mapping','1'),('dvb',4101,'sdt_mapping','1'),('dvb',4102,'sdt_mapping','1'),('dvb',4103,'sdt_mapping','1'),('dvb',4104,'sdt_mapping','1'),('dvb',4105,'sdt_mapping','1'),('dvb',4106,'sdt_mapping','1'),('dvb',4107,'sdt_mapping','1'),('dvb',4097,'sdt_mapping','1'),('dvb',4098,'sdt_mapping','1'),('dvb',4100,'tv_types','1,145,154'),('dvb',4101,'tv_types','1,145,154'),('dvb',4102,'tv_types','1,145,154'),('dvb',4103,'tv_types','1,145,154'),('dvb',4104,'tv_types','1,145,154'),('dvb',4105,'tv_types','1,145,154'),('dvb',4106,'tv_types','1,145,154'),('dvb',4107,'tv_types','1,145,154'),('dvb',4097,'tv_types','1,145,154'),('dvb',4098,'tv_types','1,145,154'),('dvb',4100,'guide_fixup','1'),('dvb',4101,'guide_fixup','1'),('dvb',4102,'guide_fixup','1'),('dvb',4103,'guide_fixup','1'),('dvb',4104,'guide_fixup','1'),('dvb',4105,'guide_fixup','1'),('dvb',4106,'guide_fixup','1'),('dvb',4107,'guide_fixup','1'),('dvb',4096,'guide_fixup','5'),('dvb',4097,'guide_fixup','1'),('dvb',4098,'guide_fixup','1'),('dvb',94,'tv_types','1,128'),('atsc',1793,'guide_fixup','3'),('dvb',40999,'guide_fixup','4'),('dvb',70,'force_guide_present','yes'),('dvb',70,'guide_ranges','80,80,96,96'),('dvb',4112,'channel_numbers','131'),('dvb',4115,'channel_numbers','131'),('dvb',4116,'channel_numbers','131'),('dvb',12802,'channel_numbers','131'),('dvb',12803,'channel_numbers','131'),('dvb',12829,'channel_numbers','131'),('dvb',40999,'parse_subtitle_list','1070,1308,1041,1306,1307,1030,1016,1131,1068,1069'),('dvb',4096,'guide_fixup','5');
+/*!40000 ALTER TABLE `dtv_privatetypes` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdbookmark`
+--
+
+DROP TABLE IF EXISTS `dvdbookmark`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdbookmark` (
+ `serialid` varchar(16) NOT NULL default '',
+ `name` varchar(32) default NULL,
+ `title` smallint(6) NOT NULL default '0',
+ `audionum` tinyint(4) NOT NULL default '-1',
+ `subtitlenum` tinyint(4) NOT NULL default '-1',
+ `framenum` bigint(20) NOT NULL default '0',
+ `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ PRIMARY KEY (`serialid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdbookmark`
+--
+
+LOCK TABLES `dvdbookmark` WRITE;
+/*!40000 ALTER TABLE `dvdbookmark` DISABLE KEYS */;
+/*!40000 ALTER TABLE `dvdbookmark` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdinput`
+--
+
+DROP TABLE IF EXISTS `dvdinput`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdinput` (
+ `intid` int(10) unsigned NOT NULL,
+ `hsize` int(10) unsigned default NULL,
+ `vsize` int(10) unsigned default NULL,
+ `ar_num` int(10) unsigned default NULL,
+ `ar_denom` int(10) unsigned default NULL,
+ `fr_code` int(10) unsigned default NULL,
+ `letterbox` tinyint(1) default NULL,
+ `v_format` varchar(16) default NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdinput`
+--
+
+LOCK TABLES `dvdinput` WRITE;
+/*!40000 ALTER TABLE `dvdinput` DISABLE KEYS */;
+INSERT INTO `dvdinput` (`intid`, `hsize`, `vsize`, `ar_num`, `ar_denom`, `fr_code`, `letterbox`, `v_format`) VALUES (1,720,480,16,9,1,1,'ntsc'),(2,720,480,16,9,1,0,'ntsc'),(3,720,480,4,3,1,1,'ntsc'),(4,720,480,4,3,1,0,'ntsc'),(5,720,576,16,9,3,1,'pal'),(6,720,576,16,9,3,0,'pal'),(7,720,576,4,3,3,1,'pal'),(8,720,576,4,3,3,0,'pal');
+/*!40000 ALTER TABLE `dvdinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdtranscode`
+--
+
+DROP TABLE IF EXISTS `dvdtranscode`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdtranscode` (
+ `intid` int(11) NOT NULL auto_increment,
+ `input` int(10) unsigned default NULL,
+ `name` varchar(128) NOT NULL,
+ `sync_mode` int(10) unsigned default NULL,
+ `use_yv12` tinyint(1) default NULL,
+ `cliptop` int(11) default NULL,
+ `clipbottom` int(11) default NULL,
+ `clipleft` int(11) default NULL,
+ `clipright` int(11) default NULL,
+ `f_resize_h` int(11) default NULL,
+ `f_resize_w` int(11) default NULL,
+ `hq_resize_h` int(11) default NULL,
+ `hq_resize_w` int(11) default NULL,
+ `grow_h` int(11) default NULL,
+ `grow_w` int(11) default NULL,
+ `clip2top` int(11) default NULL,
+ `clip2bottom` int(11) default NULL,
+ `clip2left` int(11) default NULL,
+ `clip2right` int(11) default NULL,
+ `codec` varchar(128) NOT NULL,
+ `codec_param` varchar(128) default NULL,
+ `bitrate` int(11) default NULL,
+ `a_sample_r` int(11) default NULL,
+ `a_bitrate` int(11) default NULL,
+ `two_pass` tinyint(1) default NULL,
+ `tc_param` varchar(128) default NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdtranscode`
+--
+
+LOCK TABLES `dvdtranscode` WRITE;
+/*!40000 ALTER TABLE `dvdtranscode` DISABLE KEYS */;
+INSERT INTO `dvdtranscode` (`intid`, `input`, `name`, `sync_mode`, `use_yv12`, `cliptop`, `clipbottom`, `clipleft`, `clipright`, `f_resize_h`, `f_resize_w`, `hq_resize_h`, `hq_resize_w`, `grow_h`, `grow_w`, `clip2top`, `clip2bottom`, `clip2left`, `clip2right`, `codec`, `codec_param`, `bitrate`, `a_sample_r`, `a_bitrate`, `two_pass`, `tc_param`) VALUES (1,1,'Good',2,1,16,16,0,0,2,0,0,0,0,0,32,32,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(2,2,'Excellent',2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(3,2,'Good',2,1,0,0,8,8,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(4,2,'Medium',2,1,0,0,8,8,5,5,0,0,0,0,0,0,0,0,'divx5',NULL,1200,NULL,NULL,0,NULL),(5,3,'Good',2,1,0,0,0,0,0,0,0,0,2,0,80,80,8,8,'divx5',NULL,0,NULL,NULL,0,NULL),(6,4,'Excellent',2,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(7,4,'Good',2,1,0,0,8,8,0,2,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(8,5,'Good',1,1,16,16,0,0,5,0,0,0,0,0,40,40,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(9,6,'Good',1,1,0,0,16,16,5,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(10,7,'Good',1,1,0,0,0,0,1,0,0,0,0,0,76,76,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(11,8,'Good',1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);
+/*!40000 ALTER TABLE `dvdtranscode` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `eit_cache`
+--
+
+DROP TABLE IF EXISTS `eit_cache`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `eit_cache` (
+ `chanid` int(10) NOT NULL,
+ `eventid` int(10) unsigned NOT NULL default '0',
+ `tableid` tinyint(3) unsigned NOT NULL,
+ `version` tinyint(3) unsigned NOT NULL,
+ `endtime` int(10) unsigned NOT NULL,
+ `status` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`chanid`,`eventid`,`status`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `eit_cache`
+--
+
+LOCK TABLES `eit_cache` WRITE;
+/*!40000 ALTER TABLE `eit_cache` DISABLE KEYS */;
+/*!40000 ALTER TABLE `eit_cache` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `favorites`
+--
+
+DROP TABLE IF EXISTS `favorites`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `favorites` (
+ `favid` int(11) unsigned NOT NULL auto_increment,
+ `userid` int(11) unsigned NOT NULL default '0',
+ `chanid` int(11) unsigned NOT NULL default '0',
+ PRIMARY KEY (`favid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `favorites`
+--
+
+LOCK TABLES `favorites` WRITE;
+/*!40000 ALTER TABLE `favorites` DISABLE KEYS */;
+/*!40000 ALTER TABLE `favorites` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `filemarkup`
+--
+
+DROP TABLE IF EXISTS `filemarkup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `filemarkup` (
+ `filename` text NOT NULL,
+ `mark` mediumint(8) unsigned NOT NULL default '0',
+ `offset` bigint(20) unsigned default NULL,
+ `type` tinyint(4) NOT NULL default '0',
+ KEY `filename` (`filename`(255))
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `filemarkup`
+--
+
+LOCK TABLES `filemarkup` WRITE;
+/*!40000 ALTER TABLE `filemarkup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `filemarkup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gallerymetadata`
+--
+
+DROP TABLE IF EXISTS `gallerymetadata`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gallerymetadata` (
+ `image` varchar(255) NOT NULL,
+ `angle` int(11) NOT NULL,
+ PRIMARY KEY (`image`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gallerymetadata`
+--
+
+LOCK TABLES `gallerymetadata` WRITE;
+/*!40000 ALTER TABLE `gallerymetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gallerymetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gamemetadata`
+--
+
+DROP TABLE IF EXISTS `gamemetadata`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gamemetadata` (
+ `system` varchar(128) NOT NULL default '',
+ `romname` varchar(128) NOT NULL default '',
+ `gamename` varchar(128) NOT NULL default '',
+ `genre` varchar(128) NOT NULL default '',
+ `year` varchar(10) NOT NULL default '',
+ `publisher` varchar(128) NOT NULL default '',
+ `favorite` tinyint(1) default NULL,
+ `rompath` varchar(255) NOT NULL default '',
+ `gametype` varchar(64) NOT NULL default '',
+ `diskcount` tinyint(1) NOT NULL default '1',
+ `country` varchar(128) NOT NULL default '',
+ `crc_value` varchar(64) NOT NULL default '',
+ `display` tinyint(1) NOT NULL default '1',
+ `version` varchar(64) NOT NULL default '',
+ KEY `system` (`system`),
+ KEY `year` (`year`),
+ KEY `romname` (`romname`),
+ KEY `gamename` (`gamename`),
+ KEY `genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gamemetadata`
+--
+
+LOCK TABLES `gamemetadata` WRITE;
+/*!40000 ALTER TABLE `gamemetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gamemetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gameplayers`
+--
+
+DROP TABLE IF EXISTS `gameplayers`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gameplayers` (
+ `gameplayerid` int(10) unsigned NOT NULL auto_increment,
+ `playername` varchar(64) NOT NULL default '',
+ `workingpath` varchar(255) NOT NULL default '',
+ `rompath` varchar(255) NOT NULL default '',
+ `screenshots` varchar(255) NOT NULL default '',
+ `commandline` text NOT NULL,
+ `gametype` varchar(64) NOT NULL default '',
+ `extensions` varchar(128) NOT NULL default '',
+ `spandisks` tinyint(1) NOT NULL default '0',
+ PRIMARY KEY (`gameplayerid`),
+ UNIQUE KEY `playername` (`playername`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gameplayers`
+--
+
+LOCK TABLES `gameplayers` WRITE;
+/*!40000 ALTER TABLE `gameplayers` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gameplayers` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `housekeeping`
+--
+
+DROP TABLE IF EXISTS `housekeeping`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `housekeeping` (
+ `tag` varchar(64) NOT NULL default '',
+ `lastrun` datetime default NULL,
+ PRIMARY KEY (`tag`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `housekeeping`
+--
+
+LOCK TABLES `housekeeping` WRITE;
+/*!40000 ALTER TABLE `housekeeping` DISABLE KEYS */;
+/*!40000 ALTER TABLE `housekeeping` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `inputgroup`
+--
+
+DROP TABLE IF EXISTS `inputgroup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `inputgroup` (
+ `cardinputid` int(10) unsigned NOT NULL,
+ `inputgroupid` int(10) unsigned NOT NULL,
+ `inputgroupname` varchar(32) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `inputgroup`
+--
+
+LOCK TABLES `inputgroup` WRITE;
+/*!40000 ALTER TABLE `inputgroup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `inputgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `inuseprograms`
+--
+
+DROP TABLE IF EXISTS `inuseprograms`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `inuseprograms` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `recusage` varchar(128) NOT NULL default '',
+ `lastupdatetime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `hostname` varchar(255) NOT NULL default '',
+ `rechost` varchar(64) NOT NULL,
+ `recdir` varchar(255) NOT NULL default '',
+ KEY `chanid` (`chanid`,`starttime`),
+ KEY `recusage` (`recusage`,`lastupdatetime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `inuseprograms`
+--
+
+LOCK TABLES `inuseprograms` WRITE;
+/*!40000 ALTER TABLE `inuseprograms` DISABLE KEYS */;
+/*!40000 ALTER TABLE `inuseprograms` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jobqueue`
+--
+
+DROP TABLE IF EXISTS `jobqueue`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `jobqueue` (
+ `id` int(11) NOT NULL auto_increment,
+ `chanid` int(10) NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `inserttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `type` int(11) NOT NULL default '0',
+ `cmds` int(11) NOT NULL default '0',
+ `flags` int(11) NOT NULL default '0',
+ `status` int(11) NOT NULL default '0',
+ `statustime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `hostname` varchar(255) NOT NULL default '',
+ `args` blob NOT NULL,
+ `comment` varchar(128) NOT NULL default '',
+ `schedruntime` datetime NOT NULL default '2007-01-01 00:00:00',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`type`,`inserttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `jobqueue`
+--
+
+LOCK TABLES `jobqueue` WRITE;
+/*!40000 ALTER TABLE `jobqueue` DISABLE KEYS */;
+/*!40000 ALTER TABLE `jobqueue` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jumppoints`
+--
+
+DROP TABLE IF EXISTS `jumppoints`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `jumppoints` (
+ `destination` varchar(128) NOT NULL default '',
+ `description` varchar(255) default NULL,
+ `keylist` varchar(128) default NULL,
+ `hostname` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`destination`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `jumppoints`
+--
+
+LOCK TABLES `jumppoints` WRITE;
+/*!40000 ALTER TABLE `jumppoints` DISABLE KEYS */;
+INSERT INTO `jumppoints` (`destination`, `description`, `keylist`, `hostname`) VALUES ('Reload Theme','','','larch5'),('Main Menu','','','larch5'),('Program Guide','','','larch5'),('Program Finder','','','larch5'),('Manage Recordings / Fix Conflicts','','','larch5'),('Program Recording Priorities','','','larch5'),('Channel Recording Priorities','','','larch5'),('TV Recording Playback','','','larch5'),('TV Recording Deletion','','','larch5'),('Live TV','','','larch5'),('Live TV In Guide','','','larch5'),('Manual Record Scheduling','','','larch5'),('Status Screen','','','larch5'),('Previously Recorded','','','larch5'),('Netflix Browser','Browse Netflix titles','','larch5'),('Netflix Queue','Administer Netflix Queue','','larch5'),('Netflix History','View Netflix History','','larch5'),('MythGallery','Image viewer / slideshow','','larch5'),('MythGame','Game frontend','','larch5'),('Play music','','','larch5'),('Select music playlists','','','larch5'),('Rip CD','','','larch5'),('Scan music','','','larch5'),('Show Music Miniplayer','','','larch5'),('MythNews','RSS News feed reader','','larch5'),('MythVideo','The MythVideo default view','','larch5'),('Video Manager','The MythVideo video manager','','larch5'),('Video Browser','The MythVideo video browser','','larch5'),('Video Listings','The MythVideo video listings','','larch5'),('Video Gallery','The MythVideo video gallery','','larch5'),('Play DVD','Play a DVD','','larch5'),('Play VCD','Play a VCD','','larch5'),('Rip DVD','Import a DVD into your MythVideo database','','larch5'),('MythWeather','Weather forecasts','','larch5');
+/*!40000 ALTER TABLE `jumppoints` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `keybindings`
+--
+
+DROP TABLE IF EXISTS `keybindings`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `keybindings` (
+ `context` varchar(32) NOT NULL default '',
+ `action` varchar(32) NOT NULL default '',
+ `description` varchar(255) default NULL,
+ `keylist` varchar(128) default NULL,
+ `hostname` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`context`,`action`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `keybindings`
+--
+
+LOCK TABLES `keybindings` WRITE;
+/*!40000 ALTER TABLE `keybindings` DISABLE KEYS */;
+INSERT INTO `keybindings` (`context`, `action`, `description`, `keylist`, `hostname`) VALUES ('Global','UP','Up Arrow','Up','larch5'),('Global','DOWN','Down Arrow','Down','larch5'),('Global','LEFT','Left Arrow','Left','larch5'),('Global','RIGHT','Right Arrow','Right','larch5'),('Global','SELECT','Select','Return,Enter,Space','larch5'),('Global','ESCAPE','Escape','Esc','larch5'),('Global','MENU','Pop-up menu','M','larch5'),('Global','INFO','More information','I','larch5'),('Global','PAGEUP','Page Up','PgUp','larch5'),('Global','PAGEDOWN','Page Down','PgDown','larch5'),('Global','PREVVIEW','Previous View','Home','larch5'),('Global','NEXTVIEW','Next View','End','larch5'),('Global','HELP','Help','F1','larch5'),('Global','EJECT','Eject Removable Media','','larch5'),('Global','0','0','0','larch5'),('Global','1','1','1','larch5'),('Global','2','2','2','larch5'),('Global','3','3','3','larch5'),('Global','4','4','4','larch5'),('Global','5','5','5','larch5'),('Global','6','6','6','larch5'),('Global','7','7','7','larch5'),('Global','8','8','8','larch5'),('Global','9','9','9','larch5'),('qt','DELETE','Delete','D','larch5'),('qt','EDIT','Edit','E','larch5'),('TV Frontend','PAGEUP','Page Up','3','larch5'),('TV Frontend','PAGEDOWN','Page Down','9','larch5'),('TV Frontend','PAGETOP','Page to top of list','','larch5'),('TV Frontend','PAGEMIDDLE','Page to middle of list','','larch5'),('TV Frontend','PAGEBOTTOM','Page to bottom of list','','larch5'),('TV Frontend','DELETE','Delete Program','D','larch5'),('TV Frontend','PLAYBACK','Play Program','P','larch5'),('TV Frontend','TOGGLERECORD','Toggle recording status of current program','R','larch5'),('TV Frontend','DAYLEFT','Page the program guide back one day','Home,7','larch5'),('TV Frontend','DAYRIGHT','Page the program guide forward one day','End,1','larch5'),('TV Frontend','PAGELEFT','Page the program guide left',',,<','larch5'),('TV Frontend','PAGERIGHT','Page the program guide right','>,.','larch5'),('TV Frontend','TOGGLEFAV','Toggle the current channel as a favorite','?','larch5'),('TV Frontend','TOGGLEEPGORDER','Reverse the channel order in the program guide','0','larch5'),('TV Frontend','GUIDE','Show the Program Guide','S','larch5'),('TV Frontend','FINDER','Show the Program Finder','#','larch5'),('TV Frontend','NEXTFAV','Toggle showing all channels or just favorites in the program guide.','/','larch5'),('TV Frontend','CHANUPDATE','Switch channels without exiting guide in Live TV mode.','X','larch5'),('TV Frontend','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('TV Frontend','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('TV Frontend','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('TV Frontend','RANKINC','Increase program or channel rank','Right','larch5'),('TV Frontend','RANKDEC','Decrease program or channel rank','Left','larch5'),('TV Frontend','UPCOMING','List upcoming episodes','O','larch5'),('TV Frontend','DETAILS','Show program details','U','larch5'),('TV Frontend','VIEWCARD','Switch Capture Card view','Y','larch5'),('TV Frontend','VIEWINPUT','Switch Capture Card view','C','larch5'),('TV Frontend','CUSTOMEDIT','Edit Custom Record Rule','E','larch5'),('TV Frontend','CHANGERECGROUP','Change Recording Group','','larch5'),('TV Frontend','CHANGEGROUPVIEW','Change Group View','','larch5'),('TV Playback','CLEAROSD','Clear OSD','Backspace','larch5'),('TV Playback','PAUSE','Pause','P','larch5'),('TV Playback','DELETE','Delete Program','D','larch5'),('TV Playback','SEEKFFWD','Fast Forward','Right','larch5'),('TV Playback','SEEKRWND','Rewind','Left','larch5'),('TV Playback','ARBSEEK','Arbitrary Seek','*','larch5'),('TV Playback','CHANNELUP','Channel up','Up','larch5'),('TV Playback','CHANNELDOWN','Channel down','Down','larch5'),('TV Playback','NEXTFAV','Switch to the next favorite channel','/','larch5'),('TV Playback','PREVCHAN','Switch to the previous channel','H','larch5'),('TV Playback','JUMPFFWD','Jump ahead','PgDown','larch5'),('TV Playback','JUMPRWND','Jump back','PgUp','larch5'),('TV Playback','JUMPBKMRK','Jump to bookmark','K','larch5'),('TV Playback','FFWDSTICKY','Fast Forward (Sticky) or Forward one frame while paused','>,.','larch5'),('TV Playback','RWNDSTICKY','Rewind (Sticky) or Rewind one frame while paused',',,<','larch5'),('TV Playback','NEXTSOURCE','Next Video Source','Y','larch5'),('TV Playback','PREVSOURCE','Previous Video Source','Ctrl+Y','larch5'),('TV Playback','NEXTINPUT','Next Input','C','larch5'),('TV Playback','NEXTCARD','Next Card','','larch5'),('TV Playback','SKIPCOMMERCIAL','Skip Commercial','Z,End','larch5'),('TV Playback','SKIPCOMMBACK','Skip Commercial (Reverse)','Q,Home','larch5'),('TV Playback','JUMPSTART','Jump to the start of the recording.','Ctrl+B','larch5'),('TV Playback','TOGGLEBROWSE','Toggle channel browse mode','O','larch5'),('TV Playback','TOGGLERECORD','Toggle recording status of current program','R','larch5'),('TV Playback','TOGGLEFAV','Toggle the current channel as a favorite','?','larch5'),('TV Playback','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('TV Playback','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('TV Playback','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('TV Playback','TOGGLEPIPMODE','Toggle Picture-in-Picture mode','V','larch5'),('TV Playback','TOGGLEPIPWINDOW','Toggle active PiP window','B','larch5'),('TV Playback','SWAPPIP','Swap PiP/Main','N','larch5'),('TV Playback','TOGGLEASPECT','Toggle the video aspect ratio','Ctrl+W','larch5'),('TV Playback','TOGGLEFILL','Next Preconfigured Zoom mode','W','larch5'),('TV Playback','TOGGLECC','Toggle any captions','T','larch5'),('TV Playback','TOGGLETTC','Toggle Teletext Captions','','larch5'),('TV Playback','TOGGLESUBTITLE','Toggle Subtitles','','larch5'),('TV Playback','TOGGLECC608','Toggle VBI CC','','larch5'),('TV Playback','TOGGLECC708','Toggle ATSC CC','','larch5'),('TV Playback','TOGGLETTM','Toggle Teletext Menu','','larch5'),('TV Playback','SELECTAUDIO_0','Play audio track 1','','larch5'),('TV Playback','SELECTAUDIO_1','Play audio track 2','','larch5'),('TV Playback','SELECTSUBTITLE_0','Display subtitle 1','','larch5'),('TV Playback','SELECTSUBTITLE_1','Display subtitle 2','','larch5'),('TV Playback','SELECTCC608_0','Display VBI CC1','','larch5'),('TV Playback','SELECTCC608_1','Display VBI CC2','','larch5'),('TV Playback','SELECTCC608_2','Display VBI CC3','','larch5'),('TV Playback','SELECTCC608_3','Display VBI CC4','','larch5'),('TV Playback','SELECTCC708_0','Display ATSC CC1','','larch5'),('TV Playback','SELECTCC708_1','Display ATSC CC2','','larch5'),('TV Playback','SELECTCC708_2','Display ATSC CC3','','larch5'),('TV Playback','SELECTCC708_3','Display ATSC CC4','','larch5'),('TV Playback','NEXTAUDIO','Next audio track','+','larch5'),('TV Playback','PREVAUDIO','Previous audio track','-','larch5'),('TV Playback','NEXTSUBTITLE','Next subtitle track','','larch5'),('TV Playback','PREVSUBTITLE','Previous subtitle track','','larch5'),('TV Playback','NEXTCC608','Next VBI CC track','','larch5'),('TV Playback','PREVCC608','Previous VBI CC track','','larch5'),('TV Playback','NEXTCC708','Next ATSC CC track','','larch5'),('TV Playback','PREVCC708','Previous ATSC CC track','','larch5'),('TV Playback','NEXTCC','Next of any captions','','larch5'),('TV Playback','NEXTSCAN','Next video scan overidemode','','larch5'),('TV Playback','QUEUETRANSCODE','Queue the current recording for transcoding','X','larch5'),('TV Playback','SPEEDINC','Increase the playback speed','U','larch5'),('TV Playback','SPEEDDEC','Decrease the playback speed','J','larch5'),('TV Playback','ADJUSTSTRETCH','Turn on time stretch control','A','larch5'),('TV Playback','STRETCHINC','Increase time stretch speed','','larch5'),('TV Playback','STRETCHDEC','Decrease time stretch speed','','larch5'),('TV Playback','TOGGLESTRETCH','Toggle time stretch speed','','larch5'),('TV Playback','TOGGLEAUDIOSYNC','Turn on audio sync adjustment controls','','larch5'),('TV Playback','TOGGLEPICCONTROLS','Playback picture adjustments','F','larch5'),('TV Playback','TOGGLECHANCONTROLS','Recording picture adjustments for this channel','Ctrl+G','larch5'),('TV Playback','TOGGLERECCONTROLS','Recording picture adjustments for this recorder','G','larch5'),('TV Playback','TOGGLEEDIT','Start Edit Mode','E','larch5'),('TV Playback','CYCLECOMMSKIPMODE','Cycle Commercial Skip mode','','larch5'),('TV Playback','GUIDE','Show the Program Guide','S','larch5'),('TV Playback','FINDER','Show the Program Finder','#','larch5'),('TV Playback','TOGGLESLEEP','Toggle the Sleep Timer','F8','larch5'),('TV Playback','PLAY','Play','Ctrl+P','larch5'),('TV Playback','JUMPPREV','Jump to previously played recording','','larch5'),('TV Playback','JUMPREC','Display menu of recorded programs to jump to','','larch5'),('TV Playback','VIEWSCHEDULED','Display scheduled recording list','','larch5'),('TV Playback','SIGNALMON','Monitor Signal Quality','Alt+F7','larch5'),('TV Playback','JUMPTODVDROOTMENU','Jump to the DVD Root Menu','','larch5'),('TV Playback','EXITSHOWNOPROMPTS','Exit Show without any prompts','','larch5'),('TV Playback','SCREENSHOT','Save screenshot of current video frame','','larch5'),('TV Playback','MENURED','Menu Red','F2','larch5'),('TV Playback','MENUGREEN','Menu Green','F3','larch5'),('TV Playback','MENUYELLOW','Menu Yellow','F4','larch5'),('TV Playback','MENUBLUE','Menu Blue','F5','larch5'),('TV Playback','TEXTEXIT','Menu Exit','F6','larch5'),('TV Playback','MENUTEXT','Menu Text','F7','larch5'),('TV Playback','MENUEPG','Menu EPG','F12','larch5'),('TV Editing','CLEARMAP','Clear editing cut points','C,Q,Home','larch5'),('TV Editing','INVERTMAP','Invert Begin/End cut points','I','larch5'),('TV Editing','LOADCOMMSKIP','Load cut list from commercial skips','Z,End','larch5'),('TV Editing','NEXTCUT','Jump to the next cut point','PgDown','larch5'),('TV Editing','PREVCUT','Jump to the previous cut point','PgUp','larch5'),('TV Editing','BIGJUMPREW','Jump back 10x the normal amount',',,<','larch5'),('TV Editing','BIGJUMPFWD','Jump forward 10x the normal amount','>,.','larch5'),('TV Editing','TOGGLEEDIT','Exit out of Edit Mode','E','larch5'),('Teletext Menu','NEXTPAGE','Next Page','Down','larch5'),('Teletext Menu','PREVPAGE','Previous Page','Up','larch5'),('Teletext Menu','NEXTSUBPAGE','Next Subpage','Right','larch5'),('Teletext Menu','PREVSUBPAGE','Previous Subpage','Left','larch5'),('Teletext Menu','TOGGLETT','Toggle Teletext','T','larch5'),('Teletext Menu','MENURED','Menu Red','F2','larch5'),('Teletext Menu','MENUGREEN','Menu Green','F3','larch5'),('Teletext Menu','MENUYELLOW','Menu Yellow','F4','larch5'),('Teletext Menu','MENUBLUE','Menu Blue','F5','larch5'),('Teletext Menu','MENUWHITE','Menu White','F6','larch5'),('Teletext Menu','TOGGLEBACKGROUND','Toggle Background','F7','larch5'),('Teletext Menu','REVEAL','Reveal hidden Text','F8','larch5'),('Archive','TOGGLECUT','Toggle use cut list state for selected program','C','larch5'),('NetFlix','MOVETOTOP','Moves movie to top of queue','1','larch5'),('NetFlix','REMOVE','Removes movie from queue','D','larch5'),('Gallery','PLAY','Start/Stop Slideshow','P','larch5'),('Gallery','HOME','Go to the first image in thumbnail view','Home','larch5'),('Gallery','END','Go to the last image in thumbnail view','End','larch5'),('Gallery','MENU','Toggle activating menu in thumbnail view','M','larch5'),('Gallery','SLIDESHOW','Start Slideshow in thumbnail view','S','larch5'),('Gallery','RANDOMSHOW','Start Random Slideshow in thumbnail view','R','larch5'),('Gallery','ROTRIGHT','Rotate image right 90 degrees','],3','larch5'),('Gallery','ROTLEFT','Rotate image left 90 degrees','[,1','larch5'),('Gallery','ZOOMOUT','Zoom image out','7','larch5'),('Gallery','ZOOMIN','Zoom image in','9','larch5'),('Gallery','SCROLLUP','Scroll image up','2','larch5'),('Gallery','SCROLLLEFT','Scroll image left','4','larch5'),('Gallery','SCROLLRIGHT','Scroll image right','6','larch5'),('Gallery','SCROLLDOWN','Scroll image down','8','larch5'),('Gallery','RECENTER','Recenter image','5','larch5'),('Gallery','FULLSIZE','Full-size (un-zoom) image','0','larch5'),('Gallery','UPLEFT','Go to the upper-left corner of the image','PgUp','larch5'),('Gallery','LOWRIGHT','Go to the lower-right corner of the image','PgDown','larch5'),('Gallery','INFO','Toggle Showing Information about Image','I','larch5'),('Gallery','DELETE','Delete marked images or current image if none are marked','D','larch5'),('Gallery','MARK','Mark image','T','larch5'),('Gallery','FULLSCREEN','Toggle scale to fullscreen/scale to fit','W','larch5'),('Game','TOGGLEFAV','Toggle the current game as a favorite','?,/','larch5'),('Game','INCSEARCH','Show incremental search dialog','Ctrl+S','larch5'),('Game','INCSEARCHNEXT','Incremental search find next match','Ctrl+N','larch5'),('Music','DELETE','Delete track from playlist','D','larch5'),('Music','NEXTTRACK','Move to the next track','>,.,Z,End','larch5'),('Music','PREVTRACK','Move to the previous track',',,<,Q,Home','larch5'),('Music','FFWD','Fast forward','PgDown','larch5'),('Music','RWND','Rewind','PgUp','larch5'),('Music','PAUSE','Pause/Start playback','P','larch5'),('Music','PLAY','Start playback','','larch5'),('Music','STOP','Stop playback','O','larch5'),('Music','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('Music','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('Music','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('Music','CYCLEVIS','Cycle visualizer mode','6','larch5'),('Music','BLANKSCR','Blank screen','5','larch5'),('Music','THMBUP','Increase rating','9','larch5'),('Music','THMBDOWN','Decrease rating','7','larch5'),('Music','REFRESH','Refresh music tree','8','larch5'),('Music','FILTER','Filter All My Music','F','larch5'),('Music','INCSEARCH','Show incremental search dialog','Ctrl+S','larch5'),('Music','INCSEARCHNEXT','Incremental search find next match','Ctrl+N','larch5'),('Music','SPEEDUP','Increase Play Speed','W','larch5'),('Music','SPEEDDOWN','Decrease Play Speed','X','larch5'),('News','RETRIEVENEWS','Update news items','I','larch5'),('News','FORCERETRIEVE','Force update news items','M','larch5'),('News','CANCEL','Cancel news item updating','C','larch5'),('Phone','0','0','0','larch5'),('Phone','1','1','1','larch5'),('Phone','2','2','2','larch5'),('Phone','3','3','3','larch5'),('Phone','4','4','4','larch5'),('Phone','5','5','5','larch5'),('Phone','6','6','6','larch5'),('Phone','7','7','7','larch5'),('Phone','8','8','8','larch5'),('Phone','9','9','9','larch5'),('Phone','HASH','HASH','#','larch5'),('Phone','STAR','STAR','*','larch5'),('Phone','Up','Up','Up','larch5'),('Phone','Down','Down','Down','larch5'),('Phone','Left','Left','Left','larch5'),('Phone','Right','Right','Right','larch5'),('Phone','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('Phone','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('Phone','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('Phone','ZOOMIN','Zoom the video window in','>,.,Z,End','larch5'),('Phone','ZOOMOUT','Zoom the video window out',',,<,Q,Home','larch5'),('Phone','FULLSCRN','Show received video full-screen','P','larch5'),('Phone','HANGUP','Hangup an active call','O','larch5'),('Phone','LOOPBACK','Loopback Video','L','larch5'),('Video','FILTER','Open video filter dialog','F','larch5'),('Video','DELETE','Delete video','D','larch5'),('Video','BROWSE','Change browsable in video manager','B','larch5'),('Video','INCPARENT','Increase Parental Level','],},F11','larch5'),('Video','DECPARENT','Decrease Parental Level','[,{,F10','larch5'),('Video','HOME','Go to the first video','Home','larch5'),('Video','END','Go to the last video','End','larch5'),('Weather','PAUSE','Pause current page','P','larch5'),('Weather','SEARCH','Search List','/','larch5'),('Weather','NEXTSEARCH','Search List','n','larch5'),('Weather','UPDATE','Search List','u','larch5'),('Weather','DELETE','Delete screen from list','D','larch5');
+/*!40000 ALTER TABLE `keybindings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `keyword`
+--
+
+DROP TABLE IF EXISTS `keyword`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `keyword` (
+ `phrase` varchar(128) NOT NULL default '',
+ `searchtype` int(10) unsigned NOT NULL default '3',
+ UNIQUE KEY `phrase` (`phrase`,`searchtype`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `keyword`
+--
+
+LOCK TABLES `keyword` WRITE;
+/*!40000 ALTER TABLE `keyword` DISABLE KEYS */;
+/*!40000 ALTER TABLE `keyword` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_albumart`
+--
+
+DROP TABLE IF EXISTS `music_albumart`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_albumart` (
+ `albumart_id` int(20) NOT NULL auto_increment,
+ `filename` varchar(255) NOT NULL default '',
+ `directory_id` int(20) NOT NULL default '0',
+ `imagetype` tinyint(3) NOT NULL default '0',
+ `song_id` int(11) NOT NULL default '0',
+ `embedded` tinyint(1) NOT NULL default '0',
+ PRIMARY KEY (`albumart_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_albumart`
+--
+
+LOCK TABLES `music_albumart` WRITE;
+/*!40000 ALTER TABLE `music_albumart` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_albumart` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_albums`
+--
+
+DROP TABLE IF EXISTS `music_albums`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_albums` (
+ `album_id` int(11) unsigned NOT NULL auto_increment,
+ `artist_id` int(11) unsigned NOT NULL default '0',
+ `album_name` varchar(255) NOT NULL default '',
+ `year` smallint(6) NOT NULL default '0',
+ `compilation` tinyint(1) unsigned NOT NULL default '0',
+ PRIMARY KEY (`album_id`),
+ KEY `idx_album_name` (`album_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_albums`
+--
+
+LOCK TABLES `music_albums` WRITE;
+/*!40000 ALTER TABLE `music_albums` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_albums` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_artists`
+--
+
+DROP TABLE IF EXISTS `music_artists`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_artists` (
+ `artist_id` int(11) unsigned NOT NULL auto_increment,
+ `artist_name` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`artist_id`),
+ KEY `idx_artist_name` (`artist_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_artists`
+--
+
+LOCK TABLES `music_artists` WRITE;
+/*!40000 ALTER TABLE `music_artists` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_artists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_directories`
+--
+
+DROP TABLE IF EXISTS `music_directories`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_directories` (
+ `directory_id` int(20) NOT NULL auto_increment,
+ `path` text NOT NULL,
+ `parent_id` int(20) NOT NULL default '0',
+ PRIMARY KEY (`directory_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_directories`
+--
+
+LOCK TABLES `music_directories` WRITE;
+/*!40000 ALTER TABLE `music_directories` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_directories` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_genres`
+--
+
+DROP TABLE IF EXISTS `music_genres`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_genres` (
+ `genre_id` int(11) unsigned NOT NULL auto_increment,
+ `genre` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`genre_id`),
+ KEY `idx_genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_genres`
+--
+
+LOCK TABLES `music_genres` WRITE;
+/*!40000 ALTER TABLE `music_genres` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_genres` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_playlists`
+--
+
+DROP TABLE IF EXISTS `music_playlists`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_playlists` (
+ `playlist_id` int(11) unsigned NOT NULL auto_increment,
+ `playlist_name` varchar(255) NOT NULL default '',
+ `playlist_songs` text NOT NULL,
+ `last_accessed` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `length` int(11) unsigned NOT NULL default '0',
+ `songcount` smallint(8) unsigned NOT NULL default '0',
+ `hostname` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`playlist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_playlists`
+--
+
+LOCK TABLES `music_playlists` WRITE;
+/*!40000 ALTER TABLE `music_playlists` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_playlists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylist_categories`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylist_categories`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylist_categories` (
+ `categoryid` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) NOT NULL,
+ PRIMARY KEY (`categoryid`),
+ KEY `name` (`name`)
+) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylist_categories`
+--
+
+LOCK TABLES `music_smartplaylist_categories` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylist_categories` DISABLE KEYS */;
+INSERT INTO `music_smartplaylist_categories` (`categoryid`, `name`) VALUES (1,'Decades'),(2,'Favourite Tracks'),(3,'New Tracks');
+/*!40000 ALTER TABLE `music_smartplaylist_categories` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylist_items`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylist_items`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylist_items` (
+ `smartplaylistitemid` int(10) unsigned NOT NULL auto_increment,
+ `smartplaylistid` int(10) unsigned NOT NULL,
+ `field` varchar(50) NOT NULL,
+ `operator` varchar(20) NOT NULL,
+ `value1` varchar(255) NOT NULL,
+ `value2` varchar(255) NOT NULL,
+ PRIMARY KEY (`smartplaylistitemid`),
+ KEY `smartplaylistid` (`smartplaylistid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylist_items`
+--
+
+LOCK TABLES `music_smartplaylist_items` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylist_items` DISABLE KEYS */;
+INSERT INTO `music_smartplaylist_items` (`smartplaylistitemid`, `smartplaylistid`, `field`, `operator`, `value1`, `value2`) VALUES (1,1,'Year','is between','1960','1969'),(2,2,'Year','is between','1970','1979'),(3,3,'Year','is between','1980','1989'),(4,4,'Year','is between','1990','1999'),(5,5,'Year','is between','2000','2009'),(6,6,'Rating','is greater than','7','0'),(7,7,'Play Count','is greater than','0','0'),(8,8,'Play Count','is equal to','0','0');
+/*!40000 ALTER TABLE `music_smartplaylist_items` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylists`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylists`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylists` (
+ `smartplaylistid` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) NOT NULL,
+ `categoryid` int(10) unsigned NOT NULL,
+ `matchtype` set('All','Any') NOT NULL default 'All',
+ `orderby` varchar(128) NOT NULL default '',
+ `limitto` int(10) unsigned NOT NULL default '0',
+ PRIMARY KEY (`smartplaylistid`),
+ KEY `name` (`name`),
+ KEY `categoryid` (`categoryid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylists`
+--
+
+LOCK TABLES `music_smartplaylists` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylists` DISABLE KEYS */;
+INSERT INTO `music_smartplaylists` (`smartplaylistid`, `name`, `categoryid`, `matchtype`, `orderby`, `limitto`) VALUES (1,'1960\'s',1,'All','Artist (A)',0),(2,'1970\'s',1,'All','Artist (A)',0),(3,'1980\'s',1,'All','Artist (A)',0),(4,'1990\'s',1,'All','Artist (A)',0),(5,'2000\'s',1,'All','Artist (A)',0),(6,'Favorite Tracks',2,'All','Artist (A), Album (A)',0),(7,'100 Most Played Tracks',2,'All','Play Count (D)',100),(8,'Never Played Tracks',3,'All','Artist (A), Album (A)',0);
+/*!40000 ALTER TABLE `music_smartplaylists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_songs`
+--
+
+DROP TABLE IF EXISTS `music_songs`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_songs` (
+ `song_id` int(11) unsigned NOT NULL auto_increment,
+ `filename` text NOT NULL,
+ `name` varchar(255) NOT NULL default '',
+ `track` smallint(6) unsigned NOT NULL default '0',
+ `artist_id` int(11) unsigned NOT NULL default '0',
+ `album_id` int(11) unsigned NOT NULL default '0',
+ `genre_id` int(11) unsigned NOT NULL default '0',
+ `year` smallint(6) NOT NULL default '0',
+ `length` int(11) unsigned NOT NULL default '0',
+ `numplays` int(11) unsigned NOT NULL default '0',
+ `rating` tinyint(4) unsigned NOT NULL default '0',
+ `lastplay` datetime default NULL,
+ `date_entered` datetime default NULL,
+ `date_modified` datetime default NULL,
+ `format` varchar(4) NOT NULL default '0',
+ `mythdigest` varchar(255) default NULL,
+ `size` bigint(20) unsigned default NULL,
+ `description` varchar(255) default NULL,
+ `comment` varchar(255) default NULL,
+ `disc_count` smallint(5) unsigned default '0',
+ `disc_number` smallint(5) unsigned default '0',
+ `track_count` smallint(5) unsigned default '0',
+ `start_time` int(10) unsigned default '0',
+ `stop_time` int(10) unsigned default NULL,
+ `eq_preset` varchar(255) default NULL,
+ `relative_volume` tinyint(4) default '0',
+ `sample_rate` int(10) unsigned default '0',
+ `bitrate` int(10) unsigned default '0',
+ `bpm` smallint(5) unsigned default NULL,
+ `directory_id` int(20) NOT NULL default '0',
+ PRIMARY KEY (`song_id`),
+ KEY `idx_name` (`name`),
+ KEY `idx_mythdigest` (`mythdigest`),
+ KEY `directory_id` (`directory_id`),
+ KEY `album_id` (`album_id`),
+ KEY `genre_id` (`genre_id`),
+ KEY `artist_id` (`artist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_songs`
+--
+
+LOCK TABLES `music_songs` WRITE;
+/*!40000 ALTER TABLE `music_songs` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_songs` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_stats`
+--
+
+DROP TABLE IF EXISTS `music_stats`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_stats` (
+ `num_artists` smallint(5) unsigned NOT NULL default '0',
+ `num_albums` smallint(5) unsigned NOT NULL default '0',
+ `num_songs` mediumint(8) unsigned NOT NULL default '0',
+ `num_genres` tinyint(3) unsigned NOT NULL default '0',
+ `total_time` varchar(12) NOT NULL default '0',
+ `total_size` varchar(10) NOT NULL default '0'
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_stats`
+--
+
+LOCK TABLES `music_stats` WRITE;
+/*!40000 ALTER TABLE `music_stats` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_stats` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `musicmetadata`
+--
+
+DROP TABLE IF EXISTS `musicmetadata`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `musicmetadata` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `artist` varchar(128) NOT NULL,
+ `compilation_artist` varchar(128) NOT NULL,
+ `album` varchar(128) NOT NULL,
+ `title` varchar(128) NOT NULL,
+ `genre` varchar(128) NOT NULL,
+ `year` int(10) unsigned NOT NULL,
+ `tracknum` int(10) unsigned NOT NULL,
+ `length` int(10) unsigned NOT NULL,
+ `filename` text NOT NULL,
+ `rating` int(10) unsigned NOT NULL default '5',
+ `lastplay` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `playcount` int(10) unsigned NOT NULL default '0',
+ `mythdigest` varchar(255) default NULL,
+ `size` bigint(20) unsigned default NULL,
+ `date_added` datetime default NULL,
+ `date_modified` datetime default NULL,
+ `format` varchar(4) default NULL,
+ `description` varchar(255) default NULL,
+ `comment` varchar(255) default NULL,
+ `compilation` tinyint(4) default '0',
+ `composer` varchar(255) default NULL,
+ `disc_count` smallint(5) unsigned default '0',
+ `disc_number` smallint(5) unsigned default '0',
+ `track_count` smallint(5) unsigned default '0',
+ `start_time` int(10) unsigned default '0',
+ `stop_time` int(10) unsigned default NULL,
+ `eq_preset` varchar(255) default NULL,
+ `relative_volume` tinyint(4) default '0',
+ `sample_rate` int(10) unsigned default NULL,
+ `bpm` smallint(5) unsigned default NULL,
+ PRIMARY KEY (`intid`),
+ KEY `artist` (`artist`),
+ KEY `album` (`album`),
+ KEY `title` (`title`),
+ KEY `genre` (`genre`),
+ KEY `mythdigest` (`mythdigest`),
+ KEY `compilation_artist` (`compilation_artist`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `musicmetadata`
+--
+
+LOCK TABLES `musicmetadata` WRITE;
+/*!40000 ALTER TABLE `musicmetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `musicmetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `musicplaylist`
+--
+
+DROP TABLE IF EXISTS `musicplaylist`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `musicplaylist` (
+ `playlistid` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) NOT NULL,
+ `hostname` varchar(255) default NULL,
+ `songlist` text NOT NULL,
+ PRIMARY KEY (`playlistid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `musicplaylist`
+--
+
+LOCK TABLES `musicplaylist` WRITE;
+/*!40000 ALTER TABLE `musicplaylist` DISABLE KEYS */;
+/*!40000 ALTER TABLE `musicplaylist` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `mythlog`
+--
+
+DROP TABLE IF EXISTS `mythlog`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `mythlog` (
+ `logid` int(10) unsigned NOT NULL auto_increment,
+ `module` varchar(32) NOT NULL default '',
+ `priority` int(11) NOT NULL default '0',
+ `acknowledged` tinyint(1) default '0',
+ `logdate` datetime default NULL,
+ `host` varchar(128) default NULL,
+ `message` varchar(255) NOT NULL default '',
+ `details` text,
+ PRIMARY KEY (`logid`),
+ KEY `module` (`module`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `mythlog`
+--
+
+LOCK TABLES `mythlog` WRITE;
+/*!40000 ALTER TABLE `mythlog` DISABLE KEYS */;
+/*!40000 ALTER TABLE `mythlog` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `netflix`
+--
+
+DROP TABLE IF EXISTS `netflix`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `netflix` (
+ `name` varchar(100) NOT NULL,
+ `category` varchar(255) NOT NULL,
+ `url` varchar(255) NOT NULL,
+ `ico` varchar(255) default NULL,
+ `updated` int(10) unsigned default NULL,
+ `is_queue` int(10) unsigned default NULL,
+ `queue` varchar(32) NOT NULL default '',
+ PRIMARY KEY (`name`,`queue`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `netflix`
+--
+
+LOCK TABLES `netflix` WRITE;
+/*!40000 ALTER TABLE `netflix` DISABLE KEYS */;
+/*!40000 ALTER TABLE `netflix` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `networkiconmap`
+--
+
+DROP TABLE IF EXISTS `networkiconmap`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `networkiconmap` (
+ `id` int(11) NOT NULL auto_increment,
+ `network` varchar(20) NOT NULL default '',
+ `url` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `network` (`network`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `networkiconmap`
+--
+
+LOCK TABLES `networkiconmap` WRITE;
+/*!40000 ALTER TABLE `networkiconmap` DISABLE KEYS */;
+/*!40000 ALTER TABLE `networkiconmap` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldfind`
+--
+
+DROP TABLE IF EXISTS `oldfind`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldfind` (
+ `recordid` int(11) NOT NULL default '0',
+ `findid` int(11) NOT NULL default '0',
+ PRIMARY KEY (`recordid`,`findid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldfind`
+--
+
+LOCK TABLES `oldfind` WRITE;
+/*!40000 ALTER TABLE `oldfind` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldfind` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldprogram`
+--
+
+DROP TABLE IF EXISTS `oldprogram`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldprogram` (
+ `oldtitle` varchar(128) NOT NULL default '',
+ `airdate` datetime NOT NULL default '0000-00-00 00:00:00',
+ PRIMARY KEY (`oldtitle`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldprogram`
+--
+
+LOCK TABLES `oldprogram` WRITE;
+/*!40000 ALTER TABLE `oldprogram` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldprogram` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldrecorded`
+--
+
+DROP TABLE IF EXISTS `oldrecorded`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldrecorded` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `seriesid` varchar(40) NOT NULL default '',
+ `programid` varchar(40) NOT NULL default '',
+ `findid` int(11) NOT NULL default '0',
+ `recordid` int(11) NOT NULL default '0',
+ `station` varchar(20) NOT NULL default '',
+ `rectype` int(10) unsigned NOT NULL default '0',
+ `duplicate` tinyint(1) NOT NULL default '0',
+ `recstatus` int(11) NOT NULL default '0',
+ `reactivate` smallint(6) NOT NULL default '0',
+ `generic` tinyint(1) default '0',
+ PRIMARY KEY (`station`,`starttime`,`title`),
+ KEY `endtime` (`endtime`),
+ KEY `title` (`title`),
+ KEY `seriesid` (`seriesid`),
+ KEY `programid` (`programid`),
+ KEY `recordid` (`recordid`),
+ KEY `recstatus` (`recstatus`,`programid`,`seriesid`),
+ KEY `recstatus_2` (`recstatus`,`title`,`subtitle`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldrecorded`
+--
+
+LOCK TABLES `oldrecorded` WRITE;
+/*!40000 ALTER TABLE `oldrecorded` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldrecorded` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `people`
+--
+
+DROP TABLE IF EXISTS `people`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `people` (
+ `person` mediumint(8) unsigned NOT NULL auto_increment,
+ `name` char(128) NOT NULL default '',
+ PRIMARY KEY (`person`),
+ UNIQUE KEY `name` (`name`(41))
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `people`
+--
+
+LOCK TABLES `people` WRITE;
+/*!40000 ALTER TABLE `people` DISABLE KEYS */;
+/*!40000 ALTER TABLE `people` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `phonecallhistory`
+--
+
+DROP TABLE IF EXISTS `phonecallhistory`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `phonecallhistory` (
+ `recid` int(10) unsigned NOT NULL auto_increment,
+ `displayname` text NOT NULL,
+ `url` text NOT NULL,
+ `timestamp` text NOT NULL,
+ `duration` int(10) unsigned NOT NULL,
+ `directionin` int(10) unsigned NOT NULL,
+ `directoryref` int(10) unsigned default NULL,
+ PRIMARY KEY (`recid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `phonecallhistory`
+--
+
+LOCK TABLES `phonecallhistory` WRITE;
+/*!40000 ALTER TABLE `phonecallhistory` DISABLE KEYS */;
+/*!40000 ALTER TABLE `phonecallhistory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `phonedirectory`
+--
+
+DROP TABLE IF EXISTS `phonedirectory`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `phonedirectory` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `nickname` text NOT NULL,
+ `firstname` text,
+ `surname` text,
+ `url` text NOT NULL,
+ `directory` text NOT NULL,
+ `photofile` text,
+ `speeddial` int(10) unsigned NOT NULL,
+ `onhomelan` int(10) unsigned default '0',
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `phonedirectory`
+--
+
+LOCK TABLES `phonedirectory` WRITE;
+/*!40000 ALTER TABLE `phonedirectory` DISABLE KEYS */;
+INSERT INTO `phonedirectory` (`intid`, `nickname`, `firstname`, `surname`, `url`, `directory`, `photofile`, `speeddial`, `onhomelan`) VALUES (1,'Me(larch5)','Local Myth Host','larch5','','My MythTVs','',1,1);
+/*!40000 ALTER TABLE `phonedirectory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `pidcache`
+--
+
+DROP TABLE IF EXISTS `pidcache`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `pidcache` (
+ `chanid` smallint(6) NOT NULL default '0',
+ `pid` int(11) NOT NULL default '-1',
+ `tableid` int(11) NOT NULL default '-1',
+ KEY `chanid` (`chanid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `pidcache`
+--
+
+LOCK TABLES `pidcache` WRITE;
+/*!40000 ALTER TABLE `pidcache` DISABLE KEYS */;
+/*!40000 ALTER TABLE `pidcache` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `playgroup`
+--
+
+DROP TABLE IF EXISTS `playgroup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `playgroup` (
+ `name` varchar(32) NOT NULL default '',
+ `titlematch` varchar(255) NOT NULL default '',
+ `skipahead` int(11) NOT NULL default '0',
+ `skipback` int(11) NOT NULL default '0',
+ `timestretch` int(11) NOT NULL default '0',
+ `jump` int(11) NOT NULL default '0',
+ PRIMARY KEY (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `playgroup`
+--
+
+LOCK TABLES `playgroup` WRITE;
+/*!40000 ALTER TABLE `playgroup` DISABLE KEYS */;
+INSERT INTO `playgroup` (`name`, `titlematch`, `skipahead`, `skipback`, `timestretch`, `jump`) VALUES ('Default','',30,5,100,0);
+/*!40000 ALTER TABLE `playgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `powerpriority`
+--
+
+DROP TABLE IF EXISTS `powerpriority`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `powerpriority` (
+ `priorityname` varchar(64) NOT NULL,
+ `recpriority` int(10) NOT NULL default '0',
+ `selectclause` text NOT NULL,
+ PRIMARY KEY (`priorityname`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `powerpriority`
+--
+
+LOCK TABLES `powerpriority` WRITE;
+/*!40000 ALTER TABLE `powerpriority` DISABLE KEYS */;
+/*!40000 ALTER TABLE `powerpriority` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `profilegroups`
+--
+
+DROP TABLE IF EXISTS `profilegroups`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `profilegroups` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) default NULL,
+ `cardtype` varchar(32) NOT NULL default 'V4L',
+ `is_default` int(1) default '0',
+ `hostname` varchar(255) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name` (`name`,`hostname`),
+ KEY `cardtype` (`cardtype`)
+) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `profilegroups`
+--
+
+LOCK TABLES `profilegroups` WRITE;
+/*!40000 ALTER TABLE `profilegroups` DISABLE KEYS */;
+INSERT INTO `profilegroups` (`id`, `name`, `cardtype`, `is_default`, `hostname`) VALUES (1,'Software Encoders (v4l based)','V4L',1,NULL),(2,'MPEG-2 Encoders (PVR-x50, PVR-500)','MPEG',1,NULL),(3,'Hardware MJPEG Encoders (Matrox G200-TV, Miro DC10, etc)','MJPEG',1,NULL),(4,'Hardware HDTV','HDTV',1,NULL),(5,'Hardware DVB Encoders','DVB',1,NULL),(6,'Transcoders','TRANSCODE',1,NULL),(7,'FireWire Input','FIREWIRE',1,NULL),(8,'USB Mpeg-4 Encoder (Plextor ConvertX, etc)','GO7007',1,NULL),(9,'DBOX2 Input','DBOX2',1,NULL),(10,'Freebox Input','Freebox',1,NULL),(11,'HDHomeRun Recorders','HDHOMERUN',1,NULL),(12,'CRC IP Recorders','CRC_IP',1,NULL);
+/*!40000 ALTER TABLE `profilegroups` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `program`
+--
+
+DROP TABLE IF EXISTS `program`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `program` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `category_type` varchar(64) NOT NULL default '',
+ `airdate` year(4) NOT NULL default '0000',
+ `stars` float NOT NULL default '0',
+ `previouslyshown` tinyint(4) NOT NULL default '0',
+ `title_pronounce` varchar(128) NOT NULL default '',
+ `stereo` tinyint(1) NOT NULL default '0',
+ `subtitled` tinyint(1) NOT NULL default '0',
+ `hdtv` tinyint(1) NOT NULL default '0',
+ `closecaptioned` tinyint(1) NOT NULL default '0',
+ `partnumber` int(11) NOT NULL default '0',
+ `parttotal` int(11) NOT NULL default '0',
+ `seriesid` varchar(40) NOT NULL default '',
+ `originalairdate` date default NULL,
+ `showtype` varchar(30) NOT NULL default '',
+ `colorcode` varchar(20) NOT NULL default '',
+ `syndicatedepisodenumber` varchar(20) NOT NULL default '',
+ `programid` varchar(40) NOT NULL default '',
+ `manualid` int(10) unsigned NOT NULL default '0',
+ `generic` tinyint(1) default '0',
+ `listingsource` int(11) NOT NULL default '0',
+ `first` tinyint(1) NOT NULL default '0',
+ `last` tinyint(1) NOT NULL default '0',
+ `audioprop` set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') NOT NULL,
+ `subtitletypes` set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') NOT NULL,
+ `videoprop` set('HDTV','WIDESCREEN','AVC') NOT NULL,
+ PRIMARY KEY (`chanid`,`starttime`,`manualid`),
+ KEY `endtime` (`endtime`),
+ KEY `title` (`title`),
+ KEY `title_pronounce` (`title_pronounce`),
+ KEY `seriesid` (`seriesid`),
+ KEY `id_start_end` (`chanid`,`starttime`,`endtime`),
+ KEY `program_manualid` (`manualid`),
+ KEY `previouslyshown` (`previouslyshown`),
+ KEY `programid` (`programid`,`starttime`),
+ KEY `starttime` (`starttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `program`
+--
+
+LOCK TABLES `program` WRITE;
+/*!40000 ALTER TABLE `program` DISABLE KEYS */;
+/*!40000 ALTER TABLE `program` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `programgenres`
+--
+
+DROP TABLE IF EXISTS `programgenres`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `programgenres` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `relevance` char(1) NOT NULL default '',
+ `genre` char(30) default NULL,
+ PRIMARY KEY (`chanid`,`starttime`,`relevance`),
+ KEY `genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `programgenres`
+--
+
+LOCK TABLES `programgenres` WRITE;
+/*!40000 ALTER TABLE `programgenres` DISABLE KEYS */;
+/*!40000 ALTER TABLE `programgenres` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `programrating`
+--
+
+DROP TABLE IF EXISTS `programrating`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `programrating` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `system` char(8) NOT NULL default '',
+ `rating` char(16) default NULL,
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`system`,`rating`),
+ KEY `starttime` (`starttime`,`system`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `programrating`
+--
+
+LOCK TABLES `programrating` WRITE;
+/*!40000 ALTER TABLE `programrating` DISABLE KEYS */;
+/*!40000 ALTER TABLE `programrating` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recgrouppassword`
+--
+
+DROP TABLE IF EXISTS `recgrouppassword`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recgrouppassword` (
+ `recgroup` varchar(32) NOT NULL default '',
+ `password` varchar(10) NOT NULL default '',
+ PRIMARY KEY (`recgroup`),
+ UNIQUE KEY `recgroup` (`recgroup`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recgrouppassword`
+--
+
+LOCK TABLES `recgrouppassword` WRITE;
+/*!40000 ALTER TABLE `recgrouppassword` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recgrouppassword` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `record`
+--
+
+DROP TABLE IF EXISTS `record`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `record` (
+ `recordid` int(10) unsigned NOT NULL auto_increment,
+ `type` int(10) unsigned NOT NULL default '0',
+ `chanid` int(10) unsigned default NULL,
+ `starttime` time NOT NULL default '00:00:00',
+ `startdate` date NOT NULL default '0000-00-00',
+ `endtime` time NOT NULL default '00:00:00',
+ `enddate` date NOT NULL default '0000-00-00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `profile` varchar(128) NOT NULL default 'Default',
+ `recpriority` int(10) NOT NULL default '0',
+ `autoexpire` int(11) NOT NULL default '0',
+ `maxepisodes` int(11) NOT NULL default '0',
+ `maxnewest` int(11) NOT NULL default '0',
+ `startoffset` int(11) NOT NULL default '0',
+ `endoffset` int(11) NOT NULL default '0',
+ `recgroup` varchar(32) NOT NULL default 'Default',
+ `dupmethod` int(11) NOT NULL default '6',
+ `dupin` int(11) NOT NULL default '15',
+ `station` varchar(20) NOT NULL default '',
+ `seriesid` varchar(40) NOT NULL default '',
+ `programid` varchar(40) NOT NULL default '',
+ `search` int(10) unsigned NOT NULL default '0',
+ `autotranscode` tinyint(1) NOT NULL default '0',
+ `autocommflag` tinyint(1) NOT NULL default '0',
+ `autouserjob1` tinyint(1) NOT NULL default '0',
+ `autouserjob2` tinyint(1) NOT NULL default '0',
+ `autouserjob3` tinyint(1) NOT NULL default '0',
+ `autouserjob4` tinyint(1) NOT NULL default '0',
+ `findday` tinyint(4) NOT NULL default '0',
+ `findtime` time NOT NULL default '00:00:00',
+ `findid` int(11) NOT NULL default '0',
+ `inactive` tinyint(1) NOT NULL default '0',
+ `parentid` int(11) NOT NULL default '0',
+ `transcoder` int(11) NOT NULL default '0',
+ `tsdefault` float NOT NULL default '1',
+ `playgroup` varchar(32) NOT NULL default 'Default',
+ `prefinput` int(10) NOT NULL default '0',
+ `next_record` datetime NOT NULL,
+ `last_record` datetime NOT NULL,
+ `last_delete` datetime NOT NULL,
+ `storagegroup` varchar(32) NOT NULL default 'Default',
+ `avg_delay` int(11) NOT NULL default '100',
+ PRIMARY KEY (`recordid`),
+ KEY `chanid` (`chanid`,`starttime`),
+ KEY `title` (`title`),
+ KEY `seriesid` (`seriesid`),
+ KEY `programid` (`programid`),
+ KEY `maxepisodes` (`maxepisodes`),
+ KEY `search` (`search`),
+ KEY `type` (`type`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `record`
+--
+
+LOCK TABLES `record` WRITE;
+/*!40000 ALTER TABLE `record` DISABLE KEYS */;
+/*!40000 ALTER TABLE `record` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recorded`
+--
+
+DROP TABLE IF EXISTS `recorded`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recorded` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `hostname` varchar(255) NOT NULL default '',
+ `bookmark` tinyint(1) NOT NULL default '0',
+ `editing` int(10) unsigned NOT NULL default '0',
+ `cutlist` tinyint(1) NOT NULL default '0',
+ `autoexpire` int(11) NOT NULL default '0',
+ `commflagged` int(10) unsigned NOT NULL default '0',
+ `recgroup` varchar(32) NOT NULL default 'Default',
+ `recordid` int(11) default NULL,
+ `seriesid` varchar(40) NOT NULL default '',
+ `programid` varchar(40) NOT NULL default '',
+ `lastmodified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `filesize` bigint(20) NOT NULL default '0',
+ `stars` float NOT NULL default '0',
+ `previouslyshown` tinyint(1) default '0',
+ `originalairdate` date default NULL,
+ `preserve` tinyint(1) NOT NULL default '0',
+ `findid` int(11) NOT NULL default '0',
+ `deletepending` tinyint(1) NOT NULL default '0',
+ `transcoder` int(11) NOT NULL default '0',
+ `timestretch` float NOT NULL default '1',
+ `recpriority` int(11) NOT NULL default '0',
+ `basename` varchar(255) NOT NULL,
+ `progstart` datetime NOT NULL default '0000-00-00 00:00:00',
+ `progend` datetime NOT NULL default '0000-00-00 00:00:00',
+ `playgroup` varchar(32) NOT NULL default 'Default',
+ `profile` varchar(32) NOT NULL default '',
+ `duplicate` tinyint(1) NOT NULL default '0',
+ `transcoded` tinyint(1) NOT NULL default '0',
+ `watched` tinyint(4) NOT NULL default '0',
+ `storagegroup` varchar(32) NOT NULL default 'Default',
+ PRIMARY KEY (`chanid`,`starttime`),
+ KEY `endtime` (`endtime`),
+ KEY `seriesid` (`seriesid`),
+ KEY `programid` (`programid`),
+ KEY `title` (`title`),
+ KEY `recordid` (`recordid`),
+ KEY `deletepending` (`deletepending`,`lastmodified`),
+ KEY `recgroup` (`recgroup`,`endtime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recorded`
+--
+
+LOCK TABLES `recorded` WRITE;
+/*!40000 ALTER TABLE `recorded` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recorded` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedcredits`
+--
+
+DROP TABLE IF EXISTS `recordedcredits`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedcredits` (
+ `person` mediumint(8) unsigned NOT NULL default '0',
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `role` set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') NOT NULL default '',
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`person`,`role`),
+ KEY `person` (`person`,`role`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedcredits`
+--
+
+LOCK TABLES `recordedcredits` WRITE;
+/*!40000 ALTER TABLE `recordedcredits` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedcredits` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedfile`
+--
+
+DROP TABLE IF EXISTS `recordedfile`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedfile` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `basename` varchar(128) NOT NULL default '',
+ `filesize` bigint(20) NOT NULL default '0',
+ `width` smallint(5) unsigned NOT NULL default '0',
+ `height` smallint(5) unsigned NOT NULL default '0',
+ `fps` float(6,3) NOT NULL default '0.000',
+ `aspect` float(8,6) NOT NULL default '0.000000',
+ `audio_sample_rate` smallint(5) unsigned NOT NULL default '0',
+ `audio_bits_per_sample` smallint(5) unsigned NOT NULL default '0',
+ `audio_channels` tinyint(3) unsigned NOT NULL default '0',
+ `audio_type` varchar(255) NOT NULL default '',
+ `video_type` varchar(255) NOT NULL default '',
+ `comment` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`chanid`,`starttime`),
+ KEY `basename` (`basename`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedfile`
+--
+
+LOCK TABLES `recordedfile` WRITE;
+/*!40000 ALTER TABLE `recordedfile` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedfile` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedmarkup`
+--
+
+DROP TABLE IF EXISTS `recordedmarkup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedmarkup` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `mark` mediumint(8) unsigned NOT NULL default '0',
+ `offset` varchar(32) default NULL,
+ `type` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`chanid`,`starttime`,`type`,`mark`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedmarkup`
+--
+
+LOCK TABLES `recordedmarkup` WRITE;
+/*!40000 ALTER TABLE `recordedmarkup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedmarkup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedprogram`
+--
+
+DROP TABLE IF EXISTS `recordedprogram`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedprogram` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `title` varchar(128) NOT NULL default '',
+ `subtitle` varchar(128) NOT NULL default '',
+ `description` text NOT NULL,
+ `category` varchar(64) NOT NULL default '',
+ `category_type` varchar(64) NOT NULL default '',
+ `airdate` year(4) NOT NULL default '0000',
+ `stars` float unsigned NOT NULL default '0',
+ `previouslyshown` tinyint(4) NOT NULL default '0',
+ `title_pronounce` varchar(128) NOT NULL default '',
+ `stereo` tinyint(1) NOT NULL default '0',
+ `subtitled` tinyint(1) NOT NULL default '0',
+ `hdtv` tinyint(1) NOT NULL default '0',
+ `closecaptioned` tinyint(1) NOT NULL default '0',
+ `partnumber` int(11) NOT NULL default '0',
+ `parttotal` int(11) NOT NULL default '0',
+ `seriesid` varchar(40) NOT NULL default '',
+ `originalairdate` date default NULL,
+ `showtype` varchar(30) NOT NULL default '',
+ `colorcode` varchar(20) NOT NULL default '',
+ `syndicatedepisodenumber` varchar(20) NOT NULL default '',
+ `programid` varchar(40) NOT NULL default '',
+ `manualid` int(10) unsigned NOT NULL default '0',
+ `generic` tinyint(1) default '0',
+ `listingsource` int(11) NOT NULL default '0',
+ `first` tinyint(1) NOT NULL default '0',
+ `last` tinyint(1) NOT NULL default '0',
+ `audioprop` set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') NOT NULL,
+ `subtitletypes` set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') NOT NULL,
+ `videoprop` set('HDTV','WIDESCREEN','AVC') NOT NULL,
+ PRIMARY KEY (`chanid`,`starttime`,`manualid`),
+ KEY `endtime` (`endtime`),
+ KEY `title` (`title`),
+ KEY `title_pronounce` (`title_pronounce`),
+ KEY `seriesid` (`seriesid`),
+ KEY `programid` (`programid`),
+ KEY `id_start_end` (`chanid`,`starttime`,`endtime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedprogram`
+--
+
+LOCK TABLES `recordedprogram` WRITE;
+/*!40000 ALTER TABLE `recordedprogram` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedprogram` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedrating`
+--
+
+DROP TABLE IF EXISTS `recordedrating`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedrating` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `system` char(8) NOT NULL default '',
+ `rating` char(16) default NULL,
+ UNIQUE KEY `chanid` (`chanid`,`starttime`,`system`,`rating`),
+ KEY `starttime` (`starttime`,`system`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedrating`
+--
+
+LOCK TABLES `recordedrating` WRITE;
+/*!40000 ALTER TABLE `recordedrating` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedrating` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedseek`
+--
+
+DROP TABLE IF EXISTS `recordedseek`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedseek` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `mark` mediumint(8) unsigned NOT NULL default '0',
+ `offset` bigint(20) unsigned NOT NULL,
+ `type` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`chanid`,`starttime`,`type`,`mark`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedseek`
+--
+
+LOCK TABLES `recordedseek` WRITE;
+/*!40000 ALTER TABLE `recordedseek` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedseek` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordingprofiles`
+--
+
+DROP TABLE IF EXISTS `recordingprofiles`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordingprofiles` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) default NULL,
+ `videocodec` varchar(128) default NULL,
+ `audiocodec` varchar(128) default NULL,
+ `profilegroup` int(10) unsigned NOT NULL default '0',
+ PRIMARY KEY (`id`),
+ KEY `profilegroup` (`profilegroup`)
+) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordingprofiles`
+--
+
+LOCK TABLES `recordingprofiles` WRITE;
+/*!40000 ALTER TABLE `recordingprofiles` DISABLE KEYS */;
+INSERT INTO `recordingprofiles` (`id`, `name`, `videocodec`, `audiocodec`, `profilegroup`) VALUES (1,'Default',NULL,NULL,1),(2,'Live TV',NULL,NULL,1),(3,'High Quality',NULL,NULL,1),(4,'Low Quality',NULL,NULL,1),(5,'Default',NULL,NULL,2),(6,'Live TV',NULL,NULL,2),(7,'High Quality',NULL,NULL,2),(8,'Low Quality',NULL,NULL,2),(9,'Default',NULL,NULL,3),(10,'Live TV',NULL,NULL,3),(11,'High Quality',NULL,NULL,3),(12,'Low Quality',NULL,NULL,3),(13,'Default',NULL,NULL,4),(14,'Live TV',NULL,NULL,4),(15,'High Quality',NULL,NULL,4),(16,'Low Quality',NULL,NULL,4),(17,'Default',NULL,NULL,5),(18,'Live TV',NULL,NULL,5),(19,'High Quality',NULL,NULL,5),(20,'Low Quality',NULL,NULL,5),(21,'RTjpeg/MPEG4',NULL,NULL,6),(22,'MPEG2',NULL,NULL,6),(23,'Default',NULL,NULL,8),(24,'Live TV',NULL,NULL,8),(25,'High Quality',NULL,NULL,8),(26,'Low Quality',NULL,NULL,8),(27,'High Quality',NULL,NULL,6),(28,'Medium Quality',NULL,NULL,6),(29,'Low Quality',NULL,NULL,6),(30,'Default',NULL,NULL,10),(31,'Live TV',NULL,NULL,10),(32,'High Quality',NULL,NULL,10),(33,'Low Quality',NULL,NULL,10),(34,'Default',NULL,NULL,11),(35,'Live TV',NULL,NULL,11),(36,'High Quality',NULL,NULL,11),(37,'Low Quality',NULL,NULL,11),(38,'Default',NULL,NULL,12),(39,'Live TV',NULL,NULL,12),(40,'High Quality',NULL,NULL,12),(41,'Low Quality',NULL,NULL,12),(42,'Default',NULL,NULL,7),(43,'Live TV',NULL,NULL,7),(44,'High Quality',NULL,NULL,7),(45,'Low Quality',NULL,NULL,7),(46,'Default',NULL,NULL,9),(47,'Live TV',NULL,NULL,9),(48,'High Quality',NULL,NULL,9),(49,'Low Quality',NULL,NULL,9);
+/*!40000 ALTER TABLE `recordingprofiles` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordmatch`
+--
+
+DROP TABLE IF EXISTS `recordmatch`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordmatch` (
+ `recordid` int(10) unsigned default NULL,
+ `chanid` int(10) unsigned default NULL,
+ `starttime` datetime default NULL,
+ `manualid` int(10) unsigned default NULL,
+ `oldrecduplicate` tinyint(1) default NULL,
+ `recduplicate` tinyint(1) default NULL,
+ `findduplicate` tinyint(1) default NULL,
+ `oldrecstatus` int(11) default NULL,
+ KEY `recordid` (`recordid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordmatch`
+--
+
+LOCK TABLES `recordmatch` WRITE;
+/*!40000 ALTER TABLE `recordmatch` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordmatch` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `romdb`
+--
+
+DROP TABLE IF EXISTS `romdb`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `romdb` (
+ `crc` varchar(64) NOT NULL default '',
+ `name` varchar(128) NOT NULL default '',
+ `description` varchar(128) NOT NULL default '',
+ `category` varchar(128) NOT NULL default '',
+ `year` varchar(10) NOT NULL default '',
+ `manufacturer` varchar(128) NOT NULL default '',
+ `country` varchar(128) NOT NULL default '',
+ `publisher` varchar(128) NOT NULL default '',
+ `platform` varchar(64) NOT NULL default '',
+ `filesize` int(12) default NULL,
+ `flags` varchar(64) NOT NULL default '',
+ `version` varchar(64) NOT NULL default '',
+ `binfile` varchar(64) NOT NULL default '',
+ KEY `crc` (`crc`),
+ KEY `year` (`year`),
+ KEY `category` (`category`),
+ KEY `name` (`name`),
+ KEY `description` (`description`),
+ KEY `platform` (`platform`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `romdb`
+--
+
+LOCK TABLES `romdb` WRITE;
+/*!40000 ALTER TABLE `romdb` DISABLE KEYS */;
+/*!40000 ALTER TABLE `romdb` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `schemalock`
+--
+
+DROP TABLE IF EXISTS `schemalock`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `schemalock` (
+ `schemalock` int(1) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `schemalock`
+--
+
+LOCK TABLES `schemalock` WRITE;
+/*!40000 ALTER TABLE `schemalock` DISABLE KEYS */;
+/*!40000 ALTER TABLE `schemalock` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `settings`
+--
+
+DROP TABLE IF EXISTS `settings`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `settings` (
+ `value` varchar(128) NOT NULL default '',
+ `data` text,
+ `hostname` varchar(255) default NULL,
+ KEY `value` (`value`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `settings`
+--
+
+LOCK TABLES `settings` WRITE;
+/*!40000 ALTER TABLE `settings` DISABLE KEYS */;
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES ('mythfilldatabaseLastRunStart',NULL,NULL),('mythfilldatabaseLastRunEnd',NULL,NULL),('mythfilldatabaseLastRunStatus',NULL,NULL),('DataDirectMessage',NULL,NULL),('HaveRepeats','0',NULL),('DBSchemaVer','1214',NULL),('DefaultTranscoder','0',NULL),('MythFillSuggestedRunTime','1970-01-01T00:00:00',NULL),('MythFillGrabberSuggestsTime','1',NULL),('MythFillFixProgramIDsHasRunOnce','1','larch5'),('Language','EN','larch5'),('BackendServerIP','127.0.0.1','larch5'),('BackendServerPort','6543','larch5'),('BackendStatusPort','6544','larch5'),('SecurityPin','','larch5'),('MasterServerIP','127.0.0.1',NULL),('MasterServerPort','6543',NULL),('TVFormat','NTSC',NULL),('VbiFormat','None',NULL),('FreqTable','us-bcast',NULL),('TimeOffset','None',NULL),('MasterBackendOverride','1',NULL),('DeletesFollowLinks','1',NULL),('TruncateDeletesSlowly','0','larch5'),('HDRingbufferSize','9400',NULL),('MiscStatusScript','','larch5'),('DisableFirewireReset','0','larch5'),('EITTransportTimeout','5',NULL),('EITIgnoresSource','0',NULL),('EITCrawIdleStart','60',NULL),('startupCommand','',NULL),('blockSDWUwithoutClient','1',NULL),('idleWaitForRecordingTime','15',NULL),('StartupSecsBeforeRecording','120',NULL),('WakeupTimeFormat','hh:mm yyyy-MM-dd',NULL),('SetWakeuptimeCommand','',NULL),('ServerHaltCommand','sudo /sbin/halt -p',NULL),('preSDWUCheckCommand','',NULL),('WOLbackendConnectRetry','5',NULL),('WOLbackendCommand','',NULL),('WOLslaveBackendsCommand','',NULL),('JobQueueMaxSimultaneousJobs','1','larch5'),('JobQueueCheckFrequency','60','larch5'),('JobQueueWindowStart','00:00','larch5'),('JobQueueWindowEnd','23:59','larch5'),('JobQueueCPU','0','larch5'),('JobAllowCommFlag','1','larch5'),('JobAllowTranscode','1','larch5'),('JobAllowUserJob1','0','larch5'),('JobAllowUserJob2','0','larch5'),('JobAllowUserJob3','0','larch5'),('JobAllowUserJob4','0','larch5'),('JobsRunOnRecordHost','0',NULL),('AutoCommflagWhileRecording','0',NULL),('JobQueueCommFlagCommand','mythcommflag',NULL),('JobQueueTranscodeCommand','mythtranscode',NULL),('AutoTranscodeBeforeAutoCommflag','0',NULL),('SaveTranscoding','0',NULL),('UserJobDesc1','User Job #1',NULL),('UserJob1','',NULL),('UserJobDesc2','User Job #2',NULL),('UserJob2','',NULL),('UserJobDesc3','User Job #3',NULL),('UserJob3','',NULL),('UserJobDesc4','User Job #4',NULL),('UserJob4','',NULL),('DefaultVideoPlaybackProfile','CPU+','larch5'),('RealtimePriority','1','larch5'),('DecodeExtraAudio','1','larch5'),('AudioNag','1','larch5'),('UseVideoTimebase','0','larch5'),('ClearSavedPosition','1','larch5'),('AltClearSavedPosition','1','larch5'),('JumpToProgramOSD','1','larch5'),('ContinueEmbeddedTVPlay','0','larch5'),('AutomaticSetWatched','0','larch5'),('AlwaysStreamFiles','1','larch5'),('UseOpenGLVSync','0','larch5'),('UseOutputPictureControls','1','larch5'),('AspectOverride','0','larch5'),('AdjustFill','0','larch5'),('LetterboxColour','0','larch5'),('PIPLocation','0','larch5'),('PlaybackExitPrompt','2','larch5'),('EndOfRecordingExitPrompt','1','larch5'),('PlayBoxOrdering','1','larch5'),('PlayBoxEpisodeSort','Date','larch5'),('GeneratePreviewPixmaps','0','larch5'),('PreviewPixmapOffset','64',NULL),('PreviewFromBookmark','1','larch5'),('PlaybackPreview','1','larch5'),('PlaybackBoxStartInTitle','1','larch5'),('ShowGroupInfo','0','larch5'),('AllRecGroupPassword','',NULL),('DisplayRecGroup','All Programs','larch5'),('QueryInitialFilter','0','larch5'),('RememberRecGroup','1','larch5'),('DispRecGroupAsAllProg','0','larch5'),('LiveTVInAllPrograms','0','larch5'),('DisplayGroupDefaultView','0','larch5'),('DisplayGroupTitleSort','0','larch5'),('PlaybackWatchList','1','larch5'),('PlaybackWLStart','0','larch5'),('PlaybackWLAutoExpire','0','larch5'),('PlaybackWLMaxAge','60','larch5'),('PlaybackWLBlackOut','2','larch5'),('SmartForward','0','larch5'),('StickyKeys','0','larch5'),('FFRewReposTime','100','larch5'),('FFRewReverse','1','larch5'),('ExactSeeking','0','larch5'),('AutoCommercialSkip','0','larch5'),('MaximumCommercialSkip','3600',NULL),('CommSkipAllBlanks','1',NULL),('PVR350OutputEnable','0','larch5'),('PVR350EPGAlphaValue','164','larch5'),('PVR350InternalAudioOnly','0','larch5'),('OSDTheme','blueosd','larch5'),('OSDGeneralTimeout','2','larch5'),('OSDProgramInfoTimeout','3','larch5'),('OSDFont','FreeMono.ttf','larch5'),('OSDThemeFontSizeType','default','larch5'),('EnableMHEG','0','larch5'),('PersistentBrowseMode','1','larch5'),('OSDNotifyTimeout','5','larch5'),('UDPNotifyPort','6948','larch5'),('OSDCCFont','FreeMono.ttf','larch5'),('CCBackground','0','larch5'),('DefaultCCMode','0','larch5'),('Prefer708Captions','1','larch5'),('OSDCC708TextZoom','100','larch5'),('OSDCC708DefaultFontType','MonoSerif','larch5'),('OSDCC708MonoSerifFont','FreeMono.ttf','larch5'),('OSDCC708PropSerifFont','FreeMono.ttf','larch5'),('OSDCC708MonoSansSerifFont','FreeMono.ttf','larch5'),('OSDCC708PropSansSerifFont','FreeMono.ttf','larch5'),('OSDCC708CasualFont','FreeMono.ttf','larch5'),('OSDCC708CursiveFont','FreeMono.ttf','larch5'),('OSDCC708CapitalsFont','FreeMono.ttf','larch5'),('OSDCC708MonoSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708PropSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708MonoSansSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708PropSansSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708CasualItalicFont','FreeMono.ttf','larch5'),('OSDCC708CursiveItalicFont','FreeMono.ttf','larch5'),('OSDCC708CapitalsItalicFont','FreeMono.ttf','larch5'),('ChannelOrdering','channum','larch5'),('ChannelFormat','<num> <sign>','larch5'),('LongChannelFormat','<num> <name>','larch5'),('SmartChannelChange','0','larch5'),('LastFreeCard','0',NULL),('LiveTVPriority','0',NULL),('AutoExpireMethod','2',NULL),('AutoExpireDefault','1',NULL),('RerecordWatched','1',NULL),('AutoExpireWatchedPriority','0',NULL),('AutoExpireLiveTVMaxAge','1',NULL),('AutoExpireDayPriority','3',NULL),('AutoExpireExtraSpace','1',NULL),('AutoExpireInsteadOfDelete','0',NULL),('DeletedFifoOrder','0',NULL),('CommercialSkipMethod','255',NULL),('AggressiveCommDetect','1',NULL),('AutoCommercialFlag','1',NULL),('AutoTranscode','0',NULL),('AutoRunUserJob1','0',NULL),('AutoRunUserJob2','0',NULL),('AutoRunUserJob3','0',NULL),('AutoRunUserJob4','0',NULL),('OverTimeCategory','category name',NULL),('CategoryOverTime','30',NULL),('EPGFillType','12','larch5'),('EPGShowCategoryColors','1','larch5'),('EPGShowCategoryText','1','larch5'),('EPGScrollType','1','larch5'),('EPGShowChannelIcon','1','larch5'),('EPGShowFavorites','0','larch5'),('WatchTVGuide','0','larch5'),('chanPerPage','5','larch5'),('timePerPage','4','larch5'),('UnknownTitle','Unknown','larch5'),('UnknownCategory','Unknown','larch5'),('DefaultTVChannel','3','larch5'),('SelectChangesChannel','0','larch5'),('SelChangeRecThreshold','16','larch5'),('EPGEnableJumpToChannel','0',NULL),('Theme','LinHES','larch5'),('RandomTheme','0','larch5'),('ThemeCacheSize','1','larch5'),('ThemePainter','qt','larch5'),('Style','Desktop Style','larch5'),('ThemeFontSizeType','default','larch5'),('MenuTheme','default','larch5'),('XineramaScreen','0','larch5'),('XineramaMonitorAspectRatio','1.3333','larch5'),('GuiSizeForTV','1','larch5'),('HideMouseCursor','1','larch5'),('RunFrontendInWindow','0','larch5'),('UseVideoModes','0','larch5'),('GuiVidModeResolution','640x480','larch5'),('TVVidModeResolution','320x200','larch5'),('TVVidModeForceAspect','0.0','larch5'),('TVVidModeResolution0','320x200','larch5'),('TVVidModeForceAspect0','0.0','larch5'),('TVVidModeResolution1','320x200','larch5'),('TVVidModeForceAspect1','0.0','larch5'),('TVVidModeResolution2','320x200','larch5'),('TVVidModeForceAspect2','0.0','larch5'),('ISO639Language0','eng','larch5'),('ISO639Language1','eng','larch5'),('DateFormat','ddd MMM d','larch5'),('ShortDateFormat','M/d','larch5'),('TimeFormat','h:mm AP','larch5'),('QtFontSmall','12','larch5'),('QtFontMedium','16','larch5'),('QtFontBig','25','larch5'),('PlayBoxTransparency','1','larch5'),('PlayBoxShading','0','larch5'),('UseVirtualKeyboard','1','larch5'),('LCDEnable','0','larch5'),('LCDShowTime','1','larch5'),('LCDShowMenu','1','larch5'),('LCDShowMusic','1','larch5'),('LCDShowMusicItems','ArtistTitle','larch5'),('LCDShowChannel','1','larch5'),('LCDShowRecStatus','0','larch5'),('LCDShowVolume','1','larch5'),('LCDShowGeneric','1','larch5'),('LCDBacklightOn','1','larch5'),('LCDHeartBeatOn','0','larch5'),('LCDBigClock','0','larch5'),('LCDKeyString','ABCDEF','larch5'),('LCDPopupTime','5','larch5'),('AudioOutputDevice','ALSA:default','larch5'),('PassThruOutputDevice','Default','larch5'),('MaxChannels','2','larch5'),('AudioUpmixType','0','larch5'),('AC3PassThru','0','larch5'),('DTSPassThru','0','larch5'),('AggressiveSoundcardBuffer','0','larch5'),('MythControlsVolume','1','larch5'),('MixerDevice','ALSA:default','larch5'),('MixerControl','PCM','larch5'),('MasterMixerVolume','100','larch5'),('PCMMixerVolume','50','larch5'),('IndividualMuteControl','0','larch5'),('LircKeyPressedApp','','larch5'),('AllowQuitShutdown','4','larch5'),('NoPromptOnExit','1','larch5'),('UseArrowAccels','1','larch5'),('NetworkControlEnabled','0','larch5'),('NetworkControlPort','6546','larch5'),('MonitorDrives','0','larch5'),('MediaChangeEvents','0','larch5'),('IgnoreDevices','','larch5'),('SetupPinCodeRequired','0','larch5'),('OverrideExitMenu','0','larch5'),('HaltCommand','sudo /sbin/halt','larch5'),('RebootCommand','sudo /sbin/reboot','larch5'),('EnableXbox','0','larch5'),('LogEnabled','0',NULL),('LogMaxCount','100','larch5'),('LogPrintLevel','8','larch5'),('LogCleanEnabled','0','larch5'),('LogCleanPeriod','14','larch5'),('LogCleanDays','14','larch5'),('LogCleanMax','30','larch5'),('MythFillEnabled','1',NULL),('MythFillDatabasePath','mythfilldatabase',NULL),('MythFillDatabaseArgs','',NULL),('MythFillDatabaseLog','',NULL),('MythFillPeriod','1',NULL),('MythFillMinHour','2',NULL),('MythFillMaxHour','5',NULL),('SchedMoveHigher','1',NULL),('SchedOpenEnd','0',NULL),('ComplexPriority','0',NULL),('PrefInputPriority','2',NULL),('SingleRecordRecPriority','1',NULL),('FindOneRecordRecPriority','-1',NULL),('ArchiveDBSchemaVer','1001',NULL),('MythArchiveTempDir','/myth/tmp','larch5'),('MythArchiveShareDir','/usr/share/mythtv/mytharchive/','larch5'),('MythArchiveVideoFormat','NTSC','larch5'),('MythArchiveFileFilter','*.mpg *.mov *.avi *.mpeg *.nuv','larch5'),('MythArchiveDVDLocation','/dev/dvd','larch5'),('MythArchiveDVDPlayerCmd','Internal','larch5'),('MythArchiveEncodeToAc3','0','larch5'),('MythArchiveCopyRemoteFiles','0','larch5'),('MythArchiveAlwaysUseMythTranscode','1','larch5'),('MythArchiveUseProjectX','0','larch5'),('MythArchiveAddSubtitles','0','larch5'),('MythArchiveUseFIFO','1','larch5'),('MythArchiveDefaultEncProfile','SP','larch5'),('MythArchiveMainMenuAR','16:9','larch5'),('MythArchiveChapterMenuAR','Video','larch5'),('MythArchiveDateFormat','%a %b %d','larch5'),('MythArchiveTimeFormat','%I:%M %p','larch5'),('MythArchiveFfmpegCmd','ffmpeg','larch5'),('MythArchiveMplexCmd','mplex','larch5'),('MythArchiveDvdauthorCmd','dvdauthor','larch5'),('MythArchiveSpumuxCmd','spumux','larch5'),('MythArchiveMpeg2encCmd','mpeg2enc','larch5'),('MythArchiveMkisofsCmd','mkisofs','larch5'),('MythArchiveGrowisofsCmd','growisofs','larch5'),('MythArchiveTcrequantCmd','tcrequant','larch5'),('MythArchiveJpeg2yuvCmd','jpeg2yuv','larch5'),('MythArchiveProjectXCmd','projectx','larch5'),('FlixDBSchemaVer','1001',NULL),('GalleryDBSchemaVer','1000',NULL),('GalleryDir','/myth/gallery','larch5'),('GalleryThumbnailLocation','1','larch5'),('GallerySortOrder','20','larch5'),('GalleryImportDirs','/mnt/cdrom:/mnt/camera','larch5'),('GalleryMoviePlayerCmd','mplayer -fs %s','larch5'),('SlideshowUseOpenGL','0','larch5'),('SlideshowDelay','5','larch5'),('SlideshowOpenGLTransition','none','larch5'),('SlideshowOpenGLTransitionLength','2000','larch5'),('SlideshowTransition','random','larch5'),('SlideshowBackground','black','larch5'),('GameDBSchemaVer','1012',NULL),('MusicDBSchemaVer','1013',NULL),('VisualMode','','larch5'),('MusicLocation','/myth/music/','larch5'),('MusicAudioDevice','default','larch5'),('CDDevice','/dev/cdrom','larch5'),('AutoLookupCD','1','larch5'),('AutoPlayCD','0','larch5'),('KeyboardAccelerators','1','larch5'),('TreeLevels','splitartist artist album title','larch5'),('ArtistTreeGroups','0','larch5'),('NonID3FileNameFormat','GENRE/ARTIST/ALBUM/TRACK_TITLE','larch5'),('Ignore_ID3','0','larch5'),('MusicTagEncoding','utf16','larch5'),('CDWriterEnabled','1','larch5'),('CDDiskSize','1','larch5'),('CDCreateDir','1','larch5'),('CDWriteSpeed','0','larch5'),('CDBlankType','fast','larch5'),('PlayMode','none','larch5'),('ResumeMode','off','larch5'),('MaxSearchResults','300','larch5'),('MusicShowRatings','0','larch5'),('ShowWholeTree','0','larch5'),('ListAsShuffled','0','larch5'),('IntelliRatingWeight','35','larch5'),('IntelliPlayCountWeight','25','larch5'),('IntelliLastPlayWeight','25','larch5'),('IntelliRandomWeight','15','larch5'),('VisualCycleOnSongChange','0','larch5'),('VisualAlbumArtOnSongChange','0','larch5'),('VisualRandomize','0','larch5'),('VisualModeDelay','0','larch5'),('VisualScaleWidth','1','larch5'),('VisualScaleHeight','1','larch5'),('ParanoiaLevel','Full','larch5'),('FilenameTemplate','ARTIST/ALBUM/TRACK-TITLE','larch5'),('NoWhitespace','0','larch5'),('PostCDRipScript','','larch5'),('EjectCDAfterRipping','1','larch5'),('EncoderType','ogg','larch5'),('DefaultRipQuality','1','larch5'),('Mp3UseVBR','0','larch5'),('PhoneDBSchemaVer','1001',NULL),('SipRegisterWithProxy','1','larch5'),('SipProxyName','fwd.pulver.com','larch5'),('SipProxyAuthName','','larch5'),('SipProxyAuthPassword','','larch5'),('MySipName','Me','larch5'),('SipAutoanswer','0','larch5'),('SipBindInterface','eth0','larch5'),('SipLocalPort','5060','larch5'),('NatTraversalMethod','None','larch5'),('NatIpAddress','http://checkip.dyndns.org','larch5'),('AudioLocalPort','21232','larch5'),('VideoLocalPort','21234','larch5'),('MicrophoneDevice','None','larch5'),('CodecPriorityList','GSM;G.711u;G.711a','larch5'),('PlayoutAudioCall','40','larch5'),('PlayoutVideoCall','110','larch5'),('TxResolution','176x144','larch5'),('TransmitFPS','5','larch5'),('TransmitBandwidth','256','larch5'),('CaptureResolution','352x288','larch5'),('TimeToAnswer','10','larch5'),('DefaultVxmlUrl','http://127.0.0.1/vxml/index.vxml','larch5'),('DefaultVoicemailPrompt','I am not at home, please leave a message after the tone','larch5'),('mythvideo.DBSchemaVer','1016',NULL),('VideoStartupDir','/myth/video','larch5'),('VideoArtworkDir','/myth/video/.covers','larch5'),('Default MythVideo View','2','larch5'),('VideoListUnknownFiletypes','1','larch5'),('VideoBrowserNoDB','1','larch5'),('VideoGalleryNoDB','1','larch5'),('VideoTreeNoDB','1','larch5'),('VideoTreeLoadMetaData','1','larch5'),('VideoNewBrowsable','1','larch5'),('mythvideo.sort_ignores_case','1','larch5'),('mythvideo.db_folder_view','1','larch5'),('mythvideo.VideoTreeRemember','1','larch5'),('mythvideo.ImageCacheSize','50','larch5'),('DVDDeviceLocation','/dev/dvd','larch5'),('VCDDeviceLocation','/dev/cdrom','larch5'),('DVDOnInsertDVD','1','larch5'),('DVDDriveSpeed','2','larch5'),('EnableDVDBookmark','1','larch5'),('DVDBookmarkPrompt','1','larch5'),('DVDBookmarkDays','10','larch5'),('MovieListCommandLine','/usr/share/mythtv/mythvideo/scripts/imdb.pl -M tv=no;video=no','larch5'),('MoviePosterCommandLine','/usr/share/mythtv/mythvideo/scripts/imdb.pl -P','larch5'),('MovieDataCommandLine','/usr/share/mythtv/mythvideo/scripts/imdb.pl -D','larch5'),('VideoGalleryColsPerPage','4','larch5'),('VideoGalleryRowsPerPage','3','larch5'),('VideoGallerySubtitle','1','larch5'),('VideoDefaultParentalLevel','4','larch5'),('VideoAggressivePC','0','larch5'),('mythvideo.ParentalLevelFromRating','0','larch5'),('mythvideo.AutoR2PL1','G','larch5'),('mythvideo.AutoR2PL2','PG','larch5'),('mythvideo.AutoR2PL3','PG-13','larch5'),('mythvideo.AutoR2PL4','R:NC-17','larch5'),('VideoDefaultPlayer','mplayer -fs -zoom -quiet -vo xv %s','larch5'),('mythdvd.DVDPlayerCommand','Internal','larch5'),('VCDPlayerCommand','mplayer vcd:// -cdrom-device %d -fs -zoom -vo xv','larch5'),('DVDRipLocation','/myth/tmp','larch5'),('TitlePlayCommand','mplayer dvd://%t -dvd-device %d -fs -zoom -vo xv -aid %a -channels %c','larch5'),('SubTitleCommand','-sid %s','larch5'),('TranscodeCommand','transcode','larch5'),('MTDPort','2442','larch5'),('MTDNiceLevel','20','larch5'),('MTDConcurrentTranscodes','1','larch5'),('MTDLogFlag','0','larch5'),('MTDac3Flag','0','larch5'),('MTDxvidFlag','1','larch5'),('mythvideo.TrustTranscodeFRDetect','1','larch5'),('WeatherDBSchemaVer','1000',NULL),('TVVidModeRefreshRate','0','larch5'),('TVVidModeRefreshRate0','0','larch5'),('TVVidModeRefreshRate1','0','larch5'),('TVVidModeRefreshRate2','0','larch5'),('GalleryRecursiveSlideshow','1','larch5'),('WebBrowserZoomLevel','20','larch5'),('WebBrowserCommand','/usr/bin/mythbrowser','larch5'),('WebBrowserScrollMode','1','larch5'),('WebBrowserScrollSpeed','4','larch5'),('WebBrowserHideScrollbars','0','larch5'),('RepeatMode','all','larch5'),('MusicAutoShowPlayer','1','larch5'),('HOSTOSsize','5','larch5'),('HostMyhostname','type_hostname_here','larch5'),('NetworkControlEnabled','1','larch5');
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('Hostpluginmytharchive','1','larch5'),
+('Hostpluginmythbrowser','1','larch5'),
+('Hostpluginmythcontrols','1','larch5'),
+('Hostpluginmythflix','1','larch5'),
+('Hostpluginmythgallery','1','larch5'),
+('Hostpluginmythgame','1','larch5'),
+('HostpluginmythgameFceu','1','larch5'),
+('HostpluginmythgameMame','1','larch5'),
+('HostpluginmythgameZsnes','1','larch5'),
+('Hostpluginmythmovietime','1','larch5'),
+('Hostpluginmythmusic','1','larch5'),
+('Hostpluginmythnews','1','larch5'),
+('Hostpluginmythphone','1','larch5'),
+('Hostpluginmythsmolt','1','larch5'),
+('Hostpluginmythvideo','1','larch5'),
+('Hostpluginmythvideo_dvdcss','0','larch5'),
+('Hostpluginmythweather','1','larch5'),
+('HostAudiotype','ALSA','larch5'),
+('HostpluginmythgameZsnes','1','larch5'),
+('HostpluginmythgameMame','1','larch5'),
+('Hostpluginmythvideo_dvdcss','0','larch5'),
+('Hostpluginmythappletrailers','1','larch5'),
+('Hostpluginmythstream','1','larch5'),
+('Hostpluginmythvodka','1','larch5'),
+('HostMiro','1','larch5'),
+('HostpluginmythgameXE','1','larch5'),
+('HostpluginmythgameROMDB','1','larch5'),
+('HostXine','1','larch5'),
+('HOSTOSsize','5','larch5'),
+('HostMyhostname','type_hostname_here','larch5'),
+('NetworkControlEnabled','1','larch5'),
+('Hostaccessuser','1','larch5');
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('WOLbackendReconnectWaitTime','5',NULL);
+
+
+/*!40000 ALTER TABLE `settings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `storagegroup`
+--
+
+DROP TABLE IF EXISTS `storagegroup`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `storagegroup` (
+ `id` int(11) NOT NULL auto_increment,
+ `groupname` varchar(32) NOT NULL,
+ `hostname` varchar(64) NOT NULL default '',
+ `dirname` varchar(255) NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `grouphostdir` (`groupname`,`hostname`,`dirname`),
+ KEY `hostname` (`hostname`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `storagegroup`
+--
+
+LOCK TABLES `storagegroup` WRITE;
+/*!40000 ALTER TABLE `storagegroup` DISABLE KEYS */;
+INSERT INTO `storagegroup` (`id`, `groupname`, `hostname`, `dirname`) VALUES (1,'Default','larch5','/myth/tv/');
+/*!40000 ALTER TABLE `storagegroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `tvchain`
+--
+
+DROP TABLE IF EXISTS `tvchain`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `tvchain` (
+ `chanid` int(10) unsigned NOT NULL default '0',
+ `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `chainid` varchar(128) NOT NULL default '',
+ `chainpos` int(10) NOT NULL default '0',
+ `discontinuity` tinyint(1) NOT NULL default '0',
+ `watching` int(10) NOT NULL default '0',
+ `hostprefix` varchar(128) NOT NULL default '',
+ `cardtype` varchar(32) NOT NULL default 'V4L',
+ `input` varchar(32) NOT NULL default '',
+ `channame` varchar(32) NOT NULL default '',
+ `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+ PRIMARY KEY (`chanid`,`starttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `tvchain`
+--
+
+LOCK TABLES `tvchain` WRITE;
+/*!40000 ALTER TABLE `tvchain` DISABLE KEYS */;
+/*!40000 ALTER TABLE `tvchain` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `upnpmedia`
+--
+
+DROP TABLE IF EXISTS `upnpmedia`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `upnpmedia` (
+ `intid` int(10) unsigned NOT NULL default '0',
+ `class` varchar(64) NOT NULL default '',
+ `itemtype` varchar(128) NOT NULL default '',
+ `parentid` int(10) unsigned NOT NULL default '0',
+ `itemproperties` varchar(255) NOT NULL default '',
+ `filepath` varchar(512) NOT NULL default '',
+ `title` varchar(255) NOT NULL default '',
+ `filename` varchar(512) NOT NULL default '',
+ `coverart` varchar(512) NOT NULL default '',
+ PRIMARY KEY (`intid`),
+ KEY `class` (`class`),
+ KEY `filepath` (`filepath`),
+ KEY `parentid` (`parentid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `upnpmedia`
+--
+
+LOCK TABLES `upnpmedia` WRITE;
+/*!40000 ALTER TABLE `upnpmedia` DISABLE KEYS */;
+/*!40000 ALTER TABLE `upnpmedia` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocast`
+--
+
+DROP TABLE IF EXISTS `videocast`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocast` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `cast` varchar(128) NOT NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocast`
+--
+
+LOCK TABLES `videocast` WRITE;
+/*!40000 ALTER TABLE `videocast` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocast` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocategory`
+--
+
+DROP TABLE IF EXISTS `videocategory`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocategory` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `category` varchar(128) NOT NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocategory`
+--
+
+LOCK TABLES `videocategory` WRITE;
+/*!40000 ALTER TABLE `videocategory` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocategory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocountry`
+--
+
+DROP TABLE IF EXISTS `videocountry`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocountry` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `country` varchar(128) NOT NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocountry`
+--
+
+LOCK TABLES `videocountry` WRITE;
+/*!40000 ALTER TABLE `videocountry` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocountry` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videogenre`
+--
+
+DROP TABLE IF EXISTS `videogenre`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videogenre` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `genre` varchar(128) NOT NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videogenre`
+--
+
+LOCK TABLES `videogenre` WRITE;
+/*!40000 ALTER TABLE `videogenre` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videogenre` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadata`
+--
+
+DROP TABLE IF EXISTS `videometadata`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadata` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `title` varchar(128) NOT NULL,
+ `director` varchar(128) NOT NULL,
+ `plot` text,
+ `rating` varchar(128) NOT NULL,
+ `inetref` varchar(255) NOT NULL,
+ `year` int(10) unsigned NOT NULL,
+ `userrating` float NOT NULL,
+ `length` int(10) unsigned NOT NULL,
+ `showlevel` int(10) unsigned NOT NULL,
+ `filename` text NOT NULL,
+ `coverfile` text NOT NULL,
+ `childid` int(11) NOT NULL default '-1',
+ `browse` tinyint(1) NOT NULL default '1',
+ `playcommand` varchar(255) default NULL,
+ `category` int(10) unsigned NOT NULL default '0',
+ PRIMARY KEY (`intid`),
+ KEY `director` (`director`),
+ KEY `title` (`title`),
+ KEY `title_2` (`title`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadata`
+--
+
+LOCK TABLES `videometadata` WRITE;
+/*!40000 ALTER TABLE `videometadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatacast`
+--
+
+DROP TABLE IF EXISTS `videometadatacast`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatacast` (
+ `idvideo` int(10) unsigned NOT NULL,
+ `idcast` int(10) unsigned NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatacast`
+--
+
+LOCK TABLES `videometadatacast` WRITE;
+/*!40000 ALTER TABLE `videometadatacast` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatacast` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatacountry`
+--
+
+DROP TABLE IF EXISTS `videometadatacountry`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatacountry` (
+ `idvideo` int(10) unsigned NOT NULL,
+ `idcountry` int(10) unsigned NOT NULL,
+ KEY `idvideo` (`idvideo`),
+ KEY `idcountry` (`idcountry`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatacountry`
+--
+
+LOCK TABLES `videometadatacountry` WRITE;
+/*!40000 ALTER TABLE `videometadatacountry` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatacountry` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatagenre`
+--
+
+DROP TABLE IF EXISTS `videometadatagenre`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatagenre` (
+ `idvideo` int(10) unsigned NOT NULL,
+ `idgenre` int(10) unsigned NOT NULL,
+ KEY `idvideo` (`idvideo`),
+ KEY `idgenre` (`idgenre`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatagenre`
+--
+
+LOCK TABLES `videometadatagenre` WRITE;
+/*!40000 ALTER TABLE `videometadatagenre` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatagenre` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videosource`
+--
+
+DROP TABLE IF EXISTS `videosource`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videosource` (
+ `sourceid` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(128) NOT NULL default '',
+ `xmltvgrabber` varchar(128) default NULL,
+ `userid` varchar(128) NOT NULL default '',
+ `freqtable` varchar(16) NOT NULL default 'default',
+ `lineupid` varchar(64) default NULL,
+ `password` varchar(64) default NULL,
+ `useeit` smallint(6) NOT NULL default '0',
+ PRIMARY KEY (`sourceid`),
+ UNIQUE KEY `name` (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videosource`
+--
+
+LOCK TABLES `videosource` WRITE;
+/*!40000 ALTER TABLE `videosource` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videosource` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videotypes`
+--
+
+DROP TABLE IF EXISTS `videotypes`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videotypes` (
+ `intid` int(10) unsigned NOT NULL auto_increment,
+ `extension` varchar(128) NOT NULL,
+ `playcommand` varchar(255) NOT NULL,
+ `f_ignore` tinyint(1) default NULL,
+ `use_default` tinyint(1) default NULL,
+ PRIMARY KEY (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videotypes`
+--
+
+LOCK TABLES `videotypes` WRITE;
+/*!40000 ALTER TABLE `videotypes` DISABLE KEYS */;
+INSERT INTO `videotypes` (`intid`, `extension`, `playcommand`, `f_ignore`, `use_default`) VALUES (1,'txt','',1,0),(2,'log','',1,0),(3,'mpg','Internal',0,0),(4,'avi','',0,1),(5,'vob','Internal',0,0),(6,'mpeg','Internal',0,0),(7,'VIDEO_TS','Internal',0,0),(8,'iso','Internal',0,0),(9,'img','Internal',0,0),(10,'mkv','Internal',0,1);
+/*!40000 ALTER TABLE `videotypes` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weatherdatalayout`
+--
+
+DROP TABLE IF EXISTS `weatherdatalayout`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weatherdatalayout` (
+ `location` varchar(64) NOT NULL,
+ `dataitem` varchar(64) NOT NULL,
+ `weatherscreens_screen_id` int(10) unsigned NOT NULL,
+ `weathersourcesettings_sourceid` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`location`,`dataitem`,`weatherscreens_screen_id`,`weathersourcesettings_sourceid`),
+ KEY `weatherdatalayout_FKIndex1` (`weatherscreens_screen_id`),
+ KEY `weatherdatalayout_FKIndex2` (`weathersourcesettings_sourceid`),
+ CONSTRAINT `weatherdatalayout_ibfk_1` FOREIGN KEY (`weatherscreens_screen_id`) REFERENCES `weatherscreens` (`screen_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `weatherdatalayout_ibfk_2` FOREIGN KEY (`weathersourcesettings_sourceid`) REFERENCES `weathersourcesettings` (`sourceid`) ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weatherdatalayout`
+--
+
+LOCK TABLES `weatherdatalayout` WRITE;
+/*!40000 ALTER TABLE `weatherdatalayout` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weatherdatalayout` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weatherscreens`
+--
+
+DROP TABLE IF EXISTS `weatherscreens`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weatherscreens` (
+ `screen_id` int(10) unsigned NOT NULL auto_increment,
+ `draworder` int(10) unsigned NOT NULL,
+ `container` varchar(64) NOT NULL,
+ `hostname` varchar(255) default NULL,
+ `units` tinyint(3) unsigned NOT NULL,
+ PRIMARY KEY (`screen_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weatherscreens`
+--
+
+LOCK TABLES `weatherscreens` WRITE;
+/*!40000 ALTER TABLE `weatherscreens` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weatherscreens` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weathersourcesettings`
+--
+
+DROP TABLE IF EXISTS `weathersourcesettings`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weathersourcesettings` (
+ `sourceid` int(10) unsigned NOT NULL auto_increment,
+ `source_name` varchar(64) NOT NULL,
+ `update_timeout` int(10) unsigned NOT NULL default '600',
+ `retrieve_timeout` int(10) unsigned NOT NULL default '60',
+ `hostname` varchar(255) default NULL,
+ `path` varchar(255) default NULL,
+ `author` varchar(128) default NULL,
+ `version` varchar(32) default NULL,
+ `email` varchar(255) default NULL,
+ `types` mediumtext,
+ PRIMARY KEY (`sourceid`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weathersourcesettings`
+--
+
+LOCK TABLES `weathersourcesettings` WRITE;
+/*!40000 ALTER TABLE `weathersourcesettings` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weathersourcesettings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `websites`
+--
+
+DROP TABLE IF EXISTS `websites`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `websites` (
+ `grp` varchar(255) NOT NULL,
+ `dsc` varchar(255) default NULL,
+ `url` varchar(255) NOT NULL,
+ `updated` int(10) unsigned default NULL,
+ PRIMARY KEY (`url`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `websites`
+--
+
+LOCK TABLES `websites` WRITE;
+/*!40000 ALTER TABLE `websites` DISABLE KEYS */;
+INSERT INTO `websites` (`grp`, `dsc`, `url`, `updated`) VALUES ('LinHES','','http://knoppmyth.net',NULL),('LinHES','','http://knoppmythwiki.org',NULL);
+/*!40000 ALTER TABLE `websites` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2008-09-07 21:09:33
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/mythdb.install b/abs/core/mythtv/old/stable-0.21/mythdb-initial/mythdb.install
new file mode 100755
index 0000000..4834c69
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/mythdb.install
@@ -0,0 +1,31 @@
+mydate=`date +%m-%d-%y`
+HOST=`hostname`
+post_install() {
+#echo backup the old database
+ mysqldump mythconverg >/data/database/mythconverg.${mydate}.sql
+# echo dropping the old database
+ mysql -u root -e 'drop database mythconverg;'
+ mysql -u root -e 'create database mythconverg;'
+ echo installing the default database
+ if [ $HOST = 'larch5' ]
+ then
+ cp /data/database/mc.sql.initial /data/database/mc.sql.fixed
+ cp /data/database/permissions.sql /data/database/permissions.sql.fixed
+ else
+ sed -e "s/larch5/$HOST/g" /data/database/mc.sql.initial > /data/database/mc.sql.fixed
+ sed -e "s/larch5/$HOST/g" /data/database/permissions.sql > /data/database/permissions.sql.fixed
+
+ fi
+
+ mysql mythconverg < /data/database/mc.sql.fixed 2>/dev/null
+ mysql < /data/database/permissions.sql.fixed 2>/dev/null
+
+ rm /data/database/mc.sql.initial
+}
+post_upgrade() {
+ echo "nothing to do"
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/permissions.sql b/abs/core/mythtv/old/stable-0.21/mythdb-initial/permissions.sql
new file mode 100755
index 0000000..5a36e15
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/permissions.sql
@@ -0,0 +1,11 @@
+
+GRANT ALL ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
+GRANT ALL ON mythconverg.* TO mythtv@'%' IDENTIFIED BY "mythtv";
+GRANT ALL ON mythconverg.* TO mythtv@myhost IDENTIFIED BY "mythtv";
+GRANT FILE ON *.* TO 'mythtv'@'%';
+FLUSH PRIVILEGES;
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@'%' IDENTIFIED BY "mythtv";
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@myhost IDENTIFIED BY "mythtv";
+FLUSH PRIVILEGES;
+ALTER DATABASE mythconverg DEFAULT CHARACTER SET latin1;
diff --git a/abs/core/mythtv/old/stable-0.21/mythflix/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythflix/PKGBUILD
new file mode 100644
index 0000000..5423c06
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythflix/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Maintainer: kleptophobiac@gmail.com
+
+pkgname=mythflix
+PLUGIN=$pkgname
+pkgver=0.21
+pkgrel=5
+pkgdesc="Netflix access plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+ svn update
+ cd $startdir/src/mythplugins
+ grep -q programs-libs.pro $PLUGIN/$PLUGIN/$PLUGIN.pro
+ if [ $? != 0 ]
+ then
+ echo "include ( ../../programs-libs.pro )" >> $PLUGIN/$PLUGIN/$PLUGIN.pro
+ msg "appending program lib"
+ fi
+ cd -
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ ./configure --prefix=/usr --disable-all --enable-opengl --enable-mythflix
+
+ qmake mythplugins.pro
+ make qmake || return 1
+# make -j 2 || return 1
+ make || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythgallery/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythgallery/PKGBUILD
new file mode 100644
index 0000000..bdf7b57
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythgallery/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythgallery
+pkgver=0.21
+pkgrel=5
+pkgdesc="Image gallery plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'libexif' 'libtiff')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+ svn update
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ ./configure --prefix=/usr --disable-all --enable-opengl --enable-mythgallery --enable-exif
+
+ qmake mythplugins.pro
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythgame/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythgame/PKGBUILD
new file mode 100644
index 0000000..aac284a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythgame/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythgame
+pkgver=0.21
+pkgrel=4
+pkgdesc="Emulation plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'zlib')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ export QMAKESPEC='linux-g++'
+ source /etc/profile.d/qt3.sh
+# svn update
+
+ ./configure --prefix=/usr --disable-all --enable-opengl --enable-mythgame
+
+ qmake mythplugins.pro
+ make qmake || return 1
+# make -j 2 || return 1
+ make || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythmovies/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythmovies/PKGBUILD
new file mode 100644
index 0000000..c07b3a2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythmovies/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythmovies
+pkgver=0.21
+pkgrel=5
+pkgdesc="Displays information about movies playing in the area."
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=('mythtv>=${pkgver}')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+ svn update
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+
+ ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythmovies
+
+ qmake mythplugins.pro
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythmusic/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythmusic/PKGBUILD
new file mode 100644
index 0000000..b422f34
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythmusic/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 5680 2008-07-20 05:15:42Z eric $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythmusic
+pkgver=0.21
+pkgrel=12
+pkgdesc="Music playing plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'libid3tag' 'libmad' 'libvorbis' 'flac>=1.1.4' 'libcdaudio' \
+ 'cdparanoia' 'fftw2' 'sdl' 'faad2>=2.6.1' 'lame' 'taglib' \
+ 'libvisual-plugins' 'libvisual-projectm')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ ./configure --prefix=/usr --disable-all --enable-mythmusic --enable-fftw \
+ --enable-sdl --enable-aac --enable-opengl --enable-libvisual
+
+ qmake mythplugins.pro
+ make qmake || return 1
+# make -j 2 || return 1
+ make
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythmusic/music_flac.patch b/abs/core/mythtv/old/stable-0.21/mythmusic/music_flac.patch
new file mode 100644
index 0000000..b152249
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythmusic/music_flac.patch
@@ -0,0 +1,293 @@
+--- flacdecoder.cpp.old 2007-03-11 18:14:37.000000000 -0400
++++ flacdecoder.cpp 2007-03-11 18:15:34.000000000 -0400
+@@ -17,7 +17,7 @@
+
+ #include <qtimer.h>
+
+-static FLAC__SeekableStreamDecoderReadStatus flacread(const FLAC__SeekableStreamDecoder *decoder, FLAC__byte bufferp[], unsigned *bytes, void *client_data)
++static FLAC__StreamDecoderReadStatus flacread(const FLAC__StreamDecoder *decoder, FLAC__byte bufferp[], unsigned *bytes, void *client_data)
+ {
+ decoder = decoder;
+
+@@ -26,27 +26,27 @@
+
+ if (len == -1)
+ {
+- return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR;
++ return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
+ }
+
+ *bytes = len;
+- return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK;
++ return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
+ }
+
+-static FLAC__SeekableStreamDecoderSeekStatus flacseek(const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data)
++static FLAC__StreamDecoderSeekStatus flacseek(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data)
+ {
+ decoder = decoder;
+ FlacDecoder *dflac = (FlacDecoder *)client_data;
+
+ if (!dflac->input()->isDirectAccess())
+- return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR;
++ return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
+
+ if (dflac->input()->at(absolute_byte_offset))
+- return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK;
+- return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR;
++ return FLAC__STREAM_DECODER_SEEK_STATUS_OK;
++ return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
+ }
+
+-static FLAC__SeekableStreamDecoderTellStatus flactell(const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
++static FLAC__StreamDecoderTellStatus flactell(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
+ {
+ decoder = decoder;
+ FlacDecoder *dflac = (FlacDecoder *)client_data;
+@@ -54,20 +54,20 @@
+ long t = dflac->input()->at();
+ *absolute_byte_offset = t;
+
+- return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK;
++ return FLAC__STREAM_DECODER_TELL_STATUS_OK;
+ }
+
+-static FLAC__SeekableStreamDecoderLengthStatus flaclength(const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data)
++static FLAC__StreamDecoderLengthStatus flaclength(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data)
+ {
+ decoder = decoder;
+
+ FlacDecoder *dflac = (FlacDecoder *)client_data;
+
+ *stream_length = dflac->input()->size();
+- return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK;
++ return FLAC__STREAM_DECODER_LENGTH_STATUS_OK;
+ }
+
+-static FLAC__bool flaceof(const FLAC__SeekableStreamDecoder *decoder, void *client_data)
++static FLAC__bool flaceof(const FLAC__StreamDecoder *decoder, void *client_data)
+ {
+ decoder = decoder;
+
+@@ -76,7 +76,7 @@
+ return dflac->input()->atEnd();
+ }
+
+-static FLAC__StreamDecoderWriteStatus flacwrite(const FLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
++static FLAC__StreamDecoderWriteStatus flacwrite(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
+ {
+ decoder = decoder;
+
+@@ -132,7 +132,7 @@
+ }
+ }
+
+-static void flacmetadata(const FLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
++static void flacmetadata(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
+ {
+ decoder = decoder;
+
+@@ -156,11 +156,11 @@
+ }
+ }
+
+-static void flacerror(const FLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
++static void flacerror(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
+ {
+ decoder = decoder;
+
+- FLAC__FileDecoder *file_decoder = (FLAC__FileDecoder *)client_data;
++ FLAC__StreamDecoder *file_decoder = (FLAC__StreamDecoder *)client_data;
+
+ file_decoder = file_decoder;
+ status = status;
+@@ -262,17 +262,8 @@
+ }
+ }
+
+- decoder = FLAC__seekable_stream_decoder_new();
+- FLAC__seekable_stream_decoder_set_md5_checking(decoder, false);
+- FLAC__seekable_stream_decoder_set_read_callback(decoder, flacread);
+- FLAC__seekable_stream_decoder_set_seek_callback(decoder, flacseek);
+- FLAC__seekable_stream_decoder_set_tell_callback(decoder, flactell);
+- FLAC__seekable_stream_decoder_set_length_callback(decoder, flaclength);
+- FLAC__seekable_stream_decoder_set_eof_callback(decoder, flaceof);
+- FLAC__seekable_stream_decoder_set_write_callback(decoder, flacwrite);
+- FLAC__seekable_stream_decoder_set_metadata_callback(decoder, flacmetadata);
+- FLAC__seekable_stream_decoder_set_error_callback(decoder, flacerror);
+- FLAC__seekable_stream_decoder_set_client_data(decoder, this);
++ decoder = FLAC__stream_decoder_new();
++ FLAC__stream_decoder_set_md5_checking(decoder, false);
+
+ freq = 0;
+ bitrate = 0;
+@@ -281,8 +272,17 @@
+ totalTime = 0;
+ totalTime = totalTime < 0 ? 0 : totalTime;
+
+- FLAC__seekable_stream_decoder_init(decoder);
+- FLAC__seekable_stream_decoder_process_until_end_of_metadata(decoder);
++ FLAC__stream_decoder_init_stream(decoder,
++ flacread,
++ flacseek,
++ flactell,
++ flaclength,
++ flaceof,
++ flacwrite,
++ flacmetadata,
++ flacerror,
++ this);
++ FLAC__stream_decoder_process_until_end_of_metadata(decoder);
+
+ inited = TRUE;
+ return TRUE;
+@@ -295,8 +295,8 @@
+
+ void FlacDecoder::deinit()
+ {
+- FLAC__seekable_stream_decoder_finish(decoder);
+- FLAC__seekable_stream_decoder_delete(decoder);
++ FLAC__stream_decoder_finish(decoder);
++ FLAC__stream_decoder_delete(decoder);
+
+ if (input()->isOpen())
+ input()->close();
+@@ -330,7 +330,7 @@
+ }
+
+ bool flacok = true;
+- FLAC__SeekableStreamDecoderState decoderstate;
++ FLAC__StreamDecoderState decoderstate;
+
+ while (! done && ! finish) {
+ lock();
+@@ -340,12 +340,12 @@
+ FLAC__uint64 sample = (FLAC__uint64)(seekTime * 44100.0);
+ if (sample > totalsamples - 50)
+ sample = totalsamples - 50;
+- FLAC__seekable_stream_decoder_seek_absolute(decoder, sample);
++ FLAC__stream_decoder_seek_absolute(decoder, sample);
+ seekTime = -1.0;
+ }
+
+- flacok = FLAC__seekable_stream_decoder_process_single(decoder);
+- decoderstate = FLAC__seekable_stream_decoder_get_state(decoder);
++ flacok = FLAC__stream_decoder_process_single(decoder);
++ decoderstate = FLAC__stream_decoder_get_state(decoder);
+
+ if (decoderstate == 0 || decoderstate == 1)
+ {
+--- flacdecoder.h.old 2007-03-11 18:14:37.000000000 -0400
++++ flacdecoder.h 2007-03-11 18:14:12.000000000 -0400
+@@ -35,7 +35,7 @@
+ char *output_buf;
+ ulong output_bytes, output_at;
+
+- FLAC__SeekableStreamDecoder *decoder;
++ FLAC__StreamDecoder *decoder;
+
+ unsigned int bks;
+ bool done, finish;
+--- flacencoder.cpp.old 2007-03-11 18:14:37.000000000 -0400
++++ flacencoder.cpp 2007-03-11 18:14:12.000000000 -0400
+@@ -9,7 +9,7 @@
+ #include "flacencoder.h"
+ #include "metaioflacvorbiscomment.h"
+
+-#include <FLAC/file_encoder.h>
++#include <FLAC/stream_encoder.h>
+ #include <FLAC/assert.h>
+ #include <mythtv/mythcontext.h>
+
+@@ -29,32 +29,32 @@
+ int rice_parameter_search_dist = 0;
+ int max_lpc_order = 8;
+
+- encoder = FLAC__file_encoder_new();
++ encoder = FLAC__stream_encoder_new();
+
+- FLAC__file_encoder_set_streamable_subset(encoder, true);
+- FLAC__file_encoder_set_do_mid_side_stereo(encoder, do_mid_side);
+- FLAC__file_encoder_set_loose_mid_side_stereo(encoder, loose_mid_side);
+- FLAC__file_encoder_set_channels(encoder, NUM_CHANNELS);
+- FLAC__file_encoder_set_bits_per_sample(encoder, 16);
+- FLAC__file_encoder_set_sample_rate(encoder, 44100);
+- FLAC__file_encoder_set_blocksize(encoder, blocksize);
+- FLAC__file_encoder_set_max_lpc_order(encoder, max_lpc_order);
+- FLAC__file_encoder_set_qlp_coeff_precision(encoder, qlp_coeff_precision);
+- FLAC__file_encoder_set_do_qlp_coeff_prec_search(encoder, false);
+- FLAC__file_encoder_set_do_escape_coding(encoder, do_escape_coding);
+- FLAC__file_encoder_set_do_exhaustive_model_search(encoder,
++ FLAC__stream_encoder_set_streamable_subset(encoder, true);
++ FLAC__stream_encoder_set_do_mid_side_stereo(encoder, do_mid_side);
++ FLAC__stream_encoder_set_loose_mid_side_stereo(encoder, loose_mid_side);
++ FLAC__stream_encoder_set_channels(encoder, NUM_CHANNELS);
++ FLAC__stream_encoder_set_bits_per_sample(encoder, 16);
++ FLAC__stream_encoder_set_sample_rate(encoder, 44100);
++ FLAC__stream_encoder_set_blocksize(encoder, blocksize);
++ FLAC__stream_encoder_set_max_lpc_order(encoder, max_lpc_order);
++ FLAC__stream_encoder_set_qlp_coeff_precision(encoder, qlp_coeff_precision);
++ FLAC__stream_encoder_set_do_qlp_coeff_prec_search(encoder, false);
++ FLAC__stream_encoder_set_do_escape_coding(encoder, do_escape_coding);
++ FLAC__stream_encoder_set_do_exhaustive_model_search(encoder,
+ do_exhaustive_model_search);
+- FLAC__file_encoder_set_min_residual_partition_order(encoder,
++ FLAC__stream_encoder_set_min_residual_partition_order(encoder,
+ min_residual_partition_order);
+- FLAC__file_encoder_set_max_residual_partition_order(encoder,
++ FLAC__stream_encoder_set_max_residual_partition_order(encoder,
+ max_residual_partition_order);
+- FLAC__file_encoder_set_rice_parameter_search_dist(encoder,
++ FLAC__stream_encoder_set_rice_parameter_search_dist(encoder,
+ rice_parameter_search_dist);
+
+- FLAC__file_encoder_set_filename(encoder, outfile.local8Bit());
++
+
+- int ret = FLAC__file_encoder_init(encoder);
+- if (ret != FLAC__FILE_ENCODER_OK)
++ int ret = FLAC__stream_encoder_init_file(encoder, outfile.local8Bit(), NULL, NULL);
++ if (ret != FLAC__STREAM_ENCODER_OK)
+ {
+ VERBOSE(VB_GENERAL, QString("Error initializing FLAC encoder."
+ " Got return code: %1").arg(ret));
+@@ -70,8 +70,8 @@
+
+ if (encoder)
+ {
+- FLAC__file_encoder_finish(encoder);
+- FLAC__file_encoder_delete(encoder);
++ FLAC__stream_encoder_finish(encoder);
++ FLAC__stream_encoder_delete(encoder);
+ }
+
+ if (metadata)
+@@ -102,7 +102,7 @@
+
+ if(sampleindex == MAX_SAMPLES || (length == 0 && sampleindex > 0) )
+ {
+- if (!FLAC__file_encoder_process(encoder,
++ if (!FLAC__stream_encoder_process(encoder,
+ (const FLAC__int32 * const *) input,
+ sampleindex))
+ {
+--- flacencoder.h.old 2007-03-11 18:14:37.000000000 -0400
++++ flacencoder.h 2007-03-11 18:14:12.000000000 -0400
+@@ -4,7 +4,7 @@
+ #include <qstring.h>
+
+ #define HAVE_INTTYPES_H
+-#include <FLAC/file_encoder.h>
++#include <FLAC/stream_encoder.h>
+
+ #include "encoder.h"
+
+@@ -21,7 +21,7 @@
+ int addSamples(int16_t *bytes, unsigned int len);
+
+ private:
+- FLAC__FileEncoder *encoder;
++ FLAC__StreamEncoder *encoder;
+ unsigned int sampleindex;
+ FLAC__int32 inputin[NUM_CHANNELS][MAX_SAMPLES];
+ FLAC__int32 *input[NUM_CHANNELS];
diff --git a/abs/core/mythtv/old/stable-0.21/mythmusic/mythmusic-0.21.patch b/abs/core/mythtv/old/stable-0.21/mythmusic/mythmusic-0.21.patch
new file mode 100644
index 0000000..f3fa930
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythmusic/mythmusic-0.21.patch
@@ -0,0 +1,22 @@
+diff -ur mythplugins-0.21.old/mythmusic/mythmusic/aacdecoder.cpp mythplugins-0.21/mythmusic/mythmusic/aacdecoder.cpp
+--- mythplugins-0.21.old/mythmusic/mythmusic/aacdecoder.cpp 2007-08-25 17:49:44.000000000 +0200
++++ mythplugins-0.21/mythmusic/mythmusic/aacdecoder.cpp 2008-03-27 00:16:38.000000000 +0100
+@@ -19,6 +19,7 @@
+ #include <qobject.h>
+ #include <qiodevice.h>
+ #include <qfile.h>
++#include <stdlib.h>
+
+ #include "aacdecoder.h"
+ #include "constants.h"
+diff -ur mythplugins-0.21.old/mythmusic/mythmusic/metaiomp4.cpp mythplugins-0.21/mythmusic/mythmusic/metaiomp4.cpp
+--- mythplugins-0.21.old/mythmusic/mythmusic/metaiomp4.cpp 2006-08-22 04:06:03.000000000 +0200
++++ mythplugins-0.21/mythmusic/mythmusic/metaiomp4.cpp 2008-03-27 00:17:05.000000000 +0100
+@@ -3,6 +3,7 @@
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <sys/types.h>
++#include <stdlib.h>
+
+ using namespace std;
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythnews/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythnews/PKGBUILD
new file mode 100644
index 0000000..1f22161
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythnews/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythnews
+pkgver=0.21
+pkgrel=4
+pkgdesc="News checking plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+ svn update
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ ./configure --prefix=/usr --disable-all --enable-mythnews
+
+ qmake mythplugins.pro
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythphone/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythphone/PKGBUILD
new file mode 100644
index 0000000..1ce2d5a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythphone/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythphone
+pkgver=0.21
+pkgrel=3
+pkgdesc="Plugin that allows phone calls to be made to MythTv"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythphone || return 1
+
+ qmake mythplugins.pro || return 1
+ make qmake || return 1
+ sed -i 's#kde3#kde#' ./mythphone/mythphone/Makefile || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythsmolt/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythsmolt/PKGBUILD
new file mode 100644
index 0000000..25c91cf
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythsmolt/PKGBUILD
@@ -0,0 +1,26 @@
+pkgname=mythsmolt
+pkgver=0.21
+pkgrel=8
+pkgdesc="mythsmolt, a hardware profileing tool"
+arch=('i686' 'x86_64')
+url="http://www.mythvantage.com"
+license=('GPL')
+depends=("mythtv>=${pkgver}" urlgrabber)
+source=("http://www.mythvantage.com/request.php?4")
+
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythsmolt_src/mythsmolt
+ . /etc/profile.d/qt3.sh
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ echo "INCLUDEPATH += /usr/include/mythtv" >> mythsmolt.pro.usr
+
+ qmake mythsmolt.pro.usr
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythstream/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythstream/PKGBUILD
new file mode 100644
index 0000000..275afa8
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythstream/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythstream
+pkgver=0.18_1
+pkgrel=8
+pkgdesc="Unofficial MythTV plugin for Internet audio and video streams."
+arch=('i686' 'x86_64')
+url="http://home.kabelfoon.nl/~moongies/streamtuned.html"
+license=('GPL')
+depends=('mythtv' 'perl-xml-simple')
+source=("http://home.kabelfoon.nl/~moongies/sw9vc4htz2/mythstream-v0.18_1.tar.gz" "http://home.kabelfoon.nl/~moongies/sw9vc4htz2/mythstream.cpp.patch_svn20071123" "mythstream.diff")
+md5sums=('')
+install=mythstream.install
+groups=('mythtv-extras')
+install=mythstream.install
+
+build() {
+ cd $startdir/src/mythstream-0.18_1
+ patch -p1 < ../mythstream.diff
+ patch -p0 < ../mythstream.cpp.patch_svn20071123
+ ln -s ../../../mythtv/src/mythtv-0.21/libs/lib* .
+ . /etc/profile.d/qt3.sh
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ echo "INCLUDEPATH += /usr/include/mythtv" >> mythstream/mythstream.pro
+
+ qmake mythstream.pro
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.diff b/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.diff
new file mode 100644
index 0000000..477881c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.diff
@@ -0,0 +1,79 @@
+diff -ruaN mythstream-0.18_1.orig/libs/fft.cpp mythstream-0.18_1/libs/fft.cpp
+--- mythstream-0.18_1.orig/libs/fft.cpp 2006-11-06 22:50:22.000000000 +0000
++++ mythstream-0.18_1/libs/fft.cpp 2009-01-26 02:44:33.000000000 +0000
+@@ -23,7 +23,7 @@
+ // development snapshot, many todo's
+
+ #include <iostream>
+-
++#include <math.h>
+
+ #include <qapplication.h>
+ #include <unistd.h>
+diff -ruaN mythstream-0.18_1.orig/libs/harvester.cpp mythstream-0.18_1/libs/harvester.cpp
+--- mythstream-0.18_1.orig/libs/harvester.cpp 2007-09-25 22:58:20.000000000 +0000
++++ mythstream-0.18_1/libs/harvester.cpp 2009-01-26 02:44:55.000000000 +0000
+@@ -47,6 +47,7 @@
+ #include <qdom.h>
+
+ #include <sys/stat.h>
++#include <cstdlib>
+
+ #include "harvester.h"
+
+diff -ruaN mythstream-0.18_1.orig/libs/recorder.cpp mythstream-0.18_1/libs/recorder.cpp
+--- mythstream-0.18_1.orig/libs/recorder.cpp 2005-05-14 13:22:51.000000000 +0000
++++ mythstream-0.18_1/libs/recorder.cpp 2009-01-26 02:45:14.000000000 +0000
+@@ -34,6 +34,7 @@
+ #include <qvbox.h>
+ #include <qlayout.h>
+ #include <qregexp.h>
++#include <cstdlib>
+
+ #include <qurl.h>
+
+diff -ruaN mythstream-0.18_1.orig/libs/storageconfig.cpp mythstream-0.18_1/libs/storageconfig.cpp
+--- mythstream-0.18_1.orig/libs/storageconfig.cpp 2007-09-05 21:03:14.000000000 +0000
++++ mythstream-0.18_1/libs/storageconfig.cpp 2009-01-26 02:45:35.000000000 +0000
+@@ -26,6 +26,7 @@
+ #include <qlayout.h>
+ #include <qcursor.h>
+ #include <qregexp.h>
++#include <cstdlib>
+
+ #include "storageconfig.h"
+
+diff -ruaN mythstream-0.18_1.orig/libs/streamconfig.cpp mythstream-0.18_1/libs/streamconfig.cpp
+--- mythstream-0.18_1.orig/libs/streamconfig.cpp 2007-09-05 20:36:21.000000000 +0000
++++ mythstream-0.18_1/libs/streamconfig.cpp 2009-01-26 02:45:48.000000000 +0000
+@@ -28,6 +28,7 @@
+ #include <qregexp.h>
+ #include <qtextedit.h>
+ #include <qtextstream.h>
++#include <cstdlib>
+
+ #include "streamconfig.h"
+
+diff -ruaN mythstream-0.18_1.orig/libs/streamstatus.cpp mythstream-0.18_1/libs/streamstatus.cpp
+--- mythstream-0.18_1.orig/libs/streamstatus.cpp 2007-09-19 00:13:45.000000000 +0000
++++ mythstream-0.18_1/libs/streamstatus.cpp 2009-01-26 02:46:05.000000000 +0000
+@@ -38,7 +38,7 @@
+ #include <qregexp.h>
+ #include <qurl.h>
+ #include <math.h>
+-
++#include <cstdlib>
+
+ #include "streamstatus.h"
+
+diff -ruaN mythstream-0.18_1.orig/libs/streamstorage.cpp mythstream-0.18_1/libs/streamstorage.cpp
+--- mythstream-0.18_1.orig/libs/streamstorage.cpp 2007-09-23 18:26:15.000000000 +0000
++++ mythstream-0.18_1/libs/streamstorage.cpp 2009-01-26 02:46:28.000000000 +0000
+@@ -34,6 +34,7 @@
+
+ #include "streamstorage.h"
+ #include "configelements.h"
++#include <cstdlib>
+
+ #include <sys/stat.h>
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.install b/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.install
new file mode 100644
index 0000000..5af96f2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.install
@@ -0,0 +1,23 @@
+# arg 1: the new package version
+post_install() {
+ mv /usr/share/mythtv/is.xml /tmp
+ grep -v -e /mythmenu /tmp/is.xml > /tmp/is.xml.tmp
+ echo "<!--#MythStream-->" >> /tmp/is.xml.tmp
+ echo " <button>" >> /tmp/is.xml.tmp
+ echo " <type>STREAM</type>" >> /tmp/is.xml.tmp
+ echo " <text>MythStream</text>" >> /tmp/is.xml.tmp
+ echo " <action>PLUGIN mythstream</action>" >> /tmp/is.xml.tmp
+ echo " </button>" >> /tmp/is.xml.tmp
+ echo "<!--#MythStream-->" >> /tmp/is.xml.tmp
+ echo "" >> /tmp/is.xml.tmp
+ echo "</mythmenu>" >> /tmp/is.xml.tmp
+ mv /tmp/is.xml.tmp /usr/share/mythtv/is.xml
+}
+post_remove() {
+ mv /usr/share/mythtv/is.xml /tmp/is.xml.tmp
+ sed -e '/\#MythStream/,/\#MythStream/d' < /tmp/is.xml.tmp > /usr/share/mythtv/is.xml
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/myththemes/PKGBUILD b/abs/core/mythtv/old/stable-0.21/myththemes/PKGBUILD
new file mode 100644
index 0000000..6c0a0bb
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/myththemes/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=myththemes
+pkgver=0.21
+pkgrel=3
+pkgdesc="Themes for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org/"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/${pkgname}-${pkgver}-fixes.tar.bz2")
+md5sums=('25d4642344cbfd8ee0ceab75022e13fb')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/$pkgname
+ . /etc/profile.d/qt3.sh
+ svn update
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ ./configure --prefix=/usr || return 1
+
+ qmake $pkgname.pro
+ make qmake || return 1
+ make || return 1
+
+ # basic install
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/2.6.28_dvb_api_version.diff b/abs/core/mythtv/old/stable-0.21/mythtv/2.6.28_dvb_api_version.diff
new file mode 100644
index 0000000..0116023
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/2.6.28_dvb_api_version.diff
@@ -0,0 +1,22 @@
+Index: libs/libmythtv/dvbtypes.h
+===================================================================
+--- libs/libmythtv/dvbtypes.h (revision 19792)
++++ libs/libmythtv/dvbtypes.h (working copy)
+@@ -19,7 +19,7 @@
+ #include <linux/dvb/frontend.h>
+ #include <linux/dvb/dmx.h>
+
+-#if (DVB_API_VERSION != 3)
++#if (DVB_API_VERSION != 3 && DVB_API_VERSION != 5)
+ # error "DVB driver includes with API version 3 not found!"
+ #endif
+
+@@ -27,7 +27,7 @@
+ # define DVB_API_VERSION_MINOR 0
+ #endif
+
+-#if (DVB_API_VERSION >= 3 && DVB_API_VERSION_MINOR >= 1)
++#if ((DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR >= 1) || DVB_API_VERSION == 5)
+ # define USE_ATSC
+ #else
+ #warning DVB API version < 3.1
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythtv/PKGBUILD
new file mode 100644
index 0000000..af084fc
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/PKGBUILD
@@ -0,0 +1,98 @@
+pkgname=mythtv
+pkgver=0.21
+pkgrel=90
+pkgdesc="A Homebrew PVR project"
+arch=('i686' 'x86_64')
+depends=('bash' 'mysql-clients>=5.0' 'qt3' 'lame' 'lirc-utils' 'ffmpeg'
+ 'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883' 'perl-net-upnp'
+ 'perl-time-format')
+backup=(etc/mythtv/mythbackend.conf etc/mythtv/mysql.txt usr/share/mythtv/is.xmlusr/share/mythtv/media_settings.xml )
+source=(ftp://ftp.knoppmyth.net/R6/sources/${pkgname}-${pkgver}-fixes.tar.bz2
+ mythbackend myththemedmenu.cpp.patch myththemedmenu.h.patch
+ smolt_jump.patch pretty gnome_screensaver.patch mpegpspatch
+ mythbackend.lr mythfrontend.lr)
+
+license=('GPL2')
+makedepends=(libgl subversion python perl)
+groups=('pvr')
+url="http://www.mythtv.org/"
+install=mythtv.install
+
+build() {
+ cd $startdir/src/${pkgname}-${pkgver} || return 1
+ svn update
+
+#apply patches
+ patch -p0 < ../myththemedmenu.cpp.patch
+ patch -p0 < ../myththemedmenu.h.patch
+# patch -p0 < ../pop_be_restart.h.patch
+# patch -p0 < ../pop_be_restart.cpp.patch
+ patch -p0 < ../smolt_jump.patch
+# patch -p0 < ../2.6.28_dvb_api_version.diff
+ patch -p0 < ../gnome_screensaver.patch
+# cd libs/libavformat
+# patch -p0 < $startdir/src/mpegpspatch
+# cd -
+
+ . /etc/profile.d/qt3.sh
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ ./configure --prefix=/usr --cpu=${ARCH} --enable-mmx --enable-audio-oss \
+ --enable-audio-alsa --enable-dvb --enable-lirc --enable-joystick-menu \
+ --enable-firewire --enable-v4l --enable-ivtv --enable-dvb \
+ --dvb-path=/usr/include --enable-xvmc --disable-ffmpeg \
+ --enable-xvmc-pro --enable-xvmc-vld --enable-opengl-vsync \
+ --disable-audio-jack --disable-audio-arts --disable-directfb || return 1
+
+ # build
+ #needs the subversion program
+ pkgversubversion=`svnversion`
+ echo $pkgversubversion
+ sed -i -e "s/\`(svnversion \$\${SVNTREEDIR} 2>\/dev\/null) || echo Unknown\`/$pkgversubversion/" version.pro
+
+
+# qmake mythtv.pro || return 1
+# make qmake || return 1
+ make || return 1
+
+ # basic install
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+ # install db schema
+ install -m0644 database/mc.sql $startdir/pkg/usr/share/mythtv/ \
+ || return 1
+ install -D -m0755 ../mythbackend $startdir/pkg/etc/rc.d/mythbackend \
+ || return 1
+ cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
+ # cp ../QUICKSTART.archlinux $startdir/pkg/usr/share/mythtv/ \
+# || return 1
+
+ # install contrib
+ mkdir -p $startdir/pkg/usr/share/mythtv/contrib || return 1
+ rsync -a --exclude=.svn --exclude=*~ contrib $startdir/pkg/usr/share/mythtv/
+# cp -rap contrib $startdir/pkg/usr/share/mythtv/contrib
+ #install -m0755 contrib/* $startdir/pkg/usr/share/mythtv/contrib
+
+ # set suid on mythfrontend
+ #chmod a+s $startdir/pkg/usr/bin/mythfrontend
+
+#Patch the xml LinHES style
+ cp -r $startdir/menu-xml/*.xml $startdir/pkg/usr/share/mythtv
+ cd $startdir/pkg/usr/share/mythtv
+ patch -Np0 < $startdir/menu-xml/mainmenu.xml.patch || return 1
+ patch -Np0 < $startdir/menu-xml/optical_menu.xml.patch || return 1
+ patch -Np0 < $startdir/menu-xml/library.xml.patch || return 1
+ patch -Np0 < $startdir/menu-xml/util_menu.xml.patch || return 1
+
+#Make log dir
+ mkdir -p $startdir/pkg/var/log/mythtv
+ chown 1000.1000 $startdir/pkg/var/log/mythtv
+ mkdir -p $startdir/pkg/etc/cron.hourly
+ install -m0755 $startdir/src/pretty $startdir/pkg/etc/cron.hourly/
+ mkdir -p $startdir/pkg/etc/logrotate.d/
+ cp $startdir/src/*.lr $startdir/pkg/etc/logrotate.d
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/QUICKSTART.archlinux b/abs/core/mythtv/old/stable-0.21/mythtv/QUICKSTART.archlinux
new file mode 100644
index 0000000..310705c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/QUICKSTART.archlinux
@@ -0,0 +1,69 @@
+MythTV QUICKSTART
+=================
+This Arch Linux package provides a generic MythTV installation. It
+requires extensive user configuration. This is a skeletal document, and
+more extensive information is available in /usr/share/mythtv/docs.
+
+MythTV is split into a backend and a frontend. The backend records
+television programming, keeps up with scheduling, does commercial
+flagging, transcoding, and other such jobs. The frontend provides a
+pretty GUI which allows playback and edition of the recorded programs.
+It also provides a means to schedule recordings. There are a number of
+plugins available for MythTV, and most of the official ones are
+available as Arch packages. There are two configurations; the backend
+and frontend can be on the same machine, or on two different machines on
+the same network.
+
+Backend Configuration
+---------------------
+MythTV keeps the majority of its settings and program information in a
+mysql database. Before running the backend configuration program, it is
+necessary to initialize the datase. Make sure mysql is running properly.
+
+# mysql < /usr/share/mythtv/mc.sql
+
+If your frontend is going to be remote, you must allow other computers
+on your network to have access to your database. Substitute 192.168.1.%
+with whatever IP range you use. If you have a root mysql password (as
+you should), leave the -p in the mysql command line. Otherwise remove
+the switch.
+
+# mysql -u root -p
+ mysql> connect mythconverg;
+ mysql> grant all on mythconverg.* to mythtv@"192.168.1.%" identified by "mythtv";
+ mysql> flush privileges;
+ mysql> quit
+
+In order to configure the MythTV backend, you will need to run the
+mythtv-setup program. Note that this requires X. If your backend is
+headless, considering using vnc as a quick and dirty "fix".
+
+# mythtv-setup
+
+Go through all the menus. You will need to know information like your
+capture card device (/dev/v4l/video[0-9]) and your program information
+acquisition method. United States users will most likely subscribe to
+Zap2it Labs' DataDirect service. It requires that users take a survey
+every three months in order to continue service. This isn't as hard as
+it sounds.
+
+It is necessary to update the database with all the current TV listings.
+Run the mythfilldatabase program to grab the listings using whatever
+method you specified in mythtv-setup.
+
+# mythfilldatabase
+
+Run mythbackend from the command line to make sure everything starts ok.
+
+# mythbackend
+
+If so, you may kill the task with "ctrl-c" on your keyboard, and add the
+backend to /etc/rc.conf. In the DAEMONS line, just add "mythbackend" to
+the list.
+
+In the future, you will need to run mythfilldatabase regularly. I allow
+my frontend computer to do this, as it runs continuously, and it is an
+option within MythTV. Otherwise, you can set up a cron job, or move
+mythfilldatabasecron to /etc/cron.daily
+
+cp /usr/share/mythtv/mythfilldatabasecron /etc/cron.daily
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/gnome_screensaver.patch b/abs/core/mythtv/old/stable-0.21/mythtv/gnome_screensaver.patch
new file mode 100644
index 0000000..6da37be
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/gnome_screensaver.patch
@@ -0,0 +1,18 @@
+--- libs/libmyth/screensaver-x11.cpp.orig 2009-03-15 19:10:47.000000000 +0000
++++ libs/libmyth/screensaver-x11.cpp 2009-03-15 19:10:56.000000000 +0000
+@@ -143,9 +143,13 @@
+ (m_last_deactivated.secsTo(current_time) > 30))
+ {
+ if (m_xscreensaverRunning)
++ {
+ myth_system("xscreensaver-command -deactivate >&- 2>&- &");
+- else if (m_gscreensaverRunning)
+- myth_system("gnome-screensaver-command --poke >&- 2>&- &");
++ }
++ if (m_gscreensaverRunning)
++ {
++ myth_system("gnome-screensaver-command -dp &");
++ }
+ m_last_deactivated = current_time;
+ }
+ }
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/HOST_SETTINGS.xml
new file mode 100644
index 0000000..ac52497
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/HOST_SETTINGS.xml
@@ -0,0 +1,94 @@
+<mythmenu name="HOST_SETTINGS">
+
+ <button>
+ <type>MV_NETWORK_SETUP_MENU</type>
+ <text>Network Settings</text>
+ <action>EXEC mythinstall -s network </action>
+ </button>
+
+ <button>
+ <type>MV_NETWORK_SETUP_MENU</type>
+ <text>DDNS Settings</text>
+ <action>EXEC mythinstall -s ddns </action>
+ </button>
+ <button>
+ <type>MV_SYSTEM_SETUP_MENU</type>
+ <text>System Type</text>
+ <action>EXEC mythinstall -s hostype </action>
+ </button>
+
+ <button>
+ <type>MV_SCREENSAVER_SETUP_MENU</type>
+ <text>Screensaver Settings</text>
+ <action>EXEC mythinstall -s screensaver </action>
+ </button>
+
+ <button>
+ <type>MV_IR_SETUP_MENU</type>
+ <text>Remotes</text>
+ <action>EXEC mythinstall -s ir </action>
+ </button>
+
+ <button>
+ <type>MV_MISC_SETUP_MENU</type>
+ <text>Miscellanous Settings</text>
+ <action>EXEC mythinstall -s misc </action>
+ </button>
+
+ <button>
+ <type>MV_SOFTWARE_MENU</type>
+ <text>Software</text>
+ <action>EXEC mythinstall -s plugins </action>
+ </button>
+
+ <button>
+ <type>MV_SHUTDOWN_SETUP_MENU</type>
+ <text>Shutdown Settings</text>
+ <action>EXEC mythinstall -s sleep </action>
+ </button>
+
+ <button>
+ <type>MV_ADVANCED_X_SETUP_MENU</type>
+ <text>Display Settings</text>
+ <action>EXEC mythinstall -s advancedX</action>
+ </button>
+
+ <button>
+ <type>MV_ADVANCED_SETUP_MENU</type>
+ <text>Advanced Settings</text>
+ <action>EXEC mythinstall -s advanced</action>
+ </button>
+
+ <button>
+ <type>MV_AUDIO_SETUP_MENU</type>
+ <text>Audio Settings</text>
+ <action>EXEC mythinstall -s sound </action>
+ </button>
+
+ <button>
+ <type>MV_ACCESS_SETUP_MENU</type>
+ <text>Access Control</text>
+ <action>EXEC mythinstall -s accesscontrol </action>
+ </button>
+
+ <button>
+ <type>MV_USER_SETUP_MENU</type>
+ <text>User Accounts</text>
+ <action>EXEC mythinstall -s user </action>
+ </button>
+
+ <button>
+ <type>MV_WEBACCESS_SETUP_MENU</type>
+ <text>Web Security</text>
+ <action>EXEC mythinstall -s webuser </action>
+ </button>
+
+ <!--
+ <button>
+ <type>SETUP_MENU</type>
+ <text>Settings Profile Manager</text>
+ <action>EXEC mythinstall -t </action>
+ </button>
+ -->
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/is.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/is.xml
new file mode 100644
index 0000000..88b7e6b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/is.xml
@@ -0,0 +1,3 @@
+<mythmenu name="Internet Steams">
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/library.xml.patch b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/library.xml.patch
new file mode 100644
index 0000000..749e1e7
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/library.xml.patch
@@ -0,0 +1,15 @@
+--- library.xml.orig 2009-03-15 19:20:15.000000000 +0000
++++ library.xml 2009-03-15 19:20:44.000000000 +0000
+@@ -119,10 +119,8 @@
+
+ <button>
+ <type>STREAM</type>
+- <text>Play Online Streams</text>
+- <text lang="HE">נגן מדיה מכוונת</text>
+- <action>PLUGIN mythstream</action>
+- <depends>mythstream</depends>
++ <text>Online Streams</text>
++ <action>MENU is.xml</action>
+ </button>
+
+ <button>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/linhes.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/linhes.xml
new file mode 100644
index 0000000..80bd3c9
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/linhes.xml
@@ -0,0 +1,60 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>SETUP_GENERAL</type>
+ <text>MythTV Configuration</text>
+ <text lang="IT">Impostazioni</text>
+ <text lang="ES">Configuración</text>
+ <text lang="CA">Configurar</text>
+ <text lang="FR">paramètres</text>
+ <text lang="DE">Zubehör / Konfiguration</text>
+ <text lang="DK">Tilbehør/Indstillinger</text>
+ <text lang="IS">Uppsetning</text>
+ <text lang="NL">Configuratie</text>
+ <text lang="PT">Utensílios</text>
+ <text lang="SV">Verktyg / Inställningar</text>
+ <text lang="JA">設定</text>
+ <text lang="FI">Oheis/Asetukset</text>
+ <text lang="ZH_TW">工具/設定</text>
+ <text lang="SI">Nastavitve</text>
+ <text lang="ET">Utiliidid / sätted</text>
+ <text lang="NB">Verktøy/Oppsett</text>
+ <text lang="CZ">Pomůcky</text>
+ <text lang="RU">Утилиты / Настройки</text>
+ <text lang="AR">تضبيطات</text>
+ <text lang="PL">Narzędzia / ustawienia</text>
+ <text lang="HE">עזרים / הגדרות</text>
+ <alttext lang="DE">Verschiedenes</alttext>
+ <alttext lang="SV">Inställningar</alttext>
+ <alttext lang="ET">Sätted</alttext>
+ <alttext lang="RU">Настройки</alttext>
+ <alttext lang="AR">تضبيطات</alttext>
+ <action>MENU util_menu.xml</action>
+ </button>
+
+ <button>
+ <type>LINHES_SETUP</type>
+ <text>LinHES Configuration</text>
+ <action>MENU HOST_SETTINGS.xml</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>Backup LinHES</text>
+ <action>MENU mythbackup.xml</action>
+ </button>
+
+ <button>
+ <type>RESTORE</type>
+ <text>Restore LinHES</text>
+ <action>MENU mythrestore.xml</action>
+ </button>
+
+<!--#Check for updates-->
+ <button>
+ <type>UPGRADE</type>
+ <text>Upgrade LinHES</text>
+ <action>MENU update.xml</action>
+ </button>
+<!--#Check for updates-->
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mainmenu.xml.patch b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mainmenu.xml.patch
new file mode 100644
index 0000000..a299325
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mainmenu.xml.patch
@@ -0,0 +1,39 @@
+--- mainmenu.xml.orig 2009-01-09 02:45:07.000000000 +0000
++++ mainmenu.xml 2009-01-22 08:04:28.000000000 +0000
+@@ -158,34 +158,8 @@
+
+ <button>
+ <type>MENU_UTILITIES_SETUP</type>
+- <text>Utilities / Setup</text>
+- <text lang="IT">Impostazioni</text>
+- <text lang="ES">Configuración</text>
+- <text lang="CA">Configurar</text>
+- <text lang="FR">paramètres</text>
+- <text lang="DE">Zubehör / Konfiguration</text>
+- <text lang="DK">Tilbehør/Indstillinger</text>
+- <text lang="IS">Uppsetning</text>
+- <text lang="NL">Configuratie</text>
+- <text lang="PT">Utensílios</text>
+- <text lang="SV">Verktyg / Inställningar</text>
+- <text lang="JA">設定</text>
+- <text lang="FI">Oheis/Asetukset</text>
+- <text lang="ZH_TW">工具/設定</text>
+- <text lang="SI">Nastavitve</text>
+- <text lang="ET">Utiliidid / sätted</text>
+- <text lang="NB">Verktøy/Oppsett</text>
+- <text lang="CZ">Pomůcky</text>
+- <text lang="RU">Утилиты / Настройки</text>
+- <text lang="AR">تضبيطات</text>
+- <text lang="PL">Narzędzia / ustawienia</text>
+- <text lang="HE">עזרים / הגדרות</text>
+- <alttext lang="DE">Verschiedenes</alttext>
+- <alttext lang="SV">Inställningar</alttext>
+- <alttext lang="ET">Sätted</alttext>
+- <alttext lang="RU">Настройки</alttext>
+- <alttext lang="AR">تضبيطات</alttext>
+- <action>MENU util_menu.xml</action>
++ <text>Service Menu</text>
++ <action>MENU linhes.xml</action>
+ </button>
+
+ <!-- <button>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythbackup.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythbackup.xml
new file mode 100644
index 0000000..5914b33
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythbackup.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>BACKUP</type>
+ <text>Do you wish to backup?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/mythbackup</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythrestore.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythrestore.xml
new file mode 100644
index 0000000..8f5c285
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythrestore.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>RESTORE</type>
+ <text>Do you wish to restore?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>RESTORE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/mythrestore</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/optical_menu.xml.patch b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/optical_menu.xml.patch
new file mode 100644
index 0000000..d1cb70c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/optical_menu.xml.patch
@@ -0,0 +1,15 @@
+--- optical_menu.xml.orig 2008-10-02 22:46:30.000000000 +0000
++++ optical_menu.xml 2008-07-02 04:05:15.000000000 +0000
+@@ -129,6 +129,12 @@
+ </button>
+
+ <button>
++ <type>DVD_RIP</type>
++ <text>Import video files from DVD</text>
++ <action>EXEC /usr/LH/bin/importfiles.sh</action>
++ </button>
++
++ <button>
+ <type>EJECT</type>
+ <text>Eject media</text>
+ <text lang="IT">Espelli Media</text>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/original/create_patch.sh b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/original/create_patch.sh
new file mode 100644
index 0000000..34d8b8c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/original/create_patch.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+for i in *.xml
+do
+ diff -u $i.orig $i > ../$i.patch
+done
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/setup.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/setup.xml
new file mode 100644
index 0000000..f56bb6f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/setup.xml
@@ -0,0 +1,111 @@
+<mythmenu name="MAIN">
+
+ <button>
+ <type>SETUP_GENERAL</type>
+ <text>1. General</text>
+ <text lang="IT">1. Generale</text>
+ <text lang="PT">1. Geral</text>
+ <text lang="SV">1. Generellt</text>
+ <text lang="JA">1. 一般</text>
+ <text lang="DE">1. Allgemeines</text>
+ <text lang="FI">1. Yleiset</text>
+ <text lang="FR">1. Général</text>
+ <text lang="SI">1. Splošno</text>
+ <text lang="ET">1. Üldine</text>
+ <text lang="NB">1 Generelt</text>
+ <text lang="DK">1. Generelt</text>
+ <text lang="ES">1. General</text>
+ <text lang="CZ">1. Obecný</text>
+ <text lang="RU">1. Общие</text>
+ <action>GENERAL</action>
+ </button>
+
+ <button>
+ <type>SETUP_CAPTURE_CARDS</type>
+ <text>2. Capture cards</text>
+ <text lang="IT">2. Schede di Acquisizione</text>
+ <text lang="PT">2. Placas de Captura</text>
+ <text lang="SV">2. TV-kort</text>
+ <text lang="JA">2. キャプチャカード</text>
+ <text lang="DE">2. TV-Karten</text>
+ <text lang="FI">2. TV-kortit</text>
+ <text lang="FR">2. Cartes d'acquisition</text>
+ <text lang="SI">2. Kartice za zajem</text>
+ <text lang="ET">2. TV-kaardid</text>
+ <text lang="NB">2 TV-kort</text>
+ <text lang="DK">2. TV-kort</text>
+ <text lang="ES">2. Capturadoras</text>
+ <text lang="CZ">2. Zachytávací karty</text>
+ <text lang="RU">2. Карты захвата</text>
+ <action>CAPTURE CARDS</action>
+ </button>
+
+ <button>
+ <type>SETUP_VIDEO_SOURCES</type>
+ <text>3. Video sources</text>
+ <text lang="IT">3. Fonte Video</text>
+ <text lang="PT">3. Fontes de Vídeo</text>
+ <text lang="SV">3. Videokällor</text>
+ <text lang="JA">3. ビデオソース</text>
+ <text lang="DE">3. Videoquellen</text>
+ <text lang="FI">3. Kuvanlähteet</text>
+ <text lang="FR">3. Sources vidéo</text>
+ <text lang="SI">3. Video viri</text>
+ <text lang="ET">3. Videosisendid</text>
+ <text lang="NB">3 Videokilder</text>
+ <text lang="DK">3. Videokilder</text>
+ <text lang="ES">3. Fuentes de Vídeo</text>
+ <text lang="CZ">3. Zdroje obrazu</text>
+ <text lang="RU">3. Видео источники</text>
+ <action>VIDEO SOURCES</action>
+ </button>
+
+ <button>
+ <type>SETUP_INPUT_CONNECTIONS</type>
+ <text>4. Input connections</text>
+ <text lang="IT">4. Connessioni di Ingresso</text>
+ <text lang="PT">4. Ligações de Entrada</text>
+ <text lang="SV">4. Anslutningar</text>
+ <text lang="JA">4. 入力とソースの接続</text>
+ <text lang="DE">4. Verknüpfungen</text>
+ <text lang="FI">4. Sisääntuloasetukset</text>
+ <text lang="FR">4. Entrées Vidéos</text>
+ <text lang="SI">4. Vhodne povezave</text>
+ <text lang="ET">4. Sisendite ühendused</text>
+ <text lang="NB">4 Inndata</text>
+ <text lang="DK">4. Indgange</text>
+ <text lang="ES">4. Conexiones</text>
+ <text lang="CZ">4. Připojení vstupů</text>
+ <text lang="RU">4. Соединение входов</text>
+ <action>CARD INPUTS</action>
+ </button>
+
+ <button>
+ <type>SETUP_CHANNEL_EDITOR</type>
+ <text>5. Channel Editor</text>
+ <text lang="IT">5. Modifica Canali</text>
+ <text lang="SV">5. Kanaleditor</text>
+ <text lang="JA">5. チャンネル設定</text>
+ <text lang="DE">5. Sender bearbeiten</text>
+ <text lang="FI">5. Kanavanviritys</text>
+ <text lang="FR">5. Editeur de chaînes</text>
+ <text lang="SI">5. Urejanje kanalov</text>
+ <text lang="ET">5. Kanaliredaktor</text>
+ <text lang="NB">5 Kanalredigerer</text>
+ <text lang="DK">5. Kanal opsætning</text>
+ <text lang="ES">5. Editor Canales</text>
+ <text lang="CZ">5. Editor kanálů</text>
+ <text lang="RU">5. Редактор каналов</text>
+ <action>CHANNEL EDITOR</action>
+ </button>
+
+ <button>
+ <type>SETUP_STORAGE_GROUPS</type>
+ <text>6. Storage Directories</text>
+ <text lang="IT">6. Cartelle</text>
+ <text lang="FI">Tallennusryhmät</text>
+ <text lang="SV">Lagringsgrupper</text>
+ <action>STORAGE GROUPS</action>
+ </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/siriusmenu.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/siriusmenu.xml
new file mode 100644
index 0000000..e317b36
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/siriusmenu.xml
@@ -0,0 +1,419 @@
+<mythmenu name="SIRIUS">
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Hits 1</text>
+ <action>EXEC /usr/bin/cliSipie siriushits1</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>StarLite</text>
+ <action>EXEC /usr/bin/cliSipie starlite</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Love</text>
+ <action>EXEC /usr/bin/cliSipie siriuslove</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Movin EZ</text>
+ <action>EXEC /usr/bin/cliSipie movineasy</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Gold</text>
+ <action>EXEC /usr/bin/cliSipie siriusgold</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>'60s Vibrations</text>
+ <action>EXEC /usr/bin/cliSipie 60svibrations</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Totally '70s</text>
+ <action>EXEC /usr/bin/cliSipie totally70s</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Big '80s</text>
+ <action>EXEC /usr/bin/cliSipie big80s</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>ThePulse</text>
+ <action>EXEC /usr/bin/cliSipie thepulse</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Bridge</text>
+ <action>EXEC /usr/bin/cliSipie thebridge</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>BBC Radio 1</text>
+ <action>EXEC /usr/bin/cliSipie bbcradio1</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Super Shuffle</text>
+ <action>EXEC /usr/bin/cliSipie supershuffle</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Elvis Radio</text>
+ <action>EXEC /usr/bin/cliSipie elvisradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Classic Vinyl</text>
+ <action>EXEC /usr/bin/cliSipie classicvinyl</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Classic Rewind</text>
+ <action>EXEC /usr/bin/cliSipie classicrewind</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>TheVault</text>
+ <action>EXEC /usr/bin/cliSipie thevault</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Jam_ON</text>
+ <action>EXEC /usr/bin/cliSipie jamon</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Spectrum</text>
+ <action>EXEC /usr/bin/cliSipie thespectrum</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>BuzzSaw</text>
+ <action>EXEC /usr/bin/cliSipie buzzsaw</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Octane</text>
+ <action>EXEC /usr/bin/cliSipie octane</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Alt Nation</text>
+ <action>EXEC /usr/bin/cliSipie altnation</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>1st Wave</text>
+ <action>EXEC /usr/bin/cliSipie firstwave</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hair Nation</text>
+ <action>EXEC /usr/bin/cliSipie hairnation</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>'90s Alternative</text>
+ <action>EXEC /usr/bin/cliSipie 90salternative</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Garage</text>
+ <action>EXEC /usr/bin/cliSipie undergroundgarage</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Left of Center</text>
+ <action>EXEC /usr/bin/cliSipie leftofcenter</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hard Attack</text>
+ <action>EXEC /usr/bin/cliSipie hardattack</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Faction</text>
+ <action>EXEC /usr/bin/cliSipie faction</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Punk</text>
+ <action>EXEC /usr/bin/cliSipie punk</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>The Coffee House</text>
+ <action>EXEC /usr/bin/cliSipie coffeehouse</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Margaritaville</text>
+ <action>EXEC /usr/bin/cliSipie radiomargaritaville</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Disorder</text>
+ <action>EXEC /usr/bin/cliSipie siriusdisorder</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Reggae</text>
+ <action>EXEC /usr/bin/cliSipie reggaerhythms</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Area 33</text>
+ <action>EXEC /usr/bin/cliSipie area33</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Boombox</text>
+ <action>EXEC /usr/bin/cliSipie boombox</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Chill</text>
+ <action>EXEC /usr/bin/cliSipie chill</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>The Beat</text>
+ <action>EXEC /usr/bin/cliSipie thebeat</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Strobe</text>
+ <action>EXEC /usr/bin/cliSipie thestrobe</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hip-Hop Nation</text>
+ <action>EXEC /usr/bin/cliSipie hiphopnation</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>BackSpin</text>
+ <action>EXEC /usr/bin/cliSipie backspin</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Shade 45</text>
+ <action>EXEC /usr/bin/cliSipie shade45</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hot Jamz</text>
+ <action>EXEC /usr/bin/cliSipie hotjamz</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Heart &amp; Soul</text>
+ <action>EXEC /usr/bin/cliSipie heartandsoul</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>SoulTown</text>
+ <action>EXEC /usr/bin/cliSipie soultown</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>New Country</text>
+ <action>EXEC /usr/bin/cliSipie newcountry</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Prime Country</text>
+ <action>EXEC /usr/bin/cliSipie primecountry</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Roadhouse</text>
+ <action>EXEC /usr/bin/cliSipie theroadhouse</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Outlaw Country</text>
+ <action>EXEC /usr/bin/cliSipie outlawcountry</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Bluegrass</text>
+ <action>EXEC /usr/bin/cliSipie bluegrass</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Spirit</text>
+ <action>EXEC /usr/bin/cliSipie spirit</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Praise</text>
+ <action>EXEC /usr/bin/cliSipie praise</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Planet Jazz</text>
+ <action>EXEC /usr/bin/cliSipie planetjazz</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>JazzCafe</text>
+ <action>EXEC /usr/bin/cliSipie jazzcafe</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>PureJazz</text>
+ <action>EXEC /usr/bin/cliSipie purejazz</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Spa 73</text>
+ <action>EXEC /usr/bin/cliSipie spa73</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Blues</text>
+ <action>EXEC /usr/bin/cliSipie siriusblues</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Siriusly Sinatra</text>
+ <action>EXEC /usr/bin/cliSipie siriuslysinatra</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Broadway's Best</text>
+ <action>EXEC /usr/bin/cliSipie broadwaysbest</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Symphony Hall</text>
+ <action>EXEC /usr/bin/cliSipie symphonyhall</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Met Opera Radio</text>
+ <action>EXEC /usr/bin/cliSipie metropolitanopera</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Pops</text>
+ <action>EXEC /usr/bin/cliSipie siriuspops</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Universo Latino</text>
+ <action>EXEC /usr/bin/cliSipie universolatino</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Rumbon</text>
+ <action>EXEC /usr/bin/cliSipie rumbon</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Martha Stewart</text>
+ <action>EXEC /usr/bin/cliSipie marthastewartlivingradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Stars</text>
+ <action>EXEC /usr/bin/cliSipie siriusstars</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>OutQ Gay Radio</text>
+ <action>EXEC /usr/bin/cliSipie siriusoutq</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Patriot</text>
+ <action>EXEC /usr/bin/cliSipie siriuspatriot</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Left</text>
+ <action>EXEC /usr/bin/cliSipie siriusleft</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>CNN</text>
+ <action>EXEC /usr/bin/cliSipie cnn</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>wrn</text>
+ <action>EXEC /usr/bin/cliSipie wrn</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Blue Collar Comedy</text>
+ <action>EXEC /usr/bin/cliSipie bluecollarcomedy</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Raw Dog Comedy</text>
+ <action>EXEC /usr/bin/cliSipie rawdog</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Laugh Break Comedy</text>
+ <action>EXEC /usr/bin/cliSipie laughbreak</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>thefoxxhole</text>
+ <action>EXEC /usr/bin/cliSipie thefoxxhole</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>lime</text>
+ <action>EXEC /usr/bin/cliSipie lime</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Kids Stuff</text>
+ <action>EXEC /usr/bin/cliSipie kidsstuff</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Catholic Channel</text>
+ <action>EXEC /usr/bin/cliSipie thecatholicchannel</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>EWTN</text>
+ <action>EXEC /usr/bin/cliSipie ewtnglobal</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>christiantalk</text>
+ <action>EXEC /usr/bin/cliSipie christiantalk</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius NFL Radio</text>
+ <action>EXEC /usr/bin/cliSipie siriusnflradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Maxim Radio</text>
+ <action>EXEC /usr/bin/cliSipie maximradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Cosmo Radio</text>
+ <action>EXEC /usr/bin/cliSipie cosmopolitanradio</action>
+ </button>
+ <button>
+ <type>TV_DELETE</type>
+ <text>Stop Listening</text>
+ <action>EXEC /usr/bin/sipie_kill</action>
+ </button>
+
+</mythmenu>
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update.xml
new file mode 100644
index 0000000..5b28833
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Check for updates?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update.sh</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update2.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update2.xml
new file mode 100644
index 0000000..2ab82ea
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update2.xml
@@ -0,0 +1,26 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Perform updates?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update2.sh</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>View files to be upgraded.</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update3.sh</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/util_menu.xml.patch b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/util_menu.xml.patch
new file mode 100644
index 0000000..26ac863
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/util_menu.xml.patch
@@ -0,0 +1,17 @@
+--- util_menu.xml.orig 2009-01-09 02:45:07.000000000 +0000
++++ util_menu.xml 2009-01-22 08:04:28.000000000 +0000
+@@ -76,7 +76,13 @@
+ <action>PLUGIN mythcontrols</action>
+ <depends>mythcontrols</depends>
+ </button>
+-
++
++ <button>
++ <type>VIDEO_SCREENSHOOTER</type>
++ <text>Thumbnail Generator</text>
++ <action>EXEC /usr/LH/bin/shootscreens-mythtv.sh</action>
++ </button>
++
+ <button>
+ <type>SETUP_MENU</type>
+ <text>Setup</text>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/xmmenu.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/xmmenu.xml
new file mode 100644
index 0000000..6b26d11
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/xmmenu.xml
@@ -0,0 +1,574 @@
+<!-- Current as of April 25, 2007 -->
+<mythmenu name="XM">
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '40s</text>
+ <action>EXEC /usr/bin/xamp kill 4</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '50s</text>
+ <action>EXEC /usr/bin/xamp kill 5</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '60s</text>
+ <action>EXEC /usr/bin/xamp kill 6</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '70s</text>
+ <action>EXEC /usr/bin/xamp kill 7</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '80s</text>
+ <action>EXEC /usr/bin/xamp kill 8</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '90s</text>
+ <action>EXEC /usr/bin/xamp kill 9</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>America</text>
+ <action>EXEC /usr/bin/xamp kill 10</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>X Country</text>
+ <action>EXEC /usr/bin/xamp kill 12</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Willie's Place</text>
+ <action>EXEC /usr/bin/xamp kill 13</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Bluegrass Junction</text>
+ <action>EXEC /usr/bin/xamp kill 14</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Village</text>
+ <action>EXEC /usr/bin/xamp kill 15</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Highway 16</text>
+ <action>EXEC /usr/bin/xamp kill 16</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>US Country</text>
+ <action>EXEC /usr/bin/xamp kill 17</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>20 on 20</text>
+ <action>EXEC /usr/bin/xamp kill 20</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Heart</text>
+ <action>EXEC /usr/bin/xamp kill 23</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Blend</text>
+ <action>EXEC /usr/bin/xamp kill 25</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Flight 26</text>
+ <action>EXEC /usr/bin/xamp kill 26</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Cinemagic</text>
+ <action>EXEC /usr/bin/xamp kill 27</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>On Broadway</text>
+ <action>EXEC /usr/bin/xamp kill 28</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>U-Pop</text>
+ <action>EXEC /usr/bin/xamp kill 29</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Hitlist</text>
+ <action>EXEC /usr/bin/xamp kill 30</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Torch</text>
+ <action>EXEC /usr/bin/xamp kill 31</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Message</text>
+ <action>EXEC /usr/bin/xamp kill 32</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Spirit</text>
+ <action>EXEC /usr/bin/xamp kill 33</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>enLighten</text>
+ <action>EXEC /usr/bin/xamp kill 34</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Deep Tracks</text>
+ <action>EXEC /usr/bin/xamp kill 40</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Boneyard</text>
+ <action>EXEC /usr/bin/xamp kill 41</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Liquid Metal</text>
+ <action>EXEC /usr/bin/xamp kill 42</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XMU</text>
+ <action>EXEC /usr/bin/xamp kill 43</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fred</text>
+ <action>EXEC /usr/bin/xamp kill 44</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Cafe</text>
+ <action>EXEC /usr/bin/xamp kill 45</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Top Tracks</text>
+ <action>EXEC /usr/bin/xamp kill 46</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Ethel</text>
+ <action>EXEC /usr/bin/xamp kill 47</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Squizz</text>
+ <action>EXEC /usr/bin/xamp kill 48</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Big Tracks</text>
+ <action>EXEC /usr/bin/xamp kill 49</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Loft</text>
+ <action>EXEC /usr/bin/xamp kill 50</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Music Lab</text>
+ <action>EXEC /usr/bin/xamp kill 51</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Verge</text>
+ <action>EXEC /usr/bin/xamp kill 52</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fungus</text>
+ <action>EXEC /usr/bin/xamp kill 53</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Lucy</text>
+ <action>EXEC /usr/bin/xamp kill 54</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Soul Street</text>
+ <action>EXEC /usr/bin/xamp kill 60</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Flow</text>
+ <action>EXEC /usr/bin/xamp kill 61</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Suite 62</text>
+ <action>EXEC /usr/bin/xamp kill 62</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Groove</text>
+ <action>EXEC /usr/bin/xamp kill 64</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Rhyme</text>
+ <action>EXEC /usr/bin/xamp kill 65</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>RAW</text>
+ <action>EXEC /usr/bin/xamp kill 66</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The City</text>
+ <action>EXEC /usr/bin/xamp kill 67</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Heat</text>
+ <action>EXEC /usr/bin/xamp kill 68</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Real Jazz</text>
+ <action>EXEC /usr/bin/xamp kill 70</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Watercolors</text>
+ <action>EXEC /usr/bin/xamp kill 71</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Beyond Jazz</text>
+ <action>EXEC /usr/bin/xamp kill 72</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>High Standards</text>
+ <action>EXEC /usr/bin/xamp kill 73</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Bluesville</text>
+ <action>EXEC /usr/bin/xamp kill 74</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Hear Music</text>
+ <action>EXEC /usr/bin/xamp kill 75</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fine Tuning</text>
+ <action>EXEC /usr/bin/xamp kill 76</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Audio Visions</text>
+ <action>EXEC /usr/bin/xamp kill 77</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Escape</text>
+ <action>EXEC /usr/bin/xamp kill 78</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>On The Rocks</text>
+ <action>EXEC /usr/bin/xamp kill 79</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Move</text>
+ <action>EXEC /usr/bin/xamp kill 80</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>BPM</text>
+ <action>EXEC /usr/bin/xamp kill 81</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The System</text>
+ <action>EXEC /usr/bin/xamp kill 82</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Chrome</text>
+ <action>EXEC /usr/bin/xamp kill 83</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM-Chill</text>
+ <action>EXEC /usr/bin/xamp kill 84</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fuego</text>
+ <action>EXEC /usr/bin/xamp kill 90</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Viva</text>
+ <action>EXEC /usr/bin/xamp kill 91</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Aguila</text>
+ <action>EXEC /usr/bin/xamp kill 92</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Caliente</text>
+ <action>EXEC /usr/bin/xamp kill 94</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Luna</text>
+ <action>EXEC /usr/bin/xamp kill 95</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Air Musique</text>
+ <action>EXEC /usr/bin/xamp kill 100</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Joint</text>
+ <action>EXEC /usr/bin/xamp kill 101</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Sur La Route</text>
+ <action>EXEC /usr/bin/xamp kill 102</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>World Zone</text>
+ <action>EXEC /usr/bin/xamp kill 103</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Ngoma</text>
+ <action>EXEC /usr/bin/xamp kill 104</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Classics</text>
+ <action>EXEC /usr/bin/xamp kill 110</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Vox</text>
+ <action>EXEC /usr/bin/xamp kill 112</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Pops</text>
+ <action>EXEC /usr/bin/xamp kill 113</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Kids</text>
+ <action>EXEC /usr/bin/xamp kill 116</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Bob Edwards Show</text>
+ <action>EXEC /usr/bin/xamp kill 133</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Comedy</text>
+ <action>EXEC /usr/bin/xamp kill 150</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Laugh USA</text>
+ <action>EXEC /usr/bin/xamp kill 151</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Special X</text>
+ <action>EXEC /usr/bin/xamp kill 154</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Agenda</text>
+ <action>EXEC /usr/bin/xamp kill 134</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Oprah and Friends</text>
+ <action>EXEC /usr/bin/xamp kill 156</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Virus</text>
+ <action>EXEC /usr/bin/xamp kill 202</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>1 Hit Wonders</text>
+ <action>EXEC /usr/bin/xamp kill 300</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Metalcore</text>
+ <action>EXEC /usr/bin/xamp kill 301</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Indie First</text>
+ <action>EXEC /usr/bin/xamp kill 302</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Late Night Mix</text>
+ <action>EXEC /usr/bin/xamp kill 303</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Sessions@AOL</text>
+ <action>EXEC /usr/bin/xamp kill 304</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Shuffle</text>
+ <action>EXEC /usr/bin/xamp kill 305</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Rock First</text>
+ <action>EXEC /usr/bin/xamp kill 306</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Country First</text>
+ <action>EXEC /usr/bin/xamp kill 307</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Hip Hop First</text>
+ <action>EXEC /usr/bin/xamp kill 308</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Pop First</text>
+ <action>EXEC /usr/bin/xamp kill 309</action>
+ </button>
+
+ <button>
+ <type>TV_DELETE</type>
+ <text>Stop Listening</text>
+ <action>EXEC /usr/bin/xamp kill</action>
+ </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mpegpspatch b/abs/core/mythtv/old/stable-0.21/mythtv/mpegpspatch
new file mode 100644
index 0000000..eed08eb
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mpegpspatch
@@ -0,0 +1,66 @@
+--- orig_mpeg.c 2009-03-23 11:26:22.000000000 -0700
++++ mpeg.c 2009-03-23 11:28:09.000000000 -0700
+@@ -66,35 +66,40 @@
+
+ static int mpegps_probe(AVProbeData *p)
+ {
++ uint32_t code= -1;
++ int sys=0, pspack=0, priv1=0, vid=0, audio=0, invalid=0;
+ int i;
+- int size= FFMIN(2048, p->buf_size);
+- uint32_t code=0xFF;
++ int score=0;
+
+- /* we search the first start code. If it is a packet start code,
+- then we decide it is mpeg ps. We do not send highest value to
+- give a chance to mpegts */
+- /* NOTE: the search range was restricted to avoid too many false
+- detections */
+-
+- for (i = 0; i < size; i++) {
+- code = (code << 8) | p->buf[i];
++ for(i=0; i<p->buf_size; i++){
++ code = (code<<8) + p->buf[i];
+ if ((code & 0xffffff00) == 0x100) {
+- if (code == PACK_START_CODE ||
+- code == SYSTEM_HEADER_START_CODE ||
+- (code >= 0x1e0 && code <= 0x1ef) ||
+- (code >= 0x1c0 && code <= 0x1df) ||
+- code == PRIVATE_STREAM_2 ||
+- code == PROGRAM_STREAM_MAP ||
+- code == PRIVATE_STREAM_1 ||
+- code == PADDING_STREAM ||
+- code >= 0x100 && code <= 0x1b0)
+- return AVPROBE_SCORE_MAX - 2;
+- else
+- return 0;
++ int pes= check_pes(p->buf+i, p->buf+p->buf_size);
++
++ if(code == SYSTEM_HEADER_START_CODE) sys++;
++ else if(code == PRIVATE_STREAM_1) priv1++;
++ else if(code == PACK_START_CODE) pspack++;
++ else if((code & 0xf0) == VIDEO_ID && pes) vid++;
++ else if((code & 0xe0) == AUDIO_ID && pes) audio++;
++
++ else if((code & 0xf0) == VIDEO_ID && !pes) invalid++;
++ else if((code & 0xe0) == AUDIO_ID && !pes) invalid++;
+ }
+ }
+
+- return 0;
++ if(vid+audio > invalid) /* invalid VDR files nd short PES streams */
++ score= AVPROBE_SCORE_MAX/4;
++
++//av_log(NULL, AV_LOG_ERROR, "%d %d %d %d %d len:%d\n", sys, priv1, pspack,vid, audio, p->buf_size);
++ if(sys>invalid && sys*9 <= pspack*10)
++ return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg
++ if(priv1 + vid + audio > invalid && (priv1+vid+audio)*9 <= pspack*10)
++ return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg
++ if((!!vid ^ !!audio) && (audio > 4 || vid > 1) && !sys && !pspack && p->buf_size>2048) /* PES stream */
++ return AVPROBE_SCORE_MAX/2+2;
++
++ //02-Penguin.flac has sys:0 priv1:0 pspack:0 vid:0 audio:1
++ return score;
+ }
+
+ typedef struct MpegDemuxContext {
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend b/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend
new file mode 100755
index 0000000..93773a2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/bin/mythbackend`
+case "$1" in
+ start)
+ stat_busy "Starting MythTV Backend"
+ [ ! -e /var/run/mysqld.pid ] && echo -n "mysqld not started" && stat_fail && exit
+ [ -z "$PID" ] && /usr/bin/mythbackend -d -l /var/log/mythbackend.log -v important
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ echo $PID > /var/run/mythbackend.pid
+ add_daemon mythbackend
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping MythTV Backend"
+ [ ! -z "$PID" ] && kill $PID &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon mythbackend
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1s
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend.lr b/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend.lr
new file mode 100644
index 0000000..4f218bc
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythbackend.log {
+ copytruncate
+ daily
+ size 10M
+ missingok
+ rotate 7
+ compress
+ notifempty
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mythfrontend.lr b/abs/core/mythtv/old/stable-0.21/mythtv/mythfrontend.lr
new file mode 100644
index 0000000..1580533
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mythfrontend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythfrontend.log {
+ copytruncate
+ daily
+ size 10M
+ missingok
+ rotate 7
+ compress
+ notifempty
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.cpp.patch b/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.cpp.patch
new file mode 100644
index 0000000..e5c57ef
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.cpp.patch
@@ -0,0 +1,125 @@
+--- libs/libmythui/myththemedmenu.cpp.orig 2008-01-31 15:26:38.000000000 +0000
++++ libs/libmythui/myththemedmenu.cpp 2008-02-07 22:24:27.000000000 +0000
+@@ -2102,6 +2102,10 @@
+ }
+ lastbutton = NULL;
+ }
++ else if (action == "MENU")
++ {
++ parent->doMenu();
++ }
+ else if (action == "EJECT")
+ {
+ myth_eject();
+@@ -2482,6 +2486,8 @@
+
+ if (d->foundtheme)
+ d->parseMenu(menufile);
++
++ m_menuPopup = NULL;
+ }
+
+ MythThemedMenu::~MythThemedMenu(void)
+@@ -2592,3 +2598,102 @@
+ MythScreenType::aboutToShow();
+ d->updateLCD();
+ }
++void MythThemedMenu::doMenu()
++{
++ int allowsd = gContext->GetNumSetting("AllowQuitShutdown");
++ if (m_menuPopup)
++ return;
++ QString label = "System Menu";
++ MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
++ m_menuPopup = new MythDialogBox(label, mainStack, "menuPopup");
++ if (m_menuPopup->Create())
++ mainStack->AddScreen(m_menuPopup);
++
++ //changed line to always show shutdown/reboot
++ if ( allowsd != 10 && allowsd !=14 )
++ {
++ m_menuPopup->SetReturnEvent(this,"popmenu_exit");
++ m_menuPopup->AddButton("Power off");
++ m_menuPopup->AddButton("Reboot");
++ m_menuPopup->AddButton("About");
++ m_menuPopup->AddButton("Cancel");
++ }
++ else
++ {
++ m_menuPopup->SetReturnEvent(this,"popmenu_noexit");
++ m_menuPopup->AddButton("About");
++ m_menuPopup->AddButton("Cancel");
++ }
++}
++
++void MythThemedMenu::aboutScreen()
++{
++{
++ extern const char *myth_source_version;
++ extern const char *myth_source_path;
++ QString distro_line;
++ distro_line="";
++
++ QFile file("/etc/os_myth_release");
++ if ( file.open(IO_ReadOnly | IO_Translate) )
++ {
++ QTextStream t( &file ); // use a text stream
++ distro_line = t.readLine();
++ file.close();
++ }
++
++ QString label = "";
++ label.append(QObject::tr("Revision: ") + myth_source_version + " \n Branch:" + myth_source_path + "\n" + distro_line );
++
++ MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
++ m_menuPopup = new MythDialogBox(label, mainStack, "About");
++ if (m_menuPopup->Create())
++ mainStack->AddScreen(m_menuPopup);
++
++ m_menuPopup->SetReturnEvent(this,"About");
++ m_menuPopup->AddButton("OK!");
++ }
++}
++
++void MythThemedMenu::customEvent(QCustomEvent *event)
++{
++ if (event->type() == kMythDialogBoxCompletionEventType)
++ {
++ DialogCompletionEvent *dce =
++ dynamic_cast<DialogCompletionEvent*>(event);
++
++ QString resultid= dce->GetId();
++ int buttonnum = dce->GetResult();
++ if (resultid == "popmenu_exit")
++ {
++ if (buttonnum == 0)
++ {
++ QString halt_cmd = gContext->GetSetting("HaltCommand",
++ "sudo /sbin/halt -p");
++ if (!halt_cmd.isEmpty())
++ system(halt_cmd.ascii());
++ }
++
++ if (buttonnum == 1)
++ {
++ QString reboot_cmd = gContext->GetSetting("RebootCommand",
++ "sudo /sbin/reboot");
++ if (!reboot_cmd.isEmpty())
++ system(reboot_cmd.ascii());
++ }
++
++ if (buttonnum == 2)
++ {
++ aboutScreen();
++ }
++ }
++
++ if (resultid == "popmenu_noexit")
++ {
++ if (buttonnum == 0)
++ aboutScreen();
++ }
++
++ m_menuPopup = NULL;
++ }
++}
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.h.patch b/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.h.patch
new file mode 100644
index 0000000..9744b11
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.h.patch
@@ -0,0 +1,25 @@
+--- libs/libmythui/myththemedmenu.h.orig 2008-01-31 15:26:45.000000000 +0000
++++ libs/libmythui/myththemedmenu.h 2008-02-07 21:00:22.000000000 +0000
+@@ -2,6 +2,7 @@
+ #define MYTHTHEMEDMENU_H_
+
+ #include "mythscreentype.h"
++#include "mythdialogbox.h"
+
+ class MythMainWindow;
+ class MythThemedMenuPrivate;
+@@ -26,8 +27,14 @@
+
+ void ReloadTheme(void);
+ void ReloadExitKey(void);
++
+ virtual void aboutToShow(void);
+
++ void doMenu();
++ void aboutScreen();
++ MythDialogBox *m_menuPopup;
++ void customEvent(QCustomEvent *event);
++
+ protected:
+ virtual bool keyPressEvent(QKeyEvent *e);
+ virtual void gestureEvent(MythUIType *origtype, MythGestureEvent *ge);
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mythtv.install b/abs/core/mythtv/old/stable-0.21/mythtv/mythtv.install
new file mode 100644
index 0000000..db1da94
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mythtv.install
@@ -0,0 +1,55 @@
+# arg 1: the new package version
+post_install() {
+ if [ ! -d /var/log/mythtv ]
+ then
+ mkdir -p /var/log/mythv
+ chown -R mythtv /var/log/mythtv
+ echo "---" > /var/log/mythtv/mythbackend.log
+ chown mythtv /var/log/mythtv/mythbackend.log
+ fi
+ if [ -e /tmp/is.xml ]
+ then
+ cp /tmp/is.xml /usr/share/mythtv/is.xml
+ fi
+
+ if [ -e /tmp/media_settings.xml ]
+ then
+ cp /tmp/media_settings.xml /usr/share/mythtv/media_settings.xml
+ fi
+}
+pre_upgrade() {
+ if [ -e /usr/share/mythtv/is.xml ]
+ then
+ cp /usr/share/mythtv/is.xml /tmp
+ fi
+
+ if [ -e /usr/share/mythtv/media_settings.xml ]
+ then
+ cp /usr/share/mythtv/media_settings.xml /tmp
+ fi
+}
+
+post_upgrade() {
+ cp /tmp/is.xml /usr/share/mythtv/
+ cp /tmp/media_settings.xml /usr/share/mythtv/
+ if [ ! -d /var/log/mythtv ]
+ then
+ mkdir -p /var/log/mythv
+ chown -R mythtv /var/log/mythtv
+ fi
+ chown root.mythtv /etc/systemconfig
+ chmod 664 /etc/systemconfig
+}
+pre_remove () {
+ pre_upgrade
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/pretty b/abs/core/mythtv/old/stable-0.21/mythtv/pretty
new file mode 100644
index 0000000..e47aaec
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/pretty
@@ -0,0 +1,2 @@
+#!/bin/bash
+su mythtv -c "perl /usr/share/mythtv/contrib/mythrename.pl --link /myth/pretty"
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/smolt_jump.patch b/abs/core/mythtv/old/stable-0.21/mythtv/smolt_jump.patch
new file mode 100644
index 0000000..696be80
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/smolt_jump.patch
@@ -0,0 +1,9 @@
+--- programs/mythfrontend/networkcontrol.cpp.orig 2008-03-23 23:00:25.000000000 +0000
++++ programs/mythfrontend/networkcontrol.cpp 2008-03-23 23:01:33.000000000 +0000
+@@ -81,6 +81,7 @@
+ jumpMap["zoneminderliveview"] = "ZoneMinder Live View";
+ jumpMap["zoneminderevents"] = "ZoneMinder Events";
++ jumpMap["mythsmolt"] = "MythSmolt";
+
+ // These jump point names match the (lowercased) locations from gContext
+ jumpMap["channelrecpriority"] = "Channel Recording Priorities";
diff --git a/abs/core/mythtv/old/stable-0.21/mythvideo/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythvideo/PKGBUILD
new file mode 100644
index 0000000..a233549
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythvideo/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythvideo
+pkgver=0.21
+pkgrel=9
+pkgdesc="Video playback and browsing plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'mplayer' 'perlxml' 'perl-libwww' 'perl-uri' 'perl-xml-simple' 'ffmpeg')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2"\
+ "ftp://ftp.knoppmyth.net/R6/sources/tmdb.tar.bz2" \
+ mtd mythvideo-6338-use_tmdb_in_fixes.patch)
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe' '48cff8f7095586c85ec70989746736b4' '476c12ba074794ad7f4ae092bdf949d6' '4bd38d054dfc4b0b1724f398d38676f7')
+replaces=('mythdvd')
+groups=('mythtv-extras')
+install=mythvideo.install
+
+build() {
+ cd $startdir/src/mythplugins
+ svn update
+ patch -p1 < ../mythvideo-6338-use_tmdb_in_fixes.patch
+ . /etc/profile.d/qt3.sh
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+
+ ./configure --prefix=/usr --disable-all --enable-mythvideo
+
+ qmake mythplugins.pro
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+ install -D -m755 ../mtd $startdir/pkg/etc/rc.d/mtd
+ cp -Rv $startdir/src/tmdb/* $startdir/pkg/usr/share/mythtv/mythvideo/scripts/
+}
+
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythvideo/mtd b/abs/core/mythtv/old/stable-0.21/mythvideo/mtd
new file mode 100644
index 0000000..1f46dfe
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythvideo/mtd
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/bin/mtd`
+case "$1" in
+ start)
+ stat_busy "Starting Myth Transcoding Daemon"
+ [ -z "$PID" ] && /usr/bin/mtd -d
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ echo $PID > /var/run/mtd.pid
+ add_daemon mythtranscode
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Myth Transcoding Daemon"
+ [ ! -z "$PID" ] && kill $PID &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon mtd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch b/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch
new file mode 100644
index 0000000..a5a182d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch
@@ -0,0 +1,151 @@
+Index: mythplugins/mythvideo/mythvideo/videomanager.cpp
+===================================================================
+--- mythplugins.orig/mythvideo/mythvideo/videomanager.cpp 2009-03-09 22:39:40.000000000 -0400
++++ mythplugins/mythvideo/mythvideo/videomanager.cpp 2009-03-09 23:04:55.000000000 -0400
+@@ -1535,6 +1535,56 @@
+ }
+ }
+
++ // Since there's no DB update to remove imdb.pl settings in -fixes,
++ // check for the old imdb.pl command and, if it's the old default,
++ // use tmdb.pl, instead (if available in the same location or the
++ // scripts dir)). Checks to see if cmd ends with end (the end of the
++ // old default imdb.pl command line). If so, it checks for tmdb, and
++ // if it exists in either the same location as specified in cmd or in
++ // the MythVideo scripts directory, replace end with "/tmdb.pl " + arg
++ QString UpdateCommandForTMDB(const QString cmd, const QString end,
++ const QString arg)
++ {
++ QString updated_cmd = cmd;
++ if (updated_cmd.endsWith(end))
++ {
++ QString script_path = updated_cmd;
++ script_path.truncate(updated_cmd.findRev(end,
++ 0 - end.length()));
++ QString tmdb_path(script_path + "/tmdb.pl");
++ if (QFile::exists(tmdb_path))
++ {
++ VERBOSE(VB_GENERAL, QString("Overriding old default "
++ "grabber script command line. "
++ "Using tmdb.pl, instead."));
++ updated_cmd = tmdb_path + " " + arg;
++ }
++ else
++ {
++ // It's possible the user has a non-default imdb.pl
++ // command-line--including path location--in the setting,
++ // so check to see if we've already checked the mythvideo
++ // scripts directory
++ QString def_path = QDir::cleanDirPath(QString("%1/%2")
++ .arg(gContext->GetShareDir())
++ .arg("mythvideo/scripts"));
++ if (script_path != def_path)
++ {
++ tmdb_path = def_path + "/tmdb.pl";
++ if (QFile::exists(tmdb_path))
++ {
++ VERBOSE(VB_GENERAL, QString("Overriding old "
++ "default grabber script command line. "
++ "Using tmdb.pl, instead."));
++ updated_cmd = tmdb_path + " " + arg;
++ }
++ }
++ }
++ }
++
++ return updated_cmd;
++ }
++
+ virtual void OnExecDone(bool normal_exit, const QStringList &out,
+ const QStringList &err) = 0;
+
+@@ -1624,9 +1674,16 @@
+
+ QString def_cmd = QDir::cleanDirPath(QString("%1/%2")
+ .arg(gContext->GetShareDir())
+- .arg("mythvideo/scripts/imdb.pl -M tv=no;video=no"));
++ .arg("mythvideo/scripts/tmdb.pl -M"));
+
+- QString cmd = gContext->GetSetting("MovieListCommandLine", def_cmd);
++ // Since there's no DB update to remove imdb.pl settings in -fixes,
++ // check for the old imdb.pl command and, if it's the old default,
++ // use tmdb.pl, instead (if available in the same location or the
++ // scripts dir))
++ QString cmd = UpdateCommandForTMDB(
++ gContext->GetSetting("MovieListCommandLine",
++ def_cmd),
++ "/imdb.pl -M tv=no;video=no", "-M");
+
+ QStringList args;
+ args += title;
+@@ -1682,9 +1739,15 @@
+
+ const QString def_cmd = QDir::cleanDirPath(QString("%1/%2")
+ .arg(gContext->GetShareDir())
+- .arg("mythvideo/scripts/imdb.pl -D"));
+- const QString cmd = gContext->GetSetting("MovieDataCommandLine",
+- def_cmd);
++ .arg("mythvideo/scripts/tmdb.pl -D"));
++ // Since there's no DB update to remove imdb.pl settings in -fixes,
++ // check for the old imdb.pl command and, if it's the old default,
++ // use tmdb.pl, instead (if available in the same location or the
++ // scripts dir))
++ const QString cmd = UpdateCommandForTMDB(
++ gContext->GetSetting("MovieDataCommandLine",
++ def_cmd),
++ "/imdb.pl -D", "-D");
+
+ StartRun(cmd, video_uid, "Video Data Query");
+ }
+@@ -1726,9 +1789,16 @@
+ const QString default_cmd =
+ QDir::cleanDirPath(QString("%1/%2")
+ .arg(gContext->GetShareDir())
+- .arg("mythvideo/scripts/imdb.pl -P"));
+- const QString cmd = gContext->GetSetting("MoviePosterCommandLine",
+- default_cmd);
++ .arg("mythvideo/scripts/tmdb.pl -P"));
++ // Since there's no DB update to remove imdb.pl settings in -fixes,
++ // check for the old imdb.pl command and, if it's the old default,
++ // use tmdb.pl, instead (if available in the same location or the
++ // scripts dir))
++ const QString cmd = UpdateCommandForTMDB(
++ gContext->GetSetting("MoviePosterCommandLine",
++ default_cmd),
++ "/imdb.pl -P", "-P");
++
+ StartRun(cmd, video_uid, "Poster Query");
+ }
+
+Index: mythplugins/mythvideo/mythvideo/globalsettings.cpp
+===================================================================
+--- mythplugins.orig/mythvideo/mythvideo/globalsettings.cpp 2009-03-09 22:39:40.000000000 -0400
++++ mythplugins/mythvideo/mythvideo/globalsettings.cpp 2009-03-09 22:42:47.000000000 -0400
+@@ -210,8 +210,7 @@
+ {
+ HostLineEdit *gc = new HostLineEdit("MovieListCommandLine");
+ gc->setLabel(QObject::tr("Command to search for movie listings"));
+- gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/imdb.pl " +
+- "-M tv=no;video=no");
++ gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/tmdb.pl -M");
+ gc->setHelpText(QObject::tr("This command must be "
+ "executable by the user running MythVideo."));
+ return gc;
+@@ -221,7 +220,7 @@
+ {
+ HostLineEdit *gc = new HostLineEdit("MoviePosterCommandLine");
+ gc->setLabel(QObject::tr("Command to search for movie posters"));
+- gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/imdb.pl -P");
++ gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/tmdb.pl -P");
+ gc->setHelpText(QObject::tr("This command must be "
+ "executable by the user running MythVideo."));
+ return gc;
+@@ -231,7 +230,7 @@
+ {
+ HostLineEdit *gc = new HostLineEdit("MovieDataCommandLine");
+ gc->setLabel(QObject::tr("Command to extract data for movies"));
+- gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/imdb.pl -D");
++ gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/tmdb.pl -D");
+ gc->setHelpText(QObject::tr("This command must be "
+ "executable by the user running MythVideo."));
+ return gc;
diff --git a/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo.install b/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo.install
new file mode 100644
index 0000000..a06777d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo.install
@@ -0,0 +1,20 @@
+# arg 1: the new package version
+post_install() {
+ ln -s /myth/video /data/srv/httpd/htdocs/mythweb/data/video
+ ln -s /myth/video/.covers /data/srv/httpd/htdocs/mythweb/data/video_covers
+}
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ rm -fr /data/srv/httpd/htdocs/mythweb/data/video
+ rm -fr /data/srv/httpd/htdocs/mythweb/data/video_covers
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/mythweather/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythweather/PKGBUILD
new file mode 100644
index 0000000..201ea5d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweather/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythweather
+pkgver=0.21
+pkgrel=3
+pkgdesc="Weather checking plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'wget')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+
+ ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythweather
+
+ qmake mythplugins.pro
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythweb/PKGBUILD
new file mode 100644
index 0000000..20e9e3d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/PKGBUILD
@@ -0,0 +1,39 @@
+pkgname=mythweb
+pkgver=0.21
+pkgrel=20
+pkgdesc="Web interface for MythTV's backend"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'lighttpd' 'php' 'local-website')
+install=mythweb.install
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2" wiiweb.tar.bz2 transcoders.patch)
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+DOCROOT=/data/srv/httpd/htdocs/mythweb
+
+build() {
+ cd $startdir/src/mythplugins/mythweb
+ svn update
+ mkdir -p $startdir/pkg/$DOCROOT/{image_cache,php_sessions}
+#apply gallery patches here
+# cd $startdir/src/mythplugins-$pkgver/$pkgname/
+# patch -p0 < $startdir/patch/mythweb_gallery_updated1.diff
+# patch -p2 < $startdir/patch/2923-mythweb-gallery-English_GB_lang.diff
+# tar -zxvf $startdir/patch/icons.tar.gz
+###
+
+ # Workaround for LIGHTTPD bug in mythweb.pl (affects DB queries)
+ cd $startdir/src/mythplugins/$pkgname/
+ patch -p0 < $startdir/patch/mythweb.pl.diff
+ patch -p1 < $startdir/transcoders.patch
+
+ cp -r $startdir/src/mythplugins/$pkgname/* $startdir/pkg/$DOCROOT
+# cp $startdir/src/mythplugins-$pkgver/$pkgname/data/.htaccess $startdir/pkg/$DOCROOT
+ rm $startdir/pkg/srv/$DOCROOT/README
+ tar xjvf $srcdir/wiiweb.tar.bz2 -C $pkgdir/$DOCROOT
+ chown -R http:users $startdir/pkg/$DOCROOT
+ chmod g+rw $startdir/pkg/$DOCROOT/{image_cache,php_sessions,data}
+}
+
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/mythweb.install b/abs/core/mythtv/old/stable-0.21/mythweb/mythweb.install
new file mode 100644
index 0000000..a2aa1bd
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/mythweb.install
@@ -0,0 +1,13 @@
+post_install() {
+ if [ ! -e /data/srv/httpd/htdocs/mythweb/data/video ]
+ then
+ ln -s /myth/video /data/srv/httpd/htdocs/mythweb/data/video
+ fi
+}
+
+post_upgrade(){
+ post_install $1
+}
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/patch/2923-mythweb-gallery-English_GB_lang.diff b/abs/core/mythtv/old/stable-0.21/mythweb/patch/2923-mythweb-gallery-English_GB_lang.diff
new file mode 100644
index 0000000..103fb2f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/patch/2923-mythweb-gallery-English_GB_lang.diff
@@ -0,0 +1,102 @@
+Index: mythplugins/mythweb/modules/_shared/lang/English_GB.lang
+===================================================================
+--- mythplugins/mythweb/modules/_shared/lang/English_GB.lang (revision 16505)
++++ mythplugins/mythweb/modules/_shared/lang/English_GB.lang (working copy)
+@@ -154,6 +154,7 @@
+ "Current Conditions"
+ "Current Recording"
+ "Current recordings"
++"Current path"
+ "Currently Browsing: $1"
+ "Currently Recording: Edit"
+ "Custom"
+@@ -169,6 +170,7 @@
+ Deaf Signed
+ "Default"
+ "Default MythVideo View"
++"Default view size"
+ "Delete"
+ "delete"
+ "Delete $1"
+@@ -247,6 +249,8 @@
+ "freqid"
+ "Friday"
+ "Frontends"
++"Gallery"
++"Gallery image path"
+ "generic_date"
+ %a %b %e, %Y
+ "generic_time"
+@@ -270,12 +274,14 @@
+ "Hide"
+ "High"
+ "Home"
++"Horizontal screen resolution"
+ "Host"
+ "Hosted by"
+ "Hour"
+ "Hour Format"
+ "hue"
+ "Humidity"
++"Images per page"
+ "IMDB"
+ "IMDBTYPE"
+ "Inactive"
+@@ -334,6 +340,8 @@
+ "length"
+ "Length"
+ "Length (min)"
++"List of allowed image formats"
++"List of available view sizes"
+ "Listing &quot;Jump to&quot;"
+ "Listing Time Key"
+ "Listings"
+@@ -383,6 +391,7 @@
+ "mythvideo.sort_ignores_case"
+ "MythWeb"
+ "MythWeb Defaults"
++"MythWeb Gallery"
+ "MythWeb Global Defaults"
+ "MythWeb Session"
+ "MythWeb Skin"
+@@ -413,6 +422,7 @@
+ "Number of shows"
+ "Number of Songs"
+ "Number of timeslots"
++"of"
+ "Only display favourite channels"
+ "Only match commercial-free channels"
+ "Only match HD programs"
+@@ -429,6 +439,7 @@
+ "Past Month"
+ "Past Week"
+ "Past Year"
++"Path where the thumbnails are"
+ "Paused"
+ "Pending"
+ "People"
+@@ -688,6 +699,7 @@
+ "Subtitles Available"
+ "Sunday"
+ "Surround Sound"
++"Switch view mode"
+ "Tab"
+ "The requested recording schedule has been deleted."
+ "There are no items in this Playlist!"
+@@ -705,6 +717,7 @@
+ "Title Match"
+ "Title search"
+ "Title Search"
++"to"
+ "Today"
+ "Tomorrow"
+ "Too Many"
+@@ -791,6 +804,8 @@
+ "Wednesday"
+ "welcome: backend_log"
+ Show the server logs.
++"welcome: gallery"
++ Browse your picture collection.
+ "welcome: music"
+ Browse your music collection.
+ "welcome: remote"
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/patch/icons.tar.gz b/abs/core/mythtv/old/stable-0.21/mythweb/patch/icons.tar.gz
new file mode 100644
index 0000000..691d28e
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/patch/icons.tar.gz
Binary files differ
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb.pl.diff b/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb.pl.diff
new file mode 100644
index 0000000..6dcbf99
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb.pl.diff
@@ -0,0 +1,23 @@
+*** mythweb-unpatched.pl 2009-06-02 14:55:24.011861459 -0400
+--- mythweb.pl 2009-06-02 14:56:24.386441304 -0400
+***************
+*** 49,57 ****
+
+ # Connect to the database
+ END { $dbh->disconnect() if ($dbh); }
+! our $dbh = DBI->connect("dbi:mysql:database=$ENV{'db_name'}:host=$ENV{'db_server'}",
+! $ENV{'db_login'},
+! $ENV{'db_password'});
+ unless ($dbh) {
+ print header(),
+ "Cannot connect to database: $!\n\n";
+--- 49,57 ----
+
+ # Connect to the database
+ END { $dbh->disconnect() if ($dbh); }
+! our $dbh = DBI->connect("dbi:mysql:database=$ENV{'DB_NAME'}:host=$ENV{'DB_SERVER'}",
+! $ENV{'DB_LOGIN'},
+! $ENV{'DB_PASSWORD'});
+ unless ($dbh) {
+ print header(),
+ "Cannot connect to database: $!\n\n";
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb_gallery_updated1.diff b/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb_gallery_updated1.diff
new file mode 100644
index 0000000..f683b17
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb_gallery_updated1.diff
@@ -0,0 +1,1657 @@
+diff -Naur ../mythweb-orig/modules/gallery/handler.php ./modules/gallery/handler.php
+--- ../mythweb-orig/modules/gallery/handler.php 1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/handler.php 2007-08-20 22:33:02.000000000 -0400
+@@ -0,0 +1,35 @@
++<?php
++/**
++ * Handler for the Gallery module.
++ *
++ * @url $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/handler.php $
++ * @date $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version $Revision: 12295 $
++ * @author $Author: rsiebert $
++ * @license GPL
++ *
++ * @package MythWeb
++ * @subpackage MythGallery
++ *
++/**/
++
++// Load settings functions
++require_once 'includes/objects/Settings.php';
++
++// Load Gallery class
++require_once 'includes/objects/Gallery.php';
++
++// Load configuration
++loadGalleryConfig();
++
++// Create the gallery
++global $gallery;
++
++$gallery = new Gallery();
++
++// Print the gallery page template
++require_once tmpl_dir.'gallery.php';
++
++// Exit
++exit;
++
+diff -Naur ../mythweb-orig/modules/gallery/includes/objects/Gallery.php ./modules/gallery/includes/objects/Gallery.php
+--- ../mythweb-orig/modules/gallery/includes/objects/Gallery.php 1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/includes/objects/Gallery.php 2007-08-20 22:27:02.000000000 -0400
+@@ -0,0 +1,608 @@
++<?php
++/**
++ * Gallery Functions for the Gallery module
++ *
++ * @url $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/tmpl/default/gallery.php $
++ * @date $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version $Revision: 12295 $
++ * @author $Author: xris $
++ * @license GPL
++ *
++ * @package MythWeb
++ *
++/**/
++
++class Gallery {
++
++ var $config;
++
++ function Gallery() {
++ // load default configuration
++ $this->config['image_path'] = $_SESSION['gallery']['image_path'];
++ $this->config['cache_path'] = $_SESSION['gallery']['cache_path'];
++ $this->config['default_viewsize'] = $_SESSION['gallery']['default_viewsize'];
++ $this->config['screen_width'] = $_SESSION['gallery']['screen_width'];
++ $this->config['viewsizes'] = $_SESSION['gallery']['viewsizes'];
++ $this->config['valid_image_files'] = $_SESSION['gallery']['valid_image_files'];
++
++ }
++
++ // =======================================================
++ function start() {
++
++ // the current selected directory where the cached images are stored
++ $current_path = $this->getCurrentImagePath();
++ // the path to the real images
++ $image_path = $this->config['image_path'];
++ // the filename of a selected image
++ $image_name = $this->getImageName();
++ // the current viewsize mode
++ $image_viewsize = $this->getImageViewSize();
++ // get the image index for the viewsize medium
++ $image_index = $this->getImageIndex();
++ // get the contents of the folders
++ $folderList = $this->getFolderList( $current_path );
++ // check what kind of images should be displayed
++ if ($image_viewsize == 'fullsize') {
++ // create the images if there are not yet in the directory
++ $this->makeImages( $current_path, $folderList, $image_viewsize, $image_index );
++ // display the big image
++ $this->showFullsizeImage( $current_path, $folderList, $image_index );
++ // there is nothing else to do
++ exit;
++ }
++ // show the horizontal navigation bar
++ $this->showGalleryHeader( $current_path, $image_viewsize, $image_index );
++ // check if the thumbnail directory is there, if not create it
++ $this->makeDirectory( $current_path );
++ // create the images if there are not yet in the directory
++ $this->makeImages( $current_path, $folderList, $image_viewsize, $image_index );
++ echo '<table width="100%" cellspacing="0" cellpadding="0">'."\n".
++ '<tr>'."\n".
++ '<td class="folder_navigation">'."\n";
++ $this->showFolderTree( $current_path, $folderList );
++ echo '</td>'."\n".
++ '<td class="image_listing">'."\n";
++ if ($this->onlyDirectoriesAvailable( $current_path, $folderList, $image_viewsize, $image_index ) == false ) {
++ echo '<table class="imagelist_and_navigation" cellspacing="0" cellpadding="0">'."\n".
++ '<tr>'."\n".
++ '<td>'."\n";
++ $this->showNavigation( $current_path, $folderList, $image_viewsize, $image_index );
++ echo '</td>'."\n".
++ '</tr>'."\n".
++ '<tr>'."\n".
++ '<td>'."\n";
++ $this->showImages( $current_path, $folderList, $image_viewsize, $image_index );
++ echo '</td>'."\n".
++ '</tr>'."\n".
++ '</tr>'."\n".
++ '</table>'."\n";
++ } else {
++ echo '&nbsp;';
++ }
++ echo '</td>'."\n".
++ '</tr>'."\n".
++ '</table>'."\n";
++ }
++
++ // =======================================================
++ function getViewSizesList() {
++ $viewsizesList = explode(';',preg_replace('/ /','',$this->config['viewsizes']));
++ return $viewsizesList;
++ }
++
++
++ // =======================================================
++ function getCurrentImagePath() {
++ switch ($_SERVER['REQUEST_METHOD']) {
++ case 'GET':
++ $current_path = stripslashes($_GET['path']);
++ break;
++ case 'POST':
++ $current_path = stripslashes($_POST['path']);
++ break;
++ }
++ if (!is_dir($current_path) ) {
++ $current_path = $this->config['image_path'];
++ }
++ return $current_path;
++ }
++
++ // =======================================================
++ function getImageViewSize() {
++ switch ($_SERVER['REQUEST_METHOD']) {
++ case 'GET':
++ $viewsize = stripslashes($_GET[viewsize]);
++ break;
++ case 'POST':
++ $viewsize = stripslashes($_POST[viewsize]);
++ break;
++ }
++ // check if the given viewsize is one of the viewsizes
++ // specified in the config. fullsize is also needed
++ if (isset($viewsize) &&
++ (($viewsize == 'fullsize') ||
++ in_array($viewsize, $this->getViewSizesList()))) {
++ return $viewsize;
++ } else {
++ return $this->config['default_viewsize'];
++ }
++ }
++
++ // =======================================================
++ function getImageName() {
++ switch ($_SERVER['REQUEST_METHOD']) {
++ case 'GET':
++ $image_name = $_GET['file'];
++ break;
++ case 'POST':
++ $image_name = $_POST['file'];
++ break;
++ }
++ return $image_name;
++ }
++
++ // =======================================================
++ function getImageIndex() {
++ if (isset($_GET['index']))
++ return $_GET['index'];
++ return 1;
++ }
++
++
++ // =======================================================
++ // displays the path of the choosen directories horizontally
++ // so one can navigate back
++ function showGalleryHeader( $current_path, $image_viewsize, $image_index ) {
++ echo '<table class="current_path_and_viewsize" cellspacing="0" cellpadding="0">'."\n".
++ '<tr>'."\n".
++ '<td class="current_path">'.
++ t('Current path').': ';
++ $folders = explode('/', $current_path);
++ for ($i=1; $i < count($folders); $i++) {
++ echo '<a class="header" href="'.root.'gallery/gallery.php?'.path.'=';
++ // show thefolders in the navigation bar
++ for ($j=1; $j <= $i; $j++) {
++ echo '/'.$folders[$j];
++ }
++ echo '&'.viewsize.'='.$this->getImageViewSize().'">'.
++ $folders[$i].'</a>'."\n";
++ // don't show the separators when there are no more subfolders
++ if ($i < (count($folders)-1)) {
++ echo ' / ';
++ }
++ }
++ // display the menu where one can shoose between small and medium images
++ echo '</td>'."\n".
++ '<td class="change_viewsize_text">'.
++ t('Switch view mode').':&nbsp;&nbsp;'.
++ '</td>'."\n".
++ '<form name="change_viewsize" method="post">'."\n".
++ '<td class="change_viewsize_selection">'."\n".
++ '<select class="change_viewsize" name="'.
++ viewsize.'" onChange="submit()" size="1">'."\n";
++ $viewsizesList = $this->getViewSizesList();
++ for ($i=0; $i < count($viewsizesList); $i++) {
++ echo '<option value="'.$viewsizesList[$i].'" ';
++ if ($this->getImageViewSize() == $viewsizesList[$i]) {
++ echo 'selected';
++ }
++ $str = strtr($viewsizesList[$i], ',','x');
++ echo '>'.$str.' '.t('Images per page').'</option>'."\n";
++ }
++ echo '</select>'."\n".
++ '<input type="hidden" name="'.index.'" value="'.$image_index.'">'.
++ '<input type="hidden" name="'.path.'" value="'.$current_path.'">';
++ echo '</td></form>'."\n".
++ '</tr>'."\n".
++ '</table>'."\n";
++ }
++
++ // =======================================================
++ function showFolderTree( $current_path, $folderList ) {
++
++ // dont go into the directory if there are not subdirs
++ if ($this->getFolderCount( $current_path, $folderList[$i]) == 0) {
++ $current_path = substr($current_path, 0, strrpos($current_path, '/'));
++ $folderList = $this->getFolderList( $current_path );
++ }
++ // displays the directory tree and the pictures
++ echo '<table class="folder_navigation" width="100%" cellspacing="0" cellpadding="0">'."\n".
++ '<tr>'."\n".
++ '<td>'."\n";
++ // display the directories
++ for ($i = 0; $i < count( $folderList ); $i++) {
++ // only display folders that are not hidden or special
++ if ((is_dir( $current_path.'/'.$folderList[$i] )) &&
++ ($folderList[$i] != '..')){
++ echo '<div class="folder_navigation" '.
++ 'onmouseover="this.className=\'folder_navigation_active\'" '.
++ 'onmouseout="this.className=\'folder_navigation\'">';
++ $link = $this->getFolderLink( $current_path, $folderList[$i] );
++ $folderCount = $this->getFolderCount( $current_path, $folderList[$i] );
++ // display the folder as a link and the number of subfolder next to it
++ $this->displayFolderLink( $link, $folderList[$i], $folderCount );
++ echo '</div>';
++ }
++ }
++ echo '</td>'."\n".
++ '</tr>'."\n".
++ '</table>'."\n";
++ }
++
++ // =======================================================
++ function getFolderList( $current_path ) {
++ if ($current_path != $this->config['cache_path'] ) {
++ $folderList[] = '..';
++ }
++ // get the image extensions
++ $extenstionList = explode(',',$this->config['valid_image_files']);
++ // get the directories and files
++ if ($dh = opendir($current_path)) {
++ while (($file = readdir($dh)) !== false) {
++ // only add the file/dir if its a directory or a file
++ // with the specified extension
++
++ if ((substr($file,0,1) != '.') &&
++ (is_dir($current_path.'/'.$file)) ||
++ (in_array(strtolower(substr($file,-3)), $extenstionList)))
++ {
++ $folderList[] = $file;
++ }
++ }
++ }
++ // delete the first entry when we are at the image_path
++ // to prevent from going a directory up
++ if ($current_path == $this->config['image_path'])
++ array_shift($folderList);
++ // sort the array alphabetically
++ sort($folderList);
++ return $folderList;
++ }
++
++ // =======================================================
++ function getFolderLink( $current_path, $folder ) {
++ $link = '<a class="folderlist" href="'.root.'gallery/gallery.php?'.path.'=';
++ // display the .. directory only if there is another
++ // directory above this one.
++ if (($folder == '..') && ($current_path != $this->config['cache_path'])) {
++ $folderList = explode( '/', $current_path.'/');
++ for( $i=1; $i < count($folderList)-2; $i++ ) {
++ $link .= '/'.$folderList[$i];
++ }
++ } else {
++ $link .= $current_path.'/'.$folder;
++ }
++ $link .= '&'.viewsize.'='.$this->getImageViewSize().'">';
++ return $link;
++ }
++
++ // =======================================================
++ function displayFolderLink( $link, $folder, $folderCount ) {
++ echo '<table class="folderlink_inactive" cellspacing="0" cellpadding="0">'.
++ '<tr>'.
++ '<td align="left" width="30px">'.
++ '<img class="navigation" src="'.root.skin_dir.'/img/gallery/dir.png">'.
++ '</td>'.
++ '<td align="left" width="auto">'.
++ $link.$folder.'</a>';
++ $this->displayFolderCount( $folderCount );
++ echo '</td>'.
++ '</tr>'.
++ '</table>'."\n";
++ }
++
++ // =======================================================
++ function getFolderCount($current_path, $folder) {
++ // dont get the folder count if its the .. directory
++ if ($folder != '..') {
++ return count(glob($current_path.'/'.$folder.'/*',GLOB_ONLYDIR));
++ }
++ }
++
++ // =======================================================
++ // shows how many sub directories the specified folder has
++ function displayFolderCount( $folderCount ) {
++ if ($folderCount == 1) {
++ echo ' ('.$folderCount.')';// '.t('subfolder');
++ }
++ if ($folderCount > 1) {
++ echo ' ('.$folderCount.')';// '.t('subfolders');
++ }
++ }
++
++
++ // =======================================================
++ // creates the directory for the thumbnails. the directory
++ // structure is identical to the one of original pictures
++ function makeDirectory( $current_path ) {
++ if (!file_exists( $this->config['cache_path'].$current_path )) {
++ // add the document root to the thumbnail directory
++ // because mkdir works with absolute paths
++ $cache_path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'];
++ // split the directory string into separate directories
++ $folderList = explode( '/', $current_path );
++ // go through all folder and create each one
++ for($i=1; $i < count($folderList); $i++) {
++ $cache_path .= '/'.$folderList[$i];
++ // check if the directory is already there
++ if (!file_exists($cache_path)) {
++ mkdir ($cache_path);
++ }
++ }
++ }
++ }
++
++ // =======================================================
++ // check if the images are there, if not create them
++ function makeImages( $current_path, $folderList, $image_viewsize, $image_index ) {
++ $path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'].$current_path;
++ // use the image_viewsize numbers as a prefix if fullsize is not requested
++ if ( $image_viewsize != fullsize ) {
++ // only so many images will be created that will be displayed on the screen
++ $max_cols = substr($image_viewsize, 0, 1);
++ $max_rows = substr($image_viewsize, 2, 1);
++ $max_number = ($max_cols * $max_rows);
++ // the prefix that will be added to a file so that
++ // different sizes have different names
++ $file_prefix = strtr($image_viewsize, ',','_').'_';
++ } else {
++ $max_number = 1;
++ // the prefix that will be added to a file so that
++ // different sizes have different names
++ $file_prefix = $image_viewsize.'_';
++ }
++ // get the amount of subfolders. increase the count in the loop by these
++ // subfolders
++ $folder_count = count(glob($current_path.'/'.$folder.'/*',GLOB_ONLYDIR));
++ for ($i = $image_index; $i < ($max_number + $image_index + $folder_count); $i++) {
++ // show the picture only if its not hidden and not a directory
++ if (!is_dir( $current_path.'/'.$folderList[$i] )) {
++ // check if there is already a thumbnail available, if not create it
++ if (!file_exists( $path.'/'.$file_prefix.$folderList[$i] )) {
++ // get the extension of the file
++ $fileParts = explode('.', $folderList[$i]);
++ $file_extension = strtolower($fileParts[count($fileParts)-1]);
++ // get image pointer
++ $image_p = null;
++ if ($file_extension == 'jpg')
++ $image_p = @imagecreatefromjpeg( $current_path.'/'.$folderList[$i] );
++ if ($file_extension == 'png')
++ $image_p = @imagecreatefrompng( $current_path.'/'.$folderList[$i] );
++ if ($file_extension == 'gif')
++ $image_p = @imagecreatefromgif( $current_path.'/'.$folderList[$i] );
++ // proceed if we have an image pointer
++ if ($image_p) {
++ // get the image size for the cached images
++ $size = getimagesize( $current_path.'/'.$folderList[$i]);
++ $width = $size[0];
++ $height = $size[1];
++ // get the width for the choosen viewsize
++ // calculate it from the columns and rows if fullsize is not
++ // requested, otherwise use the original image size
++ if ( $image_viewsize != fullsize ) {
++ $new_width = (( $this->config['screen_width'] / $max_cols ) - 50 );
++ // calculate new image dimensions
++ $new_height = ($height/$width) * $new_width;
++ if ( $height > $width ) {
++ $new_width = ($width/$height) * $new_height;
++ }
++ } else {
++ $new_width = $width;
++ $new_height = $height;
++ }
++ // get a new image pointer
++ $new_image_p = imagecreatetruecolor($new_width, $new_height);
++ // resample the old image to the new one
++ imagecopyresampled($new_image_p, $image_p, 0, 0, 0, 0,
++ $new_width, $new_height, $width, $height );
++ // save the image
++ if ($file_extension == 'jpg')
++ imagejpeg($new_image_p, $path.'/'.$file_prefix.$folderList[$i] );
++ if ($file_extension == 'png')
++ imagepng($new_image_p, $path.'/'.$file_prefix.$folderList[$i] );
++ if ($file_extension == 'gif')
++ imagegif($new_image_p, $path.'/'.$file_prefix.$folderList[$i] );
++ // destroy the old pointers
++ imagedestroy( $image_p );
++ imagedestroy( $new_image_p );
++ }
++ }
++ }
++ }
++ }
++
++ // =======================================================
++ function showImages( $current_path, $folderList, $image_viewsize, $image_index ) {
++
++ $path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'].$current_path;
++ // get the column and row values, display that many images in a row
++ $max_cols = substr($image_viewsize, 0, 1);
++ $max_rows = substr($image_viewsize, 2, 1);
++ // counter for the current column and row
++ $current_col = 0;
++ // the prefix that will be added to a file so that different sizes have different names
++ $file_prefix = strtr($image_viewsize, ',','_').'_';
++
++ // get the amount of subfolders
++ $folder_count = count(glob($current_path.'/'.$folder.'/*',GLOB_ONLYDIR));
++ // increase the index by the folder count
++ for ($i = 1; $i <= $folder_count; $i++) {
++ $image_index += 1;
++ }
++ echo '<table width="100%" cellspacing="0" cellpadding="0">'."\n".
++ '<tr>'.
++ '<td colspan="'.$max_cols.'">'.
++ '&nbsp;'.
++ '</td>'.
++ '</tr>';
++ // go through all entries in the folderList
++ for ($i = $image_index; $i < (($max_cols * $max_rows)+$image_index); $i++) {
++ if (( file_exists( $path.'/'.$file_prefix.$folderList[$i] )) &&
++ ( isset($folderList[$i]) )) {
++ // if the column is zero then start a new row
++ // the specified number of images will be displayed side by side
++ if ( $current_col == 0 ) echo '<tr>'."\n";
++ // stretch the table cells to equal size
++ echo '<td class="single_image" style="width:';
++ // calculate the width of the cells
++ echo floor( 100 / $max_cols );
++ echo '%;">'."\n".
++ // display the image centered and put border around it
++ '<div align="center">'."\n".
++ '<a href="'.root.'gallery/gallery.php?'.
++ path.'='.$current_path.
++ '&'.index.'='.$i.
++ '&'.viewsize.'='.fullsize.
++ '" target="blank">'."\n".
++ '<img class="single_image" src="'.
++ $this->config['cache_path'].$current_path.'/'.
++ $file_prefix.$folderList[$i].'" '.
++ 'onmouseover="this.className=\'single_image_active\'" '.
++ 'onmouseout="this.className=\'single_image\'">'."\n".
++ '</a>'."\n".
++ '</div>'."\n".
++ '<div align="center">'."\n".
++ // show the filename
++ $folderList[$i]."\n".
++ '</div>'."\n".
++ '</td>'."\n";
++ // if the max number of columns are reached close the row
++ if ( $current_col == $max_cols ) echo '</tr>'."\n";
++ // reset the column count back to zero
++ $current_col++;
++ if ( $current_col == $max_cols ) $current_col = 0;
++ }
++ }
++ echo '</table>';
++ }
++
++
++ // =======================================================
++ function onlyDirectoriesAvailable( $current_path, $folderList, $image_viewsize, $image_index ) {
++ $path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'].$current_path;
++ // only so many images will be created that will be displayed on the screen
++ $max_cols = substr($image_viewsize, 0, 1);
++ $max_rows = substr($image_viewsize, 2, 1);
++ $max_number = ($max_cols * $max_rows);
++ // the prefix that will be added to a file so that different sizes have different names
++ $file_prefix = strtr($image_viewsize, ',','_').'_';
++
++ // go through the folderList. if there are only directories in it
++ // then dont display the navigation stuff
++ $only_dirs = true;
++ for ($i = 0; $i < count($folderList); $i++) {
++ if ( file_exists( $path.'/'.$file_prefix.$folderList[$i] )) {
++ $only_dirs = false;
++ break;
++ }
++ }
++ return $only_dirs;
++ }
++
++ // =======================================================
++ function showNavigation( $current_path, $folderList, $image_viewsize, $image_index ) {
++ $path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'].$current_path;
++ // only so many images will be created that will be displayed on the screen
++ $max_cols = substr($image_viewsize, 0, 1);
++ $max_rows = substr($image_viewsize, 2, 1);
++ $max_number = ($max_cols * $max_rows);
++ // the prefix that will be added to a file so that different sizes have different names
++ $file_prefix = strtr($image_viewsize, ',','_').'_';
++
++ echo '<table width="100%" cellspacing="0" cellpadding="0">'."\n".
++ '<tr>'."\n".
++ '<td class="image_navigation">&nbsp;'."\n".
++ '</td>'."\n".
++ '<td class="image_navigation">'."\n";
++ // display the goto first page link
++ if ($image_index != 1) {
++ echo '<a href="'.root.'gallery/gallery.php?'.
++ '&'.path.'='.$current_path.
++ '&'.index.'=1'.
++ '&'.viewsize.'='.$image_viewsize.'">'."\n".
++ // display the right arrow
++ '<img src="'.root.skin_dir.'/img/gallery/first_page.png">'.
++ '</a>'."\n";
++ } else {
++ echo '<img src="'.root.skin_dir.'/img/gallery/first_page_disabled.png">'."\n";
++ }
++ // display the previous page icon if there are more than one entries
++ if ($image_index != 1) {
++ echo '<a href="'.root.'gallery/gallery.php?'.
++ '&'.path.'='.$current_path.
++ '&'.index.'=';
++ if ($image_index < $max_number) {
++ echo 1;
++ } else {
++ echo ($image_index - $max_number);
++ }
++ echo '&'.viewsize.'='.$image_viewsize.'">'."\n".
++ // display the left arrow
++ '<img src="'.root.skin_dir.'/img/gallery/prev_page.png">'.
++ '</a>'."\n";
++ } else {
++ echo '<img src="'.root.skin_dir.'/img/gallery/prev_page_disabled.png">'."\n";
++ }
++ echo '</td>'."\n".
++ '<td class="image_navigation">'."\n".
++ // display an info in what page we are right now
++ '( '.$image_index.' '.t('to').' ';
++ if (($image_index + $max_number) < count($folderList)) {
++ echo ($image_index+$max_number-1);
++ } else {
++ echo (count($folderList)-1);
++ }
++ echo ' '.t('of').' '.(count($folderList)-1).' )'."\n".
++ '</td>'."\n".
++ '<td class="image_navigation">'."\n";
++ // display the next page link
++ if (($image_index + $max_number) < count($folderList)) {
++ echo '<a href="'.root.'gallery/gallery.php?'.
++ '&'.path.'='.$current_path.
++ '&'.index.'='.($image_index + $max_number).
++ '&'.viewsize.'='.$image_viewsize.'">'."\n".
++ // display the right arrow
++ '<img src="'.root.skin_dir.'/img/gallery/next_page.png">'.
++ '</a>'."\n";
++ } else {
++ echo '<img src="'.root.skin_dir.'/img/gallery/next_page_disabled.png">'."\n";
++ }
++ // display the goto last page link
++ if (($image_index + $max_number) < count($folderList)) {
++ echo '<a href="'.root.'gallery/gallery.php?'.
++ '&'.path.'='.$current_path.
++ '&'.index.'='.
++ (count($folderList) - (count($folderList) % $max_number)+1).
++ '&'.viewsize.'='.$image_viewsize.'">'."\n".
++ // display the right arrow
++ '<img src="'.root.skin_dir.'/img/gallery/last_page.png">'.
++ '</a>'."\n";
++ } else {
++ echo '<img src="'.root.skin_dir.'/img/gallery/last_page_disabled.png">'."\n";
++ }
++ echo '</td>'."\n".
++ '<td class="image_navigation">&nbsp;'."\n".
++ '</td>'."\n".
++ '</tr>'."\n".
++ '</table>'."\n";
++ }
++
++ // =======================================================
++ function showFullsizeImage( $current_path, $folderList, $image_index ) {
++ echo '<html>'."\n".
++ '<head>'."\n".
++ '<title>'.$folderList[$image_index].'</title>'."\n".
++ '</head>'."\n".
++ '<body>'."\n".
++ '<div>'."\n".
++ '<img src="'."\n".
++ $this->config['cache_path'].$current_path.'/'.
++ fullsize.'_'.$folderList[$image_index].'">'."\n".
++ '</div>'."\n".
++ '</body>'."\n".
++ '</html>';
++ }
++
++ // =======================================================
++}
+diff -Naur ../mythweb-orig/modules/gallery/includes/objects/Settings.php ./modules/gallery/includes/objects/Settings.php
+--- ../mythweb-orig/modules/gallery/includes/objects/Settings.php 1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/includes/objects/Settings.php 2007-08-20 22:28:02.000000000 -0400
+@@ -0,0 +1,243 @@
++<?php
++/**
++ * Gallery Settings Functions
++ *
++ * @url $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/set_prefs.php $
++ * @date $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version $Revision: 12295 $
++ * @author $Author: xris $
++ * @license GPL
++ *
++ * @package MythWeb
++ * @subpackage Gallery
++/**/
++
++// Load the available configuration from the session variable
++// or if this one is empty then form the database
++function loadGalleryConfig()
++{
++ $_SESSION['gallery']['image_path'] = getGalleryImagePath();
++ $_SESSION['gallery']['cache_path'] = getGalleryCachePath();
++ $_SESSION['gallery']['default_viewsize'] = getGalleryDefaultViewSize();
++ $_SESSION['gallery']['screen_width'] = getGalleryScreenWidth();
++ $_SESSION['gallery']['viewsizes'] = getGalleryViewSizes();
++ $_SESSION['gallery']['valid_image_files'] = getGalleryValidImageFiles();
++}
++
++
++// Load all of the known mythtv frontend hosts
++function getGalleryHostnames()
++{
++ $Settings_Hosts = array('' => t('MythWeb Session'));
++ global $db;
++ $sh = $db->query('SELECT DISTINCT hostname FROM settings WHERE value="locale" ORDER BY hostname');
++
++ // add all the found hosts into an array
++ while (list($host) = $sh->fetch_row())
++ {
++ if (empty($host))
++ continue;
++ $Settings_Hosts[$host] = $host;
++ }
++ $sh->finish();
++ return $Settings_Hosts;
++}
++
++
++// update the values in the database if necessary
++function saveGalleryConfig( $Settings_Hosts )
++{
++ // Make sure we have a valid host selected
++ if (!isset( $Settings_Hosts[$_SESSION['settings']['host']]) )
++ {
++ // we have no valid host, reset the array
++ $_SESSION['settings']['host'] = reset(array_keys($Settings_Hosts));
++ } else {
++ // we have a valid host, check if the data should be saved
++ if ($_POST['save'] && isset($_POST['host']))
++ {
++ // Changing settings for this MythWeb session
++ if (empty($_POST['host']))
++ {
++ // save the image path in the session variable
++ $_SESSION['gallery']['image_path'] = $_POST['image_path'];
++ $_SESSION['gallery']['cache_path'] = $_POST['cache_path'];
++ $_SESSION['gallery']['default_viewsize'] = $_POST['default_viewsize'];
++ $_SESSION['gallery']['screen_width'] = $_POST['screen_width'];
++ $_SESSION['gallery']['viewsizes'] = $_POST['viewsizes'];
++ $_SESSION['gallery']['valid_image_files'] = $_POST['valid_image_files'];
++ } else {
++ // save the settings in the database
++// setGalleryImagePath( $_POST['image_path'], $_POST['host'] );
++ setGalleryCachePath( $_POST['cache_path'], $_POST['host'] );
++ setGalleryDefaultViewSize( $_POST['default_viewsize'], $_POST['host'] );
++ setGalleryScreenWidth( $_POST['screen_width'], $_POST['host'] );
++ setGalleryViewSizes( $_POST['viewsizes'], $_POST['host'] );
++ setGalleryValidImageFiles( $_POST['valid_image_files'],$_POST['host'] );
++ }
++ // Make sure the session host gets updated to the posted one.
++ $_SESSION['settings']['host'] = $_POST['host'];
++ }
++ }
++}
++
++// the absolute path where the images are
++// get it from the database or the session variable
++function getGalleryImagePath()
++{
++ global $db;
++ if (!empty($_SESSION['settings']['host'])) {
++ $imagePath = $db->query_col('SELECT data FROM settings
++ WHERE value="GalleryDir" AND hostname=?', $_SESSION['settings']['host']);
++ }
++
++ if (!$imagePath)
++ {
++ $imagePath = _or($_SESSION['gallery']['image_path'], '/myth/gallery');
++ }
++
++ return $imagePath;
++}
++
++// directory where the cached images are stored
++// this directory is relative to the htdocs directory
++function getGalleryCachePath()
++{
++ global $db;
++ if (!empty($_SESSION['settings']['host'])) {
++ $cachePath = $db->query_col('SELECT data FROM settings
++ WHERE value="GalleryCachePath" AND hostname=?', $_SESSION['settings']['host']);
++ }
++
++ if (!$cachePath)
++ {
++ $cachePath = _or($_SESSION['gallery']['cache_path'], '/mythweb/data/cache');
++ }
++
++ return $cachePath;
++}
++
++
++// defines the default view mode
++// default is 4 columns and 4 rows per page
++function getGalleryDefaultViewSize()
++{
++ global $db;
++ if (!empty($_SESSION['settings']['host'])) {
++ $defaultViewSize = $db->query_col('SELECT data FROM settings
++ WHERE value="GalleryDefaultViewSize" AND hostname=?', $_SESSION['settings']['host']);
++ }
++
++ if (!$defaultViewSize)
++ {
++ $defaultViewSize = _or($_SESSION['gallery']['default_viewsize'], '4,3');
++ }
++
++ return $defaultViewSize;
++}
++
++
++// width if the screen-200 (example 1024-200)
++// this is needed to calculate the width of the images
++function getGalleryScreenWidth()
++{
++ global $db;
++ if (!empty($_SESSION['settings']['host'])) {
++ $screenWidth = $db->query_col('SELECT data FROM settings
++ WHERE value="GalleryScreenWidth" AND hostname=?', $_SESSION['settings']['host']);
++ }
++
++ if (!$screenWidth)
++ {
++ $screenWidth = _or($_SESSION['gallery']['screen_width'], '1024');
++ }
++
++ return $screenWidth;
++}
++
++
++// columns and rows that are shown on one page, ; separates another mode
++function getGalleryViewSizes()
++{
++ global $db;
++ if (!empty($_SESSION['settings']['host'])) {
++ $viewSizes = $db->query_col('SELECT data FROM settings
++ WHERE value="GalleryViewSizes" AND hostname=?', $_SESSION['settings']['host']);
++ }
++
++ if (!$viewSizes)
++ {
++ $viewSizes = _or($_SESSION['gallery']['viewsizes'], '5,4 ; 4,4 ; 4,3 ; 3,3 ; 2,2 ; 1,1');
++ }
++
++ return $viewSizes;
++}
++
++
++// image extensions that will be shown, everything else
++// will not work, currently there four are supported
++function getGalleryValidImageFiles()
++{
++ global $db;
++ if (!empty($_SESSION['settings']['host'])) {
++ $validImageFiles = $db->query_col('SELECT data FROM settings
++ WHERE value="GalleryValidImageFiles" AND hostname=?', $_SESSION['settings']['host']);
++ }
++
++ if (!$validImageFiles)
++ {
++ $validImageFiles = _or($_SESSION['gallery']['valid_image_files'], 'jpg,png,gif,bmp');
++ }
++
++ return $validImageFiles;
++}
++
++
++// save the image path in the database
++//function setGalleryImagePath( $imagePath, $host )
++//{
++// global $db;
++// $db->query('UPDATE settings SET data = ?
++// WHERE value="GalleryDir" AND hostname=?', $imagePath, $host);
++//}
++
++function setGalleryCachePath( $cachePath, $host )
++{
++ global $db;
++ $db->query('UPDATE settings SET data = ?
++ WHERE value="GalleryCachePath" AND hostname=?', $cachePath, $host);
++}
++
++
++function setGalleryDefaultViewSize( $defaultViewSize, $host )
++{
++ global $db;
++ $db->query('UPDATE settings SET data = ?
++ WHERE value="GalleryDefaultViewSize" AND hostname=?', $defaultViewSize, $host);
++}
++
++
++function setGalleryScreenWidth( $screenWidth, $host )
++{
++ global $db;
++ $db->query('UPDATE settings SET data = ?
++ WHERE value="GalleryScreenWidth" AND hostname=?', $screenWidth, $host);
++}
++
++
++function setGalleryViewSizes( $viewSizes, $host )
++{
++ global $db;
++ $db->query('UPDATE settings SET data = ?
++ WHERE value="GalleryViewSizes" AND hostname=?', $viewSizes, $host);
++}
++
++
++function setGalleryValidImageFiles( $validImageFiles, $host )
++{
++ global $db;
++ $db->query('UPDATE settings SET data = ?
++ WHERE value="GalleryValidImageFiles" AND hostname=?', $validImageFiles, $host);
++}
++
++
+diff -Naur ../mythweb-orig/modules/gallery/init.php ./modules/gallery/init.php
+--- ../mythweb-orig/modules/gallery/init.php 1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/init.php 2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,38 @@
++<?php
++/**
++ * Initialization routines for the MythWeb Gallery module
++ *
++ * @url $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/init.php $
++ * @date $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version $Revision: 12295 $
++ * @author $Author: rsiebert $
++ * @license GPL
++ *
++ * @package MythWeb
++ * @subpackage Gallery
++ *
++/**/
++
++// Settings options
++ $Settings['gallery'] = array('name' => t('Gallery'),
++ 'choices' => array('prefs' => t('Preferences'), ),
++ 'default' => 'prefs',
++ );
++
++// First, we should check to see that MythGallery is configured.
++ $has_gallery = $_SESSION['locale']
++ ? true
++ : $db->query_col('SELECT COUNT(data)
++ FROM settings
++ WHERE value="locale"');
++
++
++
++// If gallery is enabled, add it to the list.
++ if ($has_gallery) {
++ $Modules['gallery'] = array('path' => 'gallery',
++ 'sort' => 5,
++ 'name' => t('Gallery'),
++ 'description' => t('Local Image Gallery')
++ );
++ }
+diff -Naur ../mythweb-orig/modules/gallery/set_prefs.php ./modules/gallery/set_prefs.php
+--- ../mythweb-orig/modules/gallery/set_prefs.php 1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/set_prefs.php 2007-08-20 22:29:12.000000000 -0400
+@@ -0,0 +1,24 @@
++<?php
++/**
++ * Gallery settings
++ *
++ * @url $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/set_prefs.php $
++ * @date $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version $Revision: 12295 $
++ * @author $Author: xris $
++ * @license GPL
++ *
++ * @package MythWeb
++ * @subpackage Gallery
++/**/
++
++// Load functions
++require_once 'includes/objects/Settings.php';
++
++// Load all of the known mythtv frontend hosts
++$Settings_Hosts = getGalleryHostnames();
++
++// update the values in the database if necessary
++saveGalleryConfig( $Settings_Hosts );
++loadGalleryConfig();
++
+diff -Naur ../mythweb-orig/modules/gallery/tmpl/default/gallery.php ./modules/gallery/tmpl/default/gallery.php
+--- ../mythweb-orig/modules/gallery/tmpl/default/gallery.php 1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/tmpl/default/gallery.php 2007-08-22 00:21:05.000000000 -0400
+@@ -0,0 +1,39 @@
++<?php
++/**
++ * Display template for the Gallery module
++ *
++ * @url $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/tmpl/default/gallery.php $
++ * @date $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version $Revision: 12295 $
++ * @author $Author: xris $
++ * @license GPL
++ *
++ * @package MythWeb
++ *
++/**/
++
++// Page title
++$page_title = 'MythWeb - '.t('Gallery');
++
++// the current viewsize mode
++$image_viewsize = $gallery->getImageViewSize();
++
++// If displaying full size image don't display header and footer
++if ($image_viewsize == 'fullsize') {
++ // Print the gallery part
++ $gallery->start();
++}
++else
++{
++ // Load this page's custom stylesheet
++ $headers[] = '<link rel="stylesheet" type="text/css" href="'.root.skin_dir.'/gallery.css" />';
++
++ // Print the page header
++ require 'modules/_shared/tmpl/'.tmpl.'/header.php';
++
++ // Print the gallery part
++ $gallery->start();
++
++ // Print the page footer
++ require 'modules/_shared/tmpl/'.tmpl.'/footer.php';
++}
+\ No newline at end of file
+diff -Naur ../mythweb-orig/modules/gallery/tmpl/default/set_prefs.php ./modules/gallery/tmpl/default/set_prefs.php
+--- ../mythweb-orig/modules/gallery/tmpl/default/set_prefs.php 1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/tmpl/default/set_prefs.php 2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,93 @@
++<?php
++/**
++ * Display/save MythGallery settings
++ *
++ * @url $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/tmpl/default/set_prefs.php $
++ * @date $Date: 2007-01-09 07:37:34 +0100 (Di, 09 Jan 2007) $
++ * @version $Revision: 12460 $
++ * @author $Author: xris $
++ * @license GPL
++ *
++ * @package MythWeb
++ * @subpackage Gallery
++ *
++/**/
++
++// Display the gui for the settings
++$galleryConfigTheme = new GalleryConfigTheme();
++$galleryConfigTheme->showConfig();
++
++class GalleryConfigTheme
++{
++ function GalleryConfigTheme()
++ {
++
++ }
++
++ function showConfig()
++ {
++ echo '<form class="form" method="post" action="'. form_action .'">'.
++ '<input type="hidden" name="host" value="'. html_entities($_SESSION['settings']['host']) .'"/>'.
++ '<table border="0" cellspacing="0" cellpadding="0">'.
++ '<tr class="_sep">'.
++ '<td>'.
++ t('Gallery image path').':&nbsp;'.
++ '</td>'.
++ '<td>'.
++ '<input class="_text" type="text" name="image_path" value="'.getGalleryImagePath().'">'.
++ '</td>'.
++ '</tr>'.
++ '<tr class="_sep">'.
++ '<td>'.
++ t('Path where the thumbnails are').':&nbsp;'.
++ '</td>'.
++ '<td>'.
++ '<input class="_text" type="text" name="cache_path" value="'.getGalleryCachePath().'">'.
++ '</td>'.
++ '</tr>'.
++ '<tr class="_sep">'.
++ '<td>'.
++ t('Default view size').':&nbsp;'.
++ '</td>'.
++ '<td>'.
++ '<input class="_text" type="text" name="default_viewsize" value="'.getGalleryDefaultViewSize().'">'.
++ '</td>'.
++ '</tr>'.
++ '<tr class="_sep">'.
++ '<td>'.
++ t('Horizontal screen resolution').':&nbsp;'.
++ '</td>'.
++ '<td>'.
++ '<input class="_text" type="text" name="screen_width" value="'.getGalleryScreenWidth().'">'.
++ '</td>'.
++ '</tr>'.
++ '<tr class="_sep">'.
++ '<td>'.
++ t('List of available view sizes').':&nbsp;'.
++ '</td>'.
++ '<td>'.
++ '<input class="_text" type="text" name="viewsizes" value="'.getGalleryViewSizes().'">'.
++ '</td>'.
++ '</tr>'.
++ '<tr class="_sep">'.
++ '<td>'.
++ t('List of allowed image formats').':&nbsp;'.
++ '</td>'.
++ '<td>'.
++ '<input class="_text" type="text" name="valid_image_files" value="'.getGalleryValidImageFiles().'">'.
++ '</td>'.
++ '</tr>'.
++ '<tr>'.
++ '<td align="center">'.
++ '<input class="_button" type="reset" class="submit" value="'.t('Reset').'">'.
++ '</td>'.
++ '<td align="center">'.
++ '<input class="_button" type="submit" class="submit" name="save" value="'.t('Save') .'">'.
++ '</td>'.
++ '</tr>'.
++ '</table>'.
++ '</form>';
++ }
++}
++
++?>
+\ No newline at end of file
+diff -Naur ../mythweb-orig/modules/gallery/tmpl/default/welcome.php ./modules/gallery/tmpl/default/welcome.php
+--- ../mythweb-orig/modules/gallery/tmpl/default/welcome.php 1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/tmpl/default/welcome.php 2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,26 @@
++<?php
++/**
++ * Welcome page description of the Gallery module.
++ *
++ * @url $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/tmpl/default/welcome.php $
++ * @date $Date: 2005-12-13 08:23:18 +0100 (Di, 13 Dez 2005) $
++ * @version $Revision: 8252 $
++ * @author $Author: xris $
++ * @license GPL
++ *
++ * @package MythWeb
++ *
++/**/
++
++// Open with a div and an image
++ echo '<div id="info_gallery" class="hidden">',
++ '<img src="', skin_url, '/img/gallery.png" class="module_icon" />',
++
++// Print a basic overview of what this module does
++ t('welcome: gallery'),
++
++// Next, print a list of possible subsectons
++ ####
++
++// Close the div
++ "</div>\n";
+\ No newline at end of file
+diff -Naur ../mythweb-orig/modules/_shared/lang/English.lang ./modules/_shared/lang/English.lang
+--- ../mythweb-orig/modules/_shared/lang/English.lang 2007-08-19 23:20:01.000000000 -0400
++++ ./modules/_shared/lang/English.lang 2007-08-19 23:26:41.000000000 -0400
+@@ -153,6 +153,7 @@
+ "Create Schedule"
+ "Current Conditions"
+ "Current recordings"
++"Current path"
+ "Currently Browsing: $1"
+ "Currently Recording: Edit"
+ "Custom"
+@@ -164,6 +165,7 @@
+ "Deactivated"
+ "Default"
+ "Default MythVideo View"
++"Default view size"
+ "Delete"
+ "delete"
+ "Delete $1"
+@@ -242,6 +244,8 @@
+ "freqid"
+ "Friday"
+ "Frontends"
++"Gallery"
++"Gallery image path"
+ "generic_date"
+ %a %b %e, %Y
+ "generic_time"
+@@ -269,6 +273,7 @@
+ "Hide"
+ "High"
+ "Home"
++"Horizontal screen resolution"
+ "Host"
+ "Hosted by"
+ "Hosts"
+@@ -276,6 +281,7 @@
+ "Hour Format"
+ "hue"
+ "Humidity"
++"Images per page"
+ "IMDB"
+ "imdb rating"
+ "IMDBTYPE"
+@@ -318,6 +324,8 @@
+ "length"
+ "Length"
+ "Length (min)"
++"List of allowed image formats"
++"List of available view sizes"
+ "Listing &quot;Jump to&quot;"
+ "Listing Time Key"
+ "Listings"
+@@ -367,6 +375,7 @@
+ "mythvideo.sort_ignores_case"
+ "MythWeb"
+ "MythWeb Defaults"
++"MythWeb Gallery."
+ "MythWeb Global Defaults"
+ "MythWeb Session"
+ "MythWeb session settings"
+@@ -401,6 +410,7 @@
+ "Number of shows"
+ "Number of Songs"
+ "Number of timeslots"
++"of"
+ "Only display favourite channels"
+ "Only match commercial-free channels"
+ "Only match HD programs"
+@@ -415,6 +425,7 @@
+ "Past Month"
+ "Past Week"
+ "Past Year"
++"Path where the thumbnails are"
+ "Paused"
+ "Pending"
+ "People"
+@@ -673,6 +684,7 @@
+ "Subtitles Available"
+ "Sunday"
+ "Surround Sound"
++"Switch view mode"
+ "Tab"
+ "The requested recording schedule has been deleted."
+ "There are no items in this Playlist!"
+@@ -690,6 +702,7 @@
+ "Title Match"
+ "Title search"
+ "Title Search"
++"to"
+ "Today"
+ "Tomorrow"
+ "Too Many"
+@@ -784,6 +797,8 @@
+ "Wednesday"
+ "welcome: backend_log"
+ Show the server logs.
++"welcome: gallery"
++ Browse your picture collection.
+ "welcome: music"
+ Browse your music collection.
+ "welcome: remote"
+diff -Naur ../mythweb-orig/modules/_shared/lang/German.lang ./modules/_shared/lang/German.lang
+--- ../mythweb-orig/modules/_shared/lang/German.lang 2007-08-19 23:20:01.000000000 -0400
++++ ./modules/_shared/lang/German.lang 2007-08-19 23:27:54.000000000 -0400
+@@ -209,6 +209,8 @@
+ "Create a Random Mix"
+ "Create Schedule"
+ Speichern
++"Current path"
++ Aktueller Pfad
+ "Current Conditions"
+ Das aktuelle Wetter
+ "Current recordings"
+@@ -231,6 +233,8 @@
+ "Default"
+ Standard
+ "Default MythVideo View"
++"Default view size"
++ Standardansicht
+ "Delete"
+ Löschen
+ "delete"
+@@ -343,6 +347,10 @@
+ "Friday"
+ Freitag
+ "Frontends"
++"Gallery"
++ Gallerie
++"Gallery image path"
++ Pfad der Bilder
+ "generic_date"
+ %e.%m.%Y
+ "generic_time"
+@@ -379,6 +387,8 @@
+ "High"
+ Max
+ "Home"
++"Horizontal screen resolution"
++ Horizontale Bildschirmauflösung
+ "Host"
+ "Hosted by"
+ "Hosts"
+@@ -390,6 +400,8 @@
+ Farbton
+ "Humidity"
+ Luftfeuchtigkeit
++"Images per page"
++ Bilder pro Seite
+ "IMDB"
+ IMDB
+ "imdb rating"
+@@ -438,6 +450,10 @@
+ Dauer
+ "Length (min)"
+ Dauer (Min.)
++"List of allowed image formats"
++ Liste der erlaubten Bildformate
++"List of available view sizes"
++ Liste der möglichen Ansichten
+ "Listing &quot;Jump to&quot;"
+ TV Programm &quot;Gehe zu&quot;
+ "Listing Time Key"
+@@ -502,6 +518,8 @@
+ "mythvideo.sort_ignores_case"
+ "MythWeb"
+ "MythWeb Defaults"
++"MythWeb Gallery."
++ Gallerie
+ "MythWeb Global Defaults"
+ "MythWeb Session"
+ "MythWeb session settings"
+@@ -548,6 +566,8 @@
+ "Number of shows"
+ "Number of Songs"
+ "Number of timeslots"
++"of"
++ von
+ "Only display favourite channels"
+ Nur Favoriten anzeigen
+ "Only match commercial-free channels"
+@@ -562,6 +582,8 @@
+ "Override"
+ "Page Down"
+ "Page Up"
++"Path where the thumbnails are"
++ Thumbnails speichern unter
+ "Part $1 of $2"
+ Teil $1 von $2
+ "Past Month"
+@@ -870,6 +892,10 @@
+ "Streaming"
+ "Sub and Desc (Empty matches)"
+ Untertitel & Beschr. (kein Ergebnis)
++"subfolder"
++ Unterordner
++"subfolders"
++ Unterordner
+ "Submit Search"
+ "subtitle"
+ "Subtitle"
+@@ -882,6 +908,8 @@
+ "Subtitles Available"
+ "Sunday"
+ Sonntag
++"Switch view mode"
++ Ansichtsmodus wechseln
+ "Surround Sound"
+ "Tab"
+ "The requested recording schedule has been deleted."
+@@ -907,6 +935,8 @@
+ "Title search"
+ "Title Search"
+ Titel Suche
++"to"
++ bis
+ "Today"
+ Heute
+ "Tomorrow"
+@@ -1024,6 +1054,8 @@
+ Mittwoch
+ "welcome: backend_log"
+ Backend Log
++"welcome: gallery"
++ Gallerie
+ "welcome: music"
+ Musik
+ "welcome: remote"
+diff -Naur ../mythweb-orig/modules/_shared/tmpl/default/header.php ./modules/_shared/tmpl/default/header.php
+--- ../mythweb-orig/modules/_shared/tmpl/default/header.php 2007-08-19 23:20:01.000000000 -0400
++++ ./modules/_shared/tmpl/default/header.php 2007-08-19 23:21:33.000000000 -0400
+@@ -96,6 +96,13 @@
+ </a>
+ <?php
+ }
++ if ($Modules['gallery']) {
++?>
++ <a id="gallery_link"<?php if ($Path[0] == 'gallery') echo ' class="current_section"' ?> href="<?php echo root ?>gallery" onmouseover="return help_text('<?php echo str_replace("'", "\\'", t('MythWeb Gallery.')) ?>')" onmouseout="return help_text()">
++ <img src="<?php echo skin_url ?>img/gallery.png" width="48" height="48" class="alpha_png" alt="MythGallery" />
++ </a>
++<?php
++ }
+ ?>
+ <a id="settings_link"<?php if ($Path[0] == 'settings') echo ' class="current_section"' ?> href="<?php echo root ?>settings" onmouseover="return help_text('<?php echo str_replace("'", "\\'", t('Edit MythWeb and some MythTV settings.')) ?>')" onmouseout="return help_text()">
+ <img src="<?php echo skin_url ?>img/settings.png" width="48" height="48" class="alpha_png" alt="<?php echo t('Settings') ?>" />
+diff -Naur ../mythweb-orig/skins/default/gallery.css ./skins/default/gallery.css
+--- ../mythweb-orig/skins/default/gallery.css 1969-12-31 19:00:00.000000000 -0500
++++ ./skins/default/gallery.css 2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,108 @@
++img {
++ border: 0px;
++ border-color: #000000;
++}
++
++table.current_path_and_viewsize {
++ margin-top:5px;
++ border:1px solid #626262;
++ padding:5px;
++ width:100%;
++}
++
++a {
++ color:#000000;
++ text-decoration:none;
++}
++
++a.header {
++ font-weight:bold;
++ font-style:italic;
++}
++
++a.folderlist {
++ font-style:italic;
++}
++
++td.current_path {
++ text-align:left;
++ width:auto;
++}
++
++td.change_viewsize_text {
++ text-align:right;
++ width:160px;
++}
++
++td.change_viewsize_selection {
++ text-align:right;
++ width:140px;
++}
++
++select.change_viewsize {
++ border:1px solid #323232;
++ background-color: #191c26;
++ color: #FFFFFF;
++}
++
++td.folder_navigation {
++ width:200px;
++ vertical-align:top;
++}
++
++table.folder_navigation {
++ margin-top:5px;
++ border:1px solid #626262;
++ padding:4px;
++ width:100%;
++}
++
++div.folder_navigation_active {
++ background-color: #224477;
++ border:1px solid #191c26;
++ text-align:left;
++ padding:4px;
++}
++
++div.folder_navigation {
++ border:1px solid #191c26;
++ text-align:left;
++ padding:4px;
++}
++
++td.image_listing {
++ width:auto;
++ vertical-align:top;
++}
++
++table.imagelist_and_navigation {
++ margin-top:5px;
++ margin-left:5px;
++ border:1px solid #626262;
++ padding:5px;
++ width:100%;
++}
++
++td.image_navigation {
++ text-align:center;
++ vertical-align:middle;
++ width:20%;
++ border-width: 0px;
++}
++
++td.single_image {
++ font-size:9pt;
++ padding:5px;
++ text-align:center;
++}
++
++img.single_image {
++ padding:7px;
++ border:1px solid #323232;
++}
++
++img.single_image_active {
++ background-color: #224477;
++ padding:7px;
++ border:1px solid #323232;
++}
+\ No newline at end of file
+diff -Naur ../mythweb-orig/skins/grey/gallery.css ./skins/grey/gallery.css
+--- ../mythweb-orig/skins/grey/gallery.css 1969-12-31 19:00:00.000000000 -0500
++++ ./skins/grey/gallery.css 2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,107 @@
++img {
++ border: 0px;
++ border-color: #000000;
++}
++
++table.current_path_and_viewsize {
++ margin-top:5px;
++ border:1px solid #626262;
++ padding:5px;
++ width:100%;
++}
++
++a {
++ color:#000000;
++ text-decoration:none;
++}
++
++a.header {
++ font-weight:bold;
++ font-style:italic;
++}
++
++a.folderlist {
++ font-style:italic;
++}
++
++td.current_path {
++ text-align:left;
++ width:auto;
++}
++
++td.change_viewsize_text {
++ text-align:right;
++ width:160px;
++}
++
++td.change_viewsize_selection {
++ text-align:right;
++ width:140px;
++}
++
++select.change_viewsize {
++ border:1px solid #323232;
++ background-color: #212121;
++}
++
++td.folder_navigation {
++ width:200px;
++ vertical-align:top;
++}
++
++table.folder_navigation {
++ margin-top:5px;
++ border:1px solid #626262;
++ padding:4px;
++ width:100%;
++}
++
++div.folder_navigation_active {
++ background-color: #626262;
++ border:1px solid #212121;
++ text-align:left;
++ padding:4px;
++}
++
++div.folder_navigation {
++ border:1px solid #212121;
++ text-align:left;
++ padding:4px;
++}
++
++td.image_listing {
++ width:auto;
++ vertical-align:top;
++}
++
++table.imagelist_and_navigation {
++ margin-top:5px;
++ margin-left:5px;
++ border:1px solid #626262;
++ padding:5px;
++ width:100%;
++}
++
++td.image_navigation {
++ text-align:center;
++ vertical-align:middle;
++ width:20%;
++ border-width: 0px;
++}
++
++td.single_image {
++ font-size:9pt;
++ padding:5px;
++ text-align:center;
++}
++
++img.single_image {
++ padding:7px;
++ border:1px solid #323232;
++}
++
++img.single_image_active {
++ background-color: #626262;
++ padding:7px;
++ border:1px solid #323232;
++}
+\ No newline at end of file
+diff -Naur ../mythweb-orig/skins/grey/settings.css ./skins/grey/settings.css
+--- ../mythweb-orig/skins/grey/settings.css 2007-08-19 23:20:00.000000000 -0400
++++ ./skins/grey/settings.css 2007-08-19 23:21:33.000000000 -0400
+@@ -94,7 +94,7 @@
+
+ #settings .-host {
+ text-align: right;
+- border-bottom: 2px solid #eee;
++ border-bottom: 2px solid #aaa;
+ }
+
+ /* A notification/warning */
+@@ -115,3 +115,33 @@
+ border: 2px solid #999;
+ border-top: none;
+ }
++
++ #settings ._content input._text {
++ margin: 2px;
++ padding: 2px;
++ border: 1px solid #333333;
++ }
++
++ #settings ._content input._button {
++ margin: 2px;
++ padding: 2px;
++ border: 1px solid #333333;
++ color: #DDDDDD;
++ }
++
++ #settings ._content table {
++ width: 100%;
++ }
++ #settings ._content table th, #settings ._content table td {
++ padding: .5em;
++ }
++
++ #settings ._content th, #settings ._content td {
++ text-align: right;
++ font-weight: normal;
++ white-space: nowrap;
++ }
++
++ #settings ._content tr._sep th, #settings ._content tr._sep td {
++ border-bottom: 1px solid #304943;
++ }
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/transcoders.patch b/abs/core/mythtv/old/stable-0.21/mythweb/transcoders.patch
new file mode 100644
index 0000000..c1aeb6c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/transcoders.patch
@@ -0,0 +1,23 @@
+diff -ruaN mythweb.orig/modules/_shared/lang/English.lang mythweb/modules/_shared/lang/English.lang
+--- mythweb.orig/modules/_shared/lang/English.lang 2009-01-09 02:44:23.000000000 +0000
++++ mythweb/modules/_shared/lang/English.lang 2009-07-31 06:29:11.000000000 +0000
+@@ -816,3 +816,5 @@
+ "Year"
+ "Yes"
+ "Yesterday"
++"Myth2iPod"
++"Myt2XviD3"
+diff -ruaN mythweb.orig/modules/_shared/tmpl/default/header.php mythweb/modules/_shared/tmpl/default/header.php
+--- mythweb.orig/modules/_shared/tmpl/default/header.php 2009-01-09 02:44:23.000000000 +0000
++++ mythweb/modules/_shared/tmpl/default/header.php 2009-07-31 06:28:54.000000000 +0000
+@@ -171,6 +171,10 @@
+ <a href="<?php echo root ?>tv/recorded"><?php echo t('Recorded Programs') ?></a>
+ &nbsp; | &nbsp;
+ <a href="<?php echo root ?>status"><?php echo t('Backend Status') ?></a>
++ &nbsp; | &nbsp;
++ <a href="/ipodfeed/m2iweb.php"><?php echo t('Myth2iPod') ?></a>
++ &nbsp; | &nbsp;
++ <a href="/archive/archive.php"><?php echo t('Myt2XviD3') ?></a>
+ <?php if ($Modules['backend_log']) { ?>
+ &nbsp; | &nbsp;
+ <a href="<?php echo root ?>backend_log"><?php echo t('Backend Logs') ?></a>
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/wiiweb.tar.bz2 b/abs/core/mythtv/old/stable-0.21/mythweb/wiiweb.tar.bz2
new file mode 100644
index 0000000..200b8c3
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/wiiweb.tar.bz2
Binary files differ
diff --git a/abs/core/mythtv/old/stable-0.21/mythzoneminder/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythzoneminder/PKGBUILD
new file mode 100644
index 0000000..45e0bac
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythzoneminder/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythzoneminder
+pkgver=0.21
+pkgrel=4
+pkgdesc="Integrates ZoneMinder into MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'zoneminder=1.23.3')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythplugins
+ . /etc/profile.d/qt3.sh
+
+ # use QT3 qmake
+ export PATH=$QTDIR/bin:$PATH
+
+ ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythzoneminder --zm-version=1.23.3
+
+ qmake mythplugins.pro
+ make qmake || return 1
+ make -j 2 || return 1
+
+ make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.22/clean_all.sh b/abs/core/mythtv/old/stable-0.22/clean_all.sh
new file mode 100755
index 0000000..1ebdc43
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/clean_all.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+
+# clean up current directory
+rm -f *~
+
+# clean up mythtv directories
+for i in `echo ${buildlist[@]:0}`
+do
+ echo "-- cleaning $i"
+ cd ./$i
+
+ # clean up everything
+ rm -rf pkg src
+ rm -f *~
+
+ cd ..
+done
+
+echo "DONE!"
+
diff --git a/abs/core/mythtv/old/stable-0.22/morethemes/PKGBUILD b/abs/core/mythtv/old/stable-0.22/morethemes/PKGBUILD
new file mode 100644
index 0000000..479f886
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/morethemes/PKGBUILD
@@ -0,0 +1,51 @@
+pkgname=morethemes
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Additional themes for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('morethemes-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/themes
+_svnver=23566
+_svnmod=themes
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mp_all.sh b/abs/core/mythtv/old/stable-0.22/mp_all.sh
new file mode 100755
index 0000000..96d5dde
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mp_all.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# for 0.22, we are starting the release numbers at 22000
+# and incrementing from there every time we build
+pkgrel=22012
+_svnver=23566
+
+# NOTE: Make sure to build and install mythtv first BEFORE building anything else
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+
+# build and install
+for i in `echo ${buildlist[@]:0}`
+do
+ echo "---------- building $i ----------"
+ cd ./$i
+
+ # set svn version in the PKGBUILD
+ sed -i s/^_svnver=.*/_svnver=$_svnver/ PKGBUILD
+ sed -i s/^pkgrel=.*/pkgrel=$pkgrel/ PKGBUILD
+
+ # make the package
+ mp -f -i -s -r --holdver || exit 1
+
+ # clean up afterwards
+ rm -rf pkg
+ rm -f *~
+
+ cd ..
+done
+
+echo ""
+echo "DONE!"
+
diff --git a/abs/core/mythtv/old/stable-0.22/mytharchive/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mytharchive/PKGBUILD
new file mode 100644
index 0000000..cc49523
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mytharchive/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mytharchive
+pkgver=0.22
+pkgrel=22012
+pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows."
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'libxmu' 'mysql-python' 'pil' 'dvdauthor' 'mjpegtools' 'transcode')
+conflicts=('mytharchive-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mytharchive || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythbrowser/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythbrowser/PKGBUILD
new file mode 100644
index 0000000..3508b9f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythbrowser/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythbrowser
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Mini web browser for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'wget')
+conflicts=('mythbrowser-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythbrowser || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythflix/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythflix/PKGBUILD
new file mode 100644
index 0000000..8d5da1e
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythflix/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythflix
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Netflix access plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('mythflix-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythflix || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythgallery/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythgallery/PKGBUILD
new file mode 100644
index 0000000..d31d645
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythgallery/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythgallery
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Image gallery plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'libexif' 'libtiff')
+conflicts=('mythgallery-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythgallery || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythgame/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythgame/PKGBUILD
new file mode 100644
index 0000000..7441a12
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythgame/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythgame
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Emulation plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'zlib')
+conflicts=('mythgame-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythgame || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythmovies/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythmovies/PKGBUILD
new file mode 100644
index 0000000..8685a87
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythmovies/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythmovies
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Displays information about movies playing in the area."
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('mythmovies-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythmovies || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythmusic/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythmusic/PKGBUILD
new file mode 100644
index 0000000..4722701
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythmusic/PKGBUILD
@@ -0,0 +1,55 @@
+pkgname=mythmusic
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Music playing plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'libid3tag' 'libmad' 'libvorbis' 'flac>=1.1.4' 'libcdaudio' \
+ 'cdparanoia' 'fftw2' 'sdl' 'faad2>=2.6.1' 'lame' 'taglib' \
+ 'libvisual-plugins' 'libvisual-projectm')
+conflicts=('mythmusic-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythmusic --enable-libvisual --enable-fftw --enable-sdl \
+ --enable-aac || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythnews/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythnews/PKGBUILD
new file mode 100644
index 0000000..7450c9d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythnews/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythnews
+pkgver=0.22
+pkgrel=22012
+pkgdesc="News checking plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('mythnews-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythnews || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythsmolt/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythsmolt/PKGBUILD
new file mode 100644
index 0000000..52549d4
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythsmolt/PKGBUILD
@@ -0,0 +1,21 @@
+pkgname=mythsmolt
+pkgver=0.22
+pkgrel=28
+pkgdesc="mythsmolt, a hardware profileing tool"
+arch=('i686' 'x86_64')
+url="http://www.mythvantage.com"
+license=('GPL')
+depends=("mythtv>=${pkgver}" urlgrabber python-simplejson)
+source=("http://www.mythvantage.com/request.php?4" 'smolt_init_login.sh' )
+
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythsmolt
+ ./configure.sh
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install
+ install -D -m 755 $srcdir/smolt_init_login.sh $pkgdir/etc/profile.d/smolt_init_login.sh
+}
+md5sums=('4641b425d1aa910d82972ebb3a8d4998'
+ '57a3416d90e59abbd5062436583c17e1')
diff --git a/abs/core/mythtv/old/stable-0.22/mythsmolt/smolt_init_login.sh b/abs/core/mythtv/old/stable-0.22/mythsmolt/smolt_init_login.sh
new file mode 100644
index 0000000..0b76305
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythsmolt/smolt_init_login.sh
@@ -0,0 +1,39 @@
+if [ $UID = 0 -o $UID = 1000 ]
+then
+ INIT=`ps -p 1 -o comm=`
+ if [ x$INIT = xrunit ]
+ then
+ if [[ -f /home/mythtv/.configure && $- = *i* ]]
+ then
+ if [ ! -z "$PS1" ]
+ then
+ if [ $0 = "-bash" ]
+ then
+ if [ ! -e /home/mythtv/.mythtv/MythSmolt/hw-uuid ]
+ then
+ echo ""
+ echo "####################################################"
+ echo "It appears you have not yet run smolt"
+ echo "Please take the time to submit your hardware profile"
+ echo ""
+ echo "press any key to continue:"
+ echo "####################################################"
+ read a
+ mkdir -p /home/mythtv/.mythtv/MythSmolt
+ chown -R mythtv:users /home/mythtv/.mythtv/MythSmolt
+
+ if [ $UID = 0 ]
+ then
+ su mythtv -c "/usr/share/mythtv/mythsmolt/scripts/sendProfile.py" && su mythtv -c "touch /home/mythtv/.mythtv/MythSmolt/hw-uuid"
+ else
+ /usr/share/mythtv/mythsmolt/scripts/sendProfile.py && touch /home/mythtv/.mythtv/MythSmolt/hw-uuid
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+
+
diff --git a/abs/core/mythtv/old/stable-0.22/myththemes/PKGBUILD b/abs/core/mythtv/old/stable-0.22/myththemes/PKGBUILD
new file mode 100755
index 0000000..72b913a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/myththemes/PKGBUILD
@@ -0,0 +1,54 @@
+pkgname=myththemes
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Themes for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('myththemes-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/myththemes
+_svnver=23566
+_svnmod=myththemes
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # remove what isn't needed
+ rm -fr Mythbuntu
+
+ # configure
+ ./configure --prefix=/usr || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythtv/PKGBUILD
new file mode 100755
index 0000000..82a9b7c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/PKGBUILD
@@ -0,0 +1,111 @@
+pkgname=mythtv
+pkgver=0.22
+pkgrel=22014
+pkgdesc="A personal video recorder for Linux"
+url="http://www.mythtv.org"
+license="GPL"
+depends=('bash' 'mysql-clients>=5.0' 'qt' 'lame' 'lirc-utils' 'ffmpeg' \
+ 'faad2' 'libxv' 'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883' \
+ 'perl-net-upnp' 'libvdpau')
+makedepends=('libgl' 'subversion')
+conflicts=('mythtv-0.21' 'mythtv-svn')
+replaces=()
+groups=('pvr')
+#backup=()
+#options=(!strip)
+#MAKEFLAGS="-j6"
+install='mythtv.install'
+
+patchs=('menutheme_fallback.patch' 'changeset_r23616.patch')
+#patchs=('smolt_jump.patch')
+source=('mythbackend' 'myth.sh' `echo ${patchs[@]:0}` 'mythbackend.lr' 'mythfrontend.lr' 'pretty')
+arch=('i686' 'x86_64')
+#md5sums=()
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythtv
+_svnver=23566
+_svnmod=mythtv
+
+build() {
+
+ # get clean copy from SVN repo
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/mythtv
+
+ # apply patches
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patchs[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ sed -i -e "s/\`(svnversion \$\${SVNTREEDIR} 2>\/dev\/null) || echo Unknown\`/$_svnver/" version.pro
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up from last build
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --arch=${ARCH} \
+ --enable-vdpau --enable-xvmc --enable-xvmc-pro \
+ --enable-opengl-vsync --enable-libfaad --enable-dvb --enable-firewire \
+ --compile-type=release --with-bindings=perl,python \
+ --enable-audio-alsa --disable-audio-jack --disable-audio-arts || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+ # install db schema, scripts and docs
+ install -m0644 database/mc.sql $startdir/pkg/usr/share/mythtv/ || return 1
+ install -D -m0755 ../mythbackend $startdir/pkg/etc/rc.d/mythbackend || return 1
+
+ #cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
+ #cp ../QUICKSTART.archlinux $startdir/pkg/usr/share/mythtv/ || return 1
+ rsync -arp --exclude .svn --delete-excluded docs $startdir/pkg/usr/share/mythtv/ || return 1
+ # install contrib
+ #cp -r contrib $startdir/pkg/usr/share/mythtv/ || return 1
+ rsync -arp --exclude .svn --delete-excluded contrib $startdir/pkg/usr/share/mythtv/ || return 1
+
+ # patch the xml LinHES style
+ cp -r $startdir/menu-xml/*.xml $startdir/pkg/usr/share/mythtv/themes/defaultmenu/
+ mv $startdir/pkg/usr/share/mythtv/themes/defaultmenu/is.xml $startdir/pkg/usr/share/mythtv/
+ cd $startdir/pkg/usr/share/mythtv/themes/defaultmenu
+ patch -p0 < $startdir/menu-xml/mainmenu.xml.patch || return 1
+ patch -p0 < $startdir/menu-xml/optical_menu.xml.patch || return 1
+ patch -p0 < $startdir/menu-xml/library.xml.patch || return 1
+ patch -p0 < $startdir/menu-xml/util_menu.xml.patch || return 1
+
+ #create new for those that still want live-tv on top
+ mkdir -p $startdir/pkg/usr/share/mythtv/themes/LiveTV
+ cp $startdir/menu-xml/themeinfo.xml-tv $startdir/pkg/usr/share/mythtv/themes/LiveTV/themeinfo.xml
+ cp $startdir/pkg/usr/share/mythtv/themes/defaultmenu/mainmenu.xml $startdir/pkg/usr/share/mythtv/themes/LiveTV/
+ cd $startdir/pkg/usr/share/mythtv/themes/LiveTV/
+ patch -p5 < $startdir/menu-xml/mainmenu.tv.patch || return 1
+
+
+
+
+
+ # make log dir
+ mkdir -p $startdir/pkg/var/log/mythtv
+ chown 1000.1000 $startdir/pkg/var/log/mythtv
+ mkdir -p $startdir/pkg/etc/logrotate.d
+ cp $startdir/src/*.lr $startdir/pkg/etc/logrotate.d
+ mkdir -p $startdir/pkg/etc/cron.hourly/
+ install -m0755 $startdir/src/pretty $startdir/pkg/etc/cron.hourly/
+}
+md5sums=('7ef6de58240e7aad389a0b13d91b1cf6'
+ '2babd4b8e146a7538d18dcd55695b0be'
+ 'aa50bfa75ceceb0bdd5c1e4508690693'
+ '5b21465c2d80a8c1a96fa8f187aeaded'
+ 'f735805a80b0d1180dee01f9df1b7004'
+ 'f407d6af23e74a49540755420f84fa58'
+ 'f944c51c40208fdb3d8e3dd3d8c60bf3')
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/changeset_r23616.patch b/abs/core/mythtv/old/stable-0.22/mythtv/changeset_r23616.patch
new file mode 100644
index 0000000..2af779a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/changeset_r23616.patch
@@ -0,0 +1,38 @@
+--- bindings/perl/MythTV/Recording.pm.orig 2010-03-23 23:06:08.000000000 +0000
++++ bindings/perl/MythTV/Recording.pm 2010-03-23 23:15:24.000000000 +0000
+@@ -307,12 +307,12 @@
+ # Set the is_mpeg flag
+ $info{'is_mpeg'} = 1;
+ # Grab the info we want from mplayer (go uber-verbose to override --really-quiet)
+- my $data = `$program -v -v -v -v -nolirc -nojoystick -vo null -ao null -frames 1 -identify '$file' 2>/dev/null`;
++ my $idargs = "-v -v -v -v -nolirc -nojoystick -vo null -ao null -frames 1 -identify";
++ my $data = `$program $idargs '$file' 2>/dev/null`;
+ study $data;
+- ($info{'video_type'}) = $data =~ m/^VIDEO:\s*(MPEG[12])/m;
++ ($info{'video_type'}) = $data =~ m/^VIDEO:?\s*(MPEG[12]|H264)/m;
+ ($info{'width'}) = $data =~ m/^ID_VIDEO_WIDTH=0*([1-9]\d*)/m;
+ ($info{'height'}) = $data =~ m/^ID_VIDEO_HEIGHT=0*([1-9]\d*)/m;
+- ($info{'fps'}) = $data =~ m/^ID_VIDEO_FPS=0*([1-9]\d*(?:\.\d+)?)/m;
+ ($info{'audio_sample_rate'}) = $data =~ m/^ID_AUDIO_RATE=0*([1-9]\d*)/m;
+ ($info{'audio_bitrate'}) = $data =~ m/^ID_AUDIO_BITRATE=0*([1-9]\d*)/m;
+ ($info{'audio_bits_per_sample'}) = $data =~ m/^AUDIO:.+?ch,\s*[su](8|16)/mi;
+@@ -321,6 +321,19 @@
+ ($info{'aspect'}) = $data =~ m/^ID_VIDEO_ASPECT=0*([1-9]\d*(?:[\.\,]\d+)?)/m;
+ ($info{'audio_type'}) = $data =~ m/^ID_AUDIO_CODEC=0*([1-9]\d*(?:\.\d+)?)/m;
+ ($info{'mpeg_stream_type'}) = $data =~ m/^ID_DEMUXER=(\w+)/mi;
++ # Mplayer can't find the needed details. Let's try again, forcing the use
++ # of the ffmpeg lavf demuxer
++ if (!defined($info{'width'})) {
++ my $altdata = `$program $idargs -demuxer lavf '$file' 2>/dev/null`;
++ study $altdata;
++ ($info{'width'}) = $altdata =~ m/^ID_VIDEO_WIDTH=0*([1-9]\d*)/m;
++ ($info{'height'}) = $altdata =~ m/^ID_VIDEO_HEIGHT=0*([1-9]\d*)/m;
++ ($info{'audio_bitrate'}) = $altdata =~ m/^ID_AUDIO_BITRATE=0*([1-9]\d*)/m;
++ ($info{'audio_sample_rate'}) = $altdata =~ m/^ID_AUDIO_RATE=0*([1-9]\d*)/m;
++ ($info{'audio_channels'}) = $altdata =~ m/^ID_AUDIO_NCH=0*([1-9]\d*)/m;
++ ($info{'aspect'}) = $altdata =~ m/^ID_VIDEO_ASPECT=0*([1-9]\d*(?:[\.\,]\d+)?)/m;
++ }
++
+ # Stream type
+ $info{'mpeg_stream_type'} = lc($info{'mpeg_stream_type'});
+ if ($info{'mpeg_stream_type'} && $info{'mpeg_stream_type'} !~ /^mpeg/) {
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/HOST_SETTINGS.xml
new file mode 100644
index 0000000..1c6bb06
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/HOST_SETTINGS.xml
@@ -0,0 +1,100 @@
+<mythmenu name="HOST_SETTINGS">
+
+ <button>
+ <type>MV_NETWORK_SETUP_MENU</type>
+ <text>Network Settings</text>
+ <action>EXEC mythinstall -s network </action>
+ </button>
+
+ <button>
+ <type>MV_NETWORK_SETUP_MENU</type>
+ <text>DDNS Settings</text>
+ <action>EXEC mythinstall -s ddns </action>
+ </button>
+ <button>
+ <type>MV_SYSTEM_SETUP_MENU</type>
+ <text>System Type</text>
+ <action>EXEC mythinstall -s hostype </action>
+ </button>
+
+ <button>
+ <type>MV_SCREENSAVER_SETUP_MENU</type>
+ <text>Screensaver Settings</text>
+ <action>EXEC mythinstall -s screensaver </action>
+ </button>
+
+ <button>
+ <type>MV_IR_SETUP_MENU</type>
+ <text>Remotes</text>
+ <action>EXEC mythinstall -s ir </action>
+ </button>
+
+ <button>
+ <type>MV_MISC_SETUP_MENU</type>
+ <text>Miscellanous Settings</text>
+ <action>EXEC mythinstall -s misc </action>
+ </button>
+
+ <button>
+ <type>MV_SOFTWARE_MENU</type>
+ <text>Plugins</text>
+ <action>EXEC mythinstall -s plugins </action>
+ </button>
+
+ <button>
+ <type>MV_SOFTWARE_MENU</type>
+ <text>Software</text>
+ <action>EXEC mythinstall -s software </action>
+ </button>
+
+ <button>
+ <type>MV_SHUTDOWN_SETUP_MENU</type>
+ <text>Shutdown Settings</text>
+ <action>EXEC mythinstall -s sleep </action>
+ </button>
+
+ <button>
+ <type>MV_ADVANCED_X_SETUP_MENU</type>
+ <text>Display Settings</text>
+ <action>EXEC mythinstall -s advancedX</action>
+ </button>
+
+ <button>
+ <type>MV_ADVANCED_SETUP_MENU</type>
+ <text>Advanced Settings</text>
+ <action>EXEC mythinstall -s advanced</action>
+ </button>
+
+ <button>
+ <type>MV_AUDIO_SETUP_MENU</type>
+ <text>Audio Settings</text>
+ <action>EXEC mythinstall -s sound </action>
+ </button>
+
+ <button>
+ <type>MV_ACCESS_SETUP_MENU</type>
+ <text>Access Control</text>
+ <action>EXEC mythinstall -s accesscontrol </action>
+ </button>
+
+ <button>
+ <type>MV_USER_SETUP_MENU</type>
+ <text>User Accounts</text>
+ <action>EXEC mythinstall -s user </action>
+ </button>
+
+ <button>
+ <type>MV_WEBACCESS_SETUP_MENU</type>
+ <text>Web Security</text>
+ <action>EXEC mythinstall -s webuser </action>
+ </button>
+
+ <!--
+ <button>
+ <type>SETUP_MENU</type>
+ <text>Settings Profile Manager</text>
+ <action>EXEC mythinstall -t </action>
+ </button>
+ -->
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/is.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/is.xml
new file mode 100644
index 0000000..88b7e6b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/is.xml
@@ -0,0 +1,3 @@
+<mythmenu name="Internet Steams">
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/library.xml.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/library.xml.patch
new file mode 100644
index 0000000..81ea604
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/library.xml.patch
@@ -0,0 +1,12 @@
+--- library.xml.orig 2009-10-16 12:45:44.000000000 +0000
++++ library.xml 2009-10-16 17:21:44.000000000 +0000
+@@ -123,8 +123,7 @@
+ <text lang="HU">Online folyam lejátszása</text>
+ <description></description>
+ <description lang="DE"></description>
+- <action>PLUGIN mythstream</action>
+- <depends>mythstream</depends>
++ <action>MENU is.xml</action>
+ </button>
+
+ <button>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/linhes.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/linhes.xml
new file mode 100644
index 0000000..ebc848b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/linhes.xml
@@ -0,0 +1,59 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>SETUP_GENERAL</type>
+ <text>MythTV Configuration</text>
+ <text lang="IT">Impostazioni</text>
+ <text lang="ES">Configuración</text>
+ <text lang="DE">Zubehör / Konfiguration</text>
+ <text lang="DA">Tilbehør/Indstillinger</text>
+ <text lang="IS">Uppsetning</text>
+ <text lang="NL">Configuratie</text>
+ <text lang="PT">Utensílios</text>
+ <text lang="SV">Verktyg / Inställningar</text>
+ <text lang="JA">設~Z</text>
+ <text lang="FI">Oheis/Asetukset</text>
+ <text lang="ZH_TW">工~E/設~Z</text>
+ <text lang="SL">Nastavitve</text>
+ <text lang="ET">Utiliidid / sätted</text>
+ <text lang="RU">У~Bили~B~K / ~]а~A~B~@ойки</text>
+ <text lang="AR">تضب~Jطات</text>
+ <text lang="PL">Narz~Ydzia / ustawienia</text>
+ <text lang="HE">ע~Vר~Y~] / ~T~R~Sר~Uת</text>
+ <text lang="HU">Eszközök / Beállítások</text>
+ <alttext lang="DE">Verschiedenes</alttext>
+ <alttext lang="SV">Inställningar</alttext>
+ <alttext lang="ET">Sätted</alttext>
+ <alttext lang="RU">~]а~A~B~@ойки</alttext>
+ <alttext lang="AR">تضب~Jطات</alttext>
+ <description>Configure MythTV and plugins</description>
+ <description lang="DE">MythTV und Plugins konfigurieren</description>
+ <action>MENU util_menu.xml</action>
+ </button>
+
+ <button>
+ <type>LINHES_SETUP</type>
+ <text>LinHES Configuration</text>
+ <action>MENU HOST_SETTINGS.xml</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>Backup LinHES</text>
+ <action>MENU mythbackup.xml</action>
+ </button>
+
+ <button>
+ <type>RESTORE</type>
+ <text>Restore LinHES</text>
+ <action>MENU mythrestore.xml</action>
+ </button>
+
+<!--#Check for updates-->
+ <button>
+ <type>UPGRADE</type>
+ <text>Upgrade LinHES</text>
+ <action>MENU update.xml</action>
+ </button>
+<!--#Check for updates-->
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.tv.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.tv.patch
new file mode 100644
index 0000000..930fc5b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.tv.patch
@@ -0,0 +1,68 @@
+--- usr/share/mythtv/themes/defaultmenu/mainmenu.xml.orig 2010-01-07 04:56:58.000000000 +0000
++++ usr/share/mythtv/themes/defaultmenu/mainmenu.xml 2010-01-07 04:57:35.000000000 +0000
+@@ -2,6 +2,32 @@
+ <mythmenu name="MAIN">
+
+ <button>
++ <type>TV_WATCH_TV</type>
++ <text>Watch TV</text>
++ <text lang="IT">Guarda la TV</text>
++ <text lang="ES">Ver la TV</text>
++ <text lang="NL">TV Kijken</text>
++ <text lang="DE">Fernsehen</text>
++ <text lang="DA">Se TV</text>
++ <text lang="IS">Horfa á sjónvarp</text>
++ <text lang="PT">Ver Televisão</text>
++ <text lang="SV">Se på TV</text>
++ <text lang="JA">TV放送</text>
++ <text lang="FI">Katso Televisiota</text>
++ <text lang="ZH_TW">觀看電視</text>
++ <text lang="SL">Glej TV</text>
++ <text lang="ET">Vaata telerit</text>
++ <text lang="RU">Смотреть ТВ</text>
++ <text lang="AR">شاهد التلفاز</text>
++ <text lang="PL">Oglądanie TV</text>
++ <text lang="HE">צפיה בטלויזיה</text>
++ <text lang="HU">TV nézés</text>
++ <description>Watch live television</description>
++ <description lang="DE">Jetzt Fernsehen schauen</description>
++ <action>TV_WATCH_LIVE</action>
++ </button>
++
++ <button>
+ <type>MENU_MEDIA_LIBRARY</type>
+ <text>Media Library</text>
+ <text lang="IT">Multimedia</text>
+@@ -130,32 +156,6 @@
+ </button>
+
+ <button>
+- <type>TV_WATCH_TV</type>
+- <text>Watch TV</text>
+- <text lang="IT">Guarda la TV</text>
+- <text lang="ES">Ver la TV</text>
+- <text lang="NL">TV Kijken</text>
+- <text lang="DE">Fernsehen</text>
+- <text lang="DA">Se TV</text>
+- <text lang="IS">Horfa á sjónvarp</text>
+- <text lang="PT">Ver Televisão</text>
+- <text lang="SV">Se på TV</text>
+- <text lang="JA">TV放送</text>
+- <text lang="FI">Katso Televisiota</text>
+- <text lang="ZH_TW">觀看電視</text>
+- <text lang="SL">Glej TV</text>
+- <text lang="ET">Vaata telerit</text>
+- <text lang="RU">Смотреть ТВ</text>
+- <text lang="AR">شاهد التلفاز</text>
+- <text lang="PL">Oglądanie TV</text>
+- <text lang="HE">צפיה בטלויזיה</text>
+- <text lang="HU">TV nézés</text>
+- <description>Watch live television</description>
+- <description lang="DE">Jetzt Fernsehen schauen</description>
+- <action>TV_WATCH_LIVE</action>
+- </button>
+-
+- <button>
+ <type>MENU_UTILITIES_SETUP</type>
+ <text>Service Menu</text>
+ <description>LinHES Service Menu</description>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.xml.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.xml.patch
new file mode 100644
index 0000000..ed5dc72
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.xml.patch
@@ -0,0 +1,39 @@
+--- mainmenu.xml.orig 2009-10-16 12:45:44.000000000 +0000
++++ mainmenu.xml 2009-10-16 14:30:57.000000000 +0000
+@@ -157,33 +157,9 @@
+
+ <button>
+ <type>MENU_UTILITIES_SETUP</type>
+- <text>Utilities / Setup</text>
+- <text lang="IT">Impostazioni</text>
+- <text lang="ES">Configuración</text>
+- <text lang="DE">Zubehör / Konfiguration</text>
+- <text lang="DA">Tilbehør/Indstillinger</text>
+- <text lang="IS">Uppsetning</text>
+- <text lang="NL">Configuratie</text>
+- <text lang="PT">Utensílios</text>
+- <text lang="SV">Verktyg / Inställningar</text>
+- <text lang="JA">設定</text>
+- <text lang="FI">Oheis/Asetukset</text>
+- <text lang="ZH_TW">工具/設定</text>
+- <text lang="SL">Nastavitve</text>
+- <text lang="ET">Utiliidid / sätted</text>
+- <text lang="RU">Утилиты / Настройки</text>
+- <text lang="AR">تضبيطات</text>
+- <text lang="PL">Narzędzia / ustawienia</text>
+- <text lang="HE">עזרים / הגדרות</text>
+- <text lang="HU">Eszközök / Beállítások</text>
+- <alttext lang="DE">Verschiedenes</alttext>
+- <alttext lang="SV">Inställningar</alttext>
+- <alttext lang="ET">Sätted</alttext>
+- <alttext lang="RU">Настройки</alttext>
+- <alttext lang="AR">تضبيطات</alttext>
+- <description>Configure MythTV and plugins</description>
+- <description lang="DE">MythTV und Plugins konfigurieren</description>
+- <action>MENU util_menu.xml</action>
++ <text>Service Menu</text>
++ <description>LinHES Service Menu</description>
++ <action>MENU linhes.xml</action>
+ </button>
+
+ <!-- <button>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythbackup.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythbackup.xml
new file mode 100644
index 0000000..5914b33
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythbackup.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>BACKUP</type>
+ <text>Do you wish to backup?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/mythbackup</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythrestore.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythrestore.xml
new file mode 100644
index 0000000..8f5c285
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythrestore.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>RESTORE</type>
+ <text>Do you wish to restore?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>RESTORE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/mythrestore</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/optical_menu.xml.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/optical_menu.xml.patch
new file mode 100644
index 0000000..b4b1411
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/optical_menu.xml.patch
@@ -0,0 +1,16 @@
+--- optical_menu.xml.orig 2009-03-23 20:05:43.000000000 +0000
++++ optical_menu.xml 2009-03-23 20:10:02.000000000 +0000
+@@ -134,6 +134,13 @@
+ </button>
+
+ <button>
++ <type>DVD_RIP</type>
++ <text>Import video files from DVD</text>
++ <description>Import video files from a data DVD</description>
++ <action>EXEC /usr/LH/bin/importfiles.sh</action>
++ </button>
++
++ <button>
+ <type>EJECT</type>
+ <text>Eject media</text>
+ <text lang="IT">Espelli Media</text>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/original/create_patch.sh b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/original/create_patch.sh
new file mode 100755
index 0000000..34d8b8c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/original/create_patch.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+for i in *.xml
+do
+ diff -u $i.orig $i > ../$i.patch
+done
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/setup.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/setup.xml
new file mode 100644
index 0000000..f56bb6f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/setup.xml
@@ -0,0 +1,111 @@
+<mythmenu name="MAIN">
+
+ <button>
+ <type>SETUP_GENERAL</type>
+ <text>1. General</text>
+ <text lang="IT">1. Generale</text>
+ <text lang="PT">1. Geral</text>
+ <text lang="SV">1. Generellt</text>
+ <text lang="JA">1. 一般</text>
+ <text lang="DE">1. Allgemeines</text>
+ <text lang="FI">1. Yleiset</text>
+ <text lang="FR">1. Général</text>
+ <text lang="SI">1. Splošno</text>
+ <text lang="ET">1. Üldine</text>
+ <text lang="NB">1 Generelt</text>
+ <text lang="DK">1. Generelt</text>
+ <text lang="ES">1. General</text>
+ <text lang="CZ">1. Obecný</text>
+ <text lang="RU">1. Общие</text>
+ <action>GENERAL</action>
+ </button>
+
+ <button>
+ <type>SETUP_CAPTURE_CARDS</type>
+ <text>2. Capture cards</text>
+ <text lang="IT">2. Schede di Acquisizione</text>
+ <text lang="PT">2. Placas de Captura</text>
+ <text lang="SV">2. TV-kort</text>
+ <text lang="JA">2. キャプチャカード</text>
+ <text lang="DE">2. TV-Karten</text>
+ <text lang="FI">2. TV-kortit</text>
+ <text lang="FR">2. Cartes d'acquisition</text>
+ <text lang="SI">2. Kartice za zajem</text>
+ <text lang="ET">2. TV-kaardid</text>
+ <text lang="NB">2 TV-kort</text>
+ <text lang="DK">2. TV-kort</text>
+ <text lang="ES">2. Capturadoras</text>
+ <text lang="CZ">2. Zachytávací karty</text>
+ <text lang="RU">2. Карты захвата</text>
+ <action>CAPTURE CARDS</action>
+ </button>
+
+ <button>
+ <type>SETUP_VIDEO_SOURCES</type>
+ <text>3. Video sources</text>
+ <text lang="IT">3. Fonte Video</text>
+ <text lang="PT">3. Fontes de Vídeo</text>
+ <text lang="SV">3. Videokällor</text>
+ <text lang="JA">3. ビデオソース</text>
+ <text lang="DE">3. Videoquellen</text>
+ <text lang="FI">3. Kuvanlähteet</text>
+ <text lang="FR">3. Sources vidéo</text>
+ <text lang="SI">3. Video viri</text>
+ <text lang="ET">3. Videosisendid</text>
+ <text lang="NB">3 Videokilder</text>
+ <text lang="DK">3. Videokilder</text>
+ <text lang="ES">3. Fuentes de Vídeo</text>
+ <text lang="CZ">3. Zdroje obrazu</text>
+ <text lang="RU">3. Видео источники</text>
+ <action>VIDEO SOURCES</action>
+ </button>
+
+ <button>
+ <type>SETUP_INPUT_CONNECTIONS</type>
+ <text>4. Input connections</text>
+ <text lang="IT">4. Connessioni di Ingresso</text>
+ <text lang="PT">4. Ligações de Entrada</text>
+ <text lang="SV">4. Anslutningar</text>
+ <text lang="JA">4. 入力とソースの接続</text>
+ <text lang="DE">4. Verknüpfungen</text>
+ <text lang="FI">4. Sisääntuloasetukset</text>
+ <text lang="FR">4. Entrées Vidéos</text>
+ <text lang="SI">4. Vhodne povezave</text>
+ <text lang="ET">4. Sisendite ühendused</text>
+ <text lang="NB">4 Inndata</text>
+ <text lang="DK">4. Indgange</text>
+ <text lang="ES">4. Conexiones</text>
+ <text lang="CZ">4. Připojení vstupů</text>
+ <text lang="RU">4. Соединение входов</text>
+ <action>CARD INPUTS</action>
+ </button>
+
+ <button>
+ <type>SETUP_CHANNEL_EDITOR</type>
+ <text>5. Channel Editor</text>
+ <text lang="IT">5. Modifica Canali</text>
+ <text lang="SV">5. Kanaleditor</text>
+ <text lang="JA">5. チャンネル設定</text>
+ <text lang="DE">5. Sender bearbeiten</text>
+ <text lang="FI">5. Kanavanviritys</text>
+ <text lang="FR">5. Editeur de chaînes</text>
+ <text lang="SI">5. Urejanje kanalov</text>
+ <text lang="ET">5. Kanaliredaktor</text>
+ <text lang="NB">5 Kanalredigerer</text>
+ <text lang="DK">5. Kanal opsætning</text>
+ <text lang="ES">5. Editor Canales</text>
+ <text lang="CZ">5. Editor kanálů</text>
+ <text lang="RU">5. Редактор каналов</text>
+ <action>CHANNEL EDITOR</action>
+ </button>
+
+ <button>
+ <type>SETUP_STORAGE_GROUPS</type>
+ <text>6. Storage Directories</text>
+ <text lang="IT">6. Cartelle</text>
+ <text lang="FI">Tallennusryhmät</text>
+ <text lang="SV">Lagringsgrupper</text>
+ <action>STORAGE GROUPS</action>
+ </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/siriusmenu.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/siriusmenu.xml
new file mode 100644
index 0000000..e317b36
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/siriusmenu.xml
@@ -0,0 +1,419 @@
+<mythmenu name="SIRIUS">
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Hits 1</text>
+ <action>EXEC /usr/bin/cliSipie siriushits1</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>StarLite</text>
+ <action>EXEC /usr/bin/cliSipie starlite</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Love</text>
+ <action>EXEC /usr/bin/cliSipie siriuslove</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Movin EZ</text>
+ <action>EXEC /usr/bin/cliSipie movineasy</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Gold</text>
+ <action>EXEC /usr/bin/cliSipie siriusgold</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>'60s Vibrations</text>
+ <action>EXEC /usr/bin/cliSipie 60svibrations</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Totally '70s</text>
+ <action>EXEC /usr/bin/cliSipie totally70s</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Big '80s</text>
+ <action>EXEC /usr/bin/cliSipie big80s</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>ThePulse</text>
+ <action>EXEC /usr/bin/cliSipie thepulse</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Bridge</text>
+ <action>EXEC /usr/bin/cliSipie thebridge</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>BBC Radio 1</text>
+ <action>EXEC /usr/bin/cliSipie bbcradio1</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Super Shuffle</text>
+ <action>EXEC /usr/bin/cliSipie supershuffle</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Elvis Radio</text>
+ <action>EXEC /usr/bin/cliSipie elvisradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Classic Vinyl</text>
+ <action>EXEC /usr/bin/cliSipie classicvinyl</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Classic Rewind</text>
+ <action>EXEC /usr/bin/cliSipie classicrewind</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>TheVault</text>
+ <action>EXEC /usr/bin/cliSipie thevault</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Jam_ON</text>
+ <action>EXEC /usr/bin/cliSipie jamon</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Spectrum</text>
+ <action>EXEC /usr/bin/cliSipie thespectrum</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>BuzzSaw</text>
+ <action>EXEC /usr/bin/cliSipie buzzsaw</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Octane</text>
+ <action>EXEC /usr/bin/cliSipie octane</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Alt Nation</text>
+ <action>EXEC /usr/bin/cliSipie altnation</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>1st Wave</text>
+ <action>EXEC /usr/bin/cliSipie firstwave</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hair Nation</text>
+ <action>EXEC /usr/bin/cliSipie hairnation</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>'90s Alternative</text>
+ <action>EXEC /usr/bin/cliSipie 90salternative</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Garage</text>
+ <action>EXEC /usr/bin/cliSipie undergroundgarage</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Left of Center</text>
+ <action>EXEC /usr/bin/cliSipie leftofcenter</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hard Attack</text>
+ <action>EXEC /usr/bin/cliSipie hardattack</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Faction</text>
+ <action>EXEC /usr/bin/cliSipie faction</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Punk</text>
+ <action>EXEC /usr/bin/cliSipie punk</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>The Coffee House</text>
+ <action>EXEC /usr/bin/cliSipie coffeehouse</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Margaritaville</text>
+ <action>EXEC /usr/bin/cliSipie radiomargaritaville</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Disorder</text>
+ <action>EXEC /usr/bin/cliSipie siriusdisorder</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Reggae</text>
+ <action>EXEC /usr/bin/cliSipie reggaerhythms</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Area 33</text>
+ <action>EXEC /usr/bin/cliSipie area33</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Boombox</text>
+ <action>EXEC /usr/bin/cliSipie boombox</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Chill</text>
+ <action>EXEC /usr/bin/cliSipie chill</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>The Beat</text>
+ <action>EXEC /usr/bin/cliSipie thebeat</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Strobe</text>
+ <action>EXEC /usr/bin/cliSipie thestrobe</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hip-Hop Nation</text>
+ <action>EXEC /usr/bin/cliSipie hiphopnation</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>BackSpin</text>
+ <action>EXEC /usr/bin/cliSipie backspin</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Shade 45</text>
+ <action>EXEC /usr/bin/cliSipie shade45</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hot Jamz</text>
+ <action>EXEC /usr/bin/cliSipie hotjamz</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Heart &amp; Soul</text>
+ <action>EXEC /usr/bin/cliSipie heartandsoul</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>SoulTown</text>
+ <action>EXEC /usr/bin/cliSipie soultown</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>New Country</text>
+ <action>EXEC /usr/bin/cliSipie newcountry</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Prime Country</text>
+ <action>EXEC /usr/bin/cliSipie primecountry</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Roadhouse</text>
+ <action>EXEC /usr/bin/cliSipie theroadhouse</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Outlaw Country</text>
+ <action>EXEC /usr/bin/cliSipie outlawcountry</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Bluegrass</text>
+ <action>EXEC /usr/bin/cliSipie bluegrass</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Spirit</text>
+ <action>EXEC /usr/bin/cliSipie spirit</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Praise</text>
+ <action>EXEC /usr/bin/cliSipie praise</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Planet Jazz</text>
+ <action>EXEC /usr/bin/cliSipie planetjazz</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>JazzCafe</text>
+ <action>EXEC /usr/bin/cliSipie jazzcafe</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>PureJazz</text>
+ <action>EXEC /usr/bin/cliSipie purejazz</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Spa 73</text>
+ <action>EXEC /usr/bin/cliSipie spa73</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Blues</text>
+ <action>EXEC /usr/bin/cliSipie siriusblues</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Siriusly Sinatra</text>
+ <action>EXEC /usr/bin/cliSipie siriuslysinatra</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Broadway's Best</text>
+ <action>EXEC /usr/bin/cliSipie broadwaysbest</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Symphony Hall</text>
+ <action>EXEC /usr/bin/cliSipie symphonyhall</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Met Opera Radio</text>
+ <action>EXEC /usr/bin/cliSipie metropolitanopera</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Pops</text>
+ <action>EXEC /usr/bin/cliSipie siriuspops</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Universo Latino</text>
+ <action>EXEC /usr/bin/cliSipie universolatino</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Rumbon</text>
+ <action>EXEC /usr/bin/cliSipie rumbon</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Martha Stewart</text>
+ <action>EXEC /usr/bin/cliSipie marthastewartlivingradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Stars</text>
+ <action>EXEC /usr/bin/cliSipie siriusstars</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>OutQ Gay Radio</text>
+ <action>EXEC /usr/bin/cliSipie siriusoutq</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Patriot</text>
+ <action>EXEC /usr/bin/cliSipie siriuspatriot</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Left</text>
+ <action>EXEC /usr/bin/cliSipie siriusleft</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>CNN</text>
+ <action>EXEC /usr/bin/cliSipie cnn</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>wrn</text>
+ <action>EXEC /usr/bin/cliSipie wrn</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Blue Collar Comedy</text>
+ <action>EXEC /usr/bin/cliSipie bluecollarcomedy</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Raw Dog Comedy</text>
+ <action>EXEC /usr/bin/cliSipie rawdog</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Laugh Break Comedy</text>
+ <action>EXEC /usr/bin/cliSipie laughbreak</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>thefoxxhole</text>
+ <action>EXEC /usr/bin/cliSipie thefoxxhole</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>lime</text>
+ <action>EXEC /usr/bin/cliSipie lime</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Kids Stuff</text>
+ <action>EXEC /usr/bin/cliSipie kidsstuff</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Catholic Channel</text>
+ <action>EXEC /usr/bin/cliSipie thecatholicchannel</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>EWTN</text>
+ <action>EXEC /usr/bin/cliSipie ewtnglobal</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>christiantalk</text>
+ <action>EXEC /usr/bin/cliSipie christiantalk</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius NFL Radio</text>
+ <action>EXEC /usr/bin/cliSipie siriusnflradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Maxim Radio</text>
+ <action>EXEC /usr/bin/cliSipie maximradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Cosmo Radio</text>
+ <action>EXEC /usr/bin/cliSipie cosmopolitanradio</action>
+ </button>
+ <button>
+ <type>TV_DELETE</type>
+ <text>Stop Listening</text>
+ <action>EXEC /usr/bin/sipie_kill</action>
+ </button>
+
+</mythmenu>
+
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/themeinfo.xml-tv b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/themeinfo.xml-tv
new file mode 100644
index 0000000..64a3207
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/themeinfo.xml-tv
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<themeinfo>
+ <!-- The Theme Name (Required) -->
+ <name>LiveTV</name>
+
+ <!-- The Theme Types (Required) -->
+ <types>
+ <!-- Type. Legal Values are one or more of: UI, OSD and Menu -->
+ <type>Menu</type>
+ </types>
+
+ <!-- Theme Author Details (Optional)-->
+ <author>
+ <!-- Your name -->
+ <name></name>
+
+ <!-- Your Email Address -->
+ <email></email>
+ </author>
+
+ <!-- The Versioning Info (Required) -->
+ <version>
+ <!-- Major version changes mean the theme is no longer
+ compatible with earlier versions of mythtv -->
+ <major>1</major>
+
+ <!-- Minor version changes are backwards compatible -->
+ <minor>1</minor>
+ </version>
+
+ <!-- Theme Details (Required) -->
+ <detail>
+ <!-- At least one thumbnail image named "preview" must be included
+ with the theme.
+ There is no limit to the number of thumbnails.
+ Each thumbnail must be given a different name -->
+ <thumbnail name="preview"></thumbnail>
+
+ <!-- A description of the theme, including general colours and
+ style. The description should include any details that
+ may help to locate your theme in a search. -->
+ <description></description>
+
+ <!-- Errata. A list of known faults, missing elements or unfinished
+ areas. e.g. "mythgallery not themed" -->
+ <errata>N/A</errata>
+ </detail>
+</themeinfo>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update.xml
new file mode 100644
index 0000000..5b28833
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Check for updates?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update.sh</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update2.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update2.xml
new file mode 100644
index 0000000..2ab82ea
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update2.xml
@@ -0,0 +1,26 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Perform updates?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update2.sh</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>View files to be upgraded.</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update3.sh</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/util_menu.xml.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/util_menu.xml.patch
new file mode 100644
index 0000000..3a1072a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/util_menu.xml.patch
@@ -0,0 +1,16 @@
+--- util_menu.xml.orig 2009-03-23 18:43:18.000000000 +0000
++++ util_menu.xml 2009-03-23 20:16:56.000000000 +0000
+@@ -56,6 +56,13 @@
+ </button>
+
+ <button>
++ <type>VIDEO_SCREENSHOOTER</type>
++ <text>Thumbnail Generator</text>
++ <description>Generate thumbnail images for videos</description>
++ <action>EXEC /usr/LH/bin/shootscreens-mythtv.sh</action>
++ </button>
++
++ <button>
+ <type>SETUP_KEYS</type>
+ <text>Edit Keys</text>
+ <text lang="IT">Modifica Tasti</text>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/xmmenu.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/xmmenu.xml
new file mode 100644
index 0000000..6b26d11
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/xmmenu.xml
@@ -0,0 +1,574 @@
+<!-- Current as of April 25, 2007 -->
+<mythmenu name="XM">
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '40s</text>
+ <action>EXEC /usr/bin/xamp kill 4</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '50s</text>
+ <action>EXEC /usr/bin/xamp kill 5</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '60s</text>
+ <action>EXEC /usr/bin/xamp kill 6</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '70s</text>
+ <action>EXEC /usr/bin/xamp kill 7</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '80s</text>
+ <action>EXEC /usr/bin/xamp kill 8</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '90s</text>
+ <action>EXEC /usr/bin/xamp kill 9</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>America</text>
+ <action>EXEC /usr/bin/xamp kill 10</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>X Country</text>
+ <action>EXEC /usr/bin/xamp kill 12</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Willie's Place</text>
+ <action>EXEC /usr/bin/xamp kill 13</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Bluegrass Junction</text>
+ <action>EXEC /usr/bin/xamp kill 14</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Village</text>
+ <action>EXEC /usr/bin/xamp kill 15</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Highway 16</text>
+ <action>EXEC /usr/bin/xamp kill 16</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>US Country</text>
+ <action>EXEC /usr/bin/xamp kill 17</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>20 on 20</text>
+ <action>EXEC /usr/bin/xamp kill 20</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Heart</text>
+ <action>EXEC /usr/bin/xamp kill 23</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Blend</text>
+ <action>EXEC /usr/bin/xamp kill 25</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Flight 26</text>
+ <action>EXEC /usr/bin/xamp kill 26</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Cinemagic</text>
+ <action>EXEC /usr/bin/xamp kill 27</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>On Broadway</text>
+ <action>EXEC /usr/bin/xamp kill 28</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>U-Pop</text>
+ <action>EXEC /usr/bin/xamp kill 29</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Hitlist</text>
+ <action>EXEC /usr/bin/xamp kill 30</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Torch</text>
+ <action>EXEC /usr/bin/xamp kill 31</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Message</text>
+ <action>EXEC /usr/bin/xamp kill 32</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Spirit</text>
+ <action>EXEC /usr/bin/xamp kill 33</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>enLighten</text>
+ <action>EXEC /usr/bin/xamp kill 34</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Deep Tracks</text>
+ <action>EXEC /usr/bin/xamp kill 40</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Boneyard</text>
+ <action>EXEC /usr/bin/xamp kill 41</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Liquid Metal</text>
+ <action>EXEC /usr/bin/xamp kill 42</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XMU</text>
+ <action>EXEC /usr/bin/xamp kill 43</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fred</text>
+ <action>EXEC /usr/bin/xamp kill 44</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Cafe</text>
+ <action>EXEC /usr/bin/xamp kill 45</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Top Tracks</text>
+ <action>EXEC /usr/bin/xamp kill 46</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Ethel</text>
+ <action>EXEC /usr/bin/xamp kill 47</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Squizz</text>
+ <action>EXEC /usr/bin/xamp kill 48</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Big Tracks</text>
+ <action>EXEC /usr/bin/xamp kill 49</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Loft</text>
+ <action>EXEC /usr/bin/xamp kill 50</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Music Lab</text>
+ <action>EXEC /usr/bin/xamp kill 51</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Verge</text>
+ <action>EXEC /usr/bin/xamp kill 52</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fungus</text>
+ <action>EXEC /usr/bin/xamp kill 53</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Lucy</text>
+ <action>EXEC /usr/bin/xamp kill 54</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Soul Street</text>
+ <action>EXEC /usr/bin/xamp kill 60</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Flow</text>
+ <action>EXEC /usr/bin/xamp kill 61</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Suite 62</text>
+ <action>EXEC /usr/bin/xamp kill 62</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Groove</text>
+ <action>EXEC /usr/bin/xamp kill 64</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Rhyme</text>
+ <action>EXEC /usr/bin/xamp kill 65</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>RAW</text>
+ <action>EXEC /usr/bin/xamp kill 66</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The City</text>
+ <action>EXEC /usr/bin/xamp kill 67</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Heat</text>
+ <action>EXEC /usr/bin/xamp kill 68</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Real Jazz</text>
+ <action>EXEC /usr/bin/xamp kill 70</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Watercolors</text>
+ <action>EXEC /usr/bin/xamp kill 71</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Beyond Jazz</text>
+ <action>EXEC /usr/bin/xamp kill 72</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>High Standards</text>
+ <action>EXEC /usr/bin/xamp kill 73</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Bluesville</text>
+ <action>EXEC /usr/bin/xamp kill 74</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Hear Music</text>
+ <action>EXEC /usr/bin/xamp kill 75</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fine Tuning</text>
+ <action>EXEC /usr/bin/xamp kill 76</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Audio Visions</text>
+ <action>EXEC /usr/bin/xamp kill 77</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Escape</text>
+ <action>EXEC /usr/bin/xamp kill 78</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>On The Rocks</text>
+ <action>EXEC /usr/bin/xamp kill 79</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Move</text>
+ <action>EXEC /usr/bin/xamp kill 80</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>BPM</text>
+ <action>EXEC /usr/bin/xamp kill 81</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The System</text>
+ <action>EXEC /usr/bin/xamp kill 82</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Chrome</text>
+ <action>EXEC /usr/bin/xamp kill 83</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM-Chill</text>
+ <action>EXEC /usr/bin/xamp kill 84</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fuego</text>
+ <action>EXEC /usr/bin/xamp kill 90</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Viva</text>
+ <action>EXEC /usr/bin/xamp kill 91</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Aguila</text>
+ <action>EXEC /usr/bin/xamp kill 92</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Caliente</text>
+ <action>EXEC /usr/bin/xamp kill 94</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Luna</text>
+ <action>EXEC /usr/bin/xamp kill 95</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Air Musique</text>
+ <action>EXEC /usr/bin/xamp kill 100</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Joint</text>
+ <action>EXEC /usr/bin/xamp kill 101</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Sur La Route</text>
+ <action>EXEC /usr/bin/xamp kill 102</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>World Zone</text>
+ <action>EXEC /usr/bin/xamp kill 103</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Ngoma</text>
+ <action>EXEC /usr/bin/xamp kill 104</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Classics</text>
+ <action>EXEC /usr/bin/xamp kill 110</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Vox</text>
+ <action>EXEC /usr/bin/xamp kill 112</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Pops</text>
+ <action>EXEC /usr/bin/xamp kill 113</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Kids</text>
+ <action>EXEC /usr/bin/xamp kill 116</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Bob Edwards Show</text>
+ <action>EXEC /usr/bin/xamp kill 133</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Comedy</text>
+ <action>EXEC /usr/bin/xamp kill 150</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Laugh USA</text>
+ <action>EXEC /usr/bin/xamp kill 151</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Special X</text>
+ <action>EXEC /usr/bin/xamp kill 154</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Agenda</text>
+ <action>EXEC /usr/bin/xamp kill 134</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Oprah and Friends</text>
+ <action>EXEC /usr/bin/xamp kill 156</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Virus</text>
+ <action>EXEC /usr/bin/xamp kill 202</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>1 Hit Wonders</text>
+ <action>EXEC /usr/bin/xamp kill 300</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Metalcore</text>
+ <action>EXEC /usr/bin/xamp kill 301</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Indie First</text>
+ <action>EXEC /usr/bin/xamp kill 302</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Late Night Mix</text>
+ <action>EXEC /usr/bin/xamp kill 303</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Sessions@AOL</text>
+ <action>EXEC /usr/bin/xamp kill 304</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Shuffle</text>
+ <action>EXEC /usr/bin/xamp kill 305</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Rock First</text>
+ <action>EXEC /usr/bin/xamp kill 306</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Country First</text>
+ <action>EXEC /usr/bin/xamp kill 307</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Hip Hop First</text>
+ <action>EXEC /usr/bin/xamp kill 308</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Pop First</text>
+ <action>EXEC /usr/bin/xamp kill 309</action>
+ </button>
+
+ <button>
+ <type>TV_DELETE</type>
+ <text>Stop Listening</text>
+ <action>EXEC /usr/bin/xamp kill</action>
+ </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menutheme_fallback.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menutheme_fallback.patch
new file mode 100644
index 0000000..aa633ff
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menutheme_fallback.patch
@@ -0,0 +1,18 @@
+Index: libs/libmythui/myththemedmenu.cpp
+===================================================================
+--- libs/libmythui/myththemedmenu.cpp (revision 23401)
++++ libs/libmythui/myththemedmenu.cpp (working copy)
+@@ -778,6 +778,13 @@
+ else
+ VERBOSE(VB_FILE+VB_EXTRA, "No menu file " + testdir);
+
++ testdir = GetShareDir() + "themes/defaultmenu/" + menuname;
++ file.setFileName(testdir);
++ if (file.exists())
++ return testdir;
++ else
++ VERBOSE(VB_FILE+VB_EXTRA, "No menu file " + testdir);
++
+ return QString();
+ }
+
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/myth.sh b/abs/core/mythtv/old/stable-0.22/mythtv/myth.sh
new file mode 100755
index 0000000..fb7122c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/myth.sh
@@ -0,0 +1,4 @@
+export PATH=$PATH:/usr/local/bin
+# set core file size to 0
+ulimit -c 0
+export MALLOC_CHECK_=0 \ No newline at end of file
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend
new file mode 100755
index 0000000..93773a2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/bin/mythbackend`
+case "$1" in
+ start)
+ stat_busy "Starting MythTV Backend"
+ [ ! -e /var/run/mysqld.pid ] && echo -n "mysqld not started" && stat_fail && exit
+ [ -z "$PID" ] && /usr/bin/mythbackend -d -l /var/log/mythbackend.log -v important
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ echo $PID > /var/run/mythbackend.pid
+ add_daemon mythbackend
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping MythTV Backend"
+ [ ! -z "$PID" ] && kill $PID &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon mythbackend
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1s
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.lr b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.lr
new file mode 100644
index 0000000..4f218bc
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythbackend.log {
+ copytruncate
+ daily
+ size 10M
+ missingok
+ rotate 7
+ compress
+ notifempty
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.sh b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.sh
new file mode 100755
index 0000000..e7a7b70
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+#
+# /etc/rc.d/init.d/mythbackend
+#
+# Starts the mythbackend as a daemon
+#
+# chkconfig: 345 90 10
+# description: Starts the mythbackend process as a daemon after the XWindows \
+# system is started, in runlevel 5. This allows scheduled \
+# recordings to occur without manual intervention.
+# processname: mythbackend
+
+# Copyright (c) by Michael Thomson <linux at m-thomson dot net>
+# With thanks to Stu Tomlinson <stu at nosnilmot dot com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Default values to use if none are supplied in the config file.
+# User who should start the mythbackend processes
+MBE_USER="root"
+# Directory holding the mythbackend binary
+MBE_LOCATION="/usr/local/bin/"
+# Name of mythbackend binary
+MBE_PROG="mythbackend"
+# Full path to mythbackend log file
+MBE_LOGFILE="/var/log/mythtv/mythbackend.log"
+
+# Source function library.
+. /etc/init.d/functions
+
+# Source config file if available
+if [ -f "/etc/sysconfig/mythbackend" ]; then
+ . /etc/sysconfig/mythbackend
+fi
+
+test -x ${MBE_LOCATION}${MBE_PROG} || exit 0
+
+RETVAL=0
+
+#
+# See how we were called.
+#
+
+start() {
+ # Check if mythbackend is already running
+ if [ ! -f /var/lock/subsys/${MBE_PROG} ]; then
+ echo -n "Starting ${MBE_PROG}: "
+ # /usr/local/bin/mythbackend -d -l /some/log/file
+ #daemon --user ${MBE_USER} ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
+ ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/${MBE_PROG}
+ echo
+ fi
+ return $RETVAL
+}
+
+stop() {
+ echo -n "Stopping ${MBE_PROG}: "
+ killproc ${MBE_LOCATION}${MBE_PROG}
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${MBE_PROG}
+ echo
+ return $RETVAL
+}
+
+
+restart() {
+ stop
+ start
+}
+
+reload() {
+ restart
+}
+
+status_at() {
+ status ${MBE_LOCATION}${MBE_PROG}
+}
+
+case "$1" in
+start)
+ start
+ ;;
+stop)
+ stop
+ ;;
+reload|restart)
+ restart
+ ;;
+condrestart)
+ if [ -f /var/lock/subsys/${MBE_PROG} ]; then
+ restart
+ fi
+ ;;
+status)
+ status_at
+ ;;
+*)
+ echo "Usage: $0 {start|stop|restart|condrestart|status}"
+ exit 1
+esac
+
+exit $?
+exit $RETVAL
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythfrontend.lr b/abs/core/mythtv/old/stable-0.22/mythtv/mythfrontend.lr
new file mode 100644
index 0000000..1580533
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythfrontend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythfrontend.log {
+ copytruncate
+ daily
+ size 10M
+ missingok
+ rotate 7
+ compress
+ notifempty
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythtv.install b/abs/core/mythtv/old/stable-0.22/mythtv/mythtv.install
new file mode 100755
index 0000000..6b35d5b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythtv.install
@@ -0,0 +1,35 @@
+# arg 1: the new package version
+post_install() {
+ if [ ! -d /var/log/mythtv ]
+ then
+ mkdir -p /var/log/mythv
+ chown -R mythtv /var/log/mythtv
+ echo "---" > /var/log/mythtv/mythbackend.log
+ chown mythtv /var/log/mythtv/mythbackend.log
+ fi
+ ln -s /usr/share/mythtv/is.xml /usr/share/mythtv/themes/defaultmenu/is.xml
+}
+
+post_upgrade() {
+ if [ ! -d /var/log/mythtv ]
+ then
+ mkdir -p /var/log/mythv
+ chown -R mythtv /var/log/mythtv
+ fi
+ if [ -e /usr/share/mythtv/is.xml ]
+ then
+ rm -fr /usr/share/mythtv/themes/defaultmenu/is.xml
+ ln -s /usr/share/mythtv/is.xml /usr/share/mythtv/themes/defaultmenu/is.xml
+ fi
+}
+
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/pretty b/abs/core/mythtv/old/stable-0.22/mythtv/pretty
new file mode 100755
index 0000000..795ad4c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/pretty
@@ -0,0 +1,10 @@
+#!/bin/bash
+if [ -f /usr/share/mythtv/contrib/user_jobs/mythlink.pl ]
+then
+ su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythlink.pl --link /myth/pretty"
+elif [ -f /usr/share/mythtv/contrib/user_jobs/mythrename.pl ]
+then
+ su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythrename.pl --link /myth/pretty"
+fi
+
+
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/smolt_jump.patch b/abs/core/mythtv/old/stable-0.22/mythtv/smolt_jump.patch
new file mode 100644
index 0000000..0fc452a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/smolt_jump.patch
@@ -0,0 +1,30 @@
+Index: programs/mythfrontend/networkcontrol.cpp
+===================================================================
+--- programs/mythfrontend/networkcontrol.cpp (revision 19291)
++++ programs/mythfrontend/networkcontrol.cpp (working copy)
+@@ -83,6 +83,7 @@
+ jumpMap["zoneminderliveview"] = "ZoneMinder Live View";
+ jumpMap["zoneminderevents"] = "ZoneMinder Events";
+ jumpMap["snapshot"] = "ScreenShot";
++ jumpMap["mythsmolt"] = "MythSmolt";
+
+ // These jump point names match the (lowercased) locations from gContext
+ jumpMap["channelrecpriority"] = "Channel Recording Priorities";
+@@ -191,7 +192,7 @@
+ pthread_create(&command_thread, NULL, CommandThread, this);
+
+ gContext->addListener(this);
+-
++
+ connect(this, SIGNAL(newConnection()), this, SLOT(newConnection()));
+ }
+
+@@ -307,7 +308,7 @@
+ cs = new QTextStream(s);
+ cs->setCodec("UTF-8");
+ }
+-
++
+ if (client)
+ {
+ closedOldConn = true;
diff --git a/abs/core/mythtv/old/stable-0.22/mythvideo/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythvideo/PKGBUILD
new file mode 100644
index 0000000..1affe22
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythvideo/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythvideo
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Video playback and browsing plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'mplayer' 'perlxml' 'perl-libwww' 'perl-uri' 'perl-xml-simple' 'ffmpeg')
+conflicts=('mythvideo-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythvideo || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythweather/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythweather/PKGBUILD
new file mode 100644
index 0000000..96c3457
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythweather/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythweather
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Weather checking plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'wget')
+conflicts=('mythweather-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythweather || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythweb/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythweb/PKGBUILD
new file mode 100644
index 0000000..060a229
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythweb/PKGBUILD
@@ -0,0 +1,50 @@
+pkgname=mythweb
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Web interface for MythTV's backend"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'lighttpd' 'php' 'local-website' 'perl' 'perl-dbd-mysql' 'perl-math-round')
+conflicts=('mythweb-svn')
+groups=('mythtv-extras')
+install=mythweb.install
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+DOCROOT=/data/srv/httpd/htdocs/mythweb
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ mkdir -p $startdir/pkg/$DOCROOT/{image_cache,php_sessions}
+
+ #cp -r $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+ rsync -arp --exclude .svn --delete-excluded $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+
+ rm $startdir/pkg/$DOCROOT/README
+ chown -R http:users $startdir/pkg/$DOCROOT
+ chmod g+rw $startdir/pkg/$DOCROOT/{image_cache,php_sessions,data}
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythweb/mythweb.install b/abs/core/mythtv/old/stable-0.22/mythweb/mythweb.install
new file mode 100644
index 0000000..470cbd1
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythweb/mythweb.install
@@ -0,0 +1,10 @@
+post_install() {
+ echo "You must create a symlink from /home/httpd/html/mythweb/video_dir"
+ echo "to your MythTV recordings directory. Don't forget to change the"
+ echo "permissions so that the webserver can read those files and create"
+ echo "thumbnails."
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.22/mythzoneminder/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythzoneminder/PKGBUILD
new file mode 100644
index 0000000..228626f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythzoneminder/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythzoneminder
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Integrates ZoneMinder into MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'zoneminder>=1.23.3')
+conflicts=('mythzoneminder-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythzoneminder || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/stable-0.23/clean_all.sh b/abs/core/mythtv/stable-0.23/clean_all.sh
new file mode 100755
index 0000000..b56450e
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/clean_all.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnetvision' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+
+# clean up current directory
+rm -f *~
+
+# clean up mythtv directories
+for i in `echo ${buildlist[@]:0}`
+do
+ echo "-- cleaning $i"
+ cd ./$i
+
+ # clean up everything
+ rm -rf pkg src
+ rm -f *~
+
+ cd ..
+done
+
+echo "DONE!"
+
diff --git a/abs/core/mythtv/stable-0.23/morethemes/PKGBUILD b/abs/core/mythtv/stable-0.23/morethemes/PKGBUILD
new file mode 100755
index 0000000..9633db1
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/morethemes/PKGBUILD
@@ -0,0 +1,46 @@
+pkgname=morethemes
+pkgver=0.23
+pkgrel=29
+pkgdesc="Additional themes for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+depends=('mythtv')
+groups=('mythtv-extras')
+source=('ftp://ftp.knoppmyth.net/R6/sources/morethemes-0.23.tar.bz2'
+ 'ftp://miroku.no-ip.com/blue-abstract-wide.2010.05.26.tar.bz2'
+ 'http://elkin.de/mythtv/2010.06.13-Willi.tar.bz2'
+ 'http://elkin.de/mythtv/2010.03.13-bando-blue.tar.bz2'
+ 'http://www.mythtv.org/themes/LCARS.tar.gz'
+ 'http://www.mythtv.org/themes/TransBlue.tar.gz'
+ 'http://www.westnet.com/~chris/Mythtv/Retro-wide.tar.gz'
+ 'retro-wide_video-ui.xml-filetypes.patch')
+
+build() {
+
+ cd $startdir/src/
+ mkdir -p $pkgdir/usr/share/mythtv
+ cp -a themes $pkgdir/usr/share/mythtv
+ chmod 644 -R blue-abstract-wide
+ chmod +X -R blue-abstract-wide
+ cp -a blue-abstract-wide $pkgdir/usr/share/mythtv/themes
+ chmod 644 -R Willi
+ chmod +X -R Willi
+ cp -a Willi $pkgdir/usr/share/mythtv/themes
+ chmod 644 -R bando-blue
+ chmod +X -R bando-blue
+ cp -a bando-blue $pkgdir/usr/share/mythtv/themes
+ cp -a LCARS $pkgdir/usr/share/mythtv/themes
+ cp -a TransBlue $pkgdir/usr/share/mythtv/themes
+ cp -a Retro-wide $pkgdir/usr/share/mythtv/themes
+ cd $pkgdir/usr/share/mythtv/themes/Retro-wide
+ patch -p0 <${srcdir}/retro-wide_video-ui.xml-filetypes.patch
+}
+md5sums=('5672c0e8604f7b1610fa9a1c7626423c'
+ 'ddc9c7c481664df048b83b7de0731c44'
+ '3c9fbcc9495eb2b0a0fd5ae61acc779a'
+ 'c6d90fb469bc30a94e32f76c82122dd3'
+ 'a36bb7b2597a44128401b1aba9106122'
+ '21d6f967631e45b7039b965a63755282'
+ '526e806848cd4d0ae57883ba18edc6af'
+ '45ff91449f31ac2546c82f559d2e8394')
diff --git a/abs/core/mythtv/stable-0.23/morethemes/retro-wide_video-ui.xml-filetypes.patch b/abs/core/mythtv/stable-0.23/morethemes/retro-wide_video-ui.xml-filetypes.patch
new file mode 100644
index 0000000..e5465dc
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/morethemes/retro-wide_video-ui.xml-filetypes.patch
@@ -0,0 +1,22 @@
+--- video-ui.xml.orig 2010-07-04 06:21:18.000000000 +0000
++++ video-ui.xml 2010-07-04 06:22:22.000000000 +0000
+@@ -967,14 +967,17 @@
+
+ <button name="done_button" from="basebutton">
+ <position>700,550</position>
++ <value>Done</value>
+ </button>
+
+ <button name="new_button" from="basebutton">
+- <position>600,550</position>
++ <position>400,550</position>
++ <value>New</value>
+ </button>
+
+ <button name="delete_button" from="basebutton">
+- <position>0,550</position>
++ <position>100,550</position>
++ <value>Delete</value>
+ </button>
+ </window>
+
diff --git a/abs/core/mythtv/stable-0.23/mp_all.sh b/abs/core/mythtv/stable-0.23/mp_all.sh
new file mode 100755
index 0000000..38a5995
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mp_all.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+pkgver=0.23
+pkgrel=31
+
+# NOTE: Make sure to build and install mythtv first BEFORE building anything else
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnetvision' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+
+# build and install
+for i in `echo ${buildlist[@]:0}`
+do
+ echo "---------- building $i ----------"
+ cd ./$i
+
+ # set svn version in the PKGBUILD
+ sed -i s/^pkgver=.*/pkgver=$pkgver/ PKGBUILD
+ sed -i s/^pkgrel=.*/pkgrel=$pkgrel/ PKGBUILD
+
+ # make the package
+ mp -f -i --holdver --skipinteg || exit 1
+
+ # clean up afterwards
+ rm -rf pkg
+ rm -f *~
+
+ cd ..
+done
+
+echo ""
+echo "DONE!"
+
diff --git a/abs/core/mythtv/stable-0.23/mytharchive/PKGBUILD b/abs/core/mythtv/stable-0.23/mytharchive/PKGBUILD
new file mode 100644
index 0000000..d2a1217
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mytharchive/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mytharchive
+pkgver=0.23
+pkgrel=29
+pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows."
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'libxmu' 'mysql-python' 'pil' 'dvdauthor' 'mjpegtools' 'transcode')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mytharchive || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythbrowser/PKGBUILD b/abs/core/mythtv/stable-0.23/mythbrowser/PKGBUILD
new file mode 100644
index 0000000..0413b79
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythbrowser/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythbrowser
+pkgver=0.23
+pkgrel=29
+pkgdesc="Mini web browser for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'wget')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythbrowser || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythgallery/PKGBUILD b/abs/core/mythtv/stable-0.23/mythgallery/PKGBUILD
new file mode 100644
index 0000000..e18538b
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythgallery/PKGBUILD
@@ -0,0 +1,45 @@
+pkgname=mythgallery
+pkgver=0.23
+pkgrel=29
+pkgdesc="Image gallery plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'libexif' 'libtiff')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythgallery || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
diff --git a/abs/core/mythtv/stable-0.23/mythgame/PKGBUILD b/abs/core/mythtv/stable-0.23/mythgame/PKGBUILD
new file mode 100644
index 0000000..67bd8a8
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythgame/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythgame
+pkgver=0.23
+pkgrel=29
+pkgdesc="Emulation plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'zlib')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythgame || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythmovies/PKGBUILD b/abs/core/mythtv/stable-0.23/mythmovies/PKGBUILD
new file mode 100644
index 0000000..8a92133
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythmovies/PKGBUILD
@@ -0,0 +1,48 @@
+pkgname=mythmovies
+pkgver=0.23
+pkgrel=29
+pkgdesc="Displays information about movies playing in the area."
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23')
+conflicts=('mythmovies')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythmovies || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythmusic/PKGBUILD b/abs/core/mythtv/stable-0.23/mythmusic/PKGBUILD
new file mode 100644
index 0000000..cd13ba7
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythmusic/PKGBUILD
@@ -0,0 +1,51 @@
+pkgname=mythmusic
+pkgver=0.23
+pkgrel=29
+pkgdesc="Music playing plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'libid3tag' 'libmad' 'libvorbis' 'flac>=1.1.4' 'libcdaudio' \
+ 'cdparanoia' 'fftw2' 'sdl' 'faad2>=2.6.1' 'lame' 'taglib' \
+ 'libvisual-plugins' 'libvisual-projectm')
+conflicts=('mythmusic')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythmusic --enable-libvisual --enable-fftw --enable-sdl \
+ --enable-aac || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythnetvision/PKGBUILD b/abs/core/mythtv/stable-0.23/mythnetvision/PKGBUILD
new file mode 100644
index 0000000..cd2bf83
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythnetvision/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythnetvision
+pkgver=0.23
+pkgrel=29
+pkgdesc="Internet video plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'mythbrowser' 'python-pycurl' 'flashplugin')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythnetvision || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythnews/PKGBUILD b/abs/core/mythtv/stable-0.23/mythnews/PKGBUILD
new file mode 100644
index 0000000..c5a52e1
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythnews/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythnews
+pkgver=0.23
+pkgrel=29
+pkgdesc="News checking plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythnews || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythsmolt/PKGBUILD b/abs/core/mythtv/stable-0.23/mythsmolt/PKGBUILD
new file mode 100644
index 0000000..9041251
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythsmolt/PKGBUILD
@@ -0,0 +1,23 @@
+pkgname=mythsmolt
+pkgver=0.23
+pkgrel=4
+pkgdesc="mythsmolt, a hardware profileing tool"
+arch=('i686' 'x86_64')
+url="http://www.mythvantage.com"
+license=('GPL')
+depends=("mythtv>=${pkgver}" urlgrabber python-simplejson)
+source=("http://www.mythvantage.com/request.php?4" 'smolt_init_login.sh' 'mythsmolt.patch')
+
+groups=('mythtv-extras')
+
+build() {
+ cd $startdir/src/mythsmolt
+ patch -p1 < ../mythsmolt.patch || return 1
+ ./configure.sh
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install
+ install -D -m 755 $srcdir/smolt_init_login.sh $pkgdir/etc/profile.d/smolt_init_login.sh
+}
+md5sums=('4641b425d1aa910d82972ebb3a8d4998'
+ '57a3416d90e59abbd5062436583c17e1'
+ '461350b3a7b9d7433cc11e2786e27005')
diff --git a/abs/core/mythtv/stable-0.23/mythsmolt/mythsmolt.patch b/abs/core/mythtv/stable-0.23/mythsmolt/mythsmolt.patch
new file mode 100644
index 0000000..9866587
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythsmolt/mythsmolt.patch
@@ -0,0 +1,8 @@
+diff -ruaN mythsmolt.orig/settings.pro mythsmolt/settings.pro
+--- mythsmolt.orig/settings.pro 2010-01-06 15:49:59.000000000 +0000
++++ mythsmolt/settings.pro 2010-05-28 03:30:59.000000000 +0000
+@@ -1,3 +1,3 @@
+
+-LIBVERSION = 0.22
++LIBVERSION = 0.23
+
diff --git a/abs/core/mythtv/stable-0.23/mythsmolt/smolt_init_login.sh b/abs/core/mythtv/stable-0.23/mythsmolt/smolt_init_login.sh
new file mode 100644
index 0000000..0b76305
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythsmolt/smolt_init_login.sh
@@ -0,0 +1,39 @@
+if [ $UID = 0 -o $UID = 1000 ]
+then
+ INIT=`ps -p 1 -o comm=`
+ if [ x$INIT = xrunit ]
+ then
+ if [[ -f /home/mythtv/.configure && $- = *i* ]]
+ then
+ if [ ! -z "$PS1" ]
+ then
+ if [ $0 = "-bash" ]
+ then
+ if [ ! -e /home/mythtv/.mythtv/MythSmolt/hw-uuid ]
+ then
+ echo ""
+ echo "####################################################"
+ echo "It appears you have not yet run smolt"
+ echo "Please take the time to submit your hardware profile"
+ echo ""
+ echo "press any key to continue:"
+ echo "####################################################"
+ read a
+ mkdir -p /home/mythtv/.mythtv/MythSmolt
+ chown -R mythtv:users /home/mythtv/.mythtv/MythSmolt
+
+ if [ $UID = 0 ]
+ then
+ su mythtv -c "/usr/share/mythtv/mythsmolt/scripts/sendProfile.py" && su mythtv -c "touch /home/mythtv/.mythtv/MythSmolt/hw-uuid"
+ else
+ /usr/share/mythtv/mythsmolt/scripts/sendProfile.py && touch /home/mythtv/.mythtv/MythSmolt/hw-uuid
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+
+
diff --git a/abs/core/mythtv/stable-0.23/myththemes/PKGBUILD b/abs/core/mythtv/stable-0.23/myththemes/PKGBUILD
new file mode 100755
index 0000000..0d855db
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/myththemes/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=myththemes
+pkgver=0.23
+pkgrel=29
+pkgdesc="Themes for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/myththemes-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('5e5cafe0dd3fadadbc37d29708e3ec74')
+
+build() {
+
+ cd $startdir/src/myththemes
+ svn update
+ rm -fr Mythbuntu
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythtv/PKGBUILD b/abs/core/mythtv/stable-0.23/mythtv/PKGBUILD
new file mode 100755
index 0000000..a3420b5
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/PKGBUILD
@@ -0,0 +1,96 @@
+pkgname=mythtv
+pkgver=0.23
+pkgrel=31
+pkgdesc="A personal video recorder for Linux"
+url="http://www.mythtv.org"
+license="GPL"
+depends=('bash' 'mysql-clients>=5.0' 'qt' 'lame' 'lirc-utils' 'ffmpeg' \
+ 'faad2' 'libxv' 'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883' \
+ 'perl-net-upnp' 'libvdpau')
+makedepends=('libgl' 'subversion')
+replaces=()
+groups=('pvr')
+#backup=(/usr/share/mythtv/is.xml)
+#options=(!strip)
+#MAKEFLAGS="-j6"
+install='mythtv.install'
+
+patchs=()
+#patchs=('smolt_jump.patch')
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythtv-0.23-fixes.tar.bz2'
+ 'mythbackend' 'myth.sh' `echo ${patchs[@]:0}` 'mythbackend.lr' 'mythfrontend.lr' 'pretty')
+arch=('i686' 'x86_64')
+
+build() {
+
+ # get clean copy from SVN repo
+ cd $startdir/src/mythtv
+ svn update
+
+ # apply patches
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patchs[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ # Fix to allow AC3 5.1 to return http://svn.mythtv.org/trac/ticket/8659
+ sed -i 's/#define\ AUDIOMAXFRAMES\ \ \ \ \ \ \ 30/#define\ AUDIOMAXFRAMES\ \ \ \ \ \ \ 0/' libs/libmythtv/avformatdecoder.h
+
+ sed -i -e "s/\`(svnversion \$\${SVNTREEDIR} 2>\/dev\/null) || echo Unknown\`/$pkgver/" version.pro
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up from last build
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --arch=${ARCH} \
+ --enable-vdpau --enable-xvmc --enable-xvmc-pro \
+ --enable-opengl-vsync --enable-libfaad --enable-dvb --enable-firewire \
+ --compile-type=release --with-bindings=perl,python \
+ --enable-audio-alsa --disable-audio-jack --disable-audio-pulseoutput || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+ # install db schema, scripts and docs
+ install -m0644 database/mc.sql $startdir/pkg/usr/share/mythtv/ || return 1
+ install -D -m0755 ../mythbackend $startdir/pkg/etc/rc.d/mythbackend || return 1
+# cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
+ rsync -arp --exclude .svn --delete-excluded docs $startdir/pkg/usr/share/mythtv/ || return 1
+
+ # install contrib
+ rsync -arp --exclude .svn --delete-excluded contrib $startdir/pkg/usr/share/mythtv/ || return 1
+ #cp -r contrib $startdir/pkg/usr/share/mythtv/ || return 1
+
+ # patch the xml LinHES style
+ cp -r $startdir/menu-xml/*.xml $startdir/pkg/usr/share/mythtv/themes/defaultmenu/
+# mv $startdir/pkg/usr/share/mythtv/themes/defaultmenu/is.xml $startdir/pkg/usr/share/mythtv/
+ cd $startdir/pkg/usr/share/mythtv/themes/defaultmenu
+ patch -p0 < $startdir/menu-xml/mainmenu.xml.patch || return 1
+ patch -p0 < $startdir/menu-xml/optical_menu.xml.patch || return 1
+ patch -p0 < $startdir/menu-xml/library.xml.patch || return 1
+ patch -p0 < $startdir/menu-xml/util_menu.xml.patch || return 1
+
+ # make log dir
+ mkdir -p $startdir/pkg/var/log/mythtv
+ chown 1000.1000 $startdir/pkg/var/log/mythtv
+ mkdir -p $startdir/pkg/etc/logrotate.d
+ cp $startdir/src/*.lr $startdir/pkg/etc/logrotate.d
+ mkdir -p $startdir/pkg/etc/cron.hourly/
+ install -m0755 $startdir/src/pretty $startdir/pkg/etc/cron.hourly/
+}
+
+md5sums=('f75a4f1be66c2803df54466d4c30361a'
+ '7ef6de58240e7aad389a0b13d91b1cf6'
+ '2babd4b8e146a7538d18dcd55695b0be'
+ 'f735805a80b0d1180dee01f9df1b7004'
+ 'f407d6af23e74a49540755420f84fa58'
+ '5469d9921b726db750b991c87d226158')
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/HOST_SETTINGS.xml
new file mode 100644
index 0000000..ac52497
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/HOST_SETTINGS.xml
@@ -0,0 +1,94 @@
+<mythmenu name="HOST_SETTINGS">
+
+ <button>
+ <type>MV_NETWORK_SETUP_MENU</type>
+ <text>Network Settings</text>
+ <action>EXEC mythinstall -s network </action>
+ </button>
+
+ <button>
+ <type>MV_NETWORK_SETUP_MENU</type>
+ <text>DDNS Settings</text>
+ <action>EXEC mythinstall -s ddns </action>
+ </button>
+ <button>
+ <type>MV_SYSTEM_SETUP_MENU</type>
+ <text>System Type</text>
+ <action>EXEC mythinstall -s hostype </action>
+ </button>
+
+ <button>
+ <type>MV_SCREENSAVER_SETUP_MENU</type>
+ <text>Screensaver Settings</text>
+ <action>EXEC mythinstall -s screensaver </action>
+ </button>
+
+ <button>
+ <type>MV_IR_SETUP_MENU</type>
+ <text>Remotes</text>
+ <action>EXEC mythinstall -s ir </action>
+ </button>
+
+ <button>
+ <type>MV_MISC_SETUP_MENU</type>
+ <text>Miscellanous Settings</text>
+ <action>EXEC mythinstall -s misc </action>
+ </button>
+
+ <button>
+ <type>MV_SOFTWARE_MENU</type>
+ <text>Software</text>
+ <action>EXEC mythinstall -s plugins </action>
+ </button>
+
+ <button>
+ <type>MV_SHUTDOWN_SETUP_MENU</type>
+ <text>Shutdown Settings</text>
+ <action>EXEC mythinstall -s sleep </action>
+ </button>
+
+ <button>
+ <type>MV_ADVANCED_X_SETUP_MENU</type>
+ <text>Display Settings</text>
+ <action>EXEC mythinstall -s advancedX</action>
+ </button>
+
+ <button>
+ <type>MV_ADVANCED_SETUP_MENU</type>
+ <text>Advanced Settings</text>
+ <action>EXEC mythinstall -s advanced</action>
+ </button>
+
+ <button>
+ <type>MV_AUDIO_SETUP_MENU</type>
+ <text>Audio Settings</text>
+ <action>EXEC mythinstall -s sound </action>
+ </button>
+
+ <button>
+ <type>MV_ACCESS_SETUP_MENU</type>
+ <text>Access Control</text>
+ <action>EXEC mythinstall -s accesscontrol </action>
+ </button>
+
+ <button>
+ <type>MV_USER_SETUP_MENU</type>
+ <text>User Accounts</text>
+ <action>EXEC mythinstall -s user </action>
+ </button>
+
+ <button>
+ <type>MV_WEBACCESS_SETUP_MENU</type>
+ <text>Web Security</text>
+ <action>EXEC mythinstall -s webuser </action>
+ </button>
+
+ <!--
+ <button>
+ <type>SETUP_MENU</type>
+ <text>Settings Profile Manager</text>
+ <action>EXEC mythinstall -t </action>
+ </button>
+ -->
+
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/is.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/is.xml
new file mode 100644
index 0000000..88b7e6b
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/is.xml
@@ -0,0 +1,3 @@
+<mythmenu name="Internet Steams">
+
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/library.xml.patch b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/library.xml.patch
new file mode 100644
index 0000000..81ea604
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/library.xml.patch
@@ -0,0 +1,12 @@
+--- library.xml.orig 2009-10-16 12:45:44.000000000 +0000
++++ library.xml 2009-10-16 17:21:44.000000000 +0000
+@@ -123,8 +123,7 @@
+ <text lang="HU">Online folyam lejátszása</text>
+ <description></description>
+ <description lang="DE"></description>
+- <action>PLUGIN mythstream</action>
+- <depends>mythstream</depends>
++ <action>MENU is.xml</action>
+ </button>
+
+ <button>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/linhes.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/linhes.xml
new file mode 100644
index 0000000..ebc848b
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/linhes.xml
@@ -0,0 +1,59 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>SETUP_GENERAL</type>
+ <text>MythTV Configuration</text>
+ <text lang="IT">Impostazioni</text>
+ <text lang="ES">Configuración</text>
+ <text lang="DE">Zubehör / Konfiguration</text>
+ <text lang="DA">Tilbehør/Indstillinger</text>
+ <text lang="IS">Uppsetning</text>
+ <text lang="NL">Configuratie</text>
+ <text lang="PT">Utensílios</text>
+ <text lang="SV">Verktyg / Inställningar</text>
+ <text lang="JA">設~Z</text>
+ <text lang="FI">Oheis/Asetukset</text>
+ <text lang="ZH_TW">工~E/設~Z</text>
+ <text lang="SL">Nastavitve</text>
+ <text lang="ET">Utiliidid / sätted</text>
+ <text lang="RU">У~Bили~B~K / ~]а~A~B~@ойки</text>
+ <text lang="AR">تضب~Jطات</text>
+ <text lang="PL">Narz~Ydzia / ustawienia</text>
+ <text lang="HE">ע~Vר~Y~] / ~T~R~Sר~Uת</text>
+ <text lang="HU">Eszközök / Beállítások</text>
+ <alttext lang="DE">Verschiedenes</alttext>
+ <alttext lang="SV">Inställningar</alttext>
+ <alttext lang="ET">Sätted</alttext>
+ <alttext lang="RU">~]а~A~B~@ойки</alttext>
+ <alttext lang="AR">تضب~Jطات</alttext>
+ <description>Configure MythTV and plugins</description>
+ <description lang="DE">MythTV und Plugins konfigurieren</description>
+ <action>MENU util_menu.xml</action>
+ </button>
+
+ <button>
+ <type>LINHES_SETUP</type>
+ <text>LinHES Configuration</text>
+ <action>MENU HOST_SETTINGS.xml</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>Backup LinHES</text>
+ <action>MENU mythbackup.xml</action>
+ </button>
+
+ <button>
+ <type>RESTORE</type>
+ <text>Restore LinHES</text>
+ <action>MENU mythrestore.xml</action>
+ </button>
+
+<!--#Check for updates-->
+ <button>
+ <type>UPGRADE</type>
+ <text>Upgrade LinHES</text>
+ <action>MENU update.xml</action>
+ </button>
+<!--#Check for updates-->
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mainmenu.xml.patch b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mainmenu.xml.patch
new file mode 100644
index 0000000..0ec7b5b
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mainmenu.xml.patch
@@ -0,0 +1,95 @@
+--- mainmenu.xml.orig 2010-04-18 01:29:44.000000000 +0000
++++ mainmenu.xml 2010-04-18 01:32:38.000000000 +0000
+@@ -2,6 +2,31 @@
+ <mythmenu name="MAIN">
+
+ <button>
++ <type>TV_WATCH_TV</type>
++ <text>Watch TV</text>
++ <text lang="IT">Guarda la TV</text>
++ <text lang="ES">Ver la TV</text>
++ <text lang="NL">TV Kijken</text>
++ <text lang="DE">Fernsehen</text>
++ <text lang="IS">Horfa á sjónvarp</text>
++ <text lang="PT">Ver Televisão</text>
++ <text lang="SV">Se på TV</text>
++ <text lang="JA">TV放送</text>
++ <text lang="FI">Katso Televisiota</text>
++ <text lang="ZH_TW">觀看電視</text>
++ <text lang="SL">Glej TV</text>
++ <text lang="ET">Vaata telerit</text>
++ <text lang="RU">Смотреть ТВ</text>
++ <text lang="AR">شاهد التلفاز</text>
++ <text lang="PL">Oglądanie TV</text>
++ <text lang="HE">צפיה בטלויזיה</text>
++ <text lang="HU">TV nézés</text>
++ <description>Watch live television</description>
++ <description lang="DE">Jetzt Fernsehen schauen</description>
++ <action>TV_WATCH_LIVE</action>
++ </button>
++
++ <button>
+ <type>MENU_MEDIA_LIBRARY</type>
+ <text>Media Library</text>
+ <text lang="IT">Multimedia</text>
+@@ -125,58 +150,9 @@
+ </button>
+
+ <button>
+- <type>TV_WATCH_TV</type>
+- <text>Watch TV</text>
+- <text lang="IT">Guarda la TV</text>
+- <text lang="ES">Ver la TV</text>
+- <text lang="NL">TV Kijken</text>
+- <text lang="DE">Fernsehen</text>
+- <text lang="IS">Horfa á sjónvarp</text>
+- <text lang="PT">Ver Televisão</text>
+- <text lang="SV">Se på TV</text>
+- <text lang="JA">TV放送</text>
+- <text lang="FI">Katso Televisiota</text>
+- <text lang="ZH_TW">觀看電視</text>
+- <text lang="SL">Glej TV</text>
+- <text lang="ET">Vaata telerit</text>
+- <text lang="RU">Смотреть ТВ</text>
+- <text lang="AR">شاهد التلفاز</text>
+- <text lang="PL">Oglądanie TV</text>
+- <text lang="HE">צפיה בטלויזיה</text>
+- <text lang="HU">TV nézés</text>
+- <description>Watch live television</description>
+- <description lang="DE">Jetzt Fernsehen schauen</description>
+- <action>TV_WATCH_LIVE</action>
+- </button>
+-
+- <button>
+ <type>MENU_UTILITIES_SETUP</type>
+- <text>Utilities / Setup</text>
+- <text lang="IT">Impostazioni</text>
+- <text lang="ES">Configuración</text>
+- <text lang="DE">Zubehör / Konfiguration</text>
+- <text lang="IS">Uppsetning</text>
+- <text lang="NL">Configuratie</text>
+- <text lang="PT">Utensílios</text>
+- <text lang="SV">Verktyg / Inställningar</text>
+- <text lang="JA">設定</text>
+- <text lang="FI">Oheis/Asetukset</text>
+- <text lang="ZH_TW">工具/設定</text>
+- <text lang="SL">Nastavitve</text>
+- <text lang="ET">Utiliidid / sätted</text>
+- <text lang="RU">Утилиты / Настройки</text>
+- <text lang="AR">تضبيطات</text>
+- <text lang="PL">Narzędzia / ustawienia</text>
+- <text lang="HE">עזרים / הגדרות</text>
+- <text lang="HU">Eszközök / Beállítások</text>
+- <alttext lang="DE">Verschiedenes</alttext>
+- <alttext lang="SV">Inställningar</alttext>
+- <alttext lang="ET">Sätted</alttext>
+- <alttext lang="RU">Настройки</alttext>
+- <alttext lang="AR">تضبيطات</alttext>
+- <description>Configure MythTV and plugins</description>
+- <description lang="DE">MythTV und Plugins konfigurieren</description>
+- <action>MENU util_menu.xml</action>
++ <text>Service Menu</text>
++ <action>MENU linhes.xml</action>
+ </button>
+
+ <!-- <button>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythbackup.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythbackup.xml
new file mode 100644
index 0000000..5914b33
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythbackup.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>BACKUP</type>
+ <text>Do you wish to backup?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/mythbackup</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythrestore.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythrestore.xml
new file mode 100644
index 0000000..8f5c285
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythrestore.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>RESTORE</type>
+ <text>Do you wish to restore?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>RESTORE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/mythrestore</action>
+ </button>
+
+ <button>
+ <type>BACKUP</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/optical_menu.xml.patch b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/optical_menu.xml.patch
new file mode 100644
index 0000000..b4b1411
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/optical_menu.xml.patch
@@ -0,0 +1,16 @@
+--- optical_menu.xml.orig 2009-03-23 20:05:43.000000000 +0000
++++ optical_menu.xml 2009-03-23 20:10:02.000000000 +0000
+@@ -134,6 +134,13 @@
+ </button>
+
+ <button>
++ <type>DVD_RIP</type>
++ <text>Import video files from DVD</text>
++ <description>Import video files from a data DVD</description>
++ <action>EXEC /usr/LH/bin/importfiles.sh</action>
++ </button>
++
++ <button>
+ <type>EJECT</type>
+ <text>Eject media</text>
+ <text lang="IT">Espelli Media</text>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/original/create_patch.sh b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/original/create_patch.sh
new file mode 100755
index 0000000..34d8b8c
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/original/create_patch.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+for i in *.xml
+do
+ diff -u $i.orig $i > ../$i.patch
+done
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/setup.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/setup.xml
new file mode 100644
index 0000000..f56bb6f
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/setup.xml
@@ -0,0 +1,111 @@
+<mythmenu name="MAIN">
+
+ <button>
+ <type>SETUP_GENERAL</type>
+ <text>1. General</text>
+ <text lang="IT">1. Generale</text>
+ <text lang="PT">1. Geral</text>
+ <text lang="SV">1. Generellt</text>
+ <text lang="JA">1. 一般</text>
+ <text lang="DE">1. Allgemeines</text>
+ <text lang="FI">1. Yleiset</text>
+ <text lang="FR">1. Général</text>
+ <text lang="SI">1. Splošno</text>
+ <text lang="ET">1. Üldine</text>
+ <text lang="NB">1 Generelt</text>
+ <text lang="DK">1. Generelt</text>
+ <text lang="ES">1. General</text>
+ <text lang="CZ">1. Obecný</text>
+ <text lang="RU">1. Общие</text>
+ <action>GENERAL</action>
+ </button>
+
+ <button>
+ <type>SETUP_CAPTURE_CARDS</type>
+ <text>2. Capture cards</text>
+ <text lang="IT">2. Schede di Acquisizione</text>
+ <text lang="PT">2. Placas de Captura</text>
+ <text lang="SV">2. TV-kort</text>
+ <text lang="JA">2. キャプチャカード</text>
+ <text lang="DE">2. TV-Karten</text>
+ <text lang="FI">2. TV-kortit</text>
+ <text lang="FR">2. Cartes d'acquisition</text>
+ <text lang="SI">2. Kartice za zajem</text>
+ <text lang="ET">2. TV-kaardid</text>
+ <text lang="NB">2 TV-kort</text>
+ <text lang="DK">2. TV-kort</text>
+ <text lang="ES">2. Capturadoras</text>
+ <text lang="CZ">2. Zachytávací karty</text>
+ <text lang="RU">2. Карты захвата</text>
+ <action>CAPTURE CARDS</action>
+ </button>
+
+ <button>
+ <type>SETUP_VIDEO_SOURCES</type>
+ <text>3. Video sources</text>
+ <text lang="IT">3. Fonte Video</text>
+ <text lang="PT">3. Fontes de Vídeo</text>
+ <text lang="SV">3. Videokällor</text>
+ <text lang="JA">3. ビデオソース</text>
+ <text lang="DE">3. Videoquellen</text>
+ <text lang="FI">3. Kuvanlähteet</text>
+ <text lang="FR">3. Sources vidéo</text>
+ <text lang="SI">3. Video viri</text>
+ <text lang="ET">3. Videosisendid</text>
+ <text lang="NB">3 Videokilder</text>
+ <text lang="DK">3. Videokilder</text>
+ <text lang="ES">3. Fuentes de Vídeo</text>
+ <text lang="CZ">3. Zdroje obrazu</text>
+ <text lang="RU">3. Видео источники</text>
+ <action>VIDEO SOURCES</action>
+ </button>
+
+ <button>
+ <type>SETUP_INPUT_CONNECTIONS</type>
+ <text>4. Input connections</text>
+ <text lang="IT">4. Connessioni di Ingresso</text>
+ <text lang="PT">4. Ligações de Entrada</text>
+ <text lang="SV">4. Anslutningar</text>
+ <text lang="JA">4. 入力とソースの接続</text>
+ <text lang="DE">4. Verknüpfungen</text>
+ <text lang="FI">4. Sisääntuloasetukset</text>
+ <text lang="FR">4. Entrées Vidéos</text>
+ <text lang="SI">4. Vhodne povezave</text>
+ <text lang="ET">4. Sisendite ühendused</text>
+ <text lang="NB">4 Inndata</text>
+ <text lang="DK">4. Indgange</text>
+ <text lang="ES">4. Conexiones</text>
+ <text lang="CZ">4. Připojení vstupů</text>
+ <text lang="RU">4. Соединение входов</text>
+ <action>CARD INPUTS</action>
+ </button>
+
+ <button>
+ <type>SETUP_CHANNEL_EDITOR</type>
+ <text>5. Channel Editor</text>
+ <text lang="IT">5. Modifica Canali</text>
+ <text lang="SV">5. Kanaleditor</text>
+ <text lang="JA">5. チャンネル設定</text>
+ <text lang="DE">5. Sender bearbeiten</text>
+ <text lang="FI">5. Kanavanviritys</text>
+ <text lang="FR">5. Editeur de chaînes</text>
+ <text lang="SI">5. Urejanje kanalov</text>
+ <text lang="ET">5. Kanaliredaktor</text>
+ <text lang="NB">5 Kanalredigerer</text>
+ <text lang="DK">5. Kanal opsætning</text>
+ <text lang="ES">5. Editor Canales</text>
+ <text lang="CZ">5. Editor kanálů</text>
+ <text lang="RU">5. Редактор каналов</text>
+ <action>CHANNEL EDITOR</action>
+ </button>
+
+ <button>
+ <type>SETUP_STORAGE_GROUPS</type>
+ <text>6. Storage Directories</text>
+ <text lang="IT">6. Cartelle</text>
+ <text lang="FI">Tallennusryhmät</text>
+ <text lang="SV">Lagringsgrupper</text>
+ <action>STORAGE GROUPS</action>
+ </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/siriusmenu.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/siriusmenu.xml
new file mode 100644
index 0000000..e317b36
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/siriusmenu.xml
@@ -0,0 +1,419 @@
+<mythmenu name="SIRIUS">
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Hits 1</text>
+ <action>EXEC /usr/bin/cliSipie siriushits1</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>StarLite</text>
+ <action>EXEC /usr/bin/cliSipie starlite</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Love</text>
+ <action>EXEC /usr/bin/cliSipie siriuslove</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Movin EZ</text>
+ <action>EXEC /usr/bin/cliSipie movineasy</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Gold</text>
+ <action>EXEC /usr/bin/cliSipie siriusgold</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>'60s Vibrations</text>
+ <action>EXEC /usr/bin/cliSipie 60svibrations</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Totally '70s</text>
+ <action>EXEC /usr/bin/cliSipie totally70s</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Big '80s</text>
+ <action>EXEC /usr/bin/cliSipie big80s</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>ThePulse</text>
+ <action>EXEC /usr/bin/cliSipie thepulse</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Bridge</text>
+ <action>EXEC /usr/bin/cliSipie thebridge</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>BBC Radio 1</text>
+ <action>EXEC /usr/bin/cliSipie bbcradio1</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Super Shuffle</text>
+ <action>EXEC /usr/bin/cliSipie supershuffle</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Elvis Radio</text>
+ <action>EXEC /usr/bin/cliSipie elvisradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Classic Vinyl</text>
+ <action>EXEC /usr/bin/cliSipie classicvinyl</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Classic Rewind</text>
+ <action>EXEC /usr/bin/cliSipie classicrewind</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>TheVault</text>
+ <action>EXEC /usr/bin/cliSipie thevault</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Jam_ON</text>
+ <action>EXEC /usr/bin/cliSipie jamon</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Spectrum</text>
+ <action>EXEC /usr/bin/cliSipie thespectrum</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>BuzzSaw</text>
+ <action>EXEC /usr/bin/cliSipie buzzsaw</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Octane</text>
+ <action>EXEC /usr/bin/cliSipie octane</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Alt Nation</text>
+ <action>EXEC /usr/bin/cliSipie altnation</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>1st Wave</text>
+ <action>EXEC /usr/bin/cliSipie firstwave</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hair Nation</text>
+ <action>EXEC /usr/bin/cliSipie hairnation</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>'90s Alternative</text>
+ <action>EXEC /usr/bin/cliSipie 90salternative</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Garage</text>
+ <action>EXEC /usr/bin/cliSipie undergroundgarage</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Left of Center</text>
+ <action>EXEC /usr/bin/cliSipie leftofcenter</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hard Attack</text>
+ <action>EXEC /usr/bin/cliSipie hardattack</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Faction</text>
+ <action>EXEC /usr/bin/cliSipie faction</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Punk</text>
+ <action>EXEC /usr/bin/cliSipie punk</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>The Coffee House</text>
+ <action>EXEC /usr/bin/cliSipie coffeehouse</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Margaritaville</text>
+ <action>EXEC /usr/bin/cliSipie radiomargaritaville</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Disorder</text>
+ <action>EXEC /usr/bin/cliSipie siriusdisorder</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Reggae</text>
+ <action>EXEC /usr/bin/cliSipie reggaerhythms</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Area 33</text>
+ <action>EXEC /usr/bin/cliSipie area33</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Boombox</text>
+ <action>EXEC /usr/bin/cliSipie boombox</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Chill</text>
+ <action>EXEC /usr/bin/cliSipie chill</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>The Beat</text>
+ <action>EXEC /usr/bin/cliSipie thebeat</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Strobe</text>
+ <action>EXEC /usr/bin/cliSipie thestrobe</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hip-Hop Nation</text>
+ <action>EXEC /usr/bin/cliSipie hiphopnation</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>BackSpin</text>
+ <action>EXEC /usr/bin/cliSipie backspin</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Shade 45</text>
+ <action>EXEC /usr/bin/cliSipie shade45</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Hot Jamz</text>
+ <action>EXEC /usr/bin/cliSipie hotjamz</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Heart &amp; Soul</text>
+ <action>EXEC /usr/bin/cliSipie heartandsoul</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>SoulTown</text>
+ <action>EXEC /usr/bin/cliSipie soultown</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>New Country</text>
+ <action>EXEC /usr/bin/cliSipie newcountry</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Prime Country</text>
+ <action>EXEC /usr/bin/cliSipie primecountry</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Roadhouse</text>
+ <action>EXEC /usr/bin/cliSipie theroadhouse</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Outlaw Country</text>
+ <action>EXEC /usr/bin/cliSipie outlawcountry</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Bluegrass</text>
+ <action>EXEC /usr/bin/cliSipie bluegrass</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Spirit</text>
+ <action>EXEC /usr/bin/cliSipie spirit</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Praise</text>
+ <action>EXEC /usr/bin/cliSipie praise</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Planet Jazz</text>
+ <action>EXEC /usr/bin/cliSipie planetjazz</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>JazzCafe</text>
+ <action>EXEC /usr/bin/cliSipie jazzcafe</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>PureJazz</text>
+ <action>EXEC /usr/bin/cliSipie purejazz</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Spa 73</text>
+ <action>EXEC /usr/bin/cliSipie spa73</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Blues</text>
+ <action>EXEC /usr/bin/cliSipie siriusblues</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Siriusly Sinatra</text>
+ <action>EXEC /usr/bin/cliSipie siriuslysinatra</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Broadway's Best</text>
+ <action>EXEC /usr/bin/cliSipie broadwaysbest</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Symphony Hall</text>
+ <action>EXEC /usr/bin/cliSipie symphonyhall</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Met Opera Radio</text>
+ <action>EXEC /usr/bin/cliSipie metropolitanopera</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Pops</text>
+ <action>EXEC /usr/bin/cliSipie siriuspops</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Universo Latino</text>
+ <action>EXEC /usr/bin/cliSipie universolatino</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Rumbon</text>
+ <action>EXEC /usr/bin/cliSipie rumbon</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Martha Stewart</text>
+ <action>EXEC /usr/bin/cliSipie marthastewartlivingradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius Stars</text>
+ <action>EXEC /usr/bin/cliSipie siriusstars</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>OutQ Gay Radio</text>
+ <action>EXEC /usr/bin/cliSipie siriusoutq</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Patriot</text>
+ <action>EXEC /usr/bin/cliSipie siriuspatriot</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Left</text>
+ <action>EXEC /usr/bin/cliSipie siriusleft</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>CNN</text>
+ <action>EXEC /usr/bin/cliSipie cnn</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>wrn</text>
+ <action>EXEC /usr/bin/cliSipie wrn</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Blue Collar Comedy</text>
+ <action>EXEC /usr/bin/cliSipie bluecollarcomedy</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Raw Dog Comedy</text>
+ <action>EXEC /usr/bin/cliSipie rawdog</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Laugh Break Comedy</text>
+ <action>EXEC /usr/bin/cliSipie laughbreak</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>thefoxxhole</text>
+ <action>EXEC /usr/bin/cliSipie thefoxxhole</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>lime</text>
+ <action>EXEC /usr/bin/cliSipie lime</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Kids Stuff</text>
+ <action>EXEC /usr/bin/cliSipie kidsstuff</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Catholic Channel</text>
+ <action>EXEC /usr/bin/cliSipie thecatholicchannel</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>EWTN</text>
+ <action>EXEC /usr/bin/cliSipie ewtnglobal</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>christiantalk</text>
+ <action>EXEC /usr/bin/cliSipie christiantalk</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Sirius NFL Radio</text>
+ <action>EXEC /usr/bin/cliSipie siriusnflradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Maxim Radio</text>
+ <action>EXEC /usr/bin/cliSipie maximradio</action>
+ </button>
+ <button>
+ <type>MUSIC</type>
+ <text>Cosmo Radio</text>
+ <action>EXEC /usr/bin/cliSipie cosmopolitanradio</action>
+ </button>
+ <button>
+ <type>TV_DELETE</type>
+ <text>Stop Listening</text>
+ <action>EXEC /usr/bin/sipie_kill</action>
+ </button>
+
+</mythmenu>
+
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update.xml
new file mode 100644
index 0000000..5b28833
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Check for updates?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update.sh</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update2.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update2.xml
new file mode 100644
index 0000000..2ab82ea
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update2.xml
@@ -0,0 +1,26 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Perform updates?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update2.sh</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>View files to be upgraded.</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update3.sh</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/util_menu.xml.patch b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/util_menu.xml.patch
new file mode 100644
index 0000000..3a1072a
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/util_menu.xml.patch
@@ -0,0 +1,16 @@
+--- util_menu.xml.orig 2009-03-23 18:43:18.000000000 +0000
++++ util_menu.xml 2009-03-23 20:16:56.000000000 +0000
+@@ -56,6 +56,13 @@
+ </button>
+
+ <button>
++ <type>VIDEO_SCREENSHOOTER</type>
++ <text>Thumbnail Generator</text>
++ <description>Generate thumbnail images for videos</description>
++ <action>EXEC /usr/LH/bin/shootscreens-mythtv.sh</action>
++ </button>
++
++ <button>
+ <type>SETUP_KEYS</type>
+ <text>Edit Keys</text>
+ <text lang="IT">Modifica Tasti</text>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/xmmenu.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/xmmenu.xml
new file mode 100644
index 0000000..6b26d11
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/xmmenu.xml
@@ -0,0 +1,574 @@
+<!-- Current as of April 25, 2007 -->
+<mythmenu name="XM">
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '40s</text>
+ <action>EXEC /usr/bin/xamp kill 4</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '50s</text>
+ <action>EXEC /usr/bin/xamp kill 5</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '60s</text>
+ <action>EXEC /usr/bin/xamp kill 6</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '70s</text>
+ <action>EXEC /usr/bin/xamp kill 7</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '80s</text>
+ <action>EXEC /usr/bin/xamp kill 8</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The '90s</text>
+ <action>EXEC /usr/bin/xamp kill 9</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>America</text>
+ <action>EXEC /usr/bin/xamp kill 10</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>X Country</text>
+ <action>EXEC /usr/bin/xamp kill 12</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Willie's Place</text>
+ <action>EXEC /usr/bin/xamp kill 13</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Bluegrass Junction</text>
+ <action>EXEC /usr/bin/xamp kill 14</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Village</text>
+ <action>EXEC /usr/bin/xamp kill 15</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Highway 16</text>
+ <action>EXEC /usr/bin/xamp kill 16</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>US Country</text>
+ <action>EXEC /usr/bin/xamp kill 17</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>20 on 20</text>
+ <action>EXEC /usr/bin/xamp kill 20</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Heart</text>
+ <action>EXEC /usr/bin/xamp kill 23</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Blend</text>
+ <action>EXEC /usr/bin/xamp kill 25</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Flight 26</text>
+ <action>EXEC /usr/bin/xamp kill 26</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Cinemagic</text>
+ <action>EXEC /usr/bin/xamp kill 27</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>On Broadway</text>
+ <action>EXEC /usr/bin/xamp kill 28</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>U-Pop</text>
+ <action>EXEC /usr/bin/xamp kill 29</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Hitlist</text>
+ <action>EXEC /usr/bin/xamp kill 30</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Torch</text>
+ <action>EXEC /usr/bin/xamp kill 31</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Message</text>
+ <action>EXEC /usr/bin/xamp kill 32</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Spirit</text>
+ <action>EXEC /usr/bin/xamp kill 33</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>enLighten</text>
+ <action>EXEC /usr/bin/xamp kill 34</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Deep Tracks</text>
+ <action>EXEC /usr/bin/xamp kill 40</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Boneyard</text>
+ <action>EXEC /usr/bin/xamp kill 41</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Liquid Metal</text>
+ <action>EXEC /usr/bin/xamp kill 42</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XMU</text>
+ <action>EXEC /usr/bin/xamp kill 43</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fred</text>
+ <action>EXEC /usr/bin/xamp kill 44</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Cafe</text>
+ <action>EXEC /usr/bin/xamp kill 45</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Top Tracks</text>
+ <action>EXEC /usr/bin/xamp kill 46</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Ethel</text>
+ <action>EXEC /usr/bin/xamp kill 47</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Squizz</text>
+ <action>EXEC /usr/bin/xamp kill 48</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Big Tracks</text>
+ <action>EXEC /usr/bin/xamp kill 49</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Loft</text>
+ <action>EXEC /usr/bin/xamp kill 50</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Music Lab</text>
+ <action>EXEC /usr/bin/xamp kill 51</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Verge</text>
+ <action>EXEC /usr/bin/xamp kill 52</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fungus</text>
+ <action>EXEC /usr/bin/xamp kill 53</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Lucy</text>
+ <action>EXEC /usr/bin/xamp kill 54</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Soul Street</text>
+ <action>EXEC /usr/bin/xamp kill 60</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Flow</text>
+ <action>EXEC /usr/bin/xamp kill 61</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Suite 62</text>
+ <action>EXEC /usr/bin/xamp kill 62</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Groove</text>
+ <action>EXEC /usr/bin/xamp kill 64</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Rhyme</text>
+ <action>EXEC /usr/bin/xamp kill 65</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>RAW</text>
+ <action>EXEC /usr/bin/xamp kill 66</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The City</text>
+ <action>EXEC /usr/bin/xamp kill 67</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Heat</text>
+ <action>EXEC /usr/bin/xamp kill 68</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Real Jazz</text>
+ <action>EXEC /usr/bin/xamp kill 70</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Watercolors</text>
+ <action>EXEC /usr/bin/xamp kill 71</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Beyond Jazz</text>
+ <action>EXEC /usr/bin/xamp kill 72</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>High Standards</text>
+ <action>EXEC /usr/bin/xamp kill 73</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Bluesville</text>
+ <action>EXEC /usr/bin/xamp kill 74</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Hear Music</text>
+ <action>EXEC /usr/bin/xamp kill 75</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fine Tuning</text>
+ <action>EXEC /usr/bin/xamp kill 76</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Audio Visions</text>
+ <action>EXEC /usr/bin/xamp kill 77</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Escape</text>
+ <action>EXEC /usr/bin/xamp kill 78</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>On The Rocks</text>
+ <action>EXEC /usr/bin/xamp kill 79</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Move</text>
+ <action>EXEC /usr/bin/xamp kill 80</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>BPM</text>
+ <action>EXEC /usr/bin/xamp kill 81</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The System</text>
+ <action>EXEC /usr/bin/xamp kill 82</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Chrome</text>
+ <action>EXEC /usr/bin/xamp kill 83</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM-Chill</text>
+ <action>EXEC /usr/bin/xamp kill 84</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Fuego</text>
+ <action>EXEC /usr/bin/xamp kill 90</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Viva</text>
+ <action>EXEC /usr/bin/xamp kill 91</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Aguila</text>
+ <action>EXEC /usr/bin/xamp kill 92</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Caliente</text>
+ <action>EXEC /usr/bin/xamp kill 94</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Luna</text>
+ <action>EXEC /usr/bin/xamp kill 95</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Air Musique</text>
+ <action>EXEC /usr/bin/xamp kill 100</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Joint</text>
+ <action>EXEC /usr/bin/xamp kill 101</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Sur La Route</text>
+ <action>EXEC /usr/bin/xamp kill 102</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>World Zone</text>
+ <action>EXEC /usr/bin/xamp kill 103</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Ngoma</text>
+ <action>EXEC /usr/bin/xamp kill 104</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Classics</text>
+ <action>EXEC /usr/bin/xamp kill 110</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Vox</text>
+ <action>EXEC /usr/bin/xamp kill 112</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Pops</text>
+ <action>EXEC /usr/bin/xamp kill 113</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Kids</text>
+ <action>EXEC /usr/bin/xamp kill 116</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Bob Edwards Show</text>
+ <action>EXEC /usr/bin/xamp kill 133</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>XM Comedy</text>
+ <action>EXEC /usr/bin/xamp kill 150</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Laugh USA</text>
+ <action>EXEC /usr/bin/xamp kill 151</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Special X</text>
+ <action>EXEC /usr/bin/xamp kill 154</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Agenda</text>
+ <action>EXEC /usr/bin/xamp kill 134</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Oprah and Friends</text>
+ <action>EXEC /usr/bin/xamp kill 156</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>The Virus</text>
+ <action>EXEC /usr/bin/xamp kill 202</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>1 Hit Wonders</text>
+ <action>EXEC /usr/bin/xamp kill 300</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Metalcore</text>
+ <action>EXEC /usr/bin/xamp kill 301</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Indie First</text>
+ <action>EXEC /usr/bin/xamp kill 302</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Late Night Mix</text>
+ <action>EXEC /usr/bin/xamp kill 303</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Sessions@AOL</text>
+ <action>EXEC /usr/bin/xamp kill 304</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>Shuffle</text>
+ <action>EXEC /usr/bin/xamp kill 305</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Rock First</text>
+ <action>EXEC /usr/bin/xamp kill 306</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Country First</text>
+ <action>EXEC /usr/bin/xamp kill 307</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Hip Hop First</text>
+ <action>EXEC /usr/bin/xamp kill 308</action>
+ </button>
+
+ <button>
+ <type>MUSIC</type>
+ <text>New Pop First</text>
+ <action>EXEC /usr/bin/xamp kill 309</action>
+ </button>
+
+ <button>
+ <type>TV_DELETE</type>
+ <text>Stop Listening</text>
+ <action>EXEC /usr/bin/xamp kill</action>
+ </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/myth.sh b/abs/core/mythtv/stable-0.23/mythtv/myth.sh
new file mode 100755
index 0000000..fb7122c
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/myth.sh
@@ -0,0 +1,4 @@
+export PATH=$PATH:/usr/local/bin
+# set core file size to 0
+ulimit -c 0
+export MALLOC_CHECK_=0 \ No newline at end of file
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythbackend b/abs/core/mythtv/stable-0.23/mythtv/mythbackend
new file mode 100755
index 0000000..93773a2
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythbackend
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/bin/mythbackend`
+case "$1" in
+ start)
+ stat_busy "Starting MythTV Backend"
+ [ ! -e /var/run/mysqld.pid ] && echo -n "mysqld not started" && stat_fail && exit
+ [ -z "$PID" ] && /usr/bin/mythbackend -d -l /var/log/mythbackend.log -v important
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ echo $PID > /var/run/mythbackend.pid
+ add_daemon mythbackend
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping MythTV Backend"
+ [ ! -z "$PID" ] && kill $PID &>/dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon mythbackend
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1s
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythbackend.lr b/abs/core/mythtv/stable-0.23/mythtv/mythbackend.lr
new file mode 100644
index 0000000..4f218bc
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythbackend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythbackend.log {
+ copytruncate
+ daily
+ size 10M
+ missingok
+ rotate 7
+ compress
+ notifempty
+}
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythbackend.sh b/abs/core/mythtv/stable-0.23/mythtv/mythbackend.sh
new file mode 100755
index 0000000..e7a7b70
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythbackend.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+#
+# /etc/rc.d/init.d/mythbackend
+#
+# Starts the mythbackend as a daemon
+#
+# chkconfig: 345 90 10
+# description: Starts the mythbackend process as a daemon after the XWindows \
+# system is started, in runlevel 5. This allows scheduled \
+# recordings to occur without manual intervention.
+# processname: mythbackend
+
+# Copyright (c) by Michael Thomson <linux at m-thomson dot net>
+# With thanks to Stu Tomlinson <stu at nosnilmot dot com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Default values to use if none are supplied in the config file.
+# User who should start the mythbackend processes
+MBE_USER="root"
+# Directory holding the mythbackend binary
+MBE_LOCATION="/usr/local/bin/"
+# Name of mythbackend binary
+MBE_PROG="mythbackend"
+# Full path to mythbackend log file
+MBE_LOGFILE="/var/log/mythtv/mythbackend.log"
+
+# Source function library.
+. /etc/init.d/functions
+
+# Source config file if available
+if [ -f "/etc/sysconfig/mythbackend" ]; then
+ . /etc/sysconfig/mythbackend
+fi
+
+test -x ${MBE_LOCATION}${MBE_PROG} || exit 0
+
+RETVAL=0
+
+#
+# See how we were called.
+#
+
+start() {
+ # Check if mythbackend is already running
+ if [ ! -f /var/lock/subsys/${MBE_PROG} ]; then
+ echo -n "Starting ${MBE_PROG}: "
+ # /usr/local/bin/mythbackend -d -l /some/log/file
+ #daemon --user ${MBE_USER} ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
+ ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/${MBE_PROG}
+ echo
+ fi
+ return $RETVAL
+}
+
+stop() {
+ echo -n "Stopping ${MBE_PROG}: "
+ killproc ${MBE_LOCATION}${MBE_PROG}
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${MBE_PROG}
+ echo
+ return $RETVAL
+}
+
+
+restart() {
+ stop
+ start
+}
+
+reload() {
+ restart
+}
+
+status_at() {
+ status ${MBE_LOCATION}${MBE_PROG}
+}
+
+case "$1" in
+start)
+ start
+ ;;
+stop)
+ stop
+ ;;
+reload|restart)
+ restart
+ ;;
+condrestart)
+ if [ -f /var/lock/subsys/${MBE_PROG} ]; then
+ restart
+ fi
+ ;;
+status)
+ status_at
+ ;;
+*)
+ echo "Usage: $0 {start|stop|restart|condrestart|status}"
+ exit 1
+esac
+
+exit $?
+exit $RETVAL
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythfrontend.lr b/abs/core/mythtv/stable-0.23/mythtv/mythfrontend.lr
new file mode 100644
index 0000000..1580533
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythfrontend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythfrontend.log {
+ copytruncate
+ daily
+ size 10M
+ missingok
+ rotate 7
+ compress
+ notifempty
+}
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythtv.install b/abs/core/mythtv/stable-0.23/mythtv/mythtv.install
new file mode 100755
index 0000000..0524f86
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythtv.install
@@ -0,0 +1,47 @@
+# arg 1: the new package version
+post_install() {
+ if [ ! -d /var/log/mythtv ]
+ then
+ mkdir -p /var/log/mythv
+ chown -R mythtv /var/log/mythtv
+ echo "---" > /var/log/mythtv/mythbackend.log
+ chown mythtv /var/log/mythtv/mythbackend.log
+ fi
+ ln -s /usr/share/mythtv/themes/defaultmenu/is.xml /usr/share/mythtv/is.xml
+}
+
+pre_upgrade() {
+ if [ ! -L /usr/share/mythtv/is.xml ]
+ then
+ mv /usr/share/mythtv/is.xml /usr/share/mythtv/is.xml.pre
+ else
+ mv /usr/share/mythtv/themes/defaultmenu/is.xml /usr/share/mythtv/themes/defaultmenu/is.xml.pre
+ fi
+}
+
+post_upgrade() {
+ if [ ! -d /var/log/mythtv ]
+ then
+ mkdir -p /var/log/mythv
+ chown -R mythtv /var/log/mythtv
+ fi
+ if [ -e /usr/share/mythtv/is.xml.pre ]
+ then
+ rm -fr /usr/share/mythtv/themes/defaultmenu/is.xml
+ mv /usr/share/mythtv/is.xml.pre /usr/share/mythtv/themes/defaultmenu/is.xml
+ ln -s /usr/share/mythtv/themes/defaultmenu/is.xml /usr/share/mythtv/is.xml
+ else
+ mv /usr/share/mythtv/themes/defaultmenu/is.xml.pre /usr/share/mythtv/themes/defaultmenu/is.xml
+ fi
+}
+
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/stable-0.23/mythtv/pretty b/abs/core/mythtv/stable-0.23/mythtv/pretty
new file mode 100755
index 0000000..7e0ab21
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/pretty
@@ -0,0 +1,9 @@
+#!/bin/bash
+if [ -f /usr/share/mythtv/contrib/user_jobs/mythlink.pl ]
+then
+ su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythlink.pl --link /myth/pretty"
+elif [ -f /usr/share/mythtv/contrib/user_jobs/mythrename.pl ]
+then
+ su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythrename.pl --link /myth/pretty"
+fi
+
diff --git a/abs/core/mythtv/stable-0.23/mythtv/smolt_jump.patch b/abs/core/mythtv/stable-0.23/mythtv/smolt_jump.patch
new file mode 100644
index 0000000..0fc452a
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/smolt_jump.patch
@@ -0,0 +1,30 @@
+Index: programs/mythfrontend/networkcontrol.cpp
+===================================================================
+--- programs/mythfrontend/networkcontrol.cpp (revision 19291)
++++ programs/mythfrontend/networkcontrol.cpp (working copy)
+@@ -83,6 +83,7 @@
+ jumpMap["zoneminderliveview"] = "ZoneMinder Live View";
+ jumpMap["zoneminderevents"] = "ZoneMinder Events";
+ jumpMap["snapshot"] = "ScreenShot";
++ jumpMap["mythsmolt"] = "MythSmolt";
+
+ // These jump point names match the (lowercased) locations from gContext
+ jumpMap["channelrecpriority"] = "Channel Recording Priorities";
+@@ -191,7 +192,7 @@
+ pthread_create(&command_thread, NULL, CommandThread, this);
+
+ gContext->addListener(this);
+-
++
+ connect(this, SIGNAL(newConnection()), this, SLOT(newConnection()));
+ }
+
+@@ -307,7 +308,7 @@
+ cs = new QTextStream(s);
+ cs->setCodec("UTF-8");
+ }
+-
++
+ if (client)
+ {
+ closedOldConn = true;
diff --git a/abs/core/mythtv/stable-0.23/mythvideo/PKGBUILD b/abs/core/mythtv/stable-0.23/mythvideo/PKGBUILD
new file mode 100644
index 0000000..3dafe6a
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythvideo/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythvideo
+pkgver=0.23
+pkgrel=29
+pkgdesc="Video playback and browsing plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'mplayer' 'perlxml' 'perl-libwww' 'perl-uri' 'perl-xml-simple' 'ffmpeg')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythvideo || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythweather/PKGBUILD b/abs/core/mythtv/stable-0.23/mythweather/PKGBUILD
new file mode 100644
index 0000000..bb92f2d
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythweather/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythweather
+pkgver=0.23
+pkgrel=30
+pkgdesc="Weather checking plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'wget' 'perl-date-manip' 'perl-xml-simple' 'perl-xml-xpath' 'perl-image-size' 'perl-datetime-format-iso8601' 'perl-soap-lite')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythweather || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythweb/PKGBUILD b/abs/core/mythtv/stable-0.23/mythweb/PKGBUILD
new file mode 100644
index 0000000..a3b581a
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythweb/PKGBUILD
@@ -0,0 +1,46 @@
+pkgname=mythweb
+pkgver=0.23
+pkgrel=29
+pkgdesc="Web interface for MythTV's backend"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'lighttpd' 'php' 'local-website')
+groups=('mythtv-extras')
+install=mythweb.install
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+DOCROOT=/data/srv/httpd/htdocs/mythweb
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ mkdir -p $startdir/pkg/$DOCROOT/{image_cache,php_sessions}
+
+# cp -r $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+# cp $startdir/src/mythplugins-$pkgver/mythweb/data/.htaccess $startdir/pkg/$DOCROOT
+ rsync -arp --exclude .svn --delete-excluded $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+ rm $startdir/pkg/$DOCROOT/README
+ chown -R http:users $startdir/pkg/$DOCROOT
+ chmod g+rw $startdir/pkg/$DOCROOT/{image_cache,php_sessions,data}
+
+}
diff --git a/abs/core/mythtv/stable-0.23/mythweb/mythweb.install b/abs/core/mythtv/stable-0.23/mythweb/mythweb.install
new file mode 100644
index 0000000..470cbd1
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythweb/mythweb.install
@@ -0,0 +1,10 @@
+post_install() {
+ echo "You must create a symlink from /home/httpd/html/mythweb/video_dir"
+ echo "to your MythTV recordings directory. Don't forget to change the"
+ echo "permissions so that the webserver can read those files and create"
+ echo "thumbnails."
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/stable-0.23/mythzoneminder/PKGBUILD b/abs/core/mythtv/stable-0.23/mythzoneminder/PKGBUILD
new file mode 100644
index 0000000..8981f9f
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythzoneminder/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythzoneminder
+pkgver=0.23
+pkgrel=29
+pkgdesc="Integrates ZoneMinder into MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'zoneminder=1.23.3')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+ cd $startdir/src/mythplugins
+ svn update
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythzoneminder || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/trunk/clean_all.sh b/abs/core/mythtv/trunk/clean_all.sh
index 1ebdc43..b56450e 100755
--- a/abs/core/mythtv/trunk/clean_all.sh
+++ b/abs/core/mythtv/trunk/clean_all.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnetvision' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
# clean up current directory
rm -f *~
diff --git a/abs/core/mythtv/trunk/morethemes/PKGBUILD b/abs/core/mythtv/trunk/morethemes/PKGBUILD
index d3aad58..c8f892e 100644
--- a/abs/core/mythtv/trunk/morethemes/PKGBUILD
+++ b/abs/core/mythtv/trunk/morethemes/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=morethemes-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Additional themes for MythTV"
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/themes
_svnmod=themes
@@ -39,11 +40,15 @@ build() {
make distclean
# configure
- ./configure --prefix=/usr || return 1
+# ./configure --prefix=/usr || return 1
+ ./configure --prefix=/usr
# build and install
. /etc/profile
- make || return 1
- make INSTALL_ROOT=$startdir/pkg install || return 1
-
+# make || return 1
+# make INSTALL_ROOT=$startdir/pkg install || return 1
+ make
+ make INSTALL_ROOT=$startdir/pkg install
+ return 0
+#### THIS PKGBUILD IS HACKED TO BUILD WITH ZERO CONTENT RIGHT NOW ####
}
diff --git a/abs/core/mythtv/trunk/mp_all.sh b/abs/core/mythtv/trunk/mp_all.sh
index f9593ff..4aefd89 100755
--- a/abs/core/mythtv/trunk/mp_all.sh
+++ b/abs/core/mythtv/trunk/mp_all.sh
@@ -1,9 +1,9 @@
#!/bin/sh
-pkgver=21495
+pkgver=23790
pkgrel=1
# NOTE: Make sure to build and install mythtv first BEFORE building anything else
-buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnetvision' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
# build and install
for i in `echo ${buildlist[@]:0}`
@@ -16,7 +16,7 @@ do
sed -i s/^pkgrel=.*/pkgrel=$pkgrel/ PKGBUILD
# make the package
- mp -f -i --holdver || exit 1
+ mp -f -i --holdver --skipinteg || exit 1
# clean up afterwards
rm -rf pkg
diff --git a/abs/core/mythtv/trunk/mytharchive/PKGBUILD b/abs/core/mythtv/trunk/mytharchive/PKGBUILD
index 75779a1..20e9904 100644
--- a/abs/core/mythtv/trunk/mytharchive/PKGBUILD
+++ b/abs/core/mythtv/trunk/mytharchive/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mytharchive-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows."
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/mythtv/trunk/mythbrowser/PKGBUILD b/abs/core/mythtv/trunk/mythbrowser/PKGBUILD
index 7495407..fdcefe0 100644
--- a/abs/core/mythtv/trunk/mythbrowser/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythbrowser/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythbrowser-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Mini web browser for MythTV"
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/mythtv/trunk/mythgallery/PKGBUILD b/abs/core/mythtv/trunk/mythgallery/PKGBUILD
index 7480178..6415b96 100644
--- a/abs/core/mythtv/trunk/mythgallery/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythgallery/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythgallery-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Image gallery plugin for MythTV"
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/mythtv/trunk/mythgame/PKGBUILD b/abs/core/mythtv/trunk/mythgame/PKGBUILD
index 8f2e582..e7d09ab 100644
--- a/abs/core/mythtv/trunk/mythgame/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythgame/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythgame-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Emulation plugin for MythTV"
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/mythtv/trunk/mythmovies/PKGBUILD b/abs/core/mythtv/trunk/mythmovies/PKGBUILD
index aca7c73..f05180c 100644
--- a/abs/core/mythtv/trunk/mythmovies/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythmovies/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythmovies-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Displays information about movies playing in the area."
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/mythtv/trunk/mythmusic/PKGBUILD b/abs/core/mythtv/trunk/mythmusic/PKGBUILD
index df6d23d..3d9f5ce 100644
--- a/abs/core/mythtv/trunk/mythmusic/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythmusic/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythmusic-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Music playing plugin for MythTV"
url="http://www.mythtv.org"
@@ -14,6 +14,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/mythtv/trunk/mythnetvision/PKGBUILD b/abs/core/mythtv/trunk/mythnetvision/PKGBUILD
new file mode 100644
index 0000000..c820ac5
--- /dev/null
+++ b/abs/core/mythtv/trunk/mythnetvision/PKGBUILD
@@ -0,0 +1,51 @@
+pkgname=mythnetvision-svn
+pkgver=23790
+pkgrel=1
+pkgdesc="Internet video plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv-svn' 'python-pycurl' 'flashplugin')
+conflicts=('mythnetvision')
+groups=('mythtv-extras-svn')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
+_svnmod=mythplugins
+
+
+build() {
+
+ svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod
+ svn revert -R $_svnmod
+
+ cd $startdir/src/$_svnmod
+
+ echo "--------------------------applying patches----------------------------------------------------"
+ for i in `echo ${patches[@]:0} `
+ do
+ echo applying $i
+ echo "-----------------------------"
+ patch -Np0 -i ${startdir}/src/$i || return 1
+ done
+ echo "--------------------------done applying patches-----------------------------------------------"
+
+ [ "$CARCH" = "i686" ] && ARCH="i686"
+ [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+ # clean up
+ make distclean
+
+ # configure
+ ./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+ --enable-mythnetvision || return 1
+
+ # build and install
+ . /etc/profile
+ make || return 1
+ make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/trunk/mythnews/PKGBUILD b/abs/core/mythtv/trunk/mythnews/PKGBUILD
index b411e08..630325c 100644
--- a/abs/core/mythtv/trunk/mythnews/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythnews/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythnews-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="News checking plugin for MythTV"
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/mythtv/trunk/myththemes/PKGBUILD b/abs/core/mythtv/trunk/myththemes/PKGBUILD
index 5d300e5..9e10ba2 100755
--- a/abs/core/mythtv/trunk/myththemes/PKGBUILD
+++ b/abs/core/mythtv/trunk/myththemes/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=myththemes-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Themes for MythTV"
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/myththemes
_svnmod=myththemes
diff --git a/abs/core/mythtv/trunk/mythtv/PKGBUILD b/abs/core/mythtv/trunk/mythtv/PKGBUILD
index db119bd..65b12db 100755
--- a/abs/core/mythtv/trunk/mythtv/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythtv/PKGBUILD
@@ -1,12 +1,12 @@
pkgname=mythtv-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="A personal video recorder for Linux"
url="http://www.mythtv.org"
license="GPL"
depends=('bash' 'mysql-clients>=5.0' 'qt' 'lame' 'lirc-utils' 'ffmpeg' \
'faad2' 'libxv' 'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883' \
- 'perl-net-upnp')
+ 'perl-net-upnp' 'libvdpau')
makedepends=('libgl' 'subversion')
conflicts=('mythtv')
replaces=()
@@ -56,7 +56,7 @@ build() {
--enable-vdpau --enable-xvmc --enable-xvmc-pro \
--enable-opengl-vsync --enable-libfaad --enable-dvb --enable-firewire \
--compile-type=release --with-bindings=perl,python \
- --enable-audio-alsa --disable-audio-jack --disable-audio-arts || return 1
+ --enable-audio-alsa --disable-audio-jack --disable-audio-pulseoutput || return 1
# build and install
. /etc/profile
@@ -66,11 +66,12 @@ build() {
# install db schema, scripts and docs
install -m0644 database/mc.sql $startdir/pkg/usr/share/mythtv/ || return 1
install -D -m0755 ../mythbackend $startdir/pkg/etc/rc.d/mythbackend || return 1
- cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
- # cp ../QUICKSTART.archlinux $startdir/pkg/usr/share/mythtv/ || return 1
+# cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
+ rsync -arp --exclude .svn --delete-excluded docs $startdir/pkg/usr/share/mythtv/ || return 1
# install contrib
- cp -r contrib $startdir/pkg/usr/share/mythtv/ || return 1
+ rsync -arp --exclude .svn --delete-excluded contrib $startdir/pkg/usr/share/mythtv/ || return 1
+ #cp -r contrib $startdir/pkg/usr/share/mythtv/ || return 1
# patch the xml LinHES style
cp -r $startdir/menu-xml/*.xml $startdir/pkg/usr/share/mythtv/themes/defaultmenu/
@@ -89,3 +90,8 @@ build() {
install -m0755 $startdir/src/pretty $startdir/pkg/etc/cron.hourly/
}
+md5sums=('7ef6de58240e7aad389a0b13d91b1cf6'
+ '2babd4b8e146a7538d18dcd55695b0be'
+ 'f735805a80b0d1180dee01f9df1b7004'
+ 'f407d6af23e74a49540755420f84fa58'
+ 'ca547c201e3dd4bf3882bebf7c648652')
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml
index f257920..ac52497 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml
@@ -1,87 +1,94 @@
<mythmenu name="HOST_SETTINGS">
<button>
- <type>MV_NETWORK_SETUP_MENU</type>
+ <type>MV_NETWORK_SETUP_MENU</type>
<text>Network Settings</text>
<action>EXEC mythinstall -s network </action>
</button>
<button>
- <type>MV_SYSTEM_SETUP_MENU</type>
- <text>System type</text>
- <action>EXEC mythinstall -s hostype </action>
+ <type>MV_NETWORK_SETUP_MENU</type>
+ <text>DDNS Settings</text>
+ <action>EXEC mythinstall -s ddns </action>
</button>
-
<button>
- <type>MV_MISC_SETUP_MENU</type>
- <text>Misc Settings</text>
- <action>EXEC mythinstall -s misc </action>
+ <type>MV_SYSTEM_SETUP_MENU</type>
+ <text>System Type</text>
+ <action>EXEC mythinstall -s hostype </action>
</button>
<button>
- <type>MV_SOFTWARE_MENU</type>
- <text>Software</text>
- <action>EXEC mythinstall -s plugins </action>
+ <type>MV_SCREENSAVER_SETUP_MENU</type>
+ <text>Screensaver Settings</text>
+ <action>EXEC mythinstall -s screensaver </action>
</button>
<button>
- <type>MV_SHUTDOWN_SETUP_MENU</type>
- <text>Shutdown settings</text>
- <action>EXEC mythinstall -s sleep </action>
+ <type>MV_IR_SETUP_MENU</type>
+ <text>Remotes</text>
+ <action>EXEC mythinstall -s ir </action>
</button>
+ <button>
+ <type>MV_MISC_SETUP_MENU</type>
+ <text>Miscellanous Settings</text>
+ <action>EXEC mythinstall -s misc </action>
+ </button>
-<button>
- <type>MV_ADVANCED_X_SETUP_MENU</type>
- <text>Display</text>
- <action>EXEC mythinstall -s advancedX</action>
-</button>
-
-<button>
- <type>MV_ADVANCED_SETUP_MENU</type>
- <text>Advanced settings</text>
- <action>EXEC mythinstall -s advanced</action>
-</button>
-
-
-<button>
- <type>MV_AUDIO_SETUP_MENU</type>
- <text>Audio settings</text>
- <action>EXEC mythinstall -s sound </action>
-</button>
+ <button>
+ <type>MV_SOFTWARE_MENU</type>
+ <text>Software</text>
+ <action>EXEC mythinstall -s plugins </action>
+ </button>
+ <button>
+ <type>MV_SHUTDOWN_SETUP_MENU</type>
+ <text>Shutdown Settings</text>
+ <action>EXEC mythinstall -s sleep </action>
+ </button>
-<button>
- <type>MV_ACCESS_SETUP_MENU</type>
- <text>Access</text>
- <action>EXEC mythinstall -s accesscontrol </action>
-</button>
+ <button>
+ <type>MV_ADVANCED_X_SETUP_MENU</type>
+ <text>Display Settings</text>
+ <action>EXEC mythinstall -s advancedX</action>
+ </button>
-<button>
- <type>MV_USER_SETUP_MENU</type>
- <text>Password </text>
- <action>EXEC mythinstall -s user </action>
-</button>
+ <button>
+ <type>MV_ADVANCED_SETUP_MENU</type>
+ <text>Advanced Settings</text>
+ <action>EXEC mythinstall -s advanced</action>
+ </button>
-<button>
- <type>MV_WEBACCESS_SETUP_MENU</type>
- <text>Web security</text>
- <action>EXEC mythinstall -s webuser </action>
-</button>
+ <button>
+ <type>MV_AUDIO_SETUP_MENU</type>
+ <text>Audio Settings</text>
+ <action>EXEC mythinstall -s sound </action>
+ </button>
+ <button>
+ <type>MV_ACCESS_SETUP_MENU</type>
+ <text>Access Control</text>
+ <action>EXEC mythinstall -s accesscontrol </action>
+ </button>
+ <button>
+ <type>MV_USER_SETUP_MENU</type>
+ <text>User Accounts</text>
+ <action>EXEC mythinstall -s user </action>
+ </button>
+ <button>
+ <type>MV_WEBACCESS_SETUP_MENU</type>
+ <text>Web Security</text>
+ <action>EXEC mythinstall -s webuser </action>
+ </button>
<!--
<button>
- <type>SETUP_MENU</type>
- <text>Settings profile manager</text>
- <action>EXEC mythinstall -t </action>
-
+ <type>SETUP_MENU</type>
+ <text>Settings Profile Manager</text>
+ <action>EXEC mythinstall -t </action>
</button>
-->
-
-
-
</mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/library.xml.patch b/abs/core/mythtv/trunk/mythtv/menu-xml/library.xml.patch
index 14cb5f9..81ea604 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/library.xml.patch
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/library.xml.patch
@@ -1,9 +1,9 @@
---- library.xml.orig 2009-03-23 18:43:18.000000000 +0000
-+++ library.xml 2009-03-23 19:52:30.000000000 +0000
-@@ -126,8 +126,7 @@
- <text>Play Online Streams</text>
- <text lang="HE">נגן מדיה מכוונת</text>
+--- library.xml.orig 2009-10-16 12:45:44.000000000 +0000
++++ library.xml 2009-10-16 17:21:44.000000000 +0000
+@@ -123,8 +123,7 @@
+ <text lang="HU">Online folyam lejátszása</text>
<description></description>
+ <description lang="DE"></description>
- <action>PLUGIN mythstream</action>
- <depends>mythstream</depends>
+ <action>MENU is.xml</action>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml
index 8bc929f..ebc848b 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml
@@ -1,36 +1,35 @@
<mythmenu name="LinHES">
- <button>
- <type>SETUP_GENERAL</type>
- <text>MythTV Configuration</text>
- <text lang="IT">Impostazioni</text>
- <text lang="ES">Configuración</text>
- <text lang="CA">Configurar</text>
- <text lang="FR">paramètres</text>
- <text lang="DE">Zubehör / Konfiguration</text>
- <text lang="DK">Tilbehør/Indstillinger</text>
- <text lang="IS">Uppsetning</text>
- <text lang="NL">Configuratie</text>
- <text lang="PT">Utensílios</text>
- <text lang="SV">Verktyg / Inställningar</text>
- <text lang="JA">設定</text>
- <text lang="FI">Oheis/Asetukset</text>
- <text lang="ZH_TW">工具/設定</text>
- <text lang="SI">Nastavitve</text>
- <text lang="ET">Utiliidid / sätted</text>
- <text lang="NB">Verktøy/Oppsett</text>
- <text lang="CZ">Pomůcky</text>
- <text lang="RU">Утилиты / Настройки</text>
- <text lang="AR">تضبيطات</text>
- <text lang="PL">Narzędzia / ustawienia</text>
- <text lang="HE">עזרים / הגדרות</text>
- <alttext lang="DE">Verschiedenes</alttext>
- <alttext lang="SV">Inställningar</alttext>
- <alttext lang="ET">Sätted</alttext>
- <alttext lang="RU">Настройки</alttext>
- <alttext lang="AR">تضبيطات</alttext>
- <action>MENU util_menu.xml</action>
- </button>
+ <button>
+ <type>SETUP_GENERAL</type>
+ <text>MythTV Configuration</text>
+ <text lang="IT">Impostazioni</text>
+ <text lang="ES">Configuración</text>
+ <text lang="DE">Zubehör / Konfiguration</text>
+ <text lang="DA">Tilbehør/Indstillinger</text>
+ <text lang="IS">Uppsetning</text>
+ <text lang="NL">Configuratie</text>
+ <text lang="PT">Utensílios</text>
+ <text lang="SV">Verktyg / Inställningar</text>
+ <text lang="JA">設~Z</text>
+ <text lang="FI">Oheis/Asetukset</text>
+ <text lang="ZH_TW">工~E/設~Z</text>
+ <text lang="SL">Nastavitve</text>
+ <text lang="ET">Utiliidid / sätted</text>
+ <text lang="RU">У~Bили~B~K / ~]а~A~B~@ойки</text>
+ <text lang="AR">تضب~Jطات</text>
+ <text lang="PL">Narz~Ydzia / ustawienia</text>
+ <text lang="HE">ע~Vר~Y~] / ~T~R~Sר~Uת</text>
+ <text lang="HU">Eszközök / Beállítások</text>
+ <alttext lang="DE">Verschiedenes</alttext>
+ <alttext lang="SV">Inställningar</alttext>
+ <alttext lang="ET">Sätted</alttext>
+ <alttext lang="RU">~]а~A~B~@ойки</alttext>
+ <alttext lang="AR">تضب~Jطات</alttext>
+ <description>Configure MythTV and plugins</description>
+ <description lang="DE">MythTV und Plugins konfigurieren</description>
+ <action>MENU util_menu.xml</action>
+ </button>
<button>
<type>LINHES_SETUP</type>
@@ -49,6 +48,12 @@
<text>Restore LinHES</text>
<action>MENU mythrestore.xml</action>
</button>
-
-</mythmenu>
+<!--#Check for updates-->
+ <button>
+ <type>UPGRADE</type>
+ <text>Upgrade LinHES</text>
+ <action>MENU update.xml</action>
+ </button>
+<!--#Check for updates-->
+</mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch b/abs/core/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch
index 0ec8143..74ace7b 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch
@@ -1,16 +1,13 @@
---- mainmenu.xml.orig 2009-03-23 18:43:18.000000000 +0000
-+++ mainmenu.xml 2009-03-23 19:47:20.000000000 +0000
-@@ -163,35 +163,9 @@
+--- mainmenu.xml.orig 2010-03-24 13:11:27.223119163 -0400
++++ mainmenu.xml 2010-03-24 14:18:33.922746799 -0400
+@@ -151,32 +151,9 @@
<button>
<type>MENU_UTILITIES_SETUP</type>
- <text>Utilities / Setup</text>
- <text lang="IT">Impostazioni</text>
- <text lang="ES">Configuración</text>
-- <text lang="CS">Configurar</text>
-- <text lang="FR">paramètres</text>
- <text lang="DE">Zubehör / Konfiguration</text>
-- <text lang="DA">Tilbehør/Indstillinger</text>
- <text lang="IS">Uppsetning</text>
- <text lang="NL">Configuratie</text>
- <text lang="PT">Utensílios</text>
@@ -20,18 +17,18 @@
- <text lang="ZH_TW">工具/設定</text>
- <text lang="SL">Nastavitve</text>
- <text lang="ET">Utiliidid / sätted</text>
-- <text lang="NB">Verktøy/Oppsett</text>
-- <text lang="CS">Pomůcky</text>
- <text lang="RU">Утилиты / Настройки</text>
- <text lang="AR">تضبيطات</text>
- <text lang="PL">Narzędzia / ustawienia</text>
- <text lang="HE">עזרים / הגדרות</text>
+- <text lang="HU">Eszközök / Beállítások</text>
- <alttext lang="DE">Verschiedenes</alttext>
- <alttext lang="SV">Inställningar</alttext>
- <alttext lang="ET">Sätted</alttext>
- <alttext lang="RU">Настройки</alttext>
- <alttext lang="AR">تضبيطات</alttext>
- <description>Configure MythTV and plugins</description>
+- <description lang="DE">MythTV und Plugins konfigurieren</description>
- <action>MENU util_menu.xml</action>
+ <text>Service Menu</text>
+ <description>LinHES Service Menu</description>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/mythbackup.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/mythbackup.xml
index 656860d..5914b33 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/mythbackup.xml
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/mythbackup.xml
@@ -15,6 +15,6 @@
<button>
<type>BACKUP</type>
<text>No</text>
- <action>MENU linhes.xml</action>
+ <action>UPMENU</action>
</button>
</mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/mythrestore.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/mythrestore.xml
index 05cb0a7..8f5c285 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/mythrestore.xml
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/mythrestore.xml
@@ -15,6 +15,6 @@
<button>
<type>BACKUP</type>
<text>No</text>
- <action>MENU linhes.xml</action>
+ <action>UPMENU</action>
</button>
</mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/update.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/update.xml
new file mode 100644
index 0000000..5b28833
--- /dev/null
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/update.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Check for updates?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update.sh</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/update2.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/update2.xml
new file mode 100644
index 0000000..2ab82ea
--- /dev/null
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/update2.xml
@@ -0,0 +1,26 @@
+<mythmenu name="LinHES">
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Perform updates?</text>
+ <action>NONE</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>Yes</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update2.sh</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>No</text>
+ <action>UPMENU</action>
+ </button>
+
+ <button>
+ <type>UPGRADE</type>
+ <text>View files to be upgraded.</text>
+ <action>EXEC sudo /usr/LH/bin/linhes_update3.sh</action>
+ </button>
+</mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/pretty b/abs/core/mythtv/trunk/mythtv/pretty
index 1cfc57b..7e0ab21 100755
--- a/abs/core/mythtv/trunk/mythtv/pretty
+++ b/abs/core/mythtv/trunk/mythtv/pretty
@@ -1,2 +1,9 @@
#!/bin/bash
-su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythrename.pl --link /myth/pretty"
+if [ -f /usr/share/mythtv/contrib/user_jobs/mythlink.pl ]
+then
+ su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythlink.pl --link /myth/pretty"
+elif [ -f /usr/share/mythtv/contrib/user_jobs/mythrename.pl ]
+then
+ su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythrename.pl --link /myth/pretty"
+fi
+
diff --git a/abs/core/mythtv/trunk/mythvideo/PKGBUILD b/abs/core/mythtv/trunk/mythvideo/PKGBUILD
index 797b641..951a427 100644
--- a/abs/core/mythtv/trunk/mythvideo/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythvideo/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythvideo-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Video playback and browsing plugin for MythTV"
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/mythtv/trunk/mythweather/PKGBUILD b/abs/core/mythtv/trunk/mythweather/PKGBUILD
index 0655236..1bc8430 100644
--- a/abs/core/mythtv/trunk/mythweather/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythweather/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythweather-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Weather checking plugin for MythTV"
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/mythtv/trunk/mythweb/PKGBUILD b/abs/core/mythtv/trunk/mythweb/PKGBUILD
index 8f472b7..dedfcf5 100644
--- a/abs/core/mythtv/trunk/mythweb/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythweb/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythweb-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Web interface for MythTV's backend"
url="http://www.mythtv.org"
@@ -13,6 +13,7 @@ install=mythweb.install
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
@@ -39,9 +40,10 @@ build() {
mkdir -p $startdir/pkg/$DOCROOT/{image_cache,php_sessions}
- cp -r $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+# cp -r $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
# cp $startdir/src/mythplugins-$pkgver/mythweb/data/.htaccess $startdir/pkg/$DOCROOT
- rm $startdir/pkg/srv/$DOCROOT/README
+ rsync -arp --exclude .svn --delete-excluded $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+ rm $startdir/pkg/$DOCROOT/README
chown -R http:users $startdir/pkg/$DOCROOT
chmod g+rw $startdir/pkg/$DOCROOT/{image_cache,php_sessions,data}
diff --git a/abs/core/mythtv/trunk/mythzoneminder/PKGBUILD b/abs/core/mythtv/trunk/mythzoneminder/PKGBUILD
index 7ace30f..038007b 100644
--- a/abs/core/mythtv/trunk/mythzoneminder/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythzoneminder/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythzoneminder-svn
-pkgver=21495
+pkgver=23790
pkgrel=1
pkgdesc="Integrates ZoneMinder into MythTV"
url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
patches=()
source=(`echo ${patches[@]:0}`)
+
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core/nano/PKGBUILD b/abs/core/nano/PKGBUILD
index 4dcf3bc..6ecfd29 100644
--- a/abs/core/nano/PKGBUILD
+++ b/abs/core/nano/PKGBUILD
@@ -1,17 +1,16 @@
# $Id: PKGBUILD 10350 2008-08-27 14:18:15Z andyrtr $
# Maintainer: Judd <judd@archlinux.org>
pkgname=nano
-pkgver=2.0.8
-pkgrel=12
+pkgver=2.2.4
+pkgrel=1
pkgdesc="Pico editor clone with enhancements"
arch=('i686' 'x86_64')
license=('GPL')
url="http://www.nano-editor.org"
groups=('base')
depends=('glibc' 'ncurses')
-source=(http://www.nano-editor.org/dist/v2.0/nano-${pkgver}.tar.gz)
+source=(http://www.nano-editor.org/dist/v2.2/nano-${pkgver}.tar.gz)
backup=(etc/nanorc)
-md5sums=('fcb2a26285921458b6fe381c2802b1a8')
install=nano.install
build() {
@@ -23,3 +22,4 @@ build() {
rm -f ${pkgdir}/usr/share/info/dir
}
+md5sums=('6304308afb1f7ef4a5e93eb99206632a')
diff --git a/abs/core/ntp/PKGBUILD b/abs/core/ntp/PKGBUILD
index fc568b0..83e77ad 100755
--- a/abs/core/ntp/PKGBUILD
+++ b/abs/core/ntp/PKGBUILD
@@ -1,15 +1,14 @@
pkgname=ntp
-pkgver=4.2.4p5
-pkgrel=3
+pkgver=4.2.6p2
+pkgrel=1
pkgdesc="NTP (Network Time Protocol) tries to keep servers in sync"
arch=(i686 x86_64)
url="http://www.ntp.org/"
depends=('openssl' 'readline' )
backup=('etc/ntp.conf' 'conf.d/ntp-client.conf')
-source=(http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.4p5.tar.gz \
+source=(http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-${pkgver}.tar.gz \
ntp.conf ntp-client.conf ntpd ntpdate )
-
build() {
cd $startdir/src/$pkgname-$pkgver
./configure --prefix=/usr
@@ -24,3 +23,8 @@ build() {
install -D -m644 $startdir/ntp.conf $startdir/pkg/etc/ntp.conf
}
+md5sums=('cf73cd85f248232c62f8029e6eb05938'
+ '833c9d699765bd60825b5713670be460'
+ '25eb8d2176fe642b488e4b9fa03179ac'
+ 'b1a1798b9cd1907d65a7fc794294d6ce'
+ '140855352baeb89da0c6c1c475c18b57')
diff --git a/abs/core/nvidia-173xx-utils/PKGBUILD b/abs/core/nvidia-173xx-utils/PKGBUILD
new file mode 100644
index 0000000..042c1ee
--- /dev/null
+++ b/abs/core/nvidia-173xx-utils/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 69361 2010-02-20 11:24:49Z tpowa $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=nvidia-173xx-utils
+pkgver=173.14.25
+pkgrel=1
+pkgdesc="NVIDIA drivers utilities and libraries, 173xx branch."
+arch=('i686' 'x86_64')
+[ "$CARCH" = "i686" ] && ARCH=x86
+[ "$CARCH" = "x86_64" ] && ARCH=x86_64
+url="http://www.nvidia.com/"
+depends=('xorg-server')
+optdepends=('gtk2: nvidia-settings' 'pkgconfig: nvidia-xconfig')
+conflicts=('libgl')
+provides=('libgl')
+license=('custom')
+install=nvidia.install
+options=(!strip)
+source=("http://download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run")
+
+build() {
+ cd $srcdir
+ sh NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run --extract-only
+ cd NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/
+
+ mkdir -p $pkgdir/usr/{lib,bin,share/applications,share/pixmaps,share/man/man1}
+ mkdir -p $pkgdir/usr/lib/xorg/modules/{extensions,drivers}
+ mkdir -p $pkgdir/usr/share/licenses/nvidia-173xx/
+
+ install lib/{libGLcore,libGL,libnvidia-cfg,tls/libnvidia-tls}.so.${pkgver} \
+ $pkgdir/usr/lib/ || return 1
+ install -m644 share/man/man1/* $pkgdir/usr/share/man/man1/ || return 1
+ rm $pkgdir/usr/share/man/man1/nvidia-installer.1.gz || return 1
+ install X11R6/lib/libXv* $pkgdir/usr/lib/ || return 1
+ install -m644 share/applications/nvidia-settings.desktop $pkgdir/usr/share/applications/ || return 1
+ # fix nvidia .desktop file
+ sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $pkgdir/usr/share/applications/nvidia-settings.desktop
+ install -m644 share/pixmaps/nvidia-settings.png $pkgdir/usr/share/pixmaps/ || return 1
+ install X11R6/lib/modules/drivers/nvidia_drv.so $pkgdir/usr/lib/xorg/modules/drivers || return 1
+ install X11R6/lib/modules/extensions/libglx.so.$pkgver $pkgdir/usr/lib/xorg/modules/extensions || return 1
+ install -m755 bin/nvidia-{settings,xconfig,bug-report.sh} $pkgdir/usr/bin/ || return 1
+ cd $pkgdir/usr/lib/
+ ln -s libGL.so.$pkgver libGL.so || return 1
+ ln -s libGL.so.$pkgver libGL.so.1 || return 1
+ ln -s libGLcore.so.$pkgver libGLcore.so.1 || return 1
+ ln -s libnvidia-cfg.so.$pkgver libnvidia-cfg.so.1 || return 1
+ ln -s libnvidia-tls.so.$pkgver libnvidia-tls.so.1 || return 1
+ ln -s libXvMCNVIDIA.so.$pkgver libXvMCNVIDIA_dynamic.so.1 || return 1
+
+ cd $pkgdir/usr/lib/xorg/modules/extensions
+ ln -s libglx.so.$pkgver libglx.so || return 1
+
+ install -m644 $srcdir/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/LICENSE $pkgdir/usr/share/licenses/nvidia-173xx/ || return 1
+ ln -s nvidia-173xx $startdir/pkg/usr/share/licenses/nvidia-173xx-utils || return 1
+
+ install -D -m644 $srcdir/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/share/doc/README.txt $pkgdir/usr/share/doc/nvidia-173xx/README || return 1
+
+ find $pkgdir/usr -type d -exec chmod 755 {} \;
+}
+
+
+md5sums=('397bac51f760505ea57e863c1db9c572')
diff --git a/abs/core/nvidia-173xx-utils/nvidia.install b/abs/core/nvidia-173xx-utils/nvidia.install
new file mode 100644
index 0000000..0a878a7
--- /dev/null
+++ b/abs/core/nvidia-173xx-utils/nvidia.install
@@ -0,0 +1,6 @@
+post_install() {
+ echo By using this package you accept the NVIDIA license,
+ echo which has been installed in /usr/share/licenses/nvidia/LICENSE
+ echo If you do not accept this license, you must remove the package immediately.
+ echo Dont forget to update your /etc/X11/xorg.conf
+}
diff --git a/abs/core/nvidia-173xx-utils/supported-cards.txt b/abs/core/nvidia-173xx-utils/supported-cards.txt
new file mode 100644
index 0000000..d4f26ea
--- /dev/null
+++ b/abs/core/nvidia-173xx-utils/supported-cards.txt
@@ -0,0 +1,236 @@
+Archlinux currently manages three branches of the NVIDIA binary driver:
+
+nvidia (latest nvidia release)
+nvidia-96xx (96xx legacy branch)
+nvidia-71xx (71xx legacy branch)
+
+This excerpt from the NVIDIA 1.0.9746 README lists the supported devices
+for each of those:
+
+______________________________________________________________________________
+
+Appendix A. Supported NVIDIA Graphics Chips
+______________________________________________________________________________
+
+For the most complete and accurate listing of supported GPUs, please see the
+Supported Products List, available from the NVIDIA Linux x86 Graphics Driver
+download page. Please go to http://www.nvidia.com/object/unix.html, follow the
+Archive link under the Linux x86 heading, follow the link for the 1.0-9746
+driver, and then go to the Supported Products List.
+
+
+ NVIDIA chip name Device PCI ID
+ ---------------------------------- ----------------------------------
+ GeForce 6800 Ultra 0x0040
+ GeForce 6800 0x0041
+ GeForce 6800 XE 0x0043
+ GeForce 6800 XT 0x0044
+ GeForce 6800 GT 0x0045
+ GeForce 6800 GT 0x0046
+ GeForce 6800 GS 0x0047
+ GeForce 6800 XT 0x0048
+ Quadro FX 4000 0x004E
+ GeForce 7800 GTX 0x0090
+ GeForce 7800 GTX 0x0091
+ GeForce 7800 GT 0x0092
+ GeForce 7800 GS 0x0093
+ GeForce Go 7800 0x0098
+ GeForce Go 7800 GTX 0x0099
+ Quadro FX 4500 0x009D
+ GeForce 6800 GS 0x00C0
+ GeForce 6800 0x00C1
+ GeForce 6800 LE 0x00C2
+ GeForce 6800 XT 0x00C3
+ GeForce Go 6800 0x00C8
+ GeForce Go 6800 Ultra 0x00C9
+ Quadro FX Go1400 0x00CC
+ Quadro FX 3450/4000 SDI 0x00CD
+ Quadro FX 1400 0x00CE
+ GeForce 6800 Ultra/GeForce 6800 0x00F0
+ GeForce 6600 GT 0x00F1
+ GeForce 6600 0x00F2
+ GeForce 6200 0x00F3
+ GeForce 6600 LE 0x00F4
+ GeForce 7800 GS 0x00F5
+ GeForce 6800 GS 0x00F6
+ Quadro FX 3400/4400 0x00F8
+ GeForce 6800 Ultra 0x00F9
+ GeForce PCX 5750 0x00FA
+ GeForce PCX 5900 0x00FB
+ GeForce PCX 5300/Quadro FX 330 0x00FC
+ Quadro NVS 280 PCI-E/Quadro FX 330 0x00FD
+ Quadro FX 1300 0x00FE
+ GeForce PCX 4300 0x00FF
+ GeForce 6600 GT 0x0140
+ GeForce 6600 0x0141
+ GeForce 6600 LE 0x0142
+ GeForce 6600 VE 0x0143
+ GeForce Go 6600 0x0144
+ GeForce 6610 XL 0x0145
+ GeForce Go 6600 TE/6200 TE 0x0146
+ GeForce 6700 XL 0x0147
+ GeForce Go 6600 0x0148
+ GeForce Go 6600 GT 0x0149
+ Quadro NVS 440 0x014A
+ Quadro FX 550 0x014C
+ Quadro FX 540 0x014E
+ GeForce 6200 0x014F
+ GeForce 6500 0x0160
+ GeForce 6200 TurboCache(TM) 0x0161
+ GeForce 6200 LE 0x0163
+ GeForce Go 6200 0x0164
+ Quadro NVS 285 0x0165
+ GeForce Go 6400 0x0166
+ GeForce Go 6200 0x0167
+ GeForce Go 6400 0x0168
+ GeForce 8800 GTX 0x0191
+ GeForce 8800 GTS 0x0193
+ GeForce 7300 LE 0x01D1
+ GeForce 7300 SE 0x01D3
+ Quadro NVS 110M/GeForce Go 7300 0x01D7
+ GeForce Go 7400 0x01D8
+ Quadro NVS 110M 0x01DA
+ Quadro NVS 120M 0x01DB
+ Quadro FX 350M 0x01DC
+ Quadro FX 350 0x01DE
+ GeForce 7300 GS 0x01DF
+ GeForce 6800 0x0211
+ GeForce 6800 LE 0x0212
+ GeForce 6800 GT 0x0215
+ GeForce 6800 XT 0x0218
+ GeForce 6200 0x0221
+ GeForce 6150 0x0240
+ GeForce 6150 LE 0x0241
+ GeForce 6100 0x0242
+ GeForce Go 6100 0x0247
+ GeForce 7900 GTX 0x0290
+ GeForce 7900 GT/GTO 0x0291
+ GeForce 7900 GS 0x0292
+ GeForce 7950 GX2 0x0294
+ GeForce Go 7900 GS 0x0298
+ GeForce Go 7900 GTX 0x0299
+ Quadro FX 2500M 0x029A
+ Quadro FX 1500M 0x029B
+ Quadro FX 5500 0x029C
+ Quadro FX 3500M 0x029D
+ Quadro FX 1500 0x029E
+ Quadro FX 4500 X2 0x029F
+ GeForce 7600 GS 0x02E1
+ GeForce FX 5800 Ultra 0x0301
+ GeForce FX 5800 0x0302
+ Quadro FX 2000 0x0308
+ Quadro FX 1000 0x0309
+ GeForce FX 5600 Ultra 0x0311
+ GeForce FX 5600 0x0312
+ GeForce FX 5600XT 0x0314
+ GeForce FX Go5600 0x031A
+ GeForce FX Go5650 0x031B
+ Quadro FX Go700 0x031C
+ GeForce FX 5200 0x0320
+ GeForce FX 5200 Ultra 0x0321
+ GeForce FX 5200 0x0322
+ GeForce FX 5200LE 0x0323
+ GeForce FX Go5200 0x0324
+ GeForce FX Go5250 0x0325
+ GeForce FX 5500 0x0326
+ GeForce FX 5100 0x0327
+ GeForce FX Go5200 32M/64M 0x0328
+ Quadro NVS 55/280 PCI 0x032A
+ Quadro FX 500/FX 600 0x032B
+ GeForce FX Go53xx 0x032C
+ GeForce FX Go5100 0x032D
+ GeForce FX 5900 Ultra 0x0330
+ GeForce FX 5900 0x0331
+ GeForce FX 5900XT 0x0332
+ GeForce FX 5950 Ultra 0x0333
+ GeForce FX 5900ZT 0x0334
+ Quadro FX 3000 0x0338
+ Quadro FX 700 0x033F
+ GeForce FX 5700 Ultra 0x0341
+ GeForce FX 5700 0x0342
+ GeForce FX 5700LE 0x0343
+ GeForce FX 5700VE 0x0344
+ GeForce FX Go5700 0x0347
+ GeForce FX Go5700 0x0348
+ Quadro FX Go1000 0x034C
+ Quadro FX 1100 0x034E
+ GeForce 7600 GT 0x0391
+ GeForce 7600 GS 0x0392
+ GeForce 7300 GT 0x0393
+ GeForce Go 7600 0x0398
+ Quadro FX 560 0x039E
+
+
+Below are the legacy GPUs that are no longer supported in the unified driver.
+These GPUs will continue to be maintained through the special legacy NVIDIA
+GPU driver releases.
+
+The 1.0-96xx driver supports the following set of GPUs:
+
+
+ NVIDIA chip name Device PCI ID
+ ---------------------------------- ----------------------------------
+ GeForce2 MX/MX 400 0x0110
+ GeForce2 MX 100/200 0x0111
+ GeForce2 Go 0x0112
+ Quadro2 MXR/EX/Go 0x0113
+ GeForce4 MX 460 0x0170
+ GeForce4 MX 440 0x0171
+ GeForce4 MX 420 0x0172
+ GeForce4 MX 440-SE 0x0173
+ GeForce4 440 Go 0x0174
+ GeForce4 420 Go 0x0175
+ GeForce4 420 Go 32M 0x0176
+ GeForce4 460 Go 0x0177
+ Quadro4 550 XGL 0x0178
+ GeForce4 440 Go 64M 0x0179
+ Quadro NVS 0x017A
+ Quadro4 500 GoGL 0x017C
+ GeForce4 410 Go 16M 0x017D
+ GeForce4 MX 440 with AGP8X 0x0181
+ GeForce4 MX 440SE with AGP8X 0x0182
+ GeForce4 MX 420 with AGP8X 0x0183
+ GeForce4 MX 4000 0x0185
+ Quadro4 580 XGL 0x0188
+ Quadro NVS 280 SD 0x018A
+ Quadro4 380 XGL 0x018B
+ Quadro NVS 50 PCI 0x018C
+ GeForce2 Integrated GPU 0x01A0
+ GeForce4 MX Integrated GPU 0x01F0
+ GeForce3 0x0200
+ GeForce3 Ti 200 0x0201
+ GeForce3 Ti 500 0x0202
+ Quadro DCC 0x0203
+ GeForce4 Ti 4600 0x0250
+ GeForce4 Ti 4400 0x0251
+ GeForce4 Ti 4200 0x0253
+ Quadro4 900 XGL 0x0258
+ Quadro4 750 XGL 0x0259
+ Quadro4 700 XGL 0x025B
+ GeForce4 Ti 4800 0x0280
+ GeForce4 Ti 4200 with AGP8X 0x0281
+ GeForce4 Ti 4800 SE 0x0282
+ GeForce4 4200 Go 0x0286
+ Quadro4 980 XGL 0x0288
+ Quadro4 780 XGL 0x0289
+ Quadro4 700 GoGL 0x028C
+
+
+The 1.0-71xx driver supports the following set of GPUs:
+
+
+ NVIDIA chip name Device PCI ID
+ ---------------------------------- ----------------------------------
+ RIVA TNT 0x0020
+ RIVA TNT2/TNT2 Pro 0x0028
+ RIVA TNT2 Ultra 0x0029
+ Vanta/Vanta LT 0x002C
+ RIVA TNT2 Model 64/Model 64 Pro 0x002D
+ Aladdin TNT2 0x00A0
+ GeForce 256 0x0100
+ GeForce DDR 0x0101
+ Quadro 0x0103
+ GeForce2 GTS/GeForce2 Pro 0x0150
+ GeForce2 Ti 0x0151
+ GeForce2 Ultra 0x0152
+ Quadro2 Pro 0x0153
diff --git a/abs/core/nvidia-173xx/PKGBUILD b/abs/core/nvidia-173xx/PKGBUILD
new file mode 100644
index 0000000..845e606
--- /dev/null
+++ b/abs/core/nvidia-173xx/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 69360 2010-02-20 11:24:15Z tpowa $
+# Maintainer : Thomas Baechler <thomas@archlinux.org>
+
+pkgname=nvidia-173xx
+pkgver=173.14.25
+_kernver='2.6.28-LinHES'
+
+pkgrel=1
+pkgdesc="NVIDIA drivers for kernel26, 173xx branch."
+arch=('i686' 'x86_64')
+[ "$CARCH" = "i686" ] && ARCH=x86
+[ "$CARCH" = "x86_64" ] && ARCH=x86_64
+url="http://www.nvidia.com/"
+depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-173xx-utils')
+makedepends=('kernel-headers>=2.6.28' 'kernel-headers<2.6.29')
+conflicts=('nvidia' 'nvidia-173xx')
+license=('custom')
+install=nvidia.install
+source=("http://download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run")
+
+build() {
+ cd $srcdir
+ sh NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run --extract-only
+ cd NVIDIA-Linux-$ARCH-${pkgver}-pkg0
+ cd usr/src/nv/
+ ln -s Makefile.kbuild Makefile
+ make SYSSRC=/lib/modules/${_kernver}/build module || return 1
+
+ mkdir -p $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/
+ install -m644 nvidia.ko $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/
+
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/nvidia.install
+}
+md5sums=('397bac51f760505ea57e863c1db9c572')
diff --git a/abs/core/nvidia-173xx/nvidia-96.43.11-2.6.30.patch b/abs/core/nvidia-173xx/nvidia-96.43.11-2.6.30.patch
new file mode 100644
index 0000000..44d44fd
--- /dev/null
+++ b/abs/core/nvidia-173xx/nvidia-96.43.11-2.6.30.patch
@@ -0,0 +1,103 @@
+--- usr/src/nv/nv.c.orig
++++ usr/src/nv/nv.c
+@@ -15,6 +15,7 @@
+ #include "nv_compiler.h"
+ #include "os-agp.h"
+ #include "nv-vm.h"
++#include <linux/version.h>
+
+ #ifdef MODULE_ALIAS_CHARDEV_MAJOR
+ MODULE_ALIAS_CHARDEV_MAJOR(NV_MAJOR_DEVICE_NUMBER);
+@@ -499,10 +500,12 @@
+ * Set the module owner to ensure that the reference
+ * count reflects accesses to the proc files.
+ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ proc_nvidia->owner = THIS_MODULE;
+ proc_nvidia_cards->owner = THIS_MODULE;
+ proc_nvidia_warnings->owner = THIS_MODULE;
+
++#endif
+ for (j = 0; j < num_nv_devices; j++)
+ {
+ nvl = &nv_linux_devices[j];
+@@ -521,7 +524,9 @@
+
+ entry->data = nv;
+ entry->read_proc = nv_kern_read_cardinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+
+ if (nvos_find_agp_capability(dev)) {
+ /*
+@@ -534,7 +539,9 @@
+ goto failed;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+ proc_nvidia_agp = entry;
+
+ entry = create_proc_entry("status", flags, proc_nvidia_agp);
+@@ -545,7 +552,9 @@
+
+ entry->data = nv;
+ entry->read_proc = nv_kern_read_status;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+
+ entry = create_proc_entry("host-bridge", flags, proc_nvidia_agp);
+ if (!entry) {
+@@ -555,8 +564,9 @@
+
+ entry->data = NULL;
+ entry->read_proc = nv_kern_read_agpinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
+-
++#endif
+ entry = create_proc_entry("card", flags, proc_nvidia_agp);
+ if (!entry) {
+ NV_PCI_DEV_PUT(dev);
+@@ -565,7 +575,9 @@
+
+ entry->data = nv;
+ entry->read_proc = nv_kern_read_agpinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+ }
+
+ NV_PCI_DEV_PUT(dev);
+@@ -576,14 +588,18 @@
+ goto failed;
+
+ entry->read_proc = nv_kern_read_version;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+
+ entry = create_proc_entry("registry", flags, proc_nvidia);
+ if (!entry)
+ goto failed;
+
+ entry->read_proc = nv_kern_read_registry;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+
+ return;
+
+@@ -610,7 +626,9 @@
+
+ entry->data = (void *)message;
+ entry->read_proc = nv_kern_read_warning;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+ #endif
+ }
+
diff --git a/abs/core/nvidia-173xx/nvidia.install b/abs/core/nvidia-173xx/nvidia.install
new file mode 100644
index 0000000..ab86ea2
--- /dev/null
+++ b/abs/core/nvidia-173xx/nvidia.install
@@ -0,0 +1,14 @@
+post_install() {
+ KERNEL_VERSION='2.6.28-LinHES'
+ depmod $KERNEL_VERSION
+}
+
+post_upgrade() {
+ post_install
+ rmmod nvidia || echo 'In order to use the new nvidia module, exit Xserver and unload it manually.'
+}
+
+post_remove() {
+ KERNEL_VERSION='2.6.28-LinHES'
+ depmod $KERNEL_VERSION
+}
diff --git a/abs/core/nvidia-71xx-utils/PKGBUILD b/abs/core/nvidia-71xx-utils/PKGBUILD
index 9522ff8..aa29a73 100644
--- a/abs/core/nvidia-71xx-utils/PKGBUILD
+++ b/abs/core/nvidia-71xx-utils/PKGBUILD
@@ -3,7 +3,7 @@
# Contributor: James Rayner <iphitus@gmail.com>
pkgname=nvidia-71xx-utils
-pkgver=71.86.09
+pkgver=71.86.13
pkgrel=1
pkgdesc="NVIDIA legacy drivers utilities and libraries, 71xx branch."
arch=(i686 x86_64)
@@ -20,10 +20,6 @@ install=nvidia-71xx.install
source=(http://us.download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run \
supported-cards.txt)
options=(docs !strip)
-md5sums=('51ce70e2ba967a2bad1cf01ce25c7f76'
- '6363d7e494d33729609540088e33e73f')
-[ "$CARCH" = "x86_64" ] && md5sums=('205599549ddd6fadecfbc1adb090dfe2'
- '6363d7e494d33729609540088e33e73f')
build()
{
@@ -61,3 +57,5 @@ build()
find $startdir/pkg/usr -type d -exec chmod 755 {} \;
# phew :)
}
+md5sums=('e058328595aaad8558a58067d9580bb6'
+ '6363d7e494d33729609540088e33e73f')
diff --git a/abs/core/nvidia-71xx/PKGBUILD b/abs/core/nvidia-71xx/PKGBUILD
index 318b798..fcc09d8 100644
--- a/abs/core/nvidia-71xx/PKGBUILD
+++ b/abs/core/nvidia-71xx/PKGBUILD
@@ -1,23 +1,20 @@
# Contributor : Alessandro Sagratini <ale_sagra@hotmail.com>
pkgname=nvidia-71xx
-pkgver=71.86.09
+pkgver=71.86.13
_kernver='2.6.28-LinHES'
-pkgrel=3
+pkgrel=1
pkgdesc="NVIDIA legacy drivers for kernel26-ice, 71xx branch"
arch=(i686 x86_64)
[ "$CARCH" = "i686" ] && ARCH=x86
[ "$CARCH" = "x86_64" ] && ARCH=x86_64
url="http://www.nvidia.com/"
-depends=('nvidia-71xx-utils' 'kernel26' 'vdpinfo-71xx')
+depends=('nvidia-71xx-utils' 'kernel26' 'vdpauinfo-legacy')
conflicts=('nvidia' 'nvidia-96xx')
license=('custom')
source=(http://us.download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run
NVIDIA_kernel-96.43.05-2290218.diff.txt)
install="nvidia-71xx.install"
-md5sums=('51ce70e2ba967a2bad1cf01ce25c7f76')
-[ "$CARCH" = "x86_64" ] && md5sums=('9d102e8a6a1746423f0e0a231df63eeb'
- 'f2d9c8605a0f655b3c5c9b2434b9dccd')
build() {
cd $startdir/src
@@ -39,3 +36,5 @@ build() {
sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
}
+md5sums=('e058328595aaad8558a58067d9580bb6'
+ 'a238b659c665036d1281ab0f3c567d8e')
diff --git a/abs/core/nvidia-96xx-utils/PKGBUILD b/abs/core/nvidia-96xx-utils/PKGBUILD
index 749dc08..7442a21 100644
--- a/abs/core/nvidia-96xx-utils/PKGBUILD
+++ b/abs/core/nvidia-96xx-utils/PKGBUILD
@@ -1,65 +1,63 @@
-# $Id: PKGBUILD 18827 2008-11-09 14:01:28Z jgc $
-# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
-# Contributor: James Rayner <iphitus@gmail.com>
+# $Id: PKGBUILD 69361 2010-02-20 11:24:49Z tpowa $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
pkgname=nvidia-96xx-utils
-pkgver=96.43.09
+pkgver=96.43.16
pkgrel=1
-pkgdesc="NVIDIA legacy drivers utilities and libraries, 96xx branch."
-arch=(i686 x86_64)
-license=('custom')
+pkgdesc="NVIDIA drivers utilities and libraries, 96xx branch."
+arch=('i686' 'x86_64')
[ "$CARCH" = "i686" ] && ARCH=x86
[ "$CARCH" = "x86_64" ] && ARCH=x86_64
url="http://www.nvidia.com/"
depends=('xorg-server')
-conflicts=('libgl' 'libgl-dri' 'ati-fglrx-utils' 'nvidia-utils' \
- 'nvidia-71xx-utils' 'nvidia-legacy-utils')
+optdepends=('gtk2: nvidia-settings' 'pkgconfig: nvidia-xconfig')
+conflicts=('libgl')
provides=('libgl')
-install=nvidia-96xx.install
-source=(http://download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run \
- supported-cards.txt)
-md5sums=('758c739114b81ea2cb7da7c22ab80a7e'
- '6363d7e494d33729609540088e33e73f')
-[ "$CARCH" = "x86_64" ] && md5sums=('c03bd2469292d91dde8767af1418c4e1'
- '6363d7e494d33729609540088e33e73f')
-options=(docs !strip)
+license=('custom')
+install=nvidia.install
+options=(!strip)
+source=("http://download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run")
+md5sums=('7479b25c747e29af95b9ccf06f43fbf9')
+[ "$CARCH" = "x86_64" ] && md5sums=('73e226d4ee0996b6df4bdf44cc1fc6f5')
+
+build() {
+ cd $srcdir
+ sh NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run --extract-only
+ cd NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/
+
+ mkdir -p $pkgdir/usr/{lib,bin,share/applications,share/pixmaps,share/man/man1}
+ mkdir -p $pkgdir/usr/lib/xorg/modules/{extensions,drivers}
+ mkdir -p $pkgdir/usr/share/licenses/nvidia-96xx/
-build()
-{
- # override nvida install routine and do it the long way.
- cd $startdir/src/
- sh NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run --extract-only
- cd NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/
+ install lib/{libGLcore,libGL,libnvidia-cfg,tls/libnvidia-tls}.so.${pkgver} \
+ $pkgdir/usr/lib/ || return 1
+ install -m644 share/man/man1/* $pkgdir/usr/share/man/man1/ || return 1
+ rm $pkgdir/usr/share/man/man1/nvidia-installer.1.gz || return 1
+ install X11R6/lib/libXv* $pkgdir/usr/lib/ || return 1
+ install -m644 share/applications/nvidia-settings.desktop $pkgdir/usr/share/applications/ || return 1
+ # fix nvidia .desktop file
+ sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $pkgdir/usr/share/applications/nvidia-settings.desktop
+ install -m644 share/pixmaps/nvidia-settings.png $pkgdir/usr/share/pixmaps/ || return 1
+ install X11R6/lib/modules/drivers/nvidia_drv.so $pkgdir/usr/lib/xorg/modules/drivers || return 1
+ install X11R6/lib/modules/extensions/libglx.so.$pkgver $pkgdir/usr/lib/xorg/modules/extensions || return 1
+ install -m755 bin/nvidia-{settings,xconfig,bug-report.sh} $pkgdir/usr/bin/ || return 1
+ cd $pkgdir/usr/lib/
+ ln -s libGL.so.$pkgver libGL.so || return 1
+ ln -s libGL.so.$pkgver libGL.so.1 || return 1
+ ln -s libGLcore.so.$pkgver libGLcore.so.1 || return 1
+ ln -s libnvidia-cfg.so.$pkgver libnvidia-cfg.so.1 || return 1
+ ln -s libnvidia-tls.so.$pkgver libnvidia-tls.so.1 || return 1
+ ln -s libXvMCNVIDIA.so.$pkgver libXvMCNVIDIA_dynamic.so.1 || return 1
- mkdir -p $startdir/pkg/usr/{lib,bin,share/applications,share/pixmaps,share/man/man1}
- mkdir -p $startdir/pkg/usr/lib/xorg/modules/{extensions,drivers}
- mkdir -p $startdir/pkg/usr/share/licenses/nvidia-96xx/
-
- install lib/{libGLcore.so.${pkgver},libGL.so.${pkgver},libnvidia-cfg.so.${pkgver},tls/libnvidia-tls.so.${pkgver}} \
- $startdir/pkg/usr/lib/ || return 1
- install -m644 share/man/man1/* $startdir/pkg/usr/share/man/man1/ || return 1
- rm $startdir/pkg/usr/share/man/man1/nvidia-installer.1.gz || return 1
- install X11R6/lib/libXv* $startdir/pkg/usr/lib/ || return 1
- install -m644 share/applications/nvidia-settings.desktop $startdir/pkg/usr/share/applications/ || return 1
- # fix nvidia .desktop file
- sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $startdir/pkg/usr/share/applications/nvidia-settings.desktop
- install -m644 share/pixmaps/nvidia-settings.png $startdir/pkg/usr/share/pixmaps/ || return 1
- install X11R6/lib/modules/drivers/nvidia_drv.so $startdir/pkg/usr/lib/xorg/modules/drivers || return 1
- install X11R6/lib/modules/extensions/libglx.so.$pkgver $startdir/pkg/usr/lib/xorg/modules/extensions || return 1
- install -m755 bin/nvidia-{settings,xconfig,bug-report.sh} $startdir/pkg/usr/bin/ || return 1
- cd $startdir/pkg/usr/lib/
- ln -s /usr/lib/libGL.so.$pkgver libGL.so || return 1
- ln -s /usr/lib/libGL.so.$pkgver libGL.so.1 || return 1
- ln -s /usr/lib/libGLcore.so.$pkgver libGLcore.so.1 || return 1
- ln -s /usr/lib/libnvidia-cfg.so.$pkgver libnvidia-cfg.so.1 || return 1
- ln -s /usr/lib/libnvidia-tls.so.$pkgver libnvidia-tls.so.1 || return 1
- cd $startdir/pkg/usr/lib/xorg/modules/extensions
- ln -s /usr/lib/xorg/modules/extensions/libglx.so.$pkgver libglx.so || return 1
+ cd $pkgdir/usr/lib/xorg/modules/extensions
+ ln -s libglx.so.$pkgver libglx.so || return 1
- install -m644 $startdir/src/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/LICENSE $startdir/pkg/usr/share/licenses/nvidia-96xx/ || return 1
- install -D -m644 $startdir/src/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/share/doc/README.txt $startdir/pkg/usr/share/doc/nvidia/README || return 1
- install -D -m644 $startdir/src/supported-cards.txt $startdir/pkg/usr/share/doc/nvidia/supported-cards.txt || return 1
-
- find $startdir/pkg/usr -type d -exec chmod 755 {} \;
- # phew :)
+ install -m644 $srcdir/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/LICENSE $pkgdir/usr/share/licenses/nvidia-96xx/ || return 1
+ ln -s nvidia-96xx $startdir/pkg/usr/share/licenses/nvidia-96xx-utils || return 1
+
+ install -D -m644 $srcdir/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/share/doc/README.txt $pkgdir/usr/share/doc/nvidia-96xx/README || return 1
+
+ find $pkgdir/usr -type d -exec chmod 755 {} \;
}
+
+
diff --git a/abs/core/nvidia-96xx-utils/nvidia.install b/abs/core/nvidia-96xx-utils/nvidia.install
new file mode 100644
index 0000000..0a878a7
--- /dev/null
+++ b/abs/core/nvidia-96xx-utils/nvidia.install
@@ -0,0 +1,6 @@
+post_install() {
+ echo By using this package you accept the NVIDIA license,
+ echo which has been installed in /usr/share/licenses/nvidia/LICENSE
+ echo If you do not accept this license, you must remove the package immediately.
+ echo Dont forget to update your /etc/X11/xorg.conf
+}
diff --git a/abs/core/nvidia-96xx/PKGBUILD b/abs/core/nvidia-96xx/PKGBUILD
index ee165d2..df89e5f 100644
--- a/abs/core/nvidia-96xx/PKGBUILD
+++ b/abs/core/nvidia-96xx/PKGBUILD
@@ -1,38 +1,35 @@
-# $Id: PKGBUILD 22496 2008-12-26 22:51:15Z tpowa $
-# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
+# $Id: PKGBUILD 69360 2010-02-20 11:24:15Z tpowa $
+# Maintainer : Thomas Baechler <thomas@archlinux.org>
pkgname=nvidia-96xx
-pkgver=96.43.09
+pkgver=96.43.16
_kernver='2.6.28-LinHES'
-pkgrel=5
-pkgdesc="NVIDIA legacy drivers for kernel26, 96xx branch"
-arch=(i686 x86_64)
-license=('custom:NVIDIA')
+
+pkgrel=1
+pkgdesc="NVIDIA drivers for kernel26, 96xx branch."
+arch=('i686' 'x86_64')
[ "$CARCH" = "i686" ] && ARCH=x86
[ "$CARCH" = "x86_64" ] && ARCH=x86_64
url="http://www.nvidia.com/"
-depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-96xx-utils' 'vdpinfo-96xx')
-conflicts=('nvidia' 'nvidia-71xx' 'nvidia-legacy')
-install=nvidia-96xx.install
+depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-96xx-utils')
+makedepends=('kernel-headers>=2.6.28' 'kernel-headers<2.6.29')
+conflicts=('nvidia' 'nvidia-173xx')
license=('custom')
-source=(http://download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run)
-md5sums=('758c739114b81ea2cb7da7c22ab80a7e')
-[ "$CARCH" = "x86_64" ] && md5sums=('00a4cd93adc956f8cf173ab1036a5bf7')
+install=nvidia.install
+source=("http://download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run")
+md5sums=('7479b25c747e29af95b9ccf06f43fbf9')
+[ "$CARCH" = "x86_64" ] && md5sums=('73e226d4ee0996b6df4bdf44cc1fc6f5')
+
+build() {
+ cd $srcdir
+ sh NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run --extract-only
+ cd NVIDIA-Linux-$ARCH-${pkgver}-pkg0
+ cd usr/src/nv/
+ ln -s Makefile.kbuild Makefile
+ make SYSSRC=/lib/modules/${_kernver}/build module || return 1
-build()
-{
- # Extract
- cd $startdir/src/
- sh NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run --extract-only
- cd NVIDIA-Linux-$ARCH-${pkgver}-pkg0
-
- cd usr/src/nv/
- ln -s Makefile.kbuild Makefile
- make SYSSRC=/lib/modules/$_kernver/build module || return 1
-
- # install kernel module
- mkdir -p $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/
- install -m644 nvidia.ko $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/ || return 1
+ mkdir -p $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/
+ install -m644 nvidia.ko $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/
- sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/nvidia.install
}
diff --git a/abs/core/nvidia-96xx/nvidia-96.43.11-2.6.30.patch b/abs/core/nvidia-96xx/nvidia-96.43.11-2.6.30.patch
new file mode 100644
index 0000000..44d44fd
--- /dev/null
+++ b/abs/core/nvidia-96xx/nvidia-96.43.11-2.6.30.patch
@@ -0,0 +1,103 @@
+--- usr/src/nv/nv.c.orig
++++ usr/src/nv/nv.c
+@@ -15,6 +15,7 @@
+ #include "nv_compiler.h"
+ #include "os-agp.h"
+ #include "nv-vm.h"
++#include <linux/version.h>
+
+ #ifdef MODULE_ALIAS_CHARDEV_MAJOR
+ MODULE_ALIAS_CHARDEV_MAJOR(NV_MAJOR_DEVICE_NUMBER);
+@@ -499,10 +500,12 @@
+ * Set the module owner to ensure that the reference
+ * count reflects accesses to the proc files.
+ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ proc_nvidia->owner = THIS_MODULE;
+ proc_nvidia_cards->owner = THIS_MODULE;
+ proc_nvidia_warnings->owner = THIS_MODULE;
+
++#endif
+ for (j = 0; j < num_nv_devices; j++)
+ {
+ nvl = &nv_linux_devices[j];
+@@ -521,7 +524,9 @@
+
+ entry->data = nv;
+ entry->read_proc = nv_kern_read_cardinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+
+ if (nvos_find_agp_capability(dev)) {
+ /*
+@@ -534,7 +539,9 @@
+ goto failed;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+ proc_nvidia_agp = entry;
+
+ entry = create_proc_entry("status", flags, proc_nvidia_agp);
+@@ -545,7 +552,9 @@
+
+ entry->data = nv;
+ entry->read_proc = nv_kern_read_status;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+
+ entry = create_proc_entry("host-bridge", flags, proc_nvidia_agp);
+ if (!entry) {
+@@ -555,8 +564,9 @@
+
+ entry->data = NULL;
+ entry->read_proc = nv_kern_read_agpinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
+-
++#endif
+ entry = create_proc_entry("card", flags, proc_nvidia_agp);
+ if (!entry) {
+ NV_PCI_DEV_PUT(dev);
+@@ -565,7 +575,9 @@
+
+ entry->data = nv;
+ entry->read_proc = nv_kern_read_agpinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+ }
+
+ NV_PCI_DEV_PUT(dev);
+@@ -576,14 +588,18 @@
+ goto failed;
+
+ entry->read_proc = nv_kern_read_version;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+
+ entry = create_proc_entry("registry", flags, proc_nvidia);
+ if (!entry)
+ goto failed;
+
+ entry->read_proc = nv_kern_read_registry;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+
+ return;
+
+@@ -610,7 +626,9 @@
+
+ entry->data = (void *)message;
+ entry->read_proc = nv_kern_read_warning;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ entry->owner = THIS_MODULE;
++#endif
+ #endif
+ }
+
diff --git a/abs/core/nvidia-96xx/nvidia.install b/abs/core/nvidia-96xx/nvidia.install
new file mode 100644
index 0000000..ab86ea2
--- /dev/null
+++ b/abs/core/nvidia-96xx/nvidia.install
@@ -0,0 +1,14 @@
+post_install() {
+ KERNEL_VERSION='2.6.28-LinHES'
+ depmod $KERNEL_VERSION
+}
+
+post_upgrade() {
+ post_install
+ rmmod nvidia || echo 'In order to use the new nvidia module, exit Xserver and unload it manually.'
+}
+
+post_remove() {
+ KERNEL_VERSION='2.6.28-LinHES'
+ depmod $KERNEL_VERSION
+}
diff --git a/abs/core/nvidia-utils/20-nvidia.conf b/abs/core/nvidia-utils/20-nvidia.conf
new file mode 100644
index 0000000..171f613
--- /dev/null
+++ b/abs/core/nvidia-utils/20-nvidia.conf
@@ -0,0 +1,6 @@
+Section "Device"
+ Identifier "Default nvidia Device"
+ Driver "nvidia"
+ Option "NoLogo" "True"
+EndSection
+
diff --git a/abs/core/nvidia-utils/PKGBUILD b/abs/core/nvidia-utils/PKGBUILD
index b265eea..88c2709 100644
--- a/abs/core/nvidia-utils/PKGBUILD
+++ b/abs/core/nvidia-utils/PKGBUILD
@@ -1,73 +1,110 @@
+# $Id: PKGBUILD 83977 2010-06-25 06:51:43Z pierre $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# Contributor: James Rayner <iphitus@gmail.com>
+
pkgname=nvidia-utils
-pkgver=185.18.36
-pkgrel=1
-pkgdesc="NVIDIA beta drivers utilities and libraries."
-provides=('nvidia-utils' 'libgl')
+pkgver=256.35
+pkgrel=4
+pkgdesc="NVIDIA drivers utilities and libraries."
arch=('i686' 'x86_64')
-[ "$CARCH" = "i686" ] && ARCH=x86 && NV=0
-[ "$CARCH" = "x86_64" ] && ARCH=x86_64 && NV=0
url="http://www.nvidia.com/"
-depends=('xorg-server>=1.5')
-conflicts=('libgl' 'libgl-dri' 'ati-fglrx-utils' 'nvidia-legacy-utils' \
- 'nvidia-71xx-utils' 'nvidia-96xx-utils' )
+depends=('xorg-server' 'libxvmc')
+optdepends=('gtk2: nvidia-settings' 'pkg-config: nvidia-xconfig')
+conflicts=('libgl')
+provides=('libgl')
license=('custom')
install=nvidia.install
-source=(ftp://download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}.run \
- supported-cards.txt)
-
-options=(docs)
+options=('!strip')
+backup=('etc/X11/xorg.conf.d/20-nvidia.conf')
+
+if [ "$CARCH" = "i686" ]; then
+ _arch='x86'
+ _pkg="NVIDIA-Linux-${_arch}-${pkgver}"
+ source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+ md5sums=('f6af8917a500de28396a438f3f548c88')
+elif [ "$CARCH" = "x86_64" ]; then
+ _arch='x86_64'
+ _pkg="NVIDIA-Linux-${_arch}-${pkgver}-no-compat32"
+ source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+ md5sums=('7b5924f14a4d2326b4d916efdb7852ff')
+fi
+
+source[1]='20-nvidia.conf'
+md5sums[1]='a3ddac4732c06d5cec7aefeed4d719c3'
+
+build() {
+ cd $srcdir
+ sh ${_pkg}.run --extract-only
+}
+
+package() {
+ cd $srcdir/${_pkg}
+
+ # X driver
+ install -D -m755 nvidia_drv.so $pkgdir/usr/lib/xorg/modules/drivers/nvidia_drv.so
+ # GLX extension module for X
+ install -D -m755 libglx.so.$pkgver $pkgdir/usr/lib/xorg/modules/extensions/libglx.so.$pkgver
+ ln -s libglx.so.$pkgver $pkgdir/usr/lib/xorg/modules/extensions/libglx.so # X doesn't find glx otherwise
+ # OpenGL library
+ install -D -m755 libGL.so.$pkgver $pkgdir/usr/lib/libGL.so.$pkgver
+ # OpenGL core library
+ install -D -m755 libnvidia-glcore.so.$pkgver $pkgdir/usr/lib/libnvidia-glcore.so.$pkgver
+ # XvMC
+ install -D -m644 libXvMCNVIDIA.a $pkgdir/usr/lib/libXvMCNVIDIA.a
+ install -D -m755 libXvMCNVIDIA.so.$pkgver $pkgdir/usr/lib/libXvMCNVIDIA.so.$pkgver
+ # VDPAU
+ install -D -m755 libvdpau_nvidia.so.$pkgver $pkgdir/usr/lib/vdpau/libvdpau_nvidia.so.$pkgver
+ # CUDA
+ install -D -m755 libcuda.so.$pkgver $pkgdir/usr/lib/libcuda.so.$pkgver
+ install -D -m644 cuda.h $pkgdir/usr/include/cuda/cuda.h
+ install -D -m644 cudaGL.h $pkgdir/usr/include/cuda/cudaGL.h
+ install -D -m644 cudaVDPAU.h $pkgdir/usr/include/cuda/cudaVDPAU.h
+ # nvidia-tls libraries
+ install -D -m755 libnvidia-tls.so.$pkgver $pkgdir/usr/lib/libnvidia-tls.so.$pkgver
+ install -D -m755 tls/libnvidia-tls.so.$pkgver $pkgdir/usr/lib/tls/libnvidia-tls.so.$pkgver
+ # OpenCL
+ install -D -m755 libnvidia-compiler.so.$pkgver $pkgdir/usr/lib/libnvidia-compiler.so.$pkgver
+ install -D -m755 libOpenCL.so.1.0.0 $pkgdir/usr/lib/libOpenCL.so.1.0.0
+ install -D -m644 cl.h $pkgdir/usr/include/CL/cl.h
+ install -D -m644 cl_gl.h $pkgdir/usr/include/CL/cl_gl.h
+ install -D -m644 nvidia.icd $pkgdir/etc/OpenCL/vendors/nvidia.icd
+ install -D -m644 cl_platform.h $pkgdir/usr/include/CL/cl_platform.h
+
+ install -D -m755 libnvidia-cfg.so.$pkgver $pkgdir/usr/lib/libnvidia-cfg.so.$pkgver
+
+ # create soname links
+ for _lib in $(find $pkgdir -name '*.so*'); do
+ _soname="$(dirname ${_lib})/$(readelf -d "$_lib" | sed -nr 's/.*Library soname: \[(.*)\].*/\1/p')"
+ if [ ! -e "${_soname}" ]; then
+ ln -s "$(basename ${_lib})" "${_soname}"
+ ln -s "$(basename ${_soname})" "${_soname/.[0-9]*/}"
+ fi
+ done
+
+
+ # nvidia-xconfig
+ install -D -m755 nvidia-xconfig $pkgdir/usr/bin/nvidia-xconfig
+ install -D -m644 nvidia-xconfig.1.gz $pkgdir/usr/share/man/man1/nvidia-xconfig.1.gz
+ # nvidia-settings
+ install -D -m755 nvidia-settings $pkgdir/usr/bin/nvidia-settings
+ install -D -m644 nvidia-settings.1.gz $pkgdir/usr/share/man/man1/nvidia-settings.1.gz
+ install -D -m644 nvidia-settings.desktop $pkgdir/usr/share/applications/nvidia-settings.desktop
+ install -D -m644 nvidia-settings.png $pkgdir/usr/share/pixmaps/nvidia-settings.png
+ sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $pkgdir/usr/share/applications/nvidia-settings.desktop
+ # nvidia-bug-report
+ install -D -m755 nvidia-bug-report.sh $pkgdir/usr/bin/nvidia-bug-report.sh
+ # nvidia-smi
+ install -D -m755 nvidia-smi $pkgdir/usr/bin/nvidia-smi
+ install -D -m644 nvidia-smi.1.gz $pkgdir/usr/share/man/man1/nvidia-smi.1.gz
-build()
-{
- # override nvida install routine and do it the long way.
- cd $startdir/src/
- sh NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}.run --extract-only
- cd NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}/usr/
- mkdir -p $startdir/pkg/usr/{lib,bin,share/applications,share/pixmaps,man/man1}
- mkdir -p $startdir/pkg/usr/lib/xorg/modules/{extensions,drivers}
- mkdir -p $startdir/pkg/usr/share/licenses/nvidia/
-
- #install lib/{libGLcore,libGL,libnvidia-cfg,libcuda,tls/libnvidia-tls}.so.${pkgver} \
- mkdir -p $startdir/pkg/usr/include/{,GL,cuda,vdpau}
-
- install -m644 include/cuda/{cudaGL,cuda}.h $startdir/pkg/usr/include/cuda
- install -m644 include/vdpau/{vdpau_x11,vdpau}.h $startdir/pkg/usr/include/vdpau
- # Conflicts with MESA; if you want to develop opengl app, enable this line
- #install -m644 include/GL/{glxext,gl,glx,glext}.h $startdir/pkg/usr/include/GL
-
- install lib/{libGLcore,libGL,libnvidia-cfg,libcuda,tls/libnvidia-tls,libvdpau_nvidia,libvdpau,libvdpau_trace}.so.${pkgver} \
- $startdir/pkg/usr/lib/ || return 1
-
- install -m644 share/man/man1/* $startdir/pkg/usr/man/man1/ || return 1
- rm $startdir/pkg/usr/man/man1/nvidia-installer.1.gz || return 1
- install X11R6/lib/libXv* $startdir/pkg/usr/lib/ || return 1
- install -m644 share/applications/nvidia-settings.desktop $startdir/pkg/usr/share/applications/ || return 1
- # fix nvidia .desktop file
- sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $startdir/pkg/usr/share/applications/nvidia-settings.desktop
- install -m644 share/pixmaps/nvidia-settings.png $startdir/pkg/usr/share/pixmaps/ || return 1
- install X11R6/lib/modules/libnvidia-wfb.so.$pkgver $startdir/pkg/usr/lib/xorg/modules || return 1
- install X11R6/lib/modules/drivers/nvidia_drv.so $startdir/pkg/usr/lib/xorg/modules/drivers || return 1
- install X11R6/lib/modules/extensions/libglx.so.$pkgver $startdir/pkg/usr/lib/xorg/modules/extensions || return 1
- install -m755 bin/nvidia-{settings,xconfig,bug-report.sh} $startdir/pkg/usr/bin/ || return 1
- cd $startdir/pkg/usr/lib/
- ln -s libGL.so.$pkgver libGL.so || return 1
- ln -s libGL.so.$pkgver libGL.so.1 || return 1
- ln -s libGLcore.so.$pkgver libGLcore.so.1 || return 1
- ln -s libnvidia-cfg.so.$pkgver libnvidia-cfg.so.1 || return 1
- ln -s libnvidia-tls.so.$pkgver libnvidia-tls.so.1 || return 1
- ln -s libcuda.so.$pkgver libcuda.so.1 || return 1
- ln -s libXvMCNVIDIA.so.$pkgver libXvMCNVIDIA_dynamic.so.1 || return 1
- ln -s libvdpau.so.$pkgver libvdpau.so.1 || return 1
- ln -s libvdpau.so.$pkgver libvdpau.so || return 1
- cd $startdir/pkg/usr/lib/xorg/modules/extensions
- ln -s libglx.so.$pkgver libglx.so || return 1
+ install -D -m644 LICENSE $pkgdir/usr/share/licenses/nvidia/LICENSE
+ ln -s nvidia $pkgdir/usr/share/licenses/nvidia-utils
+ install -D -m644 README.txt $pkgdir/usr/share/doc/nvidia/README
+ install -D -m644 NVIDIA_Changelog $pkgdir/usr/share/doc/nvidia/NVIDIA_Changelog
+ ln -s nvidia $pkgdir/usr/share/doc/nvidia-utils
- install -m644 $startdir/src/NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}/LICENSE $startdir/pkg/usr/share/licenses/nvidia/ || return 1
- ln -s nvidia $startdir/pkg/usr/share/licenses/nvidia-utils || return 1
- install -D -m644 $startdir/src/NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}/usr/share/doc/README.txt $startdir/pkg/usr/share/doc/nvidia/README || return 1
- install -D -m644 $startdir/src/supported-cards.txt $startdir/pkg/usr/share/doc/nvidia/supported-cards.txt || return 1
-
- find $startdir/pkg/usr -type d -exec chmod 755 {} \;
+ # Install xorg.conf.d file for nvidia autodetection in xorg.conf-less configurations
+ install -D -m644 $srcdir/20-nvidia.conf $pkgdir/etc/X11/xorg.conf.d/20-nvidia.conf
}
diff --git a/abs/core/nvidia/PKGBUILD b/abs/core/nvidia/PKGBUILD
index 8da003b..ca1d20f 100644
--- a/abs/core/nvidia/PKGBUILD
+++ b/abs/core/nvidia/PKGBUILD
@@ -1,37 +1,43 @@
-# $Id: PKGBUILD 24051 2009-01-12 12:47:18Z pierre $
+# $Id: PKGBUILD 83850 2010-06-23 10:39:40Z pierre $
# Maintainer : Thomas Baechler <thomas@archlinux.org>
pkgname=nvidia
-pkgver=185.18.36
+pkgver=256.35
_kernver='2.6.28-LinHES'
pkgrel=1
pkgdesc="NVIDIA drivers for kernel26."
arch=('i686' 'x86_64')
-[ "$CARCH" = "i686" ] && ARCH=x86
-[ "$CARCH" = "x86_64" ] && ARCH=x86_64
url="http://www.nvidia.com/"
-depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-utils=185.18.36' 'vdpinfo')
-conflicts=('nvidia-96xx' 'nvidia-71xx' 'nvidia-legacy' 'nvidia-beta')
+depends=('kernel26>=2.6.28' 'kernel26<2.6.29' "nvidia-utils=${pkgver}")
+makedepends=('kernel-headers>=2.6.28' 'kernel-headers<2.6.29')
+conflicts=('nvidia-96xx' 'nvidia-173xx')
license=('custom')
install=nvidia.install
-source=(http://us.download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run)
-# [ "$CARCH" = "x86_64" ] && md5sums=('318e36822c095fcd410161b1326797b1')
-build()
-{
- # Extract
- cd $startdir/src/
- sh NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run --extract-only
- cd NVIDIA-Linux-$ARCH-${pkgver}-pkg0
-
- # Any extra patches are applied in here...
- cd usr/src/nv/
- ln -s Makefile.kbuild Makefile
- make SYSSRC=/lib/modules/${_kernver}/build module || return 1
-
- # install kernel module
- mkdir -p $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/
- install -m644 nvidia.ko $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/
+if [ "$CARCH" = "i686" ]; then
+ _arch='x86'
+ _pkg="NVIDIA-Linux-${_arch}-${pkgver}"
+ source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+ md5sums=('f6af8917a500de28396a438f3f548c88')
+elif [ "$CARCH" = "x86_64" ]; then
+ _arch='x86_64'
+ _pkg="NVIDIA-Linux-${_arch}-${pkgver}-no-compat32"
+ source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+ md5sums=('7b5924f14a4d2326b4d916efdb7852ff')
+fi
- sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+build() {
+ cd $srcdir
+ sh ${_pkg}.run --extract-only
+ cd ${_pkg}/kernel
+ make SYSSRC=/lib/modules/${_kernver}/build module
}
+
+package() {
+ install -D -m644 $srcdir/${_pkg}/kernel/nvidia.ko \
+ $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/nvidia.ko
+ install -d -m755 $pkgdir/etc/modprobe.d
+ echo "blacklist nouveau" >> $pkgdir/etc/modprobe.d/nouveau_blacklist.conf
+ sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/nvidia.install
+}
+
diff --git a/abs/core/openssh/PKGBUILD b/abs/core/openssh/PKGBUILD
index ade755f..fb2ec18 100644
--- a/abs/core/openssh/PKGBUILD
+++ b/abs/core/openssh/PKGBUILD
@@ -3,8 +3,8 @@
# Contributor: judd <jvinet@zeroflux.org>
pkgname=openssh
-pkgver=5.1p1
-pkgrel=4
+pkgver=5.5p1
+pkgrel=1
#_gsskexver=20080404
pkgdesc='A Secure SHell server/client'
arch=(i686 x86_64)
@@ -15,9 +15,6 @@ depends=('openssl>=0.9.8g' 'zlib' 'pam' 'tcp_wrappers' 'heimdal>=1.2-1')
source=(ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/$pkgname-$pkgver.tar.gz
sshd sshd.confd sshd.pam sshd.patch)
#http://www.sxw.org.uk/computing/patches/$pkgname-$pkgver-gsskex-$_gsskexver.patch
-md5sums=('03f2d0c1b5ec60d4ac9997a146d2faec' 'd9ee5e0a0d143689b3d6f11454a2a892'
- 'e2cea70ac13af7e63d40eb04415eacd5' '1c7c2ea8734ec7e3ca58d820634dc73a'
- 'd5e6ef9fd6126f6a560e402561f5be6e')
build() {
cd $startdir/src/$pkgname-$pkgver
@@ -63,3 +60,8 @@ build() {
-e 's|^# Host \*|Host *|g' \
$startdir/pkg/etc/ssh/ssh_config
}
+md5sums=('88633408f4cb1eb11ec7e2ec58b519eb'
+ 'd9ee5e0a0d143689b3d6f11454a2a892'
+ 'e2cea70ac13af7e63d40eb04415eacd5'
+ '1c7c2ea8734ec7e3ca58d820634dc73a'
+ 'ea43aad77b405518aaadad172e0f91eb')
diff --git a/abs/core/openssh/sshd.patch b/abs/core/openssh/sshd.patch
index e883a4c..f3ba392 100644
--- a/abs/core/openssh/sshd.patch
+++ b/abs/core/openssh/sshd.patch
@@ -1,6 +1,5 @@
-diff -ruaN openssh-5.1p1.orig/sshd_config openssh-5.1p1/sshd_config
---- openssh-5.1p1.orig/sshd_config 2008-07-02 12:35:43.000000000 +0000
-+++ openssh-5.1p1/sshd_config 2009-02-28 05:40:09.000000000 +0000
+--- openssh-5.1p1/sshd_config.org 2010-03-08 23:43:07.000000000 +0000
++++ openssh-5.1p1/sshd_config 2010-03-08 23:45:37.000000000 +0000
@@ -38,14 +38,14 @@
# Authentication:
@@ -28,7 +27,15 @@ diff -ruaN openssh-5.1p1.orig/sshd_config openssh-5.1p1/sshd_config
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
-@@ -117,3 +117,4 @@
+@@ -110,10 +110,11 @@
+ #Banner none
+
+ # override default of no subsystems
+-Subsystem sftp /usr/libexec/sftp-server
++Subsystem sftp /usr/lib/ssh/sftp-server
+
+ # Example of overriding settings on a per-user basis
+ #Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server
diff --git a/abs/core/pacman/PKGBUILD b/abs/core/pacman/PKGBUILD
index ecb96c7..239abb8 100644
--- a/abs/core/pacman/PKGBUILD
+++ b/abs/core/pacman/PKGBUILD
@@ -1,36 +1,60 @@
-# $Id: PKGBUILD 23245 2009-01-07 02:10:32Z dan $
+# $Id: PKGBUILD 58635 2009-11-11 00:00:52Z dan $
# Maintainer: Aaron Griffin <aaron@archlinux.org>
# Maintainer: Dan McGee <dan@archlinux.org>
pkgname=pacman
-pkgver=3.2.2
-pkgrel=1
+pkgver=3.3.3
+pkgrel=10
pkgdesc="A library-based package manager with dependency support"
arch=('i686' 'x86_64')
url="http://www.archlinux.org/pacman/"
license=('GPL')
groups=('base')
-depends=('bash' 'libarchive>=2.6.0' 'libdownload>=1.3' 'pacman-mirrorlist')
+depends=('bash' 'libarchive>=2.7.1' 'libfetch>=2.25' 'pacman-mirrorlist')
optdepends=('fakeroot: for makepkg usage as normal user'
'python: for rankmirrors script usage')
-backup=(etc/pacman.conf etc/makepkg.conf etc/pacman.d/mirrorlist)
+backup=(etc/pacman.conf etc/makepkg.conf)
install=pacman.install
options=(!libtool)
source=(ftp://ftp.archlinux.org/other/pacman/$pkgname-$pkgver.tar.gz
- pacman.conf)
-md5sums=('8404fc38566bb52f8eee2ea483a41051'
- '27271a59b9c9f748547ef4feae90bc5c')
+ pacman.conf
+ makepkg.conf)
+md5sums=('a8cef73d68e2a4c3a46fb46c33210719'
+ 'abe70dabacee7036368c7afeb686eb10'
+ '52c7bc651b107d73f9902755b7594458')
build() {
cd $srcdir/$pkgname-$pkgver
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make || return 1
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
make DESTDIR=$pkgdir install || return 1
- # install arch specific stuff
+ # install Arch specific stuff
mkdir -p $pkgdir/etc
install -m644 $srcdir/pacman.conf $pkgdir/etc/
+ install -m644 $srcdir/makepkg.conf $pkgdir/etc/
+ # set things correctly in the default conf file
+ case "$CARCH" in
+ i686)
+ mycarch="i686"
+ mychost="i686-pc-linux-gnu"
+ myflags="-march=i686 "
+ ;;
+ x86_64)
+ mycarch="x86_64"
+ mychost="x86_64-unknown-linux-gnu"
+ myflags="-march=x86-64 "
+ ;;
+ esac
+ sed -i $pkgdir/etc/makepkg.conf \
+ -e "s|@CARCH[@]|$mycarch|g" \
+ -e "s|@CHOST[@]|$mychost|g" \
+ -e "s|@CARCHFLAGS[@]|$myflags|g"
# install completion files
mkdir -p $pkgdir/etc/bash_completion.d/
diff --git a/abs/core/pacman/makepkg.conf b/abs/core/pacman/makepkg.conf
new file mode 100644
index 0000000..12cfebd
--- /dev/null
+++ b/abs/core/pacman/makepkg.conf
@@ -0,0 +1,107 @@
+#
+# /etc/makepkg.conf
+#
+
+#########################################################################
+# SOURCE ACQUISITION
+#########################################################################
+#
+#-- The download utilities that makepkg should use to acquire sources
+# Format: 'protocol::agent'
+DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
+ 'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u'
+ 'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u'
+ 'rsync::/usr/bin/rsync -z %u %o'
+ 'scp::/usr/bin/scp -C %u %o')
+
+# Other common tools:
+# /usr/bin/snarf
+# /usr/bin/lftpget -c
+# /usr/bin/curl
+
+#########################################################################
+# ARCHITECTURE, COMPILE FLAGS
+#########################################################################
+#
+CARCH="@CARCH@"
+CHOST="@CHOST@"
+
+#-- Exclusive: will only run on @CARCH@
+# -march (or -mcpu) builds exclusively for an architecture
+# -mtune optimizes for an architecture, but builds for whole processor family
+CFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
+CXXFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
+LDFLAGS="-Wl,--hash-style=gnu -Wl,--as-needed"
+#-- Make Flags: change this for DistCC/SMP systems
+#MAKEFLAGS="-j2"
+
+#########################################################################
+# BUILD ENVIRONMENT
+#########################################################################
+#
+# Defaults: BUILDENV=(fakeroot !distcc color !ccache)
+# A negated environment option will do the opposite of the comments below.
+#
+#-- fakeroot: Allow building packages as a non-root user
+#-- distcc: Use the Distributed C/C++/ObjC compiler
+#-- color: Colorize output messages
+#-- ccache: Use ccache to cache compilation
+#
+BUILDENV=(fakeroot !distcc color !ccache)
+#
+#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
+#-- specify a space-delimited list of hosts running in the DistCC cluster.
+#DISTCC_HOSTS=""
+
+#########################################################################
+# GLOBAL PACKAGE OPTIONS
+# These are default values for the options=() settings
+#########################################################################
+#
+# Default: OPTIONS=(strip docs libtool emptydirs zipman purge)
+# A negated option will do the opposite of the comments below.
+#
+#-- strip: Strip symbols from binaries/libraries in STRIP_DIRS
+#-- docs: Save doc directories specified by DOC_DIRS
+#-- libtool: Leave libtool (.la) files in packages
+#-- emptydirs: Leave empty directories in packages
+#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
+#-- purge: Remove files specified by PURGE_TARGETS
+#
+OPTIONS=(strip docs libtool emptydirs zipman purge)
+
+#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
+INTEGRITY_CHECK=(md5)
+#-- Manual (man and info) directories to compress (if zipman is specified)
+MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
+#-- Doc directories to remove (if !docs is specified)
+DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
+#-- Directories to be searched for the strip option (if strip is specified)
+STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
+#-- Files to be removed from all packages (if purge is specified)
+PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
+
+#########################################################################
+# PACKAGE OUTPUT
+#########################################################################
+#
+# Default: put built package and cached source in build directory
+#
+#-- Destination: specify a fixed directory where all packages will be placed
+#PKGDEST=/home/packages
+#-- Source cache: specify a fixed directory where source files will be cached
+#SRCDEST=/home/sources
+#-- Packager: name/email of the person or organization building packages
+#PACKAGER="John Doe <john@doe.com>"
+
+#########################################################################
+# EXTENSION DEFAULTS
+#########################################################################
+#
+# WARNING: Do NOT modify these variables unless you know what you are
+# doing.
+#
+PKGEXT='.pkg.tar.gz'
+SRCEXT='.src.tar.gz'
+
+# vim: set ft=sh ts=2 sw=2 et:
diff --git a/abs/core/pacman/pacman.conf b/abs/core/pacman/pacman.conf
index 6fe3d29..de7e17d 100644
--- a/abs/core/pacman/pacman.conf
+++ b/abs/core/pacman/pacman.conf
@@ -28,7 +28,6 @@ SyncFirst = pacman
#NoExtract =
# Misc options (all disabled by default)
-#NoPassiveFtp
#UseSyslog
#ShowSize
#UseDelta
@@ -52,10 +51,12 @@ SyncFirst = pacman
# uncommented to enable the repo.
#
-# Testing is disabled by default. To enable, uncomment the following
-# two lines. You can add preferred servers immediately after the header,
-# and they will be used before the default mirrors.
+# The testing repositories are disabled by default. To enable, uncomment the
+# repo name header and Include lines. You can add preferred servers immediately
+# after the header, and they will be used before the default mirrors.
+
#[testing]
+## Add your preferred servers here, they will be used first
#Include = /etc/pacman.d/mirrorlist
[core]
@@ -66,6 +67,10 @@ Include = /etc/pacman.d/mirrorlist
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
+#[community-testing]
+## Add your preferred servers here, they will be used first
+#Include = /etc/pacman.d/mirrorlist
+
[community]
# Add your preferred servers here, they will be used first
Include = /etc/pacman.d/mirrorlist
diff --git a/abs/core/pacman/pacman.install b/abs/core/pacman/pacman.install
index 46e4763..ed10f0d 100644
--- a/abs/core/pacman/pacman.install
+++ b/abs/core/pacman/pacman.install
@@ -1,10 +1,15 @@
+#!/bin/sh
# arg 1: the new package version
# arg 2: the old package version
post_upgrade() {
# one time stuff for md5sum issue with older pacman versions
- if [ "$(vercmp $2 3.0.2)" -lt 0 ]; then
- _resetbackups
- fi
+ if [ -f /usr/bin/vercmp ]
+ then
+ if [ "$(vercmp $2 3.0.2)" -lt 0 ]
+ then
+ _resetbackups
+ fi
+ fi
}
_resetbackups() {
@@ -50,7 +55,3 @@ _resetbackups() {
fi
done
}
-
-op=$1
-shift
-$op $*
diff --git a/abs/core/pciutils/PKGBUILD b/abs/core/pciutils/PKGBUILD
index d206022..838f800 100644
--- a/abs/core/pciutils/PKGBUILD
+++ b/abs/core/pciutils/PKGBUILD
@@ -1,8 +1,8 @@
# $Id: PKGBUILD 7903 2008-08-05 06:38:41Z tpowa $
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
pkgname=pciutils
-pkgver=3.0.0
-pkgrel=12
+pkgver=3.1.5
+pkgrel=1
pkgdesc="PCI bus configuration space access library and tools"
arch=(i686 x86_64)
license=('GPL2')
@@ -26,4 +26,4 @@ build() {
install -D -m 644 lib/${i} ${startdir}/pkg/usr/include/pci/${i}
done
}
-md5sums=('85b5dae042217cf11bca10d52210a78d')
+md5sums=('7ccf8ae2353033158652bdca4e4aad0a')
diff --git a/abs/core/perl_modules/libxml-perl/PKGBUILD b/abs/core/perl_modules/libxml-perl/PKGBUILD
new file mode 100644
index 0000000..5867a11
--- /dev/null
+++ b/abs/core/perl_modules/libxml-perl/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=libxml-perl
+pkgver=0.08
+pkgrel=1
+pkgdesc="Perl library for working with XML"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~KMACLEOD/libxml-perl"
+license=('GPL' 'PerlArtistic')
+depends=('perlxml>=2.19')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/K/KM/KMACLEOD/libxml-perl-$pkgver.tar.gz)
+md5sums=('0ed5fbdda53d1301ddaed88db10503bb')
+
+build() {
+ cd $startdir/src/libxml-perl-$pkgver
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=$startdir/pkg || return 1
+ find $startdir/pkg -name '.packlist' -delete
+ find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-class-factory-util/PKGBUILD b/abs/core/perl_modules/perl-class-factory-util/PKGBUILD
new file mode 100644
index 0000000..dadcff8
--- /dev/null
+++ b/abs/core/perl_modules/perl-class-factory-util/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id:$
+pkgname=perl-class-factory-util
+_realname=Class-Factory-Util
+pkgver=1.7
+pkgrel=1
+pkgdesc="Provide utility methods for factory classes"
+arch=(i686 x86_64)
+license=('GPL' 'Artistic')
+url="http://search.cpan.org/~drolsky/Class-Factory-Util"
+options=(!emptydirs)
+depends=('perl')
+provides=('class-factory-util=1.7' 'Class::Factory::Util=1.7' 'perl-class-factory-util=1.7')
+source=(http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Class-Factory-Util-1.7.tar.gz)
+md5sums=('aebd79da361b676a7ecd3245fc3d1b3f')
+
+build() {
+ cd ${srcdir}/${_realname}-${pkgver}
+ # install module in vendor directories.
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=${pkgdir} || return 1
+
+ # remove perllocal.pod and .packlist
+ find ${pkgdir} -name perllocal.pod -delete
+ find ${pkgdir} -name .packlist -delete
+}
+
diff --git a/abs/core/perl_modules/perl-datetime-format-builder/PKGBUILD b/abs/core/perl_modules/perl-datetime-format-builder/PKGBUILD
new file mode 100644
index 0000000..10df715
--- /dev/null
+++ b/abs/core/perl_modules/perl-datetime-format-builder/PKGBUILD
@@ -0,0 +1,28 @@
+# CPAN Name : DateTime-Format-Builder
+# Contributor: Caleb Cushing <xenoterracide@gmail.com>
+# Generator : CPANPLUS::Dist::Arch 0.18
+pkgname=perl-datetime-format-builder
+pkgver=0.8000
+pkgrel=3
+pkgdesc="Create DateTime parser classes and objects"
+arch=('i686' 'x86_64')
+license=('PerlArtistic' 'GPL')
+options=('!emptydirs')
+provides=('perl-datetime-format-builder=0.80')
+depends=('perl' 'perl-class-factory-util>=1.6' 'perl-datetime>=0.12' 'perl-datetime-format-strptime>=1.04' 'perl-params-validate>=0.72')
+url='http://search.cpan.org/dist/DateTime-Format-Builder'
+source=('http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/DateTime-Format-Builder-0.80.tar.gz')
+md5sums=('f6c5d5a17b5b7478ff555a2d3cce5136')
+
+build() {
+ DIST_DIR="${srcdir}/DateTime-Format-Builder-0.80"
+ export PERL_MM_USE_DEFAULT=1
+ { cd "$DIST_DIR" &&
+ perl Makefile.PL INSTALLDIRS=vendor &&
+ make &&
+ make test &&
+ make DESTDIR="$pkgdir" install;
+ } || return 1;
+
+ find "$pkgdir" -name .packlist -o -name perllocal.pod -delete
+}
diff --git a/abs/core/perl_modules/perl-datetime-format-iso8601/PKGBUILD b/abs/core/perl_modules/perl-datetime-format-iso8601/PKGBUILD
new file mode 100644
index 0000000..360b88a
--- /dev/null
+++ b/abs/core/perl_modules/perl-datetime-format-iso8601/PKGBUILD
@@ -0,0 +1,26 @@
+# Contributor: Lukas Fleischer <archlinux at cryptocrack dot de>
+
+pkgname=perl-datetime-format-iso8601
+pkgver=0.07
+pkgrel=1
+pkgdesc="Parses ISO8601 formats."
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/DateTime-Format-ISO8601/"
+license=('PerlArtistic')
+depends=('perl-datetime-format-builder>=0.770.0' 'perl-datetime>=0.18')
+#makedepends=('perl-module-build>=0.350.0')
+optdepends=('perl-file-find-rule'
+ 'perl-test-distribution'
+ 'perl-test-pod')
+options=(!emptydirs)
+source=("http://search.cpan.org/CPAN/authors/id/J/JH/JHOBLITT/DateTime-Format-ISO8601-$pkgver.tar.gz")
+md5sums=('debb51180d0318ae09cad01c544a1d7d')
+
+build() {
+ cd $srcdir/DateTime-Format-ISO8601-$pkgver
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR="${pkgdir}" || return 1
+ find ${pkgdir} -name perllocal.pod -delete
+ find ${pkgdir} -name .packlist -delete
+}
diff --git a/abs/core/perl_modules/perl-fcgi/PKGBUILD b/abs/core/perl_modules/perl-fcgi/PKGBUILD
index 73b9ef1..3a97d1e 100644
--- a/abs/core/perl_modules/perl-fcgi/PKGBUILD
+++ b/abs/core/perl_modules/perl-fcgi/PKGBUILD
@@ -2,16 +2,15 @@
# Contributor: François Charette <firmicus ατ gmx δοτ net>
pkgname=perl-fcgi
-pkgver=0.67
-pkgrel=4
+pkgver=0.71
+pkgrel=1
pkgdesc="Fast CGI"
arch=('i686' 'x86_64')
url="http://search.cpan.org/~SKIMO/FCGI"
license=('GPL' 'PerlArtistic')
depends=('perl>=5.10.0')
options=('!emptydirs')
-source=(http://www.cpan.org/authors/id/S/SK/SKIMO/FCGI-$pkgver.tar.gz)
-md5sums=('2e9b5bd1f74290fd9788555e8108a3d2')
+source=(http://search.cpan.org/CPAN/authors/id/F/FL/FLORA/FCGI-$pkgver.tar.gz)
build() {
cd $startdir/src/FCGI-$pkgver
@@ -21,3 +20,4 @@ build() {
find $startdir/pkg -name '.packlist' -delete
find $startdir/pkg -name '*.pod' -delete
}
+md5sums=('26bc4ea53ccc9c9c16695e88e46a1cfb')
diff --git a/abs/core/perl_modules/perl-math-round/PKGBUILD b/abs/core/perl_modules/perl-math-round/PKGBUILD
new file mode 100644
index 0000000..6501887
--- /dev/null
+++ b/abs/core/perl_modules/perl-math-round/PKGBUILD
@@ -0,0 +1,22 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+
+pkgname=perl-math-round
+pkgver=0.06
+pkgrel=2
+pkgdesc="Perl extension for rounding numbers"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/Math-Round"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/G/GR/GROMMEL/Math-Round-$pkgver.tar.gz)
+md5sums=('552cef2753b246f97a6e20d8dee66e7c')
+
+build() {
+ cd $startdir/src/Math-Round-$pkgver
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=$startdir/pkg || return 1
+ find $startdir/pkg -name '.packlist' -delete
+ find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-parse-yapp/PKGBUILD b/abs/core/perl_modules/perl-parse-yapp/PKGBUILD
new file mode 100644
index 0000000..82d27db
--- /dev/null
+++ b/abs/core/perl_modules/perl-parse-yapp/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Cecil H. Watson <knoppmyth@gmail.com>
+
+pkgname=perl-parse-yapp
+_realname=Parse-Yapp
+pkgver=1.05
+pkgrel=1
+pkgdesc="Parse::Yapp - Perl extension for generating and using LALR parsers."
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perlxml' 'perl>=5.10.0')
+options=('!emptydirs')
+source=(ftp://ftp.cpan.org/pub/CPAN/authors/id/F/FD/FDESAR/${_realname}-${pkgver}.tar.gz)
+md5sums=('7bfca736d6af36c51edf7a97111a8f3b')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+
+ find ${startdir}/pkg -name '.packlist' -delete
+ find ${startdir}/pkg -name 'perllocal.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-xml-dom/PKGBUILD b/abs/core/perl_modules/perl-xml-dom/PKGBUILD
new file mode 100644
index 0000000..ab6e8a5
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-dom/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-dom
+pkgver=1.44
+pkgrel=5
+pkgdesc="Implements Level 1 of W3's DOM"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~TJMATHER/XML-DOM"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perlxml>=2.30' 'perl-xml-regexp' 'libxml-perl>=0.07' 'perl-libwww')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/T/TJ/TJMATHER/XML-DOM-$pkgver.tar.gz)
+md5sums=('1ec2032a06e5762984f7a332c199c205')
+
+build() {
+ cd $startdir/src/XML-DOM-$pkgver
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=$startdir/pkg || return 1
+ find $startdir/pkg -name '.packlist' -delete
+ find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-xml-parser/PKGBUILD b/abs/core/perl_modules/perl-xml-parser/PKGBUILD
index c0fe960..cf2f801 100644
--- a/abs/core/perl_modules/perl-xml-parser/PKGBUILD
+++ b/abs/core/perl_modules/perl-xml-parser/PKGBUILD
@@ -2,7 +2,7 @@
# Maintainer: Charles Mauch <cmauch@gmail.com>
pkgname=perl-xml-parser
pkgver=2.34
-pkgrel=2
+pkgrel=3
pkgdesc="Perl/CPAN Module XML::Parser : Flexible fast parser with plugin styles"
arch=("i686" "x86_64")
url="http://search.cpan.org/MSERGEANT/XML-Parser"
@@ -21,4 +21,5 @@ build() {
/usr/bin/find $startdir/pkg -name '.packlist' -exec rm '{}' \; && \
/usr/bin/find $startdir/pkg -name 'perllocal.pod' -exec rm '{}' \; && \
/usr/bin/find $startdir/pkg -depth -type d -empty -exec rmdir '{}' \;
+ rm -fr $pkgdir/usr/share/man
}
diff --git a/abs/core/perl_modules/perl-xml-xpath/PKGBUILD b/abs/core/perl_modules/perl-xml-xpath/PKGBUILD
new file mode 100644
index 0000000..fddb97d
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-xpath/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-xpath
+pkgver=1.13
+pkgrel=4
+pkgdesc="A set of modules for parsing and evaluating"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/XML-XPath"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perlxml>=2.23')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MS/MSERGEANT/XML-XPath-$pkgver.tar.gz)
+md5sums=('b5919d9220d83982feb6e2321850c5d7')
+
+build() {
+ cd $startdir/src/XML-XPath-$pkgver
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make || return 1
+ make install DESTDIR=$startdir/pkg || return 1
+ find $startdir/pkg -name '.packlist' -delete
+ find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-xml-xql/PKGBUILD b/abs/core/perl_modules/perl-xml-xql/PKGBUILD
new file mode 100755
index 0000000..34757a3
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-xql/PKGBUILD
@@ -0,0 +1,34 @@
+# Contributor: ndlarsen <ndlarsen@gmail.com>
+# Comment: Based on PKGBUILDs from the perlcpan repo by Charles Mauch <cmauch@gmail.com>
+
+pkgname=perl-xml-xql
+pkgver=0.68
+pkgrel=1
+pkgdesc="A perl module for querying XML tree structures with XQL"
+arch=('i686')
+url="http://search.cpan.org/dist/XML-XQL/lib/XML/XQL.pm"
+license=('GPL Artistic')
+depends=('perl-parse-yapp' 'perl-xml-dom' 'perl-xml-parser' 'perl-date-manip')
+makedepends=()
+provides=()
+conflicts=()
+replaces=()
+backup=()
+groups=()
+options=(docs !emptydirs)
+install=
+noextract=()
+source=(http://search.cpan.org/CPAN/authors/id/T/TJ/TJMATHER/XML-XQL-$pkgver.tar.gz)
+md5sums=('bb84096fdf8bcc96a35971539ce8c19e')
+
+build() {
+
+ cd $startdir/src/XML-XQL-$pkgver
+ /usr/bin/perl Makefile.PL INSTALLDIRS=vendor MAN1ext=1p MAN3EXT=3pm
+ make || return 1
+ make DESTDIR=$startdir/pkg install || return 1
+ /usr/bin/find $startdir/pkg -name '.packlist' -exec rm '{}' \; && \
+ /usr/bin/find $startdir/pkg -name 'perllocal.pod' -exec rm '{}' \;
+
+}
+# $Id$ \ No newline at end of file
diff --git a/abs/core/perl_modules/perlxml/PKGBUILD b/abs/core/perl_modules/perlxml/PKGBUILD
new file mode 100644
index 0000000..c9b2f30
--- /dev/null
+++ b/abs/core/perl_modules/perlxml/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: herb <hrose@archlinux.org>
+
+pkgname=perlxml
+_realname=XML-Parser
+pkgver=2.36
+pkgrel=1
+pkgdesc="XML::Parser - an XML parser module for perl"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0' 'expat>=2.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/${_realname}-${pkgver}.tar.gz)
+md5sums=('1b868962b658bd87e1563ecd56498ded')
+
+build() {
+ cd ${startdir}/src/${_realname}-${pkgver}
+
+ # install module in vendor directories.
+ perl Makefile.PL INSTALLDIRS=vendor || return 1
+ make MAN1EXT=1p MAN3EXT=3pm || return 1
+ make install MAN1EXT=1p MAN3EXT=3pm DESTDIR=${startdir}/pkg || return 1
+
+ # remove perllocal.pod and .packlist.
+ find ${startdir}/pkg -name perllocal.pod -delete
+ find ${startdir}/pkg -name .packlist -delete
+}
diff --git a/abs/core/php/PKGBUILD b/abs/core/php/PKGBUILD
index 975716a..9e297f0 100644
--- a/abs/core/php/PKGBUILD
+++ b/abs/core/php/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=php
pkgver=5.2.6
-pkgrel=23
+pkgrel=31
_suhosinver=0.9.6.2
pkgdesc='A high-level scripting language'
arch=('i686' 'x86_64')
@@ -174,3 +174,15 @@ build() {
# install -D -m644 libs/libphp5.so ${pkgdir}/usr/lib/httpd/modules/libphp5.so || return 1
# install -D -m644 ${srcdir}/apache.conf ${pkgdir}/etc/httpd/conf/extra/php5_module.conf || return 1
}
+
+
+md5sums=('7380ffecebd95c6edb317ef861229ebd'
+ 'f2ec986341a314c271259dbe4d940858'
+ '0ba86d39163d577c195d57c9129149cd'
+ '96ca078be6729b665be8a865535a97bf'
+ '74e5ce5a02488ec91b1c59f539e42936')
+md5sums=('7380ffecebd95c6edb317ef861229ebd'
+ 'f2ec986341a314c271259dbe4d940858'
+ '13795526fe1a5da17c0aa46d5ea1a5d8'
+ '96ca078be6729b665be8a865535a97bf'
+ '74e5ce5a02488ec91b1c59f539e42936')
diff --git a/abs/core/php/__changelog b/abs/core/php/__changelog
index aac14ba..375545c 100644
--- a/abs/core/php/__changelog
+++ b/abs/core/php/__changelog
@@ -4,3 +4,5 @@ added /data/srv/tmp to basedir
added /usr/share/mythtv/mythweather/scripts/
send errors to stderr
change .install file, timezone is modified on install
+php.ini -jm
+ remove open_basedir
diff --git a/abs/core/php/php.ini b/abs/core/php/php.ini
index 8cbcd56..0d3a568 100644
--- a/abs/core/php/php.ini
+++ b/abs/core/php/php.ini
@@ -249,7 +249,7 @@ safe_mode_protected_env_vars = LD_LIBRARY_PATH
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
-open_basedir = /data/srv/httpd/htdocs/:/home/:/tmp/:/usr/share/pear/:/data/srv/tmp:/usr/share/mythtv/mythweather/scripts/:/data/srv/httpd/htdocs/mythweb/data/video:/myth/ipodfeed:/data/srv/httpd/htdocs/archive:/etc
+;open_basedir = /data/srv/httpd/htdocs/:/home/:/tmp/:/usr/share/pear/:/data/srv/tmp:/usr/share/mythtv/mythweather/scripts/:/data/srv/httpd/htdocs/mythweb/data/video:/myth/ipodfeed:/data/srv/httpd/htdocs/archive:/etc:/myth:/media
; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
diff --git a/abs/core/pil/PKGBUILD b/abs/core/pil/PKGBUILD
index 6f01309..5ae42bb 100644
--- a/abs/core/pil/PKGBUILD
+++ b/abs/core/pil/PKGBUILD
@@ -4,19 +4,20 @@
pkgname=pil
pkgver=1.1.6
-pkgrel=6
+pkgrel=11
pkgdesc="Python imaging library"
arch=('i686' 'x86_64')
url="http://www.pythonware.com/products/pil/index.htm"
license=('custom:"pil"')
-depends=('python' 'libjpeg' 'freetype2')
+depends=('python' 'libjpeg6' 'freetype2')
makedepends=('tk>=8.5.0')
source=(http://effbot.org/downloads/Imaging-$pkgver.tar.gz)
md5sums=('3a9b5c20ca52f0a9900512d2c7347622')
build() {
cd $srcdir/Imaging-$pkgver
- python setup.py build_ext
+ sed -i "s#JPEG_ROOT\ =\ None#JPEG_ROOT\ =\ \"/opt/libjpeg6/lib\",\ \"/opt/libjpeg6/include\"#" setup.py
+ python setup.py build_ext -i
python setup.py install --root=$pkgdir
mkdir -p $pkgdir/usr/include/python2.6/
cp libImaging/*.h $pkgdir/usr/include/python2.6/
diff --git a/abs/core/pil/__changelog b/abs/core/pil/__changelog
new file mode 100644
index 0000000..91214ed
--- /dev/null
+++ b/abs/core/pil/__changelog
@@ -0,0 +1,2 @@
+__change so that it builds against libjpeg6 and not libjpeg7
+ sed -i "s#JPEG_ROOT\ =\ None#JPEG_ROOT\ =\ \"/opt/libjpeg6\"#" setup.py
diff --git a/abs/core/plextor-convertX-driver/PKGBUILD b/abs/core/plextor-convertX-driver/PKGBUILD
index 14ecfdc..8b203f6 100755
--- a/abs/core/plextor-convertX-driver/PKGBUILD
+++ b/abs/core/plextor-convertX-driver/PKGBUILD
@@ -2,7 +2,7 @@
pkgname=plextor-convertX-driver
pkgver=0.9.8
-pkgrel=6
+pkgrel=7
_kernver=2.6.28-LinHES
pkgdesc="Drivers for Plextor tuners"
arch=(i686 x86_64)
@@ -31,3 +31,6 @@ build() {
install -m755 apps/gorecord $startdir/pkg/usr/bin/gorecord
install -m755 apps/modet $startdir/pkg/usr/bin/modet
}
+md5sums=('b4299b6e2fcbaf461bc8afe36654f314'
+ 'e4c7bc33d6e69eafc10bd107cf648828'
+ '3b89d8746adf70102eeeb47d03627ece')
diff --git a/abs/core/plextor-convertX-driver/convertX.install b/abs/core/plextor-convertX-driver/convertX.install
index 8081c6a..5b79d84 100755
--- a/abs/core/plextor-convertX-driver/convertX.install
+++ b/abs/core/plextor-convertX-driver/convertX.install
@@ -7,6 +7,8 @@ post_install() {
echo ">>> Updating module dependencies. Please wait ..."
KERNEL_VERSION=2.6.28-LinHES
depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ echo "# Added For Plextor ConvertX" >> /etc/fstab
+ echo "usbfs /proc/bus/usb usbfs devmode=0666 0 0" >> /etc/fstab
/bin/true
}
@@ -23,6 +25,7 @@ post_remove() {
echo ">>> Updating module dependencies. Please wait ..."
KERNEL_VERSION=2.6.28-LinHES
depmod -v $KERNEL_VERSION > /dev/null 2>&1
+ sed -i~ -e '/ConvertX/d' -e '/usbfs/d' /etc/fstab
/bin/true
}
diff --git a/abs/core/python-pycurl/PKGBUILD b/abs/core/python-pycurl/PKGBUILD
new file mode 100644
index 0000000..3d17877
--- /dev/null
+++ b/abs/core/python-pycurl/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 82 2009-07-17 19:56:55Z aaron $
+# Maintainer: Angel 'angvp' Velasquez <angvp[at]archlinux.com.ve>
+# Contributor: kontrast <kontr4st@gmail.com>
+pkgname=python-pycurl
+pkgver=7.19.0
+pkgrel=3
+pkgdesc="A Python interface to libcurl"
+arch=('i686' 'x86_64')
+url="http://pycurl.sourceforge.net"
+license=('GPL')
+depends=('python' 'curl>=7.19.0')
+replaces=('pycurl')
+provides=('pycurl')
+source=(http://pycurl.sourceforge.net/download/pycurl-$pkgver.tar.gz)
+md5sums=('919d58fe37e69fe87ce4534d8b6a1c7b')
+
+build() {
+ cd $srcdir/pycurl-$pkgver
+ python setup.py install --curl-config=/usr/bin/curl-config --prefix $pkgdir/usr || return 1
+}
diff --git a/abs/core/python-simplejson/PKGBUILD b/abs/core/python-simplejson/PKGBUILD
new file mode 100644
index 0000000..d1c7437
--- /dev/null
+++ b/abs/core/python-simplejson/PKGBUILD
@@ -0,0 +1,24 @@
+# $ Id: $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: David Moore <davidm@sjsoft.com>
+
+pkgname=python-simplejson
+pkgver=2.0.9
+pkgrel=1
+pkgdesc="Simple, fast, extensible JSON encoder/decoder for Python"
+license=('MIT')
+arch=('i686' 'x86_64')
+url="http://undefined.org/python/#simplejson"
+depends=('python')
+makedepends=('setuptools')
+source=("http://pypi.python.org/packages/source/s/simplejson/simplejson-${pkgver}.tar.gz")
+md5sums=('af5e67a39ca3408563411d357e6d5e47')
+
+build() {
+ cd ${srcdir}/simplejson-${pkgver}
+ python setup.py install --root=${pkgdir}
+
+ # License
+ install -Dm644 ${srcdir}/simplejson-${pkgver}/LICENSE.txt \
+ ${pkgdir}/usr/share/licenses/python-simplejson/license
+}
diff --git a/abs/core/qt/PKGBUILD b/abs/core/qt/PKGBUILD
index 87ec9f7..e315180 100644..100755
--- a/abs/core/qt/PKGBUILD
+++ b/abs/core/qt/PKGBUILD
@@ -3,11 +3,11 @@
pkgname=qt
pkgver=4.5.2
-pkgrel=4
+pkgrel=5
_kdeqtver=2d1727e396d5dca24ae0fb6a45d35ffc1abd0c12
pkgdesc='A cross-platform application and UI framework'
arch=('i686' 'x86_64')
-url='http://www.qtsoftware.com/'
+url='http://www.qt.nokia.com/'
license=('GPL3' 'LGPL')
depends=('libpng' 'mesa' 'fontconfig' 'libtiff>=3.8.2-5' 'libmng>=1.0.10-2' 'sqlite3'
'libxrandr' 'glib2' 'libxi' 'dbus' 'libxcursor' 'libxinerama' 'libxrender')
@@ -18,17 +18,10 @@ replaces=('qt4')
conflicts=('qt4')
options=('!libtool')
_pkgfqn="qt-x11-opensource-src-${pkgver}"
-source=("ftp://ftp.qtsoftware.com/qt/source/${_pkgfqn}.tar.bz2"
+source=("http://get.qt.nokia.com/qt/source/${_pkgfqn}.tar.bz2"
"ftp://ftp.archlinux.org/other/kde-qt/kde-qt-patches-${_kdeqtver}.tar.bz2"
'assistant.desktop' 'designer.desktop' 'linguist.desktop' 'qtconfig.desktop'
- 'qdoc3.patch')
-md5sums=('28a7e8ac9805a6f614d2a27ee1a6ac9d'
- '4b333add3031f59538629b35858178d9'
- 'b352b4b70faba2571af3fce5d119580a'
- '491a96682faa03407f768a53cca71db5'
- 'cda7ed7e132689991dc2968a0043b4b0'
- '717669b728a0a795217d2f52969e454c'
- '9c0a0db3569e889a54a6cddcd55c538c')
+ 'qdoc3.patch' 'QtWebKit_Flash.patch')
_create-kdeqt-patches() {
local codir=$(mktemp -d)
@@ -59,6 +52,7 @@ build() {
done
patch -p0 -i $srcdir/qdoc3.patch
+ patch < $srcdir/QtWebKit_Flash.patch ${srcdir}/${_pkgfqn}/src/3rdparty/webkit/WebCore/plugins/qt/PluginPackageQt.cpp || return 1
sed -i "s|-O2|$CXXFLAGS|" mkspecs/common/g++.conf
sed -i "/^QMAKE_RPATH/s| -Wl,-rpath,||g" mkspecs/common/g++.conf
@@ -116,3 +110,12 @@ build() {
sed -i -e "s|$srcdir/${_pkgfqn}/bin/moc|/usr/bin/moc|g" $pkgdir/usr/lib/pkgconfig/*.pc
sed -i -e "s|$srcdir/${_pkgfqn}/bin/uic|/usr/bin/uic|g" $pkgdir/usr/lib/pkgconfig/*.pc
}
+
+md5sums=('28a7e8ac9805a6f614d2a27ee1a6ac9d'
+ '4b333add3031f59538629b35858178d9'
+ 'b352b4b70faba2571af3fce5d119580a'
+ '491a96682faa03407f768a53cca71db5'
+ 'cda7ed7e132689991dc2968a0043b4b0'
+ '717669b728a0a795217d2f52969e454c'
+ '9c0a0db3569e889a54a6cddcd55c538c'
+ '0e2f5e43ed9dba32816fd4142b021762')
diff --git a/abs/core/qt/QtWebKit_Flash.patch b/abs/core/qt/QtWebKit_Flash.patch
new file mode 100644
index 0000000..102f73c
--- /dev/null
+++ b/abs/core/qt/QtWebKit_Flash.patch
@@ -0,0 +1,48 @@
+--- PluginPackageQt.cpp.orig 2010-06-30 21:29:47.178707288 +0000
++++ PluginPackageQt.cpp 2010-06-30 21:35:40.185441603 +0000
+@@ -36,6 +36,8 @@
+
+ namespace WebCore {
+
++typedef void gtkInitFunc(int *argc, char ***argv);
++
+ bool PluginPackage::fetchInfo()
+ {
+ if (!load())
+@@ -100,7 +102,8 @@
+
+ NP_InitializeFuncPtr NP_Initialize;
+ NPError npErr;
+-
++ gtkInitFunc* gtkInit;
++
+ NP_Initialize = (NP_InitializeFuncPtr)m_module->resolve("NP_Initialize");
+ m_NPP_Shutdown = (NPP_ShutdownProcPtr)m_module->resolve("NP_Shutdown");
+
+@@ -157,6 +160,26 @@
+ m_browserFuncs.enumerate = _NPN_Enumerate;
+ m_browserFuncs.construct = _NPN_Construct;
+
++ // WORKAROUND: Prevent gtk based plugin crashes such as BR# 40567 by
++ // explicitly forcing the initializing of Gtk, i.e. calling gtk_init,
++ // whenver the symbol is present in the plugin library loaded above.
++ // Note that this workaround is based on code from the NSPluginClass ctor
++ // in KDE's kdebase/apps/nsplugins/viewer/nsplugin.cpp file.
++ gtkInit = (gtkInitFunc*)m_module->resolve("gtk_init");
++ if (gtkInit) {
++ // Prevent gtk_init() from replacing the X error handlers, since the Gtk
++ // handlers abort when they receive an X error, thus killing the viewer.
++#ifdef Q_WS_X11
++ int (*old_error_handler)(Display*, XErrorEvent*) = XSetErrorHandler(0);
++ int (*old_io_error_handler)(Display*) = XSetIOErrorHandler(0);
++#endif
++ gtkInit(0, 0);
++#ifdef Q_WS_X11
++ XSetErrorHandler(old_error_handler);
++ XSetIOErrorHandler(old_io_error_handler);
++#endif
++}
++
+ #if defined(XP_UNIX)
+ npErr = NP_Initialize(&m_browserFuncs, &m_pluginFuncs);
+ #else
diff --git a/abs/core/qt/__changelog b/abs/core/qt/__changelog
index 2abf977..86af276 100644
--- a/abs/core/qt/__changelog
+++ b/abs/core/qt/__changelog
@@ -1 +1,2 @@
remove cups support
+added QtWebKit_Flash.patch to fix crash with Flash 10.1 and webkit browsers like mythbrowser. http://trac.webkit.org/changeset/61307 This shouldn't be needed in qt versions 4.6.4 or later.
diff --git a/abs/core/rsync/PKGBUILD b/abs/core/rsync/PKGBUILD
index d9f2968..23fb9d0 100644
--- a/abs/core/rsync/PKGBUILD
+++ b/abs/core/rsync/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=rsync
-pkgver=3.0.4
-pkgrel=2
+pkgver=3.0.7
+pkgrel=1
pkgdesc="A file transfer program to keep remote files in sync"
arch=('i686' 'x86_64')
url="http://samba.anu.edu.au/rsync/"
@@ -9,12 +9,6 @@ depends=('acl')
backup=('etc/rsyncd.conf' 'etc/xinetd.d/rsync')
source=(http://rsync.samba.org/ftp/rsync/${pkgname}-${pkgver}.tar.gz \
rsyncd.conf rsyncd rsync.xinetd)
-md5sums=('2b2d159c9bd1b5f8adfd8b13da3a1f3f' '4395c0591638349b1a7aeaaa4da1f03a'\
- '9de4d03d49f4b5c73ffd67d452716a49' 'ea3e9277dc908bc51f9eddc0f6b935c1')
-sha1sums=('e89ed8d84fe0b6740208ba8183ee1dbc220ba5e5'
- '48be09294134dfed888818872fe552a59c29147a'
- 'ebec275bbd0c11692c91dc59368349601bd9eaf4'
- 'fdb99785bc87ee13d77aa90dc1804f3f75dd7fc1')
build() {
cd ${srcdir}/${pkgname}-${pkgver}
@@ -27,3 +21,7 @@ build() {
install -D -m 644 ../rsyncd.conf ${pkgdir}/etc/rsyncd.conf || return 1
install -D -m 644 ../rsync.xinetd ${pkgdir}/etc/xinetd.d/rsync || return 1
}
+md5sums=('b53525900817cf1ba7ad3a516ab5bfe9'
+ '4395c0591638349b1a7aeaaa4da1f03a'
+ '9de4d03d49f4b5c73ffd67d452716a49'
+ 'ea3e9277dc908bc51f9eddc0f6b935c1')
diff --git a/abs/core/rsync/__changelog b/abs/core/rsync/__changelog
new file mode 100644
index 0000000..e07c296
--- /dev/null
+++ b/abs/core/rsync/__changelog
@@ -0,0 +1 @@
+update to 3.0.7
diff --git a/abs/core/runit-scripts/PKGBUILD b/abs/core/runit-scripts/PKGBUILD
index 1615994..a8087bd 100755
--- a/abs/core/runit-scripts/PKGBUILD
+++ b/abs/core/runit-scripts/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=runit-scripts
pkgver=1.8.0
-pkgrel=95
+pkgrel=117
pkgdesc="collection of startup scripts for runit"
url="http://smarden.org/runit/"
license="BSD"
diff --git a/abs/core/runit-scripts/runitscripts/services/ddclient/run b/abs/core/runit-scripts/runitscripts/services/ddclient/run
new file mode 100755
index 0000000..c5488f6
--- /dev/null
+++ b/abs/core/runit-scripts/runitscripts/services/ddclient/run
@@ -0,0 +1,8 @@
+#!/bin/sh
+export TERM=linux
+. /etc/rc.conf
+. /etc/rc.d/functions
+stat_runit "Starting ddclient"
+
+
+exec /usr/sbin/ddclient -foreground &> /var/log/ddclient.log
diff --git a/abs/core/runit-scripts/runitscripts/services/frontend/finish b/abs/core/runit-scripts/runitscripts/services/frontend/finish
index 5b0bd5b..417488d 100755
--- a/abs/core/runit-scripts/runitscripts/services/frontend/finish
+++ b/abs/core/runit-scripts/runitscripts/services/frontend/finish
@@ -1,28 +1,45 @@
-#!/bin/bash
-exec 2>&1
-export TERM=linux
-. /etc/rc.conf
-. /etc/rc.d/functions
+#!/bin/bash
+exec 2>&1
+export TERM=linux
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+function cleanup(){
+ rm -f /etc/sv/frontend/.runtime/*
+ printhl " Cleaning up /etc/sv/frontend/.runtime/"
+}
grep -q nox /proc/cmdline
STATUS=$?
if [ $STATUS = 0 ]
then
+ printhl " status = 0"
chvt 2
else
+ pkill -f "X :0"
+ printhl " status = 1"
if [ ! -d /etc/sv/frontend/.runtime ]
then
- mkdir -p /etc/sv/frontend/.runtime
+ mkdir -p /etc/sv/frontend/.runtime
fi
touch /etc/sv/frontend/.runtime/`date +%s`
sleep 0.2
ps -U mythtv -ef |grep "/bin/sh /usr/bin/startx"|grep -v grep|awk ' { print $2 } '|xargs kill -9 2> /dev/null
cdate=`date`
- numfiles=`/usr/bin/file_time_offset.py -s10 -d/etc/sv/frontend/.runtime`
- if [ $numfiles -gt 2 ]
+ numfilestotal=`/usr/bin/file_time_offset.py -s0 -d/etc/sv/frontend/.runtime`
+ numfilesover10secondsold=`/usr/bin/file_time_offset.py -s10 -d/etc/sv/frontend/.runtime`
+ numfileslessthan10secondsold=$(($numfilestotal-$numfilesover10secondsold))
+ if [ $numfileslessthan10secondsold -gt 2 ]
then
sv stop frontend
- rm -f /etc/sv/frontend/.runtime/*
- printhl " Frontend is not able to start, disabling it."
+ printhl " Frontend disabled, due to many restarts."
+ printhl " Run \"sv start frontend\" to try again"
+ cleanup
+ else
+ if [ $numfilestotal -gt 10 ]
+ then
+ cleanup
+ fi
fi
fi
+
diff --git a/abs/core/runit-scripts/runitscripts/services/lircd/run b/abs/core/runit-scripts/runitscripts/services/lircd/run
index 0a398ac..3ff8af3 100755
--- a/abs/core/runit-scripts/runitscripts/services/lircd/run
+++ b/abs/core/runit-scripts/runitscripts/services/lircd/run
@@ -6,8 +6,6 @@ export TERM=linux
. /etc/rc.conf
. /etc/rc.d/functions
-#since what we do may not be enough
-#if your one of those people, this is where you place your stuff
LOG=/tmp/lirc.log
@@ -16,12 +14,17 @@ then
rm -f $LOG
fi
+#since what we do may not be enough
+#if your one of those people, this is where you place your stuff
+#This means place your lirc stuff in /etc/runit/lirc.sh.
+#Anything in that file will be used and the rest of this file is ignored
+
if [ -f /etc/runit/lirc.sh ]
then
#program must not terminate.
stat_runit "Starting lirc"
-
+
/etc/runit/lirc.sh
else
. /etc/systemconfig
@@ -55,8 +58,8 @@ else
then
#/dev/ttyS0 (COM1), port 0x3f8, irq 4
#/dev/ttyS1 (COM2), port 0x2f8, irq 3
- #/dev/ttyS2 (COM3), port 0x3e8, irq 4
- #/dev/ttyS3 (COM4), port 0x2e8, irq 3
+ #/dev/ttyS2 (COM3), port 0x3e8, irq 4
+ #/dev/ttyS3 (COM4), port 0x2e8, irq 3
case $serial_port in
ttyS0)
@@ -72,67 +75,74 @@ else
FLAGS="io=0x2e8 irq=3"
;;
esac
- /usr/bin/setserial /dev/serial_port uart none
- sleep 0.5
+ /usr/bin/setserial /dev/$serial_port uart none
+ sleep 0.5
/sbin/modprobe lirc_serial $FLAGS
- sleep 0.5
+ sleep 0.5
fi
dvico_detect
if [ x$HostBlasterType = xCommandIR -o x$ReceiverType = xCommandIR ]
then
- CMD="/usr/sbin/lircd -n --driver=commandir"
- printhl " Using commandir"
+ CMD="/usr/sbin/lircd -r -n --driver=commandir"
+ printhl " Using commandir"
$CMD >>$LOG 2>>$LOG
-#echo $CMD
+ #echo $CMD
elif [ x$HostBlasterType = xiguanaIR-usb -o x$ReceiverType = xiguanaIR-usb ]
then
- sv start igdaemon
- CMD="/usr/sbin/lircd -n --driver=iguanaIR"
- printhl " Using iguanaIR usb"
-#echo $CMD
+ sv start igdaemon
+ CMD="/usr/sbin/lircd -r -n --driver=iguanaIR"
+ printhl " Using iguanaIR usb"
+ #echo $CMD
$CMD >>$LOG 2>>$LOG
+
+ elif [ x$ReceiverType = "xSiliconDust_HDHR" ]
+ then
+ # if using the SiliconDust_HDHR as an I/R Receiver
+ printhl " Using SiliconDust on port 5000"
+ CMD="/usr/sbin/lircd -H udp -d 5000 -n"
+ exec $CMD >>$LOG 2>>$LOG
else
LASTCMD=""
for i in `seq 1 $num_lirc`
do
- CMD="/usr/sbin/lircd -d /dev/lirc$i --output=/dev/lircd$i --pidfile=/var/run/lircd$i.pid --listen=876$i"
- printhl " Device $i"
-#echo $CMD
+ CMD="/usr/sbin/lircd -r -d /dev/lirc$i --output=/dev/lircd$i --pidfile=/var/run/lircd$i.pid --listen=876$i"
+ printhl " Device $i"
+ #echo $CMD
$CMD >>$LOG 2>>$LOG
LASTCMD="--connect=localhost:876$i $LASTCMD "
done
- if [ $RunDvico = "true" ]
- then
- if [ x$Remotetype = "xdvico" ]
+ if [ $RunDvico = "true" ]
+ then
+ if [ x$Remotetype = "xdvico" ]
then
- LCMD="/usr/sbin/lircd -n -d /dev/usb/dvicoIR --driver=dvico --output /dev/lircd"
+ LCMD="/usr/sbin/lircd -r -n -d /dev/usb/dvicoIR --driver=dvico --output /dev/lircd"
else
- LCMD="/usr/sbin/lircd -n -d /dev/input/irremote --driver=devinput --output /dev/lircd"
+ LCMD="/usr/sbin/lircd -r -n -d /dev/input/irremote --driver=devinput --output /dev/lircd"
fi
- if [ $num_lirc -lt 0 ]
- then
- # Only run Dvico
- printhl " Device $Remotetype"
-#echo $LCMD
- exec $LCMD >>$LOG 2>>$LOG
- elif [ $num_lirc -gt -1 ]
- then
+ if [ $num_lirc -lt 0 ]
+ then
+ # Only run Dvico
+ printhl " Device $Remotetype"
+ #echo $LCMD
+ exec $LCMD >>$LOG 2>>$LOG
+ elif [ $num_lirc -gt -1 ]
+ then
i=$((i+1))
CMD="$LCMD --output=/dev/lircd$i --pidfile=/var/run/lircd$i.pid --listen=876$i"
$CMD >> $LOG
LASTCMD="--connect=localhost:876$i $LASTCMD "
- printhl " Device Dvico"
- /usr/sbin/lircd -n -d /dev/lirc0 --output /dev/lircd $LASTCMD >>$LOG 2>>$LOG
- fi
- else
- LCMD="/usr/sbin/lircd -n -d /dev/lirc0 --output /dev/lircd $LASTCMD"
-#echo $LCMD
- exec $LCMD >>$LOG 2>>$LOG
- fi
+ printhl " Device Dvico"
+ /usr/sbin/lircd -r -n -d /dev/lirc0 --output /dev/lircd $LASTCMD >>$LOG 2>>$LOG
+ fi
+ else
+ LCMD="/usr/sbin/lircd -r -n -d /dev/lirc0 --output /dev/lircd $LASTCMD"
+ #echo $LCMD
+ exec $LCMD >>$LOG 2>>$LOG
+ fi
fi
fi
diff --git a/abs/core/runit-scripts/runitscripts/services/mdadm/run b/abs/core/runit-scripts/runitscripts/services/mdadm/run
index 0ab432e..567332e 100755
--- a/abs/core/runit-scripts/runitscripts/services/mdadm/run
+++ b/abs/core/runit-scripts/runitscripts/services/mdadm/run
@@ -1,19 +1,10 @@
-#!/bin/bash
-#
-# Start Monitoring software raid arrays
-exec 2>&1
-export TERM=linux
-. /etc/rc.conf
-. /etc/rc.d/functions
-
-PID=`pidof -o %PPID /sbin/mdadm`
- stat_runit "Starting mdadm RAID Monitor"
- if [ -z "$PID" ]; then
- /sbin/mdadm -F -s
- fi
- if [ ! -z "$PID" -o $? -gt 0 ]; then
- stat_fail
- else
- add_daemon mdadm
- stat_done
- fi
+#!/bin/bash
+#
+# Start Monitoring software raid arrays
+exec 2>&1
+export TERM=linux
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+ stat_runit "Starting mdadm RAID Monitor"
+ exec /sbin/mdadm -F -s
diff --git a/abs/core/runit-scripts/runitscripts/services/nmbd/run b/abs/core/runit-scripts/runitscripts/services/nmbd/run
index 9ed032b..976cfc1 100755
--- a/abs/core/runit-scripts/runitscripts/services/nmbd/run
+++ b/abs/core/runit-scripts/runitscripts/services/nmbd/run
@@ -6,4 +6,4 @@ export TERM=linux
stat_runit "Starting NMBD"
-exec nmbd -F -S -d1 2>/dev/null >/dev/null
+exec nmbd -F 2>/dev/null >/dev/null
diff --git a/abs/core/runit-scripts/runitscripts/services/postfix/run b/abs/core/runit-scripts/runitscripts/services/postfix/run
new file mode 100755
index 0000000..1fa526e
--- /dev/null
+++ b/abs/core/runit-scripts/runitscripts/services/postfix/run
@@ -0,0 +1,8 @@
+#!/bin/bash
+exec 1>&2
+export TERM=linux
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+stat_runit "Starting postfix"
+exec /usr/lib/postfix/master -D
diff --git a/abs/core/runit-scripts/runitscripts/services/smbd/run b/abs/core/runit-scripts/runitscripts/services/smbd/run
index b4a545b..0fe0516 100755
--- a/abs/core/runit-scripts/runitscripts/services/smbd/run
+++ b/abs/core/runit-scripts/runitscripts/services/smbd/run
@@ -6,4 +6,4 @@ export TERM=linux
stat_runit "Starting Samba"
-exec smbd -F -S -d3 2>/dev/null >/dev/null
+exec smbd -F 2>/dev/null >/dev/null
diff --git a/abs/core/runit/PKGBUILD b/abs/core/runit/PKGBUILD
index 90bb57e2..bb3a4f5 100755
--- a/abs/core/runit/PKGBUILD
+++ b/abs/core/runit/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=runit
pkgver=1.8.0
-pkgrel=62
+pkgrel=64
pkgdesc="A replacement for sysvinit, and other init schemes, with service supervision"
url="http://smarden.org/runit/"
license="BSD"
@@ -64,3 +64,10 @@ build() {
}
+md5sums=('46549303a336bee8f627bfb399d44085'
+ '5828ac37537d60ded00252dc02d462c6'
+ '984dbe096b0db26ad9f3f5b51addd9c9'
+ 'e347ea8cf2981f2cd4105111ea1ce1d4'
+ '263198ec006b87891ea0f3ab1d103086'
+ '3ec5f3013dcbd60b6b957d17ba220585'
+ 'febe6821f4bea3bfa93f4b6d3df4d801')
diff --git a/abs/core/runit/shutdown.script b/abs/core/runit/shutdown.script
index 3bcc5d3..229996b 100755
--- a/abs/core/runit/shutdown.script
+++ b/abs/core/runit/shutdown.script
@@ -23,9 +23,8 @@ then
done
if [ x$delay = x ]
then
- echo "-t is mandatory"
- exit 4
- fi
+ delay=0
+ fi
if [ x$reboot = x1 ]
then
diff --git a/abs/core/samba/PKGBUILD b/abs/core/samba/PKGBUILD
index 24b2dba..44996c6 100644
--- a/abs/core/samba/PKGBUILD
+++ b/abs/core/samba/PKGBUILD
@@ -1,39 +1,91 @@
-# $Id: PKGBUILD 37517 2009-05-02 16:35:12Z tpowa $
-# Maintainer: judd <jvinet@zeroflux.org>
-pkgname=samba
-pkgver=3.3.4
+# $Id: PKGBUILD 64318 2010-01-19 19:31:39Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+pkgbase=samba
+pkgname=('smbclient' 'samba')
+pkgver=3.4.5
# We use the 'A' to fake out pacman's version comparators. Samba chooses
# to append 'a','b',etc to their subsequent releases, which pamcan
# misconstrues as alpha, beta, etc. Bad samba!
-_realver=3.3.4
-pkgrel=1
-pkgdesc="Tools to access a server's filespace and printers via SMB"
+_realver=3.4.5
+pkgrel=3
arch=(i686 x86_64)
url="http://www.samba.org"
license=('GPL3')
-backup=(etc/logrotate.d/samba etc/pam.d/samba etc/samba/smb.conf etc/xinetd.d/swat etc/conf.d/samba)
-depends=('db>=4.7' 'popt' 'libcups' 'acl' 'libldap' 'smbclient=3.3.4' 'libcap>=2.16' 'heimdal>=1.2-1' 'pam' 'gnutls>=2.4.1' 'tdb=3.3.4')
+makedepends=('db>=4.7' 'popt' 'libcups' 'acl' 'libldap' 'libcap>=2.16' 'heimdal>=1.2-1' 'pam' 'gnutls>=2.4.1' 'talloc' 'tdb')
options=(!makeflags)
-source=(http://us1.samba.org/samba/ftp/stable/${pkgname}-${_realver}.tar.gz \
- no-clients.patch samba samba.logrotate swat.xinetd samba.pam samba.conf.d)
+source=(http://us1.samba.org/samba/ftp/stable/${pkgbase}-${_realver}.tar.gz
+ samba samba.logrotate
+ swat.xinetd
+ samba.pam
+ samba.conf.d)
+### UNINSTALL dmapi package before building!!!
build() {
- cd ${srcdir}/${pkgname}-${_realver}/source
- patch -Np2 -i ${srcdir}/no-clients.patch || return 1
-
- ./configure --prefix=/usr --with-configdir=/etc/samba \
+ cd ${srcdir}/${pkgbase}-${_realver}/source3
+ ./configure --prefix=/usr \
+ --libdir=/usr/lib/ \
+ --localstatedir=/var \
+ --with-configdir=/etc/samba \
--with-lockdir=/var/cache/samba \
--with-piddir=/var/run/samba \
- --with-fhs --with-pam --with-ads --with-acl-support \
- --without-cifsmount --without-libsmbclient \
- --with-syslog --with-pam_smbpass \
- --localstatedir=/var --disable-dnssd \
- --disable-avahi --libdir=/usr/lib/samba --without-fam
+ --with-fhs \
+ --with-pam \
+ --with-pam_smbpass \
+ --with-pammodulesdir=/lib/security \
+ --with-ads \
+ --with-acl-support \
+ --with-cifsmount \
+ --with-libsmbclient \
+ --with-syslog \
+ --enable-external-libtalloc \
+ --disable-dnssd \
+ --disable-avahi \
+ --without-libtdb --disable-fam
make || return 1
+}
+
+package_smbclient () {
+pkgdesc="Tools to access a server's filespace and printers via SMB"
+depends=('readline>=5.0.00' 'popt' 'libldap>=2.4.11-1' 'libcap>=2.16' 'heimdal>=1.2-1' 'db>=4.7' 'e2fsprogs' 'tdb' 'talloc')
+ cd ${srcdir}/${pkgbase}-${_realver}/source3
+ mkdir -p ${pkgdir}/usr/bin ${pkgdir}/sbin ${pkgdir}/usr/lib
+ install -m755 bin/{smbclient,rpcclient,smbspool,smbtree,smbcacls,smbcquotas,smbget,net,nmblookup} ${pkgdir}/usr/bin/
+ install -m755 bin/{mount.cifs,umount.cifs} ${pkgdir}/sbin/
+ for i in libnetapi* libwbclient* libsmbclient*;do
+ cp -a bin/${i}*.so* ${pkgdir}/usr/lib/
+ done
+ install -m755 script/smbtar ${pkgdir}/usr/bin/
+ mkdir -p ${pkgdir}/usr/lib/cups/backend
+ ln -sf /usr/bin/smbspool ${pkgdir}/usr/lib/cups/backend/smb
+ mkdir -p ${pkgdir}/usr/include
+ install -m644 include/libsmbclient.h ${pkgdir}/usr/include/
+ install -m644 lib/netapi/netapi.h ${pkgdir}/usr/include/
+ mkdir -p ${pkgdir}/usr/share/man/man{1,7,8}
+ for man in smbspool \
+ umount.cifs mount.cifs net; do
+ install -m644 ../docs/manpages/${man}.8 ${pkgdir}/usr/share/man/man8/
+ done
+ for man in rpcclient smbcacls smbclient smbcquotas smbget \
+ smbtree smbtar nmblookup; do
+ install -m644 ../docs/manpages/${man}.1 ${pkgdir}/usr/share/man/man1/
+ done
+ install -m644 ../docs/manpages/libsmbclient.7 ${pkgdir}/usr/share/man/man7/
+}
+
+package_samba () {
+pkgdesc="Tools to access a server's filespace and printers via SMB"
+backup=(etc/logrotate.d/samba
+ etc/pam.d/samba
+ etc/samba/smb.conf
+ etc/xinetd.d/swat
+ etc/conf.d/samba)
+depends=('db>=4.7' 'popt' 'libcups' 'acl' 'libldap' "smbclient>=$pkgver" 'libcap>=2.16' 'heimdal>=1.2-1' 'pam' 'fam' 'gnutls>=2.4.1' 'e2fsprogs' 'tdb' 'talloc')
+ cd ${srcdir}/samba-${_realver}/source3
mkdir -p ${pkgdir}/var/log/samba
mkdir -p ${pkgdir}/etc/samba/private
chmod 700 ${pkgdir}/etc/samba/private
- make DESTDIR=$startdir/pkg install
+ make DESTDIR=${pkgdir} install || return 1
chmod 644 ${pkgdir}/usr/include/*.h
rm -rf ${pkgdir}/usr/var
(cd script; cp installbin.sh i; cat i | sed 's/\/sbin\///' > installbin.sh)
@@ -45,42 +97,41 @@ build() {
install -D -m644 ../../samba.logrotate ${pkgdir}/etc/logrotate.d/samba
install -D -m644 ../../swat.xinetd ${pkgdir}/etc/xinetd.d/swat
install -D -m644 ../../samba.pam ${pkgdir}/etc/pam.d/samba
- # symlink libs
- for i in ${pkgdir}/usr/lib/samba/libsmbshare*; do
- ln -sf samba/$(basename $i) ${pkgdir}/usr/lib/$(basename $i)
- done
# spool directory
install -d -m1777 ${pkgdir}/var/spool/samba
sed -i 's|/usr/spool/samba|/var/spool/samba|g' ${pkgdir}/etc/samba/smb.conf.default
# fix logrotate
sed -i -e 's|log.%m|%m.log|g' ${pkgdir}/etc/samba/smb.conf.default
# nsswitch libraries
- install -D -m755 nsswitch/libnss_wins.so ${pkgdir}/lib/libnss_wins.so
+ install -D -m755 ${srcdir}/samba-${_realver}/nsswitch/libnss_wins.so ${pkgdir}/lib/libnss_wins.so
ln -s libnss_wins.so ${pkgdir}/lib/libnss_wins.so.2
- install -D -m755 nsswitch/libnss_winbind.so ${pkgdir}/lib/libnss_winbind.so
- install -D -m755 bin/pam_winbind.so ${pkgdir}/lib/security/pam_winbind.so
- # remove conflict files of smbclient and tdb
+ install -D -m755 ${srcdir}/samba-${_realver}/nsswitch/libnss_winbind.so ${pkgdir}/lib/libnss_winbind.so
+ # remove conflict files of smbclient
for man in libsmbclient smbspool \
umount.cifs mount.cifs net; do
- rm -f ${pkgdir}/usr/share/man/man8/${man}.8
+ rm -f ${pkgdir}/usr/share/man/man8/${man}.8
+ done
+ for i in libnetapi* libwbclient* libsmbclient*;do
+ rm -f ${pkgdir}/usr/lib/$i
done
- for i in libnetapi* libtdb* libtalloc* libwbclient*; do
- rm -f ${pkgdir}/usr/lib/samba/$i
+ for bin in net \
+ nmblookup rpcclient smbcacls smbclient \
+ smbcquotas smbget smbspool smbtar smbtree; do
+ rm -f ${pkgdir}/usr/bin/$bin
done
- rm -f ${pkgdir}/usr/bin/tdbbackup
- rm -f ${pkgdir}/usr/include/{tdb.h,talloc.h,netapi.h}
+ rm -f ${pkgdir}/usr/include/netapi.h
for man in rpcclient smbcacls smbclient smbcquotas \
smbtree smbtar nmblookup smbget; do
- rm -f ${pkgdir}/usr/share/man/man1/${man}.1
+ rm -f ${pkgdir}/usr/share/man/man1/${man}.1
done
rm -f ${pkgdir}/usr/share/man/man7/libsmbclient.7
-
rm -f ${pkgdir}/usr/include/libsmbclient.h
+ # remove conflict files of tdb
+ rm -f ${pkgdir}/usr/bin/{tdbbackup,tdbdump,tdbtool}
# copy ldap example
- install -D -m644 ${srcdir}/${pkgname}-${_realver}/examples/LDAP/samba.schema ${pkgdir}/usr/share/doc/samba/examples/LDAP/samba.schema
+ install -D -m644 ${srcdir}/samba-${_realver}/examples/LDAP/samba.schema ${pkgdir}/usr/share/doc/samba/examples/LDAP/samba.schema
}
-md5sums=('1443165edb7cb3f56f1e77aec1ee3266'
- 'ce3d88336ade7522e9a8f59bb306accd'
+md5sums=('8e8a484782f2b7716b6c6bd9a7d2bf71'
'e93533fa2296c07c1f645dfdd373657f'
'5697da77590ec092cc8a883bae06093c'
'a4bbfa39fee95bba2e7ad6b535fae7e6'
diff --git a/abs/core/sdparm/PKGBUILD b/abs/core/sdparm/PKGBUILD
index d6b7155..e0019e1 100644
--- a/abs/core/sdparm/PKGBUILD
+++ b/abs/core/sdparm/PKGBUILD
@@ -3,15 +3,15 @@
# Contributor: grimi@poczta.fm
pkgname=sdparm
-pkgver=1.02
-pkgrel=2
+pkgver=1.05
+pkgrel=1
pkgdesc="An utility similar to hdparm but for SCSI devices"
arch=('i686' 'x86_64')
-url="http://sg.torque.net/sg/sdparm.html"
+url="http://sg.danny.cz/sg/sdparm.html"
groups=('base')
license=('BSD')
depends=('glibc')
-source=("http://sg.torque.net/sg/p/$pkgname-$pkgver.tgz")
+source=("http://sg.danny.cz/sg/p/$pkgname-$pkgver.tgz")
build() {
cd $startdir/src/$pkgname-$pkgver
@@ -20,3 +20,4 @@ build() {
make DESTDIR=$startdir/pkg install || return 1
install -Dm644 COPYING $startdir/pkg/usr/share/licenses/sdparm/COPYING
}
+md5sums=('8f42a10c5f4a826a29d6f5ccccf0c280')
diff --git a/abs/core/setuptools/PKGBUILD b/abs/core/setuptools/PKGBUILD
index 53c26a9..022f939 100644
--- a/abs/core/setuptools/PKGBUILD
+++ b/abs/core/setuptools/PKGBUILD
@@ -4,8 +4,8 @@
# Contributor: Todd Maynard <arch@toddmaynard.com>
pkgname=setuptools
-pkgver=0.6c9
-pkgrel=2
+pkgver=0.6c11
+pkgrel=1
pkgdesc="setuptools is a collection of enhancements to the Python distutils"
license=('PSF')
arch=(i686 x86_64)
@@ -13,11 +13,11 @@ url="http://peak.telecommunity.com/DevCenter/setuptools"
depends=('python')
source=(http://cheeseshop.python.org/packages/source/s/$pkgname/$pkgname-$pkgver.tar.gz)
-md5sums=('3864c01d9c719c8924c455714492295e')
-
build() {
cd $startdir/src/$pkgname-$pkgver
mkdir -p $startdir/pkg/usr/lib/python2.6/site-packages
python setup.py install --root=$startdir/pkg
echo "/usr/lib/python2.6/site-packages/$pkgname-$pkgver-py2.6.egg" > $startdir/pkg/usr/lib/python2.6/site-packages/setuptools.pth
}
+
+md5sums=('7df2a529a074f613b509fb44feefe74e')
diff --git a/abs/core/sudo/PKGBUILD b/abs/core/sudo/PKGBUILD
index 64d8acd..7226f0c 100644
--- a/abs/core/sudo/PKGBUILD
+++ b/abs/core/sudo/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=sudo
-pkgver=1.7.0
-pkgrel=3
+pkgver=1.7.3
+pkgrel=1
pkgdesc="Give certain users the ability to run some commands as root"
arch=(i686 x86_64)
url="http://www.sudo.ws/sudo/"
@@ -25,3 +25,5 @@ build() {
install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/sudo/LICENSE \
|| return 1
}
+md5sums=('c22115b47cb2591bceedb914b673f031'
+ '4e7ad4ec8f2fe6a40e12bcb2c0b256e3')
diff --git a/abs/core/syslog-ng/PKGBUILD b/abs/core/syslog-ng/PKGBUILD
index 3e5b473..2602964 100644
--- a/abs/core/syslog-ng/PKGBUILD
+++ b/abs/core/syslog-ng/PKGBUILD
@@ -1,8 +1,9 @@
# $Id: PKGBUILD 2319 2008-05-31 21:01:41Z eric $
# Maintainer: Judd Vinet <jvinet@zeroflux.org>
pkgname=syslog-ng
-pkgver=2.0.9
-pkgrel=10
+_pkgver=2.0.10
+pkgver=2.0.9.10
+pkgrel=11
pkgdesc="Next-generation syslogd with advanced networking and filtering capabilities"
arch=(i686 x86_64)
license=('GPL')
@@ -12,13 +13,15 @@ depends=('logrotate' 'glibc')
makedepends=('flex' 'glib2' 'eventlog' 'pkgconfig' 'tcp_wrappers')
provides=('logger')
backup=('etc/syslog-ng.conf' 'etc/logrotate.d/syslog-ng')
-source=(http://www.balabit.com/downloads/files/syslog-ng/sources/stable/src/$pkgname-$pkgver.tar.gz \
+source=(http://www.balabit.com/downloads/files/syslog-ng/sources/${_pkgver}/source/${pkgname}_${_pkgver}.tar.gz \
syslog-ng.conf syslog-ng.logrotate syslog-ng)
-md5sums=('2d4232f7167c2b4f48794e4f8f80e863' 'ee95af3a4f969f3759e477289305c8c6'\
- '9714c7479119922b55a7992677ebecb5' '9bd98250cfa49e13fa3fa731b6040549')
+md5sums=('e5ca55796c11899739affa417ff8a71e'
+ 'ee95af3a4f969f3759e477289305c8c6'
+ '65d52180f1762e3985168fffa1faf0a8'
+ '9bd98250cfa49e13fa3fa731b6040549')
build() {
- cd $startdir/src/$pkgname-$pkgver
+ cd $startdir/src/$pkgname-${_pkgver}
./configure --prefix=/usr --sysconfdir=/etc \
--localstatedir=/var/lib/syslog-ng --enable-tcp-wrapper \
--disable-spoof-source
diff --git a/abs/core/syslog-ng/syslog-ng.logrotate b/abs/core/syslog-ng/syslog-ng.logrotate
index 75da1b0..b26dfb4 100644
--- a/abs/core/syslog-ng/syslog-ng.logrotate
+++ b/abs/core/syslog-ng/syslog-ng.logrotate
@@ -2,6 +2,6 @@
missingok
sharedscripts
postrotate
- /bin/kill -HUP `cat /var/run/syslog-ng.pid 2>/dev/null` 2> /dev/null || true
+ /usr/bin/killall -HUP -q syslog-ng
endscript
}
diff --git a/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircd-haupgrey-alt.conf b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircd-haupgrey-alt.conf
new file mode 100644
index 0000000..c0849ef
--- /dev/null
+++ b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircd-haupgrey-alt.conf
@@ -0,0 +1,199 @@
+#
+# this config file was automatically generated
+# using lirc-0.5.5pre8 on Sun Apr 18 11:43:45 1999
+#
+# contributed by Jens Leuschner <leuschner@gmx.net>
+#
+# brand: Hauppauge
+# model:
+# supported devices: WinTV primo; WinTV pci; WinTV radio
+#
+# This config file will work with both homebrew receivers and
+# original Hauppauge TV cards !!!
+#
+
+begin remote
+
+ name Hauppauge
+ bits 13
+ flags SHIFT_ENC
+ eps 30
+ aeps 100
+
+ one 950 830
+ zero 950 830
+ plead 960
+ gap 89584
+ repeat_bit 2
+
+ begin codes
+ TV 0x000000000000100F
+ RADIO 0x000000000000100C
+ FULL_SCREEN 0x000000000000102E
+ CH+ 0x0000000000001020
+ CH- 0x0000000000001021
+ VOL- 0x0000000000001011
+ VOL+ 0x0000000000001010
+ MUTE 0x000000000000100D
+ SOURCE 0x0000000000001022
+ 1 0x0000000000001001
+ 2 0x0000000000001002
+ 3 0x0000000000001003
+ 4 0x0000000000001004
+ 5 0x0000000000001005
+ 6 0x0000000000001006
+ 7 0x0000000000001007
+ 8 0x0000000000001008
+ 9 0x0000000000001009
+ 0 0x0000000000001000
+ RESERVED 0x000000000000101E
+ MINIMIZE 0x0000000000001026
+ end codes
+
+end remote
+
+
+#
+# this config file was automatically generated
+# using lirc-0.6.6(animax) on Tue Apr 15 19:50:27 2003
+#
+# contributed by
+#
+# brand: Hauppauge
+# model no. of remote control:
+# devices being controlled by this remote: PVR 2/350
+#
+
+begin remote
+
+ name hauppauge_pvr
+ bits 13
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 969 811
+ zero 969 811
+ plead 1097
+ gap 114605
+ toggle_bit 2
+
+
+ begin codes
+ Power 0x00000000000017FD
+ Go 0x00000000000017FB
+ 1 0x00000000000017C1
+ 2 0x00000000000017C2
+ 3 0x00000000000017C3
+ 4 0x00000000000017C4
+ 5 0x00000000000017C5
+ 6 0x00000000000017C6
+ 7 0x00000000000017C7
+ 8 0x00000000000017C8
+ 9 0x00000000000017C9
+ Back/Exit 0x00000000000017DF
+ 0 0x00000000000017C0
+ Menu 0x00000000000017CD
+ Red 0x00000000000017CB
+ Green 0x00000000000017EE
+ Yellow 0x00000000000017F8
+ Blue 0x00000000000017E9
+ Ch+ 0x00000000000017E0
+ Ch- 0x00000000000017E1
+ Vol- 0x00000000000017D1
+ Vol+ 0x00000000000017D0
+ Ok 0x00000000000017E5
+ Mute 0x00000000000017CF
+ Blank 0x00000000000017CC
+ Full 0x00000000000017FC
+ Rewind 0x00000000000017F2
+ Play 0x00000000000017F5
+ Forward 0x00000000000017F4
+ Record 0x00000000000017F7
+ Stop 0x00000000000017F6
+ Pause 0x00000000000017F0
+ Replay 0x00000000000017E4
+ Skip 0x00000000000017DE
+ end codes
+
+end remote
+
+
+#
+# this config file was automatically generated
+# using lirc-0.7.0(any) on Sun Nov 28 20:25:09 2004
+#
+# contributed by
+#
+# brand: Hauppauge 350
+# Created: G.J. Werler (The Netherlands)
+# Project: Mythtv Fedora Pundit-R www.mythtvportal.com
+# Date: 2004/11/28
+# model no. of remote control: Hauppauge A415-HPG
+# devices being controlled by this remote: PVR-350
+#
+
+begin remote
+
+ name Hauppauge_350
+ bits 13
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 969 811
+ zero 969 811
+ plead 1097
+ gap 114605
+ toggle_bit 2
+
+
+ begin codes
+ Go 0x00000000000017BB
+ Power 0x00000000000017BD
+ TV 0x000000000000179C
+ Videos 0x0000000000001798
+ Music 0x0000000000001799
+ Pictures 0x000000000000179A
+ Guide 0x000000000000179B
+ Radio 0x000000000000178C
+ Up 0x0000000000001794
+ Left 0x0000000000001796
+ Right 0x0000000000001797
+ Down 0x0000000000001795
+ OK 0x00000000000017A5
+ Back/Exit 0x000000000000179F
+ Menu/i 0x000000000000178D
+ Vol+ 0x0000000000001790
+ Vol- 0x0000000000001791
+ Prev.Ch 0x0000000000001792
+ Mute 0x000000000000178F
+ Ch+ 0x00000000000017A0
+ Ch- 0x00000000000017A1
+ Record 0x00000000000017B7
+ Stop 0x00000000000017B6
+ Rewind 0x00000000000017B2
+ Play 0x00000000000017B5
+ Forward 0x00000000000017B4
+ Replay/SkipBackward 0x00000000000017A4
+ Pause 0x00000000000017B0
+ SkipForward 0x000000000000179E
+ 1 0x0000000000001781
+ 2 0x0000000000001782
+ 3 0x0000000000001783
+ 4 0x0000000000001784
+ 5 0x0000000000001785
+ 6 0x0000000000001786
+ 7 0x0000000000001787
+ 8 0x0000000000001788
+ 9 0x0000000000001789
+ Asterix 0x000000000000178A
+ 0 0x0000000000001780
+ # 0x000000000000178E
+ Red 0x000000000000178B
+ Green 0x00000000000017AE
+ Yellow 0x00000000000017B8
+ Blue 0x00000000000017A9
+ end codes
+
+end remote
diff --git a/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircrc-haupgrey-alt b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircrc-haupgrey-alt
new file mode 100644
index 0000000..f86246a
--- /dev/null
+++ b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircrc-haupgrey-alt
@@ -0,0 +1,533 @@
+# put this in /usr/MythVantage/templates/remotes/hauppauge-grey/
+# then change /etc/lircrc to include it
+#
+# lircrc.example.HauppaugeGrey-nativelirc
+# 2003-09-17, Robert Kulagowski
+# mailto:rkulagow@rocketmail.com
+# Save this file in ~/.mythtv/lircrc
+
+begin
+ prog = mythtv
+ button = Power
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = Go
+# Swap the PiP windows
+ config = N
+end
+
+begin
+ prog = mythtv
+ button = 1
+ config = 1
+end
+
+begin
+ prog = mythtv
+ button = 2
+ config = 2
+end
+
+begin
+ prog = mythtv
+ button = 3
+ config = 3
+end
+
+begin
+ prog = mythtv
+ button = 4
+ config = 4
+end
+
+begin
+ prog = mythtv
+ button = 5
+ config = 5
+end
+
+begin
+ prog = mythtv
+ button = 6
+ config = 6
+end
+
+begin
+ prog = mythtv
+ button = 7
+ config = 7
+end
+
+begin
+ prog = mythtv
+ button = 8
+ config = 8
+end
+
+begin
+ prog = mythtv
+ button = 9
+ config = 9
+end
+
+begin
+ prog = mythtv
+ button = Back/Exit
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = 0
+ config = 0
+end
+
+begin
+ prog = mythtv
+ button = Menu
+ config = M
+end
+
+# Below are keys used with the Hauppauge Grey remote
+
+begin
+ prog = mythtv
+# This is the Red key
+# We'll use it for "Delete"
+ button = Red
+ config = Space
+end
+
+begin
+ prog = mythtv
+# This is the Green key
+# We'll use it for "Information"
+ button = Green
+ config = I
+end
+
+# Note the "repeat = " strings in the volume and channel.
+# This means that if you hold down the key, every nth instance will be
+# passed. This depends on your system, so you may want to increase or
+# decrease this and see what happens. repeat = 1 is probably too
+# fast.
+
+begin
+ prog = mythtv
+# This is the Yellow key
+# Use it as a volume key
+ button = Yellow
+ repeat = 3
+ config = F10
+end
+
+begin
+ prog = mythtv
+# This is the Blue key
+# Use it as a volume key
+ button = Blue
+ repeat = 3
+ config = F11
+end
+
+begin
+ prog = mythtv
+ button = Ch+
+# This is the "up" on the central diamond
+ repeat = 3
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = Ch-
+# This is the "down" on the central diamond
+ repeat = 3
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = Vol-
+# This is the "left" on the central diamond
+ repeat = 3
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = Vol+
+# This is the "right" on the central diamond
+ repeat = 3
+ config = Right
+end
+
+begin
+ prog = mythtv
+# Middle button on the diamond
+ button = Ok
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = Mute
+ config = F9
+end
+
+begin
+ prog = mythtv
+# Change focus for PiP (to change channel in the other window)
+ button = Blank
+ config = B
+end
+
+begin
+ prog = mythtv
+# Toggle PiP on/off
+ button = Full
+ config = V
+end
+
+begin
+ prog = mythtv
+ button = Rewind
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = Play
+ config = P
+end
+
+begin
+ prog = mythtv
+ button = Forward
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = Record
+ config = R
+end
+
+begin
+ prog = mythtv
+# Teletext
+ button = Stop
+ config = T
+end
+
+begin
+ prog = mythtv
+ button = Pause
+ config = P
+end
+
+begin
+ prog = mythtv
+ button = Replay
+# Use for backwards commercial skip
+ config = Q
+end
+
+begin
+ prog = mythtv
+ button = Skip
+# Use for forward commercial skip
+ config = Z
+end
+
+#MPlayer
+begin
+ prog = mplayer
+ button = Power
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = Menu
+ config = osd
+end
+
+begin
+ prog = mplayer
+ button = Rewind
+ config = seek -10
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Forward
+ config = seek +10
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Vol-
+ config = seek -15
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Vol+
+ config = seek +15
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Replay
+ config = seek -60
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Skip
+ config = seek +60
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Pause
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = OK
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = Play
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = Back/Exit
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = Play
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = Ch+
+ config = volume +1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Ch-
+ config = volume -1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Mute
+ config = mute
+end
+##XINE
+
+ begin
+ prog = xine
+ button = Play
+ repeat = 3
+ config = Play
+ end
+
+ begin
+ prog = xine
+ button = Stop
+ repeat = 3
+ config = Stop
+ end
+
+ begin
+ prog = xine
+ button = Back/Exit
+ config = Quit
+ end
+
+ begin
+ prog = xine
+ button = Pause
+ repeat = 3
+ config = Pause
+ end
+
+ begin
+ prog = xine
+ button = Ch+
+ repeat = 4
+ config = EventUp
+ end
+
+ begin
+ prog = xine
+ button = Ch-
+ repeat = 4
+ config = EventDown
+ end
+
+ begin
+ prog = xine
+ button = Vol-
+ repeat = 4
+ config = EventLeft
+ end
+
+ begin
+ prog = xine
+ button = Vol+
+ repeat = 4
+ config = EventRight
+ end
+
+ begin
+ prog = xine
+ button = Ok
+ repeat = 0
+ config = EventSelect
+ end
+
+ begin
+ prog = xine
+ button = Menu
+ repeat = 0
+ config = Menu
+ end
+
+ #vol down
+ begin
+ prog = xine
+ button = Yellow
+ repeat = 1
+ config = Volume-
+ end
+
+ #vol up
+ begin
+ prog = xine
+ button = Red
+ repeat = 1
+ config = Volume+
+ end
+
+ begin
+ prog = xine
+ button = Forward
+ repeat = 2
+ config = SeekRelative+30
+ end
+
+ begin
+ prog = xine
+ button = Rewind
+ repeat = 2
+ config = SeekRelative-30
+ end
+
+ #ch up
+ begin
+ prog = xine
+ button = Green
+ repeat = 1
+ config = SeekRelative+60
+ end
+
+ #ch down
+ begin
+ prog = xine
+ button = Blue
+ repeat = 1
+ config = SeekRelative-60
+ end
+
+ #sleep
+ begin
+ prog = xine
+ button = Go
+ repeat = 1
+ config = ZoomIn
+ end
+
+ #display
+ begin
+ prog = xine
+ button = Skip
+ repeat = 1
+ config = ZoomOut
+ end
+
+ #skip chapter forward
+ begin
+ prog = xine
+ button = Skip
+ repeat = 1
+ config = EventNext
+ end
+
+ #skip chapter backward
+ begin
+ prog = xine
+ button = Replay
+ repeat = 1
+ config = EventPrior
+ end
+
+ begin
+ prog = lircnav
+ button = Vol-
+ config = page_down
+ end
+
+ begin
+ prog = lircnav
+ button = Vol+
+ config = page_up
+ end
+
+ begin
+ prog = lircnav
+ button = Ch+
+ config = up
+ end
+
+ begin
+ prog = lircnav
+ button = Ch-
+ config = down
+ end
+
+ begin
+ prog = lircnav
+ button = Ok
+ config = select
+ end
+
+ begin
+ prog = lircnav
+ button = Power
+ config = quit
+ end
diff --git a/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/preview.jpg b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/preview.jpg
new file mode 100644
index 0000000..19acba3
--- /dev/null
+++ b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/preview.jpg
Binary files differ
diff --git a/abs/core/system-templates/templates/remotes/imon/lircrc b/abs/core/system-templates/templates/remotes/imon/lircrc
new file mode 100644
index 0000000..3ad34d8
--- /dev/null
+++ b/abs/core/system-templates/templates/remotes/imon/lircrc
@@ -0,0 +1,240 @@
+###################################
+# lircrc config as used by Stev391 June 2007
+# Not all of the buttons are configured yet, only the commonly used buttons
+###################################
+
+# Escape
+begin
+ prog = mythtv
+ button = AppExit
+ config = Esc
+ repeat = 3
+end
+
+# Escape Key 2
+begin
+ prog = mythtv
+ button = Esc
+ config = Esc
+end
+
+# Channel Up
+begin
+ prog = mythtv
+ button = Ch+
+ config = Up
+ repeat = 3
+end
+
+# Channel Down
+begin
+ prog = mythtv
+ button = Ch-
+ config = Down
+ repeat = 3
+end
+
+# Volume Up
+begin
+ prog = mythtv
+ button = Vol+
+ repeat = 3
+ config = Right
+end
+
+# Volume Down
+begin
+ prog = mythtv
+ button = Vol-
+ repeat = 3
+ config = Left
+end
+
+# Enter/Return
+begin
+ prog = mythtv
+ button = Enter
+ config = Return
+end
+
+# Menu Button
+begin
+ prog = mythtv
+ button = Menu
+ config = M
+end
+
+# Mute
+begin
+ prog = mythtv
+ button = Mute
+ config = F9
+end
+
+# Rewind
+begin
+ prog = mythtv
+ button = Rewind
+ config = PgUp
+end
+
+# Fast Forward
+begin
+ prog = mythtv
+ button = FastForward
+ config = PgDown
+end
+
+# Play
+begin
+ prog = mythtv
+ button = Play
+ config = P
+end
+
+# Pause
+begin
+ prog = mythtv
+ button = Pause
+ config = P
+end
+
+# Record
+begin
+ prog = mythtv
+ button = Record
+ config = R
+end
+
+# Stop
+begin
+ prog = mythtv
+ button = Stop
+ config = O
+end
+
+# Previous Track/Chapter
+begin
+ prog = mythtv
+ button = PrevChapter
+ config = Home
+end
+
+# Next Track/Chapter
+begin
+ prog = mythtv
+ button = NextChapter
+ config = End
+end
+
+# Jump Point to MythVideo
+begin
+ prog = mythtv
+ button = MyMovie
+ config = F12
+end
+
+# Jump Point to MythMusic
+begin
+ prog = mythtv
+ button = MyMusic
+ config = F11
+end
+
+# Jump Point to LiveTV
+begin
+ prog = mythtv
+ button = MyTV
+ config = F10
+end
+
+# Jump Point to Main Menu
+begin
+ prog = mythtv
+ button = Multimon
+ config = F2
+end
+
+# Jump Point to Myth Gallery
+begin
+ prog = mythtv
+ button = MyPhoto
+ config = F3
+end
+
+# Jump Point to Play DVD
+begin
+ prog = mythtv
+ button = MyDVD
+ config = F4
+end
+
+# Display Information
+begin
+ prog = mythtv
+ button = Caption
+ config = I
+end
+
+##############################
+# Numbers
+##############################
+begin
+ prog = mythtv
+ button = 0
+ config = 0
+end
+
+begin
+ prog = mythtv
+ button = 1
+ config = 1
+end
+
+begin
+ prog = mythtv
+ button = 2
+ config = 2
+end
+
+begin
+ prog = mythtv
+ button = 3
+ config = 3
+end
+
+begin
+ prog = mythtv
+ button = 4
+ config = 4
+end
+
+begin
+ prog = mythtv
+ button = 5
+ config = 5
+end
+
+begin
+ prog = mythtv
+ button = 6
+ config = 6
+end
+
+begin
+ prog = mythtv
+ button = 7
+ config = 7
+end
+
+begin
+ prog = mythtv
+ button = 8
+ config = 8
+end
+
+begin
+ prog = mythtv
+ button = 9
+ config = 9
+end
diff --git a/abs/core/system-templates/templates/remotes/streamzap/lircd.conf.streamzap b/abs/core/system-templates/templates/remotes/streamzap/lircd.conf.streamzap
index 8e453b9..36b52fa 100644
--- a/abs/core/system-templates/templates/remotes/streamzap/lircd.conf.streamzap
+++ b/abs/core/system-templates/templates/remotes/streamzap/lircd.conf.streamzap
@@ -62,6 +62,9 @@ begin remote
GREEN 0x21
YELLOW 0x22
BLUE 0x23
+ DISP 0x24
+ PTZ 0x25
+ HELP 0x26
end codes
end remote
diff --git a/abs/core/system-templates/templates/samba/smb.conf.template b/abs/core/system-templates/templates/samba/smb.conf.template
index da1e89e..478ea6b 100644
--- a/abs/core/system-templates/templates/samba/smb.conf.template
+++ b/abs/core/system-templates/templates/samba/smb.conf.template
@@ -18,7 +18,8 @@
; hosts allow = 192.168.1. 192.168.2. 127.
load printers = no
-
+ printing = bsd
+ printcap name = /dev/null
# you may wish to override the location of the printcap file
; printcap name = /etc/printcap
diff --git a/abs/core/system-templates/templates/settings/default_1/jumppoints.txt b/abs/core/system-templates/templates/settings/default_1/jumppoints.txt
new file mode 100644
index 0000000..1cbf116
--- /dev/null
+++ b/abs/core/system-templates/templates/settings/default_1/jumppoints.txt
@@ -0,0 +1,44 @@
+destination description keylist hostname
+Reload Theme REPLACEME
+Main Menu REPLACEME
+Program Guide REPLACEME
+Program Finder REPLACEME
+Manage Recordings / Fix Conflicts REPLACEME
+Program Recording Priorities REPLACEME
+Manage Recording Rules REPLACEME
+Channel Recording Priorities REPLACEME
+TV Recording Playback REPLACEME
+TV Recording Deletion REPLACEME
+Live TV REPLACEME
+Live TV In Guide REPLACEME
+Status Screen REPLACEME
+Previously Recorded REPLACEME
+ScreenShot REPLACEME
+Create DVD REPLACEME
+Create Archive REPLACEME
+Import Archive REPLACEME
+View Archive Log REPLACEME
+Play Created DVD REPLACEME
+Burn DVD REPLACEME
+Netflix Browser Browse Netflix titles REPLACEME
+Netflix Queue Administer Netflix Queue REPLACEME
+Netflix History View Netflix History REPLACEME
+MythGallery Image viewer / slideshow REPLACEME
+MythGame Game frontend REPLACEME
+Play music REPLACEME
+Select music playlists REPLACEME
+Rip CD REPLACEME
+Scan music REPLACEME
+Show Music Miniplayer REPLACEME
+MythNews RSS News feed reader REPLACEME
+MythSmolt Sample plugin Ctrl+Alt+P REPLACEME
+MythStream AV stream plugin REPLACEME
+MythVideo The MythVideo default view REPLACEME
+Video Manager The MythVideo video manager REPLACEME
+Video Browser The MythVideo video browser REPLACEME
+Video Listings The MythVideo video listings REPLACEME
+Video Gallery The MythVideo video gallery REPLACEME
+Play DVD Play a DVD REPLACEME
+Play VCD Play a VCD REPLACEME
+Rip DVD Import a DVD into your MythVideo database REPLACEME
+MythWeather Weather forecasts REPLACEME
diff --git a/abs/core/system-templates/templates/settings/default_2/jumppoints.txt b/abs/core/system-templates/templates/settings/default_2/jumppoints.txt
new file mode 100644
index 0000000..1cbf116
--- /dev/null
+++ b/abs/core/system-templates/templates/settings/default_2/jumppoints.txt
@@ -0,0 +1,44 @@
+destination description keylist hostname
+Reload Theme REPLACEME
+Main Menu REPLACEME
+Program Guide REPLACEME
+Program Finder REPLACEME
+Manage Recordings / Fix Conflicts REPLACEME
+Program Recording Priorities REPLACEME
+Manage Recording Rules REPLACEME
+Channel Recording Priorities REPLACEME
+TV Recording Playback REPLACEME
+TV Recording Deletion REPLACEME
+Live TV REPLACEME
+Live TV In Guide REPLACEME
+Status Screen REPLACEME
+Previously Recorded REPLACEME
+ScreenShot REPLACEME
+Create DVD REPLACEME
+Create Archive REPLACEME
+Import Archive REPLACEME
+View Archive Log REPLACEME
+Play Created DVD REPLACEME
+Burn DVD REPLACEME
+Netflix Browser Browse Netflix titles REPLACEME
+Netflix Queue Administer Netflix Queue REPLACEME
+Netflix History View Netflix History REPLACEME
+MythGallery Image viewer / slideshow REPLACEME
+MythGame Game frontend REPLACEME
+Play music REPLACEME
+Select music playlists REPLACEME
+Rip CD REPLACEME
+Scan music REPLACEME
+Show Music Miniplayer REPLACEME
+MythNews RSS News feed reader REPLACEME
+MythSmolt Sample plugin Ctrl+Alt+P REPLACEME
+MythStream AV stream plugin REPLACEME
+MythVideo The MythVideo default view REPLACEME
+Video Manager The MythVideo video manager REPLACEME
+Video Browser The MythVideo video browser REPLACEME
+Video Listings The MythVideo video listings REPLACEME
+Video Gallery The MythVideo video gallery REPLACEME
+Play DVD Play a DVD REPLACEME
+Play VCD Play a VCD REPLACEME
+Rip DVD Import a DVD into your MythVideo database REPLACEME
+MythWeather Weather forecasts REPLACEME
diff --git a/abs/core/system-templates/templates/settings/default_2/settings.txt b/abs/core/system-templates/templates/settings/default_2/settings.txt
index 106be04..8c3a391 100644
--- a/abs/core/system-templates/templates/settings/default_2/settings.txt
+++ b/abs/core/system-templates/templates/settings/default_2/settings.txt
@@ -74,7 +74,6 @@ GuiOffsetY 0 REPLACEME
GuiSizeForTV 0 REPLACEME
GuiVidModeResolution 640x480 REPLACEME
GuiWidth 0 REPLACEME
-HaltCommand halt REPLACEME
HideMouseCursor 1 REPLACEME
HorizScanPercentage 0 REPLACEME
Ignore_ID3 0 REPLACEME
@@ -126,7 +125,7 @@ LogPrintLevel 8 REPLACEME
LogPrintLevel 8 REPLACEME
LongChannelFormat <num> <name> REPLACEME
MasterMixerVolume 70 REPLACEME
-MenuTheme STB-menu REPLACEME
+MenuTheme MythVantage-menu REPLACEME
MixerControl PCM REPLACEME
MixerDevice /dev/mixer REPLACEME
MonitorDrives 0 REPLACEME
@@ -248,7 +247,7 @@ SlideshowTransition none REPLACEME
SmartChannelChange 0 REPLACEME
SmartForward 0 REPLACEME
StickyKeys 1 REPLACEME
-Style REPLACEME
+Style Windows REPLACEME
SubTitleCommand -sid %s REPLACEME
TagSeparator - REPLACEME
Theme basic-blue REPLACEME
@@ -276,7 +275,6 @@ UnknownCategory Unknown REPLACEME
UnknownTitle Unknown REPLACEME
upnp:UDN:urn:schemas-upnp-org:device:MediaServer:1 dee5b0fe-7087-4960-8794-428d3e01a61f REPLACEME
UseArrowAccels 1 REPLACEME
-UseDHCP 1 REPLACEME
UseOutputPictureControls 1 REPLACEME
UseVideoModes 0 REPLACEME
UseVideoTimebase 0 REPLACEME
@@ -293,9 +291,9 @@ VideoGalleryColsPerPage 4 REPLACEME
VideoGalleryNoDB 0 REPLACEME
VideoGalleryRowsPerPage 3 REPLACEME
VideoGallerySubtitle 1 REPLACEME
-VideoDefaultPlayer /usr/bin/playmedia.sh VIDEO %s REPLACEME
VideoListUnknownFiletypes 1 REPLACEME
VideoNewBrowsable 1 REPLACEME
+VideoDefaultPlayer Internal REPLACEME
VideoStartupDir /data/media/video/movies REPLACEME
VideoTreeLoadMetaData 1 REPLACEME
VideoTreeNoDB 0 REPLACEME
@@ -318,3 +316,5 @@ WebBrowserScrollSpeed 4 REPLACEME
WebBrowserZoomLevel 20 REPLACEME
XScanDisplacement 0 REPLACEME
YScanDisplacement 0 REPLACEME
+HaltCommand sudo /sbin/poweroff REPLACEME
+RebootCommand sudo /sbin/reboot REPLACEME
diff --git a/abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf b/abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf
index 31df8aa..93a2183 100755..100644
--- a/abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf
+++ b/abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf
@@ -1,83 +1,359 @@
+#########
#
-# this config file was originally generated
-# using lirc-0.6.6(serial) on Fri Mar 28 22:46:44 2003
-# modified by hand on Sunday Jul 17 00:12:00 2005
+# Modified DCT2000 entry for DCT700 (sends zeros)
+# For use with the USB MCE ir receiver
#
-# contributed by rob scullion
-# based on the DCT2000 file contrib'd by shane bradley
-#
-# brand: Motorola
-# model no. of remote control: ? - Comcast badged
-# devices being controlled by this remote: DCT2524/1612
-#
-# Note: The "ON DEMAND" button on the Comcast
-# badged remote just sends a "1" followed by
-# an "ok/select" and is thus not included in
-# this config file.
-
+
begin remote
- name DCT2524
- bits 16
- flags SPACE_ENC|CONST_LENGTH
- eps 30
- aeps 100
-
- header 9036 4424
- one 556 2185
- zero 556 4424
- ptrail 556
- gap 100025
- toggle_bit 0
-
-
- begin codes
- power 0x000000000000AFF9
- rew 0x00000000000087F7
- play 0x00000000000027FD
- ffwd 0x00000000000047FB
- stop 0x000000000000C7F3
- pause 0x00000000000007FF
- rec 0x00000000000073FC
- skipback 0x000000000000C3F7
- mydvr 0x00000000000043FF
- live 0x00000000000083F0
- pageup 0x000000000000A3F3
- pagedown 0x00000000000023FB
- a_lock 0x00000000000097F6
- b_day- 0x00000000000063FD
- c_day+ 0x000000000000E3F5
- up 0x000000000000D3F6
- down 0x00000000000053FE
- left 0x00000000000093F1
- right 0x00000000000013F9
- ok/select 0x00000000000077F8
- guide 0x000000000000F3F4
- info 0x00000000000033FA
- menu 0x00000000000067F9
- exit 0x000000000000B7F4
- help 0x000000000000B3F2
- last 0x00000000000037FC
- vol+ 0x0000000000004FF3
- vol- 0x0000000000008FFB
- mute 0x0000000000000FF7
- fav 0x00000000000057FA
- ch+ 0x0000000000002FF5
- ch- 0x000000000000CFFD
- 1 0x0000000000007FF0
- 2 0x000000000000BFF8
- 3 0x0000000000003FF4
- 4 0x000000000000DFFC
- 5 0x0000000000005FF2
- 6 0x0000000000009FFA
- 7 0x0000000000001FF6
- 8 0x000000000000EFFE
- 9 0x0000000000006FF1
- 0 0x000000000000FFFF
- tv/vcr_input 0x000000000000D7F2
- hdzoom_enter 0x000000000000FDFC
- pnp-swap 0x0000000000003BF2
- end codes
-
-end remote
+ name DCT700
+ flags RAW_CODES
+ eps 30
+ aeps 100
+
+ ptrail 520
+ repeat 0 0
+ gap 100000
+
+ begin raw_codes
+
+ name bypass
+ 9000 4400 550 2200 550 2150
+ 550 4450 550 2150 550 4450
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 4450 550 4400
+ 550 2200 550 4400 550
+
+ name power
+ 9050 4400 550 2200 550 4400
+ 550 2200 550 4400 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 4400
+ 550 4450 550 2150 550
+
+ name help
+ 9000 4400 600 2150 550 4450
+ 550 2150 550 2200 550 4400
+ 550 4450 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 4400 550 4450
+ 500 2200 550 4450 550
+
+ name day-
+ 9000 4400 550 4400 550 2200
+ 550 2200 550 4400 550 4400
+ 600 4400 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 500 2200
+ 550 4450 550 2150 550
+
+ name day+
+ 9000 4400 550 2200 550 2200
+ 550 2150 550 4450 550 4400
+ 550 4400 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 4450 550 2150
+ 550 4450 550 2200 500
+
+ name rec
+ 9050 4400 550 4400 550 2200
+ 550 2200 550 2150 550 4450
+ 550 4400 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 4450 550 4400 550
+
+ name stop
+ 9000 4400 550 4400 550 2200
+ 550 2200 550 4400 550 4400
+ 550 4450 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 4450 500 2200 550
+
+ name pause
+ 9000 4400 550 4400 550 4450
+ 550 4400 550 4450 550 4400
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550
+
+ name rew
+ 9000 4400 550 2200 550 4400
+ 550 4450 550 4400 550 4450
+ 550 2150 550 2200 550 2200
+ 500 2200 550 2200 550 2200
+ 500 2200 550 4450 550 2150
+ 550 2200 550 2200 500
+
+ name ffwd
+ 9050 4400 550 4400 550 2200
+ 550 4400 550 4450 550 4400
+ 550 2200 550 2150 600 2150
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 4450
+ 550 2200 500 2200 550
+
+ name play
+ 9050 4400 550 2150 550 2200
+ 550 2200 550 4400 550 4400
+ 550 4450 550 2200 550 2150
+ 550 2200 550 2200 500 2200
+ 550 2200 550 4400 550 2200
+ 550 4400 550 2200 550
+
+ name pageup
+ 9000 4400 550 2200 550 4400
+ 550 2200 550 4400 550 4450
+ 550 4400 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 4400 550 4450
+ 550 2150 550 2200 550
+
+ name pagedown
+ 9000 4400 550 4450 550 4400
+ 550 2200 550 4400 550 4450
+ 550 4400 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 4400
+ 550 2200 550 2150 550
+
+ name info
+ 9050 4400 550 4400 550 4400
+ 600 2150 550 2200 550 4400
+ 550 4450 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 4450
+ 550 2150 550 4450 550
+
+ name menu
+ 9050 4400 550 4400 550 2200
+ 550 2200 550 4400 550 4400
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 4400
+ 550 4400 550 2200 550
+
+ name guide
+ 9050 4400 550 2150 600 2150
+ 550 2200 550 2150 550 4450
+ 550 4400 550 2200 550 2150
+ 600 2150 550 2200 550 2200
+ 500 2200 550 4450 550 2150
+ 550 4450 550 4400 550
+
+ name lock
+ 9000 4400 600 2150 550 4400
+ 600 4400 550 2200 550 4400
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 4400 550 2200
+ 550 2150 550 4450 550
+
+ name exit
+ 9000 4400 550 2200 550 4400
+ 550 2200 550 2200 550 4400
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 4400 550 2200
+ 550 4400 550 4450 550
+
+ name up
+ 9000 4450 550 2150 550 2200
+ 550 4400 550 2200 550 4400
+ 550 4450 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 4400 550 2200
+ 550 2200 500 4450 550
+ name down
+ 9000 4400 600 4400 550 2200
+ 550 4400 550 2200 550 4400
+ 550 4400 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 4450 550
+
+ name left
+ 9000 4400 550 2200 550 4400
+ 550 4400 600 2150 550 4450
+ 550 4400 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 4400 550 4450
+ 550 4400 550 2200 550
+
+ name right
+ 9050 4400 550 4400 550 4450
+ 550 4400 550 2200 550 4400
+ 550 4400 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 4450
+ 500 4450 550 2200 550
+
+ name ok
+ 9050 4400 550 4400 550 2200
+ 550 2200 550 2150 550 4450
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 4400
+ 550 4450 550 4400 550
+
+ name ch+
+ 9000 4400 550 4400 550 4450
+ 550 2150 600 4400 550 2150
+ 600 2150 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 4450 500 2200
+ 550 4450 550 2150 550
+
+ name ch-
+ 9050 4400 550 2150 600 2150
+ 550 4450 550 4400 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 4400 550 2200 550
+
+ name last
+ 9000 4400 550 4450 550 4400
+ 550 2200 550 2150 550 4450
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 4400 550 4450 500
+
+ name fav
+ 9000 4400 550 4450 550 2150
+ 550 4450 550 2150 550 4450
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 4450
+ 500 2200 550 4450 500
+
+ name enter
+ 9000 4400 600 2150 550 2200
+ 550 2150 550 2200 550 4400
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 4450 500 4450
+ 550 4400 550 4450 550
+
+ name music
+ 9000 4400 550 2200 550 2200
+ 550 2150 550 2200 550 4400
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 4400 550 4450
+ 550 4400 550 4450 500
+
+ name p
+ 9000 4400 600 4400 550 4400
+ 550 4450 550 2150 550 4450
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 4450 550
+
+ name x1
+ 9050 4400 550 4400 550 4450
+ 550 4400 550 2200 550 2150
+ 550 4450 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 4400 550 4450
+ 500 4450 550 2200 550
+
+ name x2
+ 9050 4400 550 2150 550 2200
+ 550 2200 550 4400 550 2200
+ 550 4400 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 4400
+ 550 4450 550 2150 550
+
+ name 1
+ 9000 4400 550 4450 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 4400 550 4450
+ 550 4400 550 4450 550
+
+ name 2
+ 9000 4400 550 2200 550 4400
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 4450
+ 550 4400 550 4450 500
+
+ name 3
+ 9000 4400 550 4450 550 4400
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 4400 550 2200
+ 550 4400 550 4450 500
+
+ name 4
+ 9000 4400 550 2200 550 2150
+ 550 4450 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 4400 550 4450 550
+
+ name 5
+ 9000 4450 550 4400 550 2200
+ 550 4400 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 2200 550 2150
+ 550 2200 550 4400 550 4450
+ 550 2200 500 4450 550
+
+ name 6
+ 9000 4400 550 2200 550 4400
+ 550 4400 600 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 500 2200 550 2200
+ 550 2200 500 2200 550 4450
+ 550 2150 550 4450 550
+
+ name 7
+ 9000 4400 550 4400 600 4400
+ 550 4400 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 4450 550 2150
+ 550 2200 550 4400 550
+
+ name 8
+ 9000 4400 550 2200 550 2150
+ 550 2200 550 4400 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 2150 550 2200
+ 550 2200 550 4400 550
+
+ name 9
+ 9050 4400 550 4400 550 2200
+ 550 2150 600 4400 550 2150
+ 600 2150 550 2200 550 2200
+ 500 2200 550 2200 550 2200
+ 500 2200 550 4450 550 4400
+ 550 4400 550 2200 550
+
+ name 0
+ 9000 4400 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 2200
+ 550 2150 550 2200 550 42050
+ 9000 2250 500
+
+ end raw_codes
+
+end remote
diff --git a/abs/core/system-templates/templates/transmit/motorola_qip7100/lircd.conf b/abs/core/system-templates/templates/transmit/motorola_qip7100/lircd.conf
new file mode 100644
index 0000000..4bd3cd4
--- /dev/null
+++ b/abs/core/system-templates/templates/transmit/motorola_qip7100/lircd.conf
@@ -0,0 +1,81 @@
+#
+# this config file was automatically generated
+# using lirc-0.8.3-CVS-pvr150-2(default) on Sun Nov 16 20:41:54 2008
+#
+# contributed by Michael Hanson
+#
+# brand: Verizon (?)
+# model no. of remote control: Verizon FiOS Universal
+# Inside battery compartment has the following
+# information:
+# RC1445302/00B
+# 3139 238 16051 REV 2
+# MADE IN CHINA
+# CP02 50829 G 009840
+# devices being controlled by this remote: Motorola QIP6200-2
+#
+
+begin remote
+
+ name Motorola_QIP6200-2
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9028 4450
+ one 555 4433
+ zero 555 2181
+ ptrail 556
+ gap 99876
+ toggle_bit_mask 0x0
+
+ begin codes
+ power 0x5006
+ menu 0x9806
+ guide 0x0C0B
+ info 0xCC05
+ up 0x2C09
+ down 0xAC01
+ left 0x6C0E
+ right 0xEC06
+ ok 0x8807
+ exit 0x480B
+ options 0x4205
+ widgets 0xC209
+ ondemand 0x580A
+ favorites 0xA805
+ last 0xC803
+ fiostv 0x7C0F
+ ch+ 0xD00A
+ ch- 0x3002
+ previous 0x3C08
+ dvr 0xBC00
+ next 0xFC07
+ rewind 0x7808
+ play-pause 0xF800
+ fastforward 0xB804
+ stop 0x380C
+ record 0x8C03
+ 1 0x800F
+ 2 0x4007
+ 3 0xC00B
+ 4 0x2003
+ 5 0xA00D
+ 6 0x6005
+ 7 0xE009
+ 8 0x1001
+ 9 0x900E
+ 0 0x0000
+ * 0x2201
+ # 0x0203
+ yellow 0xE801
+ blue 0xE40E
+ red 0x1406
+ green 0x940A
+ av 0x280D
+ pip 0x4403
+ pip-change 0xC40D
+ end codes
+
+end remote
diff --git a/abs/core/system-templates/templates/xorg/modeline.ATSC b/abs/core/system-templates/templates/xorg/modeline.ATSC
index b2cd709..a4e1a6b 100644
--- a/abs/core/system-templates/templates/xorg/modeline.ATSC
+++ b/abs/core/system-templates/templates/xorg/modeline.ATSC
@@ -4,9 +4,9 @@ ModeLine "My480p" 28.6 720 744 768 900 480 484 492 525
ModeLine "My540p" 37.26 960 976 1008 1104 540 542 548 563 +hsync +vsync
-ModeLine "My720p" 73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync 74.086 MHz 44.955 kHz 5$
+ModeLine "My720p" 73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync
-ModeLine "My720p2" 73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync 74.086 MHz 44.955 kHz 5$
+ModeLine "My720p2" 73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync
ModeLine "My1080i" 79.84 1920 2040 2200 2368 1080 1090 1106 1125 +vsync -hsync interlace
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.ati b/abs/core/system-templates/templates/xorg/xorg.conf.ati
index 8c75552..529e186 100644
--- a/abs/core/system-templates/templates/xorg/xorg.conf.ati
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.ati
@@ -25,7 +25,7 @@ Section "Module"
Load "record"
Load "extmod"
Load "dri"
- Load "type1"
+# Load "type1"
Load "freetype"
EndSection
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.intel b/abs/core/system-templates/templates/xorg/xorg.conf.intel
index c4a67c9..5bc73f8 100644
--- a/abs/core/system-templates/templates/xorg/xorg.conf.intel
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.intel
@@ -49,7 +49,7 @@ Section "Module"
Load "extmod"
Load "glx"
Load "bitmap" # bitmap-fonts
- Load "type1"
+# Load "type1"
Load "freetype"
Load "record"
EndSection
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.nvidia b/abs/core/system-templates/templates/xorg/xorg.conf.nvidia
index 3a53183..2c3b7f1 100755
--- a/abs/core/system-templates/templates/xorg/xorg.conf.nvidia
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.nvidia
@@ -18,7 +18,7 @@ EndSection
Section "Module"
Load "dbe"
Load "extmod"
- Load "type1"
+# Load "type1"
Load "freetype"
Load "glx"
EndSection
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.vesa b/abs/core/system-templates/templates/xorg/xorg.conf.vesa
index fa96ea5..dbc607d 100755
--- a/abs/core/system-templates/templates/xorg/xorg.conf.vesa
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.vesa
@@ -18,7 +18,7 @@ EndSection
Section "Module"
Load "dbe"
Load "extmod"
- Load "type1"
+# Load "type1"
Load "freetype"
EndSection
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.via b/abs/core/system-templates/templates/xorg/xorg.conf.via
index 91c517f..c18eb6f 100644
--- a/abs/core/system-templates/templates/xorg/xorg.conf.via
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.via
@@ -19,7 +19,7 @@ Section "Module"
Load "dbe"
Load "glx"
Load "extmod"
- Load "type1"
+# Load "type1"
Load "freetype"
Load "dri"
EndSection
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.vmware b/abs/core/system-templates/templates/xorg/xorg.conf.vmware
index 4e9fd4a..1c038ef 100755
--- a/abs/core/system-templates/templates/xorg/xorg.conf.vmware
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.vmware
@@ -18,7 +18,7 @@ EndSection
Section "Module"
Load "dbe"
Load "extmod"
- Load "type1"
+# Load "type1"
Load "freetype"
Load "glx"
EndSection
diff --git a/abs/core/talloc/PKGBUILD b/abs/core/talloc/PKGBUILD
new file mode 100644
index 0000000..903de2d
--- /dev/null
+++ b/abs/core/talloc/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 63108 2010-01-14 18:54:03Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=talloc
+pkgver=2.0.1
+pkgrel=1
+pkgdesc="talloc is a hierarchical pool based memory allocator with destructors"
+arch=(i686 x86_64)
+license=('GPL3')
+url="http://tdb.samba.org/"
+source=(http://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+depends=('glibc')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc/samba \
+ --localstatedir=/var \
+ --enable-talloc-compat1 \
+ --enable-largefile
+ make || return 1
+ make DESTDIR=$pkgdir/ install
+ # fix permission
+ chmod 644 $pkgdir/usr/lib/libtalloc.a
+}
+md5sums=('c6e736540145ca58cb3dcb42f91cf57b')
diff --git a/abs/core/tar/PKGBUILD b/abs/core/tar/PKGBUILD
index 2a0c87c..9c16ddf 100644
--- a/abs/core/tar/PKGBUILD
+++ b/abs/core/tar/PKGBUILD
@@ -1,8 +1,8 @@
# $Id: PKGBUILD 1082 2008-04-29 16:11:13Z andyrtr $
# Maintainer: judd <jvinet@zeroflux.org>
pkgname=tar
-pkgver=1.20
-pkgrel=13
+pkgver=1.23
+pkgrel=1
pkgdesc="Utility used to store, backup, and transport files"
arch=('i686' 'x86_64')
license=('GPL3')
@@ -10,8 +10,6 @@ groups=('base')
url="http://www.gnu.org/software/tar/tar.html"
depends=('glibc' 'bash')
source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.bz2 tar.1)
-md5sums=('1a7e17f27abf583b3b0bc059a827e68b'
- 'a5f8c5da7a9465ea1978145f3ef0610c')
build() {
cd $startdir/src/$pkgname-$pkgver
@@ -20,3 +18,5 @@ build() {
make DESTDIR=$startdir/pkg install
install -D -m644 ../tar.1 $startdir/pkg/usr/share/man/man1/tar.1
}
+md5sums=('41e2ca4b924ec7860e51b43ad06cdb7e'
+ 'a5f8c5da7a9465ea1978145f3ef0610c')
diff --git a/abs/core/tdb/PKGBUILD b/abs/core/tdb/PKGBUILD
index e908119..4bf2af6 100644
--- a/abs/core/tdb/PKGBUILD
+++ b/abs/core/tdb/PKGBUILD
@@ -1,28 +1,26 @@
-# $Id: PKGBUILD 37511 2009-05-02 16:17:09Z tpowa $
-# Maintainer: eric <eric@archlinux.org>
+# $Id: PKGBUILD 63109 2010-01-14 18:55:16Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributorr: eric <eric@archlinux.org>
# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
pkgname=tdb
-pkgver=3.3.4
+pkgver=1.2.0
pkgrel=1
-# We use the 'A' to fake out pacman's version comparators. Samba chooses
-# to append 'a','b',etc to their subsequent releases, which pamcan
-# misconstrues as alpha, beta, etc. Bad samba!
-_realver=3.3.4
-pkgdesc="A Trivial Database similar to GDBM but allows simultaneous commits"
+pkgdesc="A Trivia Database similar to GDBM but allows simultaneous commits"
arch=(i686 x86_64)
license=('GPL3')
-url="www.samba.org"
-source=(http://us1.samba.org/samba/ftp/samba-${_realver}.tar.gz)
-options=(!makeflags)
+url="http://tdb.samba.org/"
+source=(http://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+makedepends=('python')
+optdepends=('python: for python bindings')
+options=(force)
build() {
- cd ${srcdir}/samba-${_realver}/source/lib/tdb
- ./autogen.sh
- ./configure --prefix=/usr
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr \
+ --localstatedir=/var \
+ --sysconfdir=/etc/samba
make || return 1
- make DESTDIR=$startdir/pkg install
- ln -sf /usr/lib/libtdb.so.1.1.2 ${pkgdir}/usr/lib/libtdb.so.1
- ln -sf /usr/lib/libtdb.so.1.1.2 ${pkgdir}/usr/lib/libtdb.so
+ make DESTDIR=$pkgdir/ install
}
-md5sums=('1443165edb7cb3f56f1e77aec1ee3266')
+md5sums=('4115849d2ef431a10bc1f1933eafb9b6')
diff --git a/abs/core/test-pattern/PKGBUILD b/abs/core/test-pattern/PKGBUILD
new file mode 100644
index 0000000..7ac825b
--- /dev/null
+++ b/abs/core/test-pattern/PKGBUILD
@@ -0,0 +1,16 @@
+pkgname=test-pattern
+pkgver=1.0
+pkgrel=6
+arch=('i686')
+pkgdesc="script to create test pattern videos"
+depends=(imagemagick)
+license=('GPL')
+source=(test_pattern.bash)
+
+build() {
+ cd $startdir/src
+# mkdir $startdir/pkg/usr/bin/
+ install -m755 -D test_pattern.bash $startdir/pkg/usr/bin/test_pattern.bash
+}
+
+md5sums=('3a427a5dee0763c6b0a5938fedbde883')
diff --git a/abs/core/test-pattern/test_pattern.bash b/abs/core/test-pattern/test_pattern.bash
new file mode 100755
index 0000000..d220fb0
--- /dev/null
+++ b/abs/core/test-pattern/test_pattern.bash
@@ -0,0 +1,326 @@
+#!/bin/bash
+
+# Set default options to be overriden by command line arguments.
+
+w=400
+h=325
+rate=50
+TEMPDIR=
+unset remove_tempdir
+interlaced=
+aspect_ratio=
+bitrate=
+
+while getopts ":w:h:t:r:ia:b:" opt; do
+ case $opt in
+ w)
+ w=$OPTARG
+ ;;
+ h)
+ h=$OPTARG
+ ;;
+ t)
+ TEMPDIR=$OPTARG
+ ;;
+ r)
+ rate=$OPTARG
+ ;;
+ i)
+ interlaced=TRUE
+ ;;
+ a)
+ aspect_ratio=$OPTARG
+ ;;
+ b)
+ bitrate=$OPTARG
+ ;;
+ \?)
+ echo -n "\
+Error: Invalid option -$OPTARG
+
+Usage:
+ test_pattern.bash [options]
+ -w width
+ The width in pixels.
+ -h height
+ The height in pixels.
+ -t tempdir
+ Temporary directory for intermediate files. If no directory is specified, one is created and deleted at the end of processing.
+ -r fieldrate
+ -i
+ Generate an interlaced test pattern
+ -a n:m
+ Aspect ratio of generated video.
+ -b bitrate
+ Bitrate used for encoding.
+
+Example:
+test_pattern.bash -w 1440 -h 1080 -t temp -r 50 -i -a 16:9 -b 12000k
+"
+ exit 1
+ esac
+done
+
+if [ -z "$aspect_ratio" ] ; then
+ aspect_ratio="${w}:${h}"
+fi
+
+aspectx=$(echo $aspect_ratio | cut -d: -f1)
+aspecty=$(echo $aspect_ratio | cut -d: -f2)
+
+# Calculate some dimensions based on the requested size.
+
+barw=$((w/32))
+barstep=$((w/90))
+barstart=$((-barw/barstep-1))
+
+frames=$((w/2))
+
+unity=$((h*2/27))
+unitx=$((unity*aspecty*w/(aspectx*h)))
+gridlw=$((unity*3/43))
+
+echo unity=$unity
+echo unitx=$unitx
+
+nvgrid=$(((h-gridlw)/unity))
+nhgrid=$(((((w-gridlw)/unitx)-1)/2*2+1))
+
+gridstartx=$((w/2-(nhgrid*unitx+gridlw)/2-1))
+gridstarty=$((h/2-(nvgrid*unity+gridlw)/2-1))
+
+echo nvgrid=$nvgrid
+echo nhgrid=$nhgrid
+echo gridstartx=$gridstartx
+echo gridstarty=$gridstarty
+
+echo parsed tempdir $TEMPDIR
+
+if [ -z "$TEMPDIR" ] ; then
+ TEMPDIR=$(mktemp -d --tmpdir=/tmp)
+ remove_tempdir=1
+else
+ if [ ! -d "$TEMPDIR" ] ; then
+ mkdir $TEMPDIR
+ fi
+fi
+
+echo parsed tempdir $TEMPDIR $remove_tempdir
+
+unset checker
+checker=( -fill "rgb(192,192,192)" )
+for ((g=-9;g<=7;g=g+2)) ; do
+ checker=( "${checker[@]}"
+ -draw
+ "rectangle $((w/2+g*unitx*7/10)),$((gridstarty+unity*3+gridlw)) $((w/2+(g+1)*unitx*7/10)),$((gridstarty+unity*4+gridlw))" )
+done
+
+checker=( "${checker[@]}" -fill black )
+for ((g=-8;g<=8;g=g+2)) ; do
+ checker=( "${checker[@]}"
+ -draw
+ "rectangle $((w/2+g*unitx*7/10)),$((gridstarty+unity*3+gridlw)) $((w/2+(g+1)*unitx*7/10)),$((gridstarty+unity*4+gridlw))" )
+done
+
+unset stripe
+stripe=( -fill white )
+
+for ((g=0;g<5;g++)) ; do
+ startx=$((w/2+(3-g*2)*unitx))
+ endx=$((startx+2*unitx))
+
+ for ((x=startx;x<endx;x=x+2*(g+1))) ; do
+ stripe=( "${stripe[@]}"
+ -draw
+ "rectangle $x,$((gridstarty+unity*7+gridlw)) $((x+g)),$((gridstarty+unity*9+gridlw))" )
+ done
+done
+
+for ((g=0;g<13;g++)) ; do
+ stripe=( "${stripe[@]}"
+ -draw
+ "rectangle $((gridstartx+(nhgrid/2-6+g)*unitx)),$((gridstarty+unity*6+gridlw)) $((gridstartx+(nhgrid/2-6+g)*unitx+gridlw)),$((gridstarty+unity*7+gridlw-1))" )
+done
+
+convert -size ${w}x${h} xc:white \
+ -fill "rgb(204,204,0)" \
+ -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2-4*unitx)),$((gridstarty+unity*6+gridlw))" \
+ -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*11+gridlw)) $((w/2+6*unitx)),$((gridstarty+unity*13+gridlw))" \
+ -fill "rgb(0,204,204)" \
+ -draw "rectangle $((w/2-4*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2-2*unitx)),$((gridstarty+unity*6+gridlw))" \
+ -fill "rgb(0,204,0)" \
+ -draw "rectangle $((w/2-2*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2-0*unitx)),$((gridstarty+unity*6+gridlw))" \
+ -fill "rgb(204,0,204)" \
+ -draw "rectangle $((w/2-0*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2+2*unitx)),$((gridstarty+unity*6+gridlw))" \
+ -fill "rgb(204,0,0)" \
+ -draw "rectangle $((w/2+2*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2+4*unitx)),$((gridstarty+unity*6+gridlw))" \
+ -draw "rectangle $((w/2-unitx/2)),$((gridstarty+unity*11+gridlw)) $((w/2+unitx/2)),$((gridstarty+unity*13+gridlw))" \
+ -fill "rgb(0,0,204)" \
+ -draw "rectangle $((w/2+4*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2+6*unitx)),$((gridstarty+unity*6+gridlw))" \
+\
+ -fill black \
+ -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*6+gridlw)) $((w/2+6*unitx)),$((gridstarty+unity*9+gridlw))" \
+ "${stripe[@]}" \
+ -fill black \
+ -draw "rectangle $((w/2-(unitx-gridlw)/2)),$((gridstarty+unity*5+gridlw)) $((w/2+(unitx-gridlw)/2-1)),$((gridstarty+unity*8+gridlw))" \
+ -fill white \
+ -draw "rectangle $((w/2-6*unitx)),$((h/2-gridlw/2)) $((w/2+6*unitx)),$((h/2-gridlw/2+gridlw))" \
+ -draw "rectangle $((w/2-gridlw/2)),$((gridstarty+unity*5+gridlw)) $((w/2-gridlw/2+gridlw)),$((gridstarty+unity*8+gridlw))" \
+\
+ -fill "rgb(0,0,0)" \
+ -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2-4*unitx)),$((gridstarty+unity*10+gridlw))" \
+ -fill "rgb(51,51,51)" \
+ -draw "rectangle $((w/2-4*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2-2*unitx)),$((gridstarty+unity*10+gridlw))" \
+ -fill "rgb(102,102,102)" \
+ -draw "rectangle $((w/2-2*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2-0*unitx)),$((gridstarty+unity*10+gridlw))" \
+ -fill "rgb(153,153,153)" \
+ -draw "rectangle $((w/2-0*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2+2*unitx)),$((gridstarty+unity*10+gridlw))" \
+ -fill "rgb(204,204,204)" \
+ -draw "rectangle $((w/2+2*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2+4*unitx)),$((gridstarty+unity*10+gridlw))" \
+ -fill "rgb(255,255,255)" \
+ -draw "rectangle $((w/2+4*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2+6*unitx)),$((gridstarty+unity*10+gridlw))" \
+\
+ -fill black \
+ -draw "rectangle $((w/2-2*unitx)),$((gridstarty+unity*1+gridlw)) $((w/2+2*unitx)),$((gridstarty+unity*2+gridlw))" \
+ -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*2+gridlw)) $((w/2-3*unitx)),$((gridstarty+unity*3+gridlw))" \
+ -draw "rectangle $((w/2+6*unitx)),$((gridstarty+unity*2+gridlw)) $((w/2+3*unitx)),$((gridstarty+unity*3+gridlw))" \
+ -draw "rectangle $((gridstartx+(nhgrid/2-2)*unitx)),$((gridstarty+unity*2+gridlw)) $((gridstartx+(nhgrid/2-2)*unitx+gridlw)),$((gridstarty+unity*3+gridlw))" \
+ -draw "rectangle $((w/2-3*unitx+1)),$((gridstarty+unity*10+gridlw)) $((w/2+3*unitx)),$((gridstarty+unity*11+gridlw))" \
+ -fill white \
+ -draw "rectangle $((gridstartx+(nhgrid/2-2)*unitx)),$((gridstarty+unity*10+gridlw)) $((gridstartx+(nhgrid/2-2)*unitx+gridlw)),$((gridstarty+unity*11+gridlw))" \
+ "${checker[@]}" \
+ ${TEMPDIR}/centre.png
+
+convert -size ${w}x${h} xc:black \
+ -fill white \
+ -draw "ellipse $((w/2)),$((h/2)) $((6*unitx)),$((6*unity)) 0,360" \
+ ${TEMPDIR}/circle.png
+
+unset drawgrid
+drawgrid=( -fill white )
+for ((g=0;g<=$nhgrid;g++)) ; do
+ drawgrid=( "${drawgrid[@]}"
+ -draw
+ "rectangle $((gridstartx+g*unitx)),0 $((gridstartx+g*unitx+gridlw)),$h" )
+done
+
+for ((g=0;g<=$nvgrid;g++)) ; do
+ drawgrid=( "${drawgrid[@]}"
+ -draw
+ "rectangle 0,$((gridstarty+g*unity)) $w,$((gridstarty+g*unity+gridlw))" )
+done
+
+drawgrid=( "${drawgrid[@]}"
+ -draw "rectangle 0,0 $gridstartx,$h"
+ -draw "rectangle 0,0 $w,$gridstarty"
+ -draw "rectangle $w,$h $((gridstartx+nhgrid*unitx)),0"
+ -draw "rectangle $w,$h 0,$((gridstarty+nvgrid*unity))"
+ -fill black
+)
+
+for ((g=0;g<=$nhgrid;g=g+2)) ; do
+ drawgrid=( "${drawgrid[@]}"
+ -draw
+ "rectangle $((gridstartx+g*unitx+gridlw+1)),0 $((gridstartx+(g+1)*unitx)),$((gridstarty-1))"
+ -draw
+ "rectangle $((gridstartx+g*unitx+gridlw+1)),$((gridstarty+nvgrid*unity+gridlw+1)) $((gridstartx+(g+1)*unitx)),$h"
+ )
+done
+
+for ((g=0;g<=$nvgrid;g=g+2)) ; do
+ drawgrid=( "${drawgrid[@]}"
+ -draw
+ "rectangle 0,$((gridstarty+g*unity+gridlw+1)) $((gridstartx-1)),$((gridstarty+(g+1)*unity-1))"
+ -draw
+ "rectangle $((gridstartx+nhgrid*unitx+gridlw+1)),$((gridstarty+g*unity+gridlw+1)) $w,$((gridstarty+(g+1)*unity-1))"
+ )
+done
+
+diagonals=(
+ -fill white
+ -linewidth 10
+ -fill white
+ -draw "line 0,0 $((w/2)),$((h-1))"
+ -draw "line 0,0 $((w-1)),$((h/2))"
+ -draw "line 0,$((h-1)) $((w/2)),0"
+ -draw "line 0,$((h-1)) $((w-1)),$((h/2))"
+ -draw "line $((w-1)),0 $((w/2)),$((h-1))"
+ -draw "line $((w-1)),0 0,$((h/2))"
+ -draw "line $((w-1)),$((h-1)) $((w/2)),0"
+ -draw "line $((w-1)),$((h-1)) 0,$((h/2))" )
+
+convert -size ${w}x${h} xc:grey50 \
+ "${diagonals[@]}" \
+ "${drawgrid[@]}" \
+ -fill "rgb(51,153,102)" \
+ -draw "rectangle $((gridstartx+(nhgrid/2-7)*unitx+gridlw+1)),$((gridstarty+unity+gridlw+1)) $((gridstartx+(nhgrid/2-6)*unitx-1)),$((h/2))" \
+ -fill "rgb(204,102,102)" \
+ -draw "rectangle $((gridstartx+(nhgrid/2-7)*unitx+gridlw+1)),$((h/2)) $((gridstartx+(nhgrid/2-6)*unitx-1)),$((gridstarty+unity*12-1))" \
+ -fill "rgb(102,102,255)" \
+ -draw "rectangle $((gridstartx+(nhgrid/2-6)*unitx)),$((gridstarty+unity+gridlw+1)) $((gridstartx+(nhgrid/2-5)*unitx-1)),$((gridstarty+unity*3-1))" \
+ -fill "rgb(153,102,0)" \
+ -draw "rectangle $((gridstartx+(nhgrid/2-6)*unitx)),$((gridstarty+10*unity+gridlw+1)) $((gridstartx+(nhgrid/2-5)*unitx-1)),$((gridstarty+unity*12-1))" \
+ -fill "rgb(128,128,0)" \
+ -draw "rectangle $((gridstartx+(nhgrid/2+7)*unitx+gridlw+1)),$((gridstarty+unity+gridlw+1)) $((gridstartx+(nhgrid/2+8)*unitx-1)),$((h/2))" \
+ -fill "rgb(102,102,255)" \
+ -draw "rectangle $((gridstartx+(nhgrid/2+7)*unitx+gridlw+1)),$((h/2)) $((gridstartx+(nhgrid/2+8)*unitx-1)),$((gridstarty+unity*12-1))" \
+ -fill "rgb(102,102,255)" \
+ -draw "rectangle $((gridstartx+(nhgrid/2+6)*unitx+gridlw+1)),$((gridstarty+unity+gridlw+1)) $((gridstartx+(nhgrid/2+7)*unitx+gridlw)),$((gridstarty+unity*3-1))" \
+ -fill "rgb(153,102,0)" \
+ -draw "rectangle $((gridstartx+(nhgrid/2+6)*unitx+gridlw+1)),$((gridstarty+10*unity+gridlw+1)) $((gridstartx+(nhgrid/2+7)*unitx+gridlw)),$((gridstarty+unity*12-1))" \
+ ${TEMPDIR}/grid.png
+
+convert -size ${w}x${h} ${TEMPDIR}/grid.png ${TEMPDIR}/centre.png ${TEMPDIR}/circle.png -composite ${TEMPDIR}/background.png
+
+if [ -n "$interlaced" ] ; then
+ interlaced_frame=0
+ convert -size 1x${h} -tile-offset +0+1 pattern:gray50 \
+ -scale ${w}x${h}\! ${TEMPDIR}/interlace.png
+fi
+
+for ((i=0; i < $frames; i++)) ; do
+
+ prev_image_name=$image_name
+ image_name=${TEMPDIR}/test$(printf "%03d" $i).png
+ echo creating image $image_name
+
+ convert -size ${w}x${h} ${TEMPDIR}/background.png \
+ -fill black \
+ -draw "rectangle $(((barstart+i)*barstep)),0 $(((barstart+i)*barstep+barw)),${h}" \
+ -font Arial-Black-Regular \
+ -pointsize $unity \
+ -fill white \
+ -stroke black -strokewidth 5 -annotate +$((w-2*i))+$((gridstartx+11*unity)) 'Judder Test' \
+ -stroke none -annotate +$((w-2*i))+$((gridstartx+11*unity)) 'Judder Test' \
+ -depth 8 \
+ ${image_name}
+
+ if [ -n "$interlaced" ] ; then
+ interlaced_frame=$((interlaced_frame + 1))
+
+ if [ $interlaced_frame = 2 ] ; then
+ echo interlacing $((i-1)) and $i
+ interlaced_frame=0
+ convert -size ${w}x${h} -depth 8 $prev_image_name $image_name ${TEMPDIR}/interlace.png -composite ${TEMPDIR}/interlaced$(printf "%03d" $((i/2))).png
+ fi
+ fi
+done
+
+bitrate_flags=
+if [ -n "$bitrate" ] ; then
+ bitrate_flags="-b $bitrate"
+fi
+
+if [ -n "$interlaced" ] ; then
+ ffmpeg -r ${rate} -i ${TEMPDIR}/interlaced%03d.png -r ${rate} \
+ -vcodec mpeg2video -flags +ilme+ildct -aspect $aspect_ratio \
+ ${bitrate_flags} -y test.mpg
+else
+ ffmpeg -r ${rate} -i ${TEMPDIR}/test%03d.png -r ${rate} \
+ -vcodec mpeg2video -aspect $aspect_ratio \
+ ${bitrate_flags} -y test.mpg
+fi
+
+if [ -n "$remove_tempdir" ] ; then
+ rm -Rf $TEMPDIR
+fi
diff --git a/abs/core/tweaker/PKGBUILD b/abs/core/tweaker/PKGBUILD
index 79fc20d..85df000 100644
--- a/abs/core/tweaker/PKGBUILD
+++ b/abs/core/tweaker/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=tweaker
pkgver=1
-pkgrel=55
+pkgrel=56
pkgdesc="applies tweaks to the baseline configuration and attempts to optimize settings for the hardware it finds"
arch=('i686' 'x86_64')
@@ -41,3 +41,5 @@ build() {
# Copy our tweaker Perl modules for general use
install -m0555 lib/Tweaker/* $startdir/pkg/usr/lib/perl5/vendor_perl/Tweaker/
}
+md5sums=('77fab526e866b273091e6816135ef25f'
+ 'e897b87dd308f9562d0867de9fab2de0')
diff --git a/abs/core/tweaker/bin/twk_general.pl b/abs/core/tweaker/bin/twk_general.pl
index 23572bc..f89912c 100755
--- a/abs/core/tweaker/bin/twk_general.pl
+++ b/abs/core/tweaker/bin/twk_general.pl
@@ -410,7 +410,7 @@ sub implement_option {
change_or_make_setting('UserJob1', 'myth2ipod \"%DIR%\" \"%FILE%\"');
change_or_make_setting('UserJob2', 'myt2xvid3 \"%DIR%\" \"%FILE%\"');
change_or_make_setting('UserJob3', 'myth2x264 \"%DIR%/%FILE%\" \"%TITLE% - %SUBTITLE%\" \"%CHANID%\" \"%STARTTIME%\" \"%JOBID%\"');
- change_or_make_setting('UserJob4', 'removecommercials \"%DIR%\" \"%FILE%\" \"%CHANID%\" \"%STARTTIME%\" \"%JOBID%\"');
+ change_or_make_setting('UserJob4', 'removecommercials.sh \"%DIR%\" \"%FILE%\" \"%CHANID%\" \"%STARTTIME%\" \"%JOBID%\"');
change_or_make_setting('UserJobDesc1', 'Transcode for iPod');
change_or_make_setting('UserJobDesc2', 'Transcode to xvid');
change_or_make_setting('UserJobDesc3', 'Transcode to h264');
diff --git a/abs/core/unclutter/PKGBUILD b/abs/core/unclutter/PKGBUILD
index 5622394..64e808d 100755
--- a/abs/core/unclutter/PKGBUILD
+++ b/abs/core/unclutter/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=unclutter
pkgver=8
-pkgrel=1
+pkgrel=5
pkgdesc="Hides mouse cursor when not in use"
url="http://www.x.org/contrib/utilities/unclutter-8.README"
license="GPL"
@@ -8,10 +8,10 @@ depends=(x-server)
makedepends=()
conflicts=()
replaces=()
-backup=()
+backup=(etc/unclutter.cfg)
install=
arch='i686'
-source=(ftp://ftp.x.org/contrib/utilities/$pkgname-$pkgver.tar.Z)
+source=(ftp://ftp.x.org/contrib/utilities/$pkgname-$pkgver.tar.Z unclutter.cfg)
build() {
@@ -19,4 +19,10 @@ build() {
make LDLIBS=-L/usr/X11R6/lib || return 1
mkdir -p $startdir/pkg/usr/X11R6/bin
make DESTDIR=$startdir/pkg BINDIR=$startdir/pkg/usr/X11R6/bin install
+ mkdir -p $startdir/pkg/etc
+ cp -f $startdir/src/unclutter.cfg $startdir/pkg/etc/unclutter.cfg
}
+md5sums=('83d7a6498b69078f869378f801b6a84b'
+ '7277205ebd875a0175a5fdb184c6373c')
+md5sums=('83d7a6498b69078f869378f801b6a84b'
+ '07815312d084a31595cd90ab45c68727')
diff --git a/abs/core/unclutter/unclutter.cfg b/abs/core/unclutter/unclutter.cfg
new file mode 100644
index 0000000..e097b95
--- /dev/null
+++ b/abs/core/unclutter/unclutter.cfg
@@ -0,0 +1,2 @@
+idle=1
+jitter=200
diff --git a/abs/core/unzip/PKGBUILD b/abs/core/unzip/PKGBUILD
index 4bcecf5..730beb9 100644
--- a/abs/core/unzip/PKGBUILD
+++ b/abs/core/unzip/PKGBUILD
@@ -2,33 +2,19 @@
# Maintainer: Dan McGee <dan@archlinux.org>
pkgname=unzip
-pkgver=5.52
-pkgrel=4
+pkgver=6.00
+_pkgver=60
+pkgrel=1
pkgdesc="Unpacks .zip archives such as those made by PKZIP"
arch=('i686' 'x86_64')
url="http://www.info-zip.org/"
license=('custom')
depends=('glibc')
-source=(http://downloads.sourceforge.net/infozip/unzip552.tar.gz
- unzip-5.5.2-CVE-2008-0888.patch
- unzip-5.50-alt-iconv-v1.2-utf8.patch
- unzip542-size-64bit.patch)
-md5sums=('9d23919999d6eac9217d1f41472034a9'
- '2de357c2ba84576f38b17aed87915c87'
- 'a4797a1f6e45385f5e021f9f6f2ec0fa'
- '83c7e79de9618bf7d081dd639dd3dde1')
+source=(http://downloads.sourceforge.net/infozip/${pkgname}${_pkgver}.tar.gz)
build() {
- cd $startdir/src/$pkgname-$pkgver
-
- # http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0888
- patch -Np0 -i ../unzip-5.5.2-CVE-2008-0888.patch || return 1
+ cd $startdir/src/${pkgname}${_pkgver}
- # FS#8383
- patch -Np1 -i ../unzip-5.50-alt-iconv-v1.2-utf8.patch || return 1
-
- [ "$CARCH" == "x86_64" ] && (patch -Np0 -i ../unzip542-size-64bit.patch || return 1)
-
export CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64"
if [ "${CARCH}" = "i686" ]; then
make -f unix/Makefile LOCAL_UNZIP="$CFLAGS" prefix=/usr linux || return 1
@@ -39,3 +25,8 @@ build() {
install -Dm644 LICENSE $startdir/pkg/usr/share/licenses/unzip/LICENSE
}
+md5sums=('62b490407489521db863b523a7f86375'
+ '2de357c2ba84576f38b17aed87915c87'
+ 'a4797a1f6e45385f5e021f9f6f2ec0fa'
+ '83c7e79de9618bf7d081dd639dd3dde1')
+md5sums=('62b490407489521db863b523a7f86375')
diff --git a/abs/core/v4l-dvb/PKGBUILD b/abs/core/v4l-dvb/PKGBUILD
index 90f6034..610472b 100644
--- a/abs/core/v4l-dvb/PKGBUILD
+++ b/abs/core/v4l-dvb/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=v4l-dvb
_kernver=2.6.28-LinHES
pkgver=1
-pkgrel=13
+pkgrel=17
pkgdesc="V4L-DVB drivers from mercurial"
arch=('i686' 'x86_64')
license=('GPL2')
@@ -12,13 +12,17 @@ url="http://linuxtv.org/"
depends=('kernel26')
makedepends=(kernel-headers)
install=v4l-dvb.install
-source=(http://linuxtv.org/hg/v4l-dvb/archive/tip.tar.gz)
+source=('http://linuxtv.org/hg/v4l-dvb/archive/tip.tar.gz' 'hdpvr.diff')
build() {
cd $startdir/src/v4l-dvb*/
+# patch -p1 < ../hdpvr.diff
make KERNDIR=/lib/modules/$_kernver/build \
DESTDIR=$startdir/pkg KERNELRELEASE=$_kernver all || return 1
make KERNDIR=/lib/modules/$_kernver/build \
DESTDIR=$startdir/pkg KERNELRELEASE=$_kernver install || return 1
rm -fr $startdir/pkg/lib/modules/$_kernver/modules*
}
+
+md5sums=('e0c4eb1f436d44118e0bf0757516310c'
+ 'd50c96211d23fba48ebc4c5e2d1e6102')
diff --git a/abs/core/v4l-dvb/hdpvr.diff b/abs/core/v4l-dvb/hdpvr.diff
new file mode 100644
index 0000000..bf465e5
--- /dev/null
+++ b/abs/core/v4l-dvb/hdpvr.diff
@@ -0,0 +1,22 @@
+diff -ruaN v4l-dvb-31eaa9423f98.orig/linux/drivers/media/video/hdpvr/hdpvr-core.c v4l-dvb-31eaa9423f98/linux/drivers/media/video/hdpvr/hdpvr-core.c
+--- v4l-dvb-31eaa9423f98.orig/linux/drivers/media/video/hdpvr/hdpvr-core.c 2010-01-25 09:04:15.000000000 -0800
++++ v4l-dvb-31eaa9423f98/linux/drivers/media/video/hdpvr/hdpvr-core.c 2010-01-25 12:11:04.000000000 -0800
+@@ -59,6 +59,7 @@
+ { USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID) },
+ { USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID1) },
+ { USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID2) },
++ { USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID3) },
+ { } /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, hdpvr_table);
+diff -ruaN v4l-dvb-31eaa9423f98.orig/linux/drivers/media/video/hdpvr/hdpvr.h v4l-dvb-31eaa9423f98/linux/drivers/media/video/hdpvr/hdpvr.h
+--- v4l-dvb-31eaa9423f98.orig/linux/drivers/media/video/hdpvr/hdpvr.h 2010-01-25 09:04:15.000000000 -0800
++++ v4l-dvb-31eaa9423f98/linux/drivers/media/video/hdpvr/hdpvr.h 2010-01-25 12:11:17.000000000 -0800
+@@ -30,6 +30,7 @@
+ #define HD_PVR_PRODUCT_ID 0x4900
+ #define HD_PVR_PRODUCT_ID1 0x4901
+ #define HD_PVR_PRODUCT_ID2 0x4902
++#define HD_PVR_PRODUCT_ID3 0x4982
+
+ #define UNSET (-1U)
+
diff --git a/abs/core/vdpauinfo-legacy/PKGBUILD b/abs/core/vdpauinfo-legacy/PKGBUILD
new file mode 100644
index 0000000..d58c672
--- /dev/null
+++ b/abs/core/vdpauinfo-legacy/PKGBUILD
@@ -0,0 +1,26 @@
+# It is not expected that vdpau will work with the 71xx nVidia drivers, but we still want
+# 'vdpinfo' to return something when users run it, even if the real 'vdpinfo' won't build
+# for their nVidia driver version.
+
+pkgname=vdpauinfo-legacy
+pkgver=1
+pkgrel=5
+pkgdesc="tells the user they can't handle vdpau"
+license=('GPLv2')
+arch=('i686' 'x86_64')
+#depends=('')
+# Just let the dependency on the right nvidia and nvidia-utils versions
+# handle conflicts via those packages conflicts.
+conflicts=(vdpauinfo)
+provides=('vpinfo' 'vdpauinfo')
+source=(vdpauinfo)
+md5sums=()
+
+build() {
+ LH_ROOT=/usr/LH
+ mkdir -p $startdir/pkg/$LH_ROOT/bin/
+
+ cd $startdir
+ install -m0755 -D vdpauinfo $startdir/pkg/$LH_ROOT/bin/
+}
+md5sums=('502f0a21bd1232e5a6bccb17cd63116d')
diff --git a/abs/core/vdpauinfo-legacy/vdpauinfo b/abs/core/vdpauinfo-legacy/vdpauinfo
new file mode 100755
index 0000000..9b237dc
--- /dev/null
+++ b/abs/core/vdpauinfo-legacy/vdpauinfo
@@ -0,0 +1,2 @@
+#!/bin/bash
+echo "vdpau is unsupported"
diff --git a/abs/core/vdpauinfo/PKGBUILD b/abs/core/vdpauinfo/PKGBUILD
new file mode 100644
index 0000000..35e8419
--- /dev/null
+++ b/abs/core/vdpauinfo/PKGBUILD
@@ -0,0 +1,24 @@
+# Contributor: Nathan Harris
+pkgname=vdpauinfo
+pkgver=0.0.6
+pkgrel=5
+pkgdesc="NVIDIA VDPAU capability query utility"
+arch=('i686' 'x86_64')
+url="url=http://cgit.freedesktop.org/~aplattner/vdpauinfo"
+license=('custom')
+depends=('libvdpau' 'xorg-server')
+makedepends=('gcc' 'autoconf' 'make')
+optdepends=(nvidia-utils)
+install=()
+source=(http://cgit.freedesktop.org/~aplattner/${pkgname}/snapshot/${pkgname}-${pkgver}.tar.gz)
+#md5sums=('d5aff9786b44ac5c70b5dd6faea37a67')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ autoreconf -i || return 1
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR="${pkgdir}" install || return 1
+ install -D -m644 $srcdir/$pkgname-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/license || return 1
+}
+md5sums=('9f9d387ab981b7a7e4460c70e7bab402')
diff --git a/abs/core/vdpauinfo/__changelog b/abs/core/vdpauinfo/__changelog
new file mode 100644
index 0000000..3acad6e
--- /dev/null
+++ b/abs/core/vdpauinfo/__changelog
@@ -0,0 +1,2 @@
+made nvidia-utils an optional dep. Otherwise this program could drag in the nividia drivers when we don't want them.
+
diff --git a/abs/core/xdotool/PKGBUILD b/abs/core/xdotool/PKGBUILD
index 0fd5db1..bec09f9 100644
--- a/abs/core/xdotool/PKGBUILD
+++ b/abs/core/xdotool/PKGBUILD
@@ -1,5 +1,9 @@
+# $Id: PKGBUILD 7103 2010-01-01 04:09:10Z foutrelis $
+# Maintainer: Evangelos Foutras <foutrelis@gmail.com>
+# Contributor: Rttommy <rttommy@gmail.com>
+
pkgname=xdotool
-pkgver=20090126
+pkgver=20091231.03
pkgrel=1
pkgdesc="Command-line X11 automation tool"
arch=('i686' 'x86_64')
@@ -7,14 +11,15 @@ url="http://www.semicomplete.com/projects/xdotool/"
license=('BSD')
depends=('libxtst')
source=(http://semicomplete.googlecode.com/files/$pkgname-$pkgver.tar.gz)
-md5sums=('a520d6a3175c3b55582998cbeef81688')
+md5sums=('6228520608c831f64d13f4129cb4f381')
build() {
cd "$srcdir/$pkgname-$pkgver"
make || return 1
- install -dm755 "$pkgdir"/usr/{bin,share/man}
- make PREFIX="$pkgdir/usr" INSTALLMAN="$pkgdir/usr/share/man" install
+ install -d "$pkgdir"/usr/{bin,lib,include,share/man}
+ make PREFIX="$pkgdir/usr" INSTALLMAN="$pkgdir/usr/share/man" \
+ install || return 1
# License
install -D -m644 COPYRIGHT "$pkgdir/usr/share/licenses/xdotool/COPYRIGHT"
diff --git a/abs/core/xosd/PKGBUILD b/abs/core/xosd/PKGBUILD
index e4a87ba..45130c8 100644
--- a/abs/core/xosd/PKGBUILD
+++ b/abs/core/xosd/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=xosd
pkgver=2.2.14
-pkgrel=1
+pkgrel=2
pkgdesc="XOSD displays text on your screen. On-Screen-Display-libs for some tools."
arch=("i686" "x86_64")
license=('GPL2')
@@ -12,15 +12,18 @@ url="http://www.ignavus.net/software.html"
depends=('libxt' 'libxinerama' 'gdk-pixbuf')
makedepends=('xmms' 'bmp')
options=(!libtool)
+backup=(etc/osd_cat.cfg)
#source=("http://www.ignavus.net/xosd-$pkgver.tar.bz2")
-source=("http://ftp.de.debian.org/debian/pool/main/x/xosd/xosd_$pkgver.orig.tar.gz")
+source=("http://ftp.de.debian.org/debian/pool/main/x/xosd/xosd_$pkgver.orig.tar.gz" "osd_cat.cfg")
build() {
cd $startdir/src/xosd-$pkgver
./configure --prefix=/usr
make || return 1
make DESTDIR=$startdir/pkg/ install
+ mkdir -p $startdir/pkg/etc
+ cp -f $startdir/src/osd_cat.cfg $startdir/pkg/etc/osd_cat.cfg
}
-
-md5sums=('4b349fe930e4eee2f504d6c02673e24d')
+md5sums=('4b349fe930e4eee2f504d6c02673e24d'
+ '6ddbc7a78354f002ec0859a999d8fb86')
diff --git a/abs/core/xosd/__changelog b/abs/core/xosd/__changelog
new file mode 100644
index 0000000..33e7879
--- /dev/null
+++ b/abs/core/xosd/__changelog
@@ -0,0 +1,7 @@
+Added:
+backup=(etc/osd_cat.cfg)
+osd_cat.cfg to source
+build() {
+ mkdir -p $startdir/pkg/etc
+ cp -f $startdir/src/osd_cat.cfg $startdir/pkg/etc/osd_cat.cfg
+}
diff --git a/abs/core/xosd/osd_cat.cfg b/abs/core/xosd/osd_cat.cfg
new file mode 100644
index 0000000..4852508
--- /dev/null
+++ b/abs/core/xosd/osd_cat.cfg
@@ -0,0 +1,6 @@
+color=white #color of text
+outline=2 #Offset of outline, 0 is no outline
+outlinecolour=black
+shadow=0 #Offset of shadow, 0 is no shadow
+shadowcolour=black
+font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
diff --git a/abs/core/xz-utils/PKGBUILD b/abs/core/xz-utils/PKGBUILD
new file mode 100644
index 0000000..540187e
--- /dev/null
+++ b/abs/core/xz-utils/PKGBUILD
@@ -0,0 +1,30 @@
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+# Contributor: François Charette <firmicus@gmx.net>
+
+pkgname=xz-utils
+pkgver=4.999.9beta
+pkgrel=2
+pkgdesc='utils for managing LZMA and XZ compressed files'
+arch=('i686' 'x86_64')
+url='http://tukaani.org/xz/'
+license=('GPL' 'LGPL')
+depends=('bash')
+provides=('lzma' 'lzma-utils')
+replaces=('lzma' 'lzma-utils')
+conflicts=('lzma' 'lzma-utils')
+options=('!libtool')
+source=("http://tukaani.org/xz/xz-${pkgver}.tar.gz")
+md5sums=('f2073579b6da2fe35d453adee1aaf1b2')
+
+build() {
+ cd $srcdir/xz-$pkgver
+
+ ./configure --prefix=/usr \
+ --enable-static \
+ --enable-dynamic \
+ --disable-rpath
+ sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+ sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+ make
+ make DESTDIR=$pkgdir install
+}